Skip to main content
Glama
Guild-Wars-MCP

GW2 MCP Server

gw2mcp — GW2 Wiki Answers

An agentic AI assistant that answers Guild Wars 2 questions from authoritative sources: the official wiki and the official GW2 API, with citations back to the wiki. Spec: specs/gw2-agentic-ai-spec.md.

Two components, one repo:

  • MCP tool server (gw2mcp-server) — a FastMCP server exposing wiki search/fetch and GW2 API tools (items, skills, live trading-post prices, daily fractals, event timers, waypoint/POI chat codes) to any MCP client: Claude Desktop/Code, ChatGPT, Gemini, or our own agent.

  • Agent core + adapters (gw2mcp-repl, gw2mcp-discord) — the provider-pluggable tool-use loop (Anthropic, OpenAI, or OpenRouter) that turns "question in" into "grounded answer + citations out". Transport-agnostic: a terminal REPL and a Discord bot share the same core.

REPL / Discord bot              any MCP client (Claude, ChatGPT, Gemini)
        │                                        │
   Agent core (Anthropic/OpenAI/OpenRouter)      │
        │  MCP: in-memory (default) or HTTP      │  MCP: stdio or HTTP
        └────────────────┬───────────────────────┘
                 FastMCP server (gw2mcp)
                 wiki_search · wiki_get_page · get_event_timer · search_items
                 get_item · get_item_prices · search_skills · get_skill
                 get_build_id · get_daily_fractals · search_waypoints
                          │
                 Supabase Postgres (TTL cache · name index · run traces)

Setup

Prereqs: uv, Supabase CLI, Docker (for local Supabase).

supabase start            # local Postgres on 127.0.0.1:54322
supabase migration up     # create cache/name-index/run-trace tables
uv sync --all-groups
cp .env.example .env      # then fill in ANTHROPIC_API_KEY

Every config variable the code reads is documented in .env.example (optional tunables are listed commented-out with their defaults). Secrets live only in .env (gitignored) — never commit them.

Related MCP server: Guild Wars 1 MCP

Run

uv run gw2mcp-repl                      # terminal REPL (agent + in-process server)
uv run gw2mcp-server                    # MCP server over stdio (Claude Desktop/Code)
uv run gw2mcp-server --transport http   # MCP server over streamable HTTP :8720

To point an external MCP client at the server, use stdio config (command: uv, args: [run, gw2mcp-server], cwd this repo) or the HTTP URL http://127.0.0.1:8720/mcp.

To run the agent against a separately running server instead of in-process, set MCP_SERVER_URL in .env.

Authentication (optional)

By default, the HTTP MCP server is unauthenticated — any client can call tools. Setting MCP_AUTH_ENABLED=true requires all HTTP clients to authenticate via OAuth (WorkOS AuthKit) before accessing tools. Local transports are unaffected: stdio (Claude Desktop) and the in-memory transport (REPL, tests) never see the HTTP auth layer. Pointing the REPL at a remote authed server via MCP_SERVER_URL is not supported (it sends no bearer token).

Discord /link flow

Users can link their Discord account to a WorkOS identity (for higher rate limits):

  1. /link opens a temporary login URL to your AuthKit application.

  2. User completes sign-up or login at the AuthKit domain.

  3. Authorization redirects back to the MCP server with an authorization code (which the server exchanges with WorkOS).

  4. The bot stores the linked identity (person and tier); future /gw2 calls run at the linked tier with higher rate limits.

  5. Manage your GW2 API key from the /account page (link via /setkey or account_info): keys are validated against the GW2 API before storing and encrypted at rest; Discord never processes them.

  6. /whoami shows the current link status; /unlink disconnects Discord only — your account, stored GW2 API key, and history remain (delete them any time from the /account page).

/account — GW2 API key for MCP clients

MCP users (Claude Desktop, etc.) manage their GW2 API key in the browser at {PUBLIC_BASE_URL}/account — sign in with the same WorkOS account the MCP OAuth uses, then save, replace, or clear the key. Keys are validated against the GW2 API before storing and encrypted at rest; the key never appears in the agent conversation. The account_info MCP tool returns this URL plus non-secret status (key stored, tier, Discord linked).

The key is stored on the person, not the surface: /account is the only place to set, replace, or clear it, and the same key is available to both Discord and MCP clients — provided you sign into the same WorkOS account in both places. Discord's /setkey command is a pointer to /account, not an input path; it never sees the key. /link now asks for an explicit confirmation in the browser before attaching a Discord account.

New env var: ACCOUNT_SESSION_TTL_S (optional, default 1800) — browser session lifetime for /account.

Upgrade note: when /link (WorkOS) settings are configured, GW2_KEY_ENCRYPTION_KEY is now REQUIRED at startup — a server with link settings but a missing or invalid Fernet key refuses to boot.

WorkOS dashboard setup

To enable the /link flow and OAuth on the HTTP server:

  1. Create an AuthKit application in your WorkOS organization; note the AuthKit domain, Client ID, and API key.

  2. In AuthKit → ConfigurationDynamic Client Registration: enable it (required so Claude/ChatGPT can self-register with the MCP server).

  3. In the Redirects tab, add both redirect URIs:

    • Add <PUBLIC_BASE_URL>/link/callback (e.g., https://your-host.example.com/link/callback).

    • Add <PUBLIC_BASE_URL>/account/callback to the allowed Redirect URIs (exact byte match — 127.0.0.1 vs localhost matters).

  4. Recommended: In OAuthResource Indicators (RFC 8707): enable it and register the MCP resource URL (e.g., https://your-host.example.com/mcp). This ensures tokens carry the correct aud (audience) claim.

Fill in the corresponding .env variables: WORKOS_CLIENT_ID, WORKOS_API_KEY, AUTHKIT_DOMAIN, PUBLIC_BASE_URL. Generate LINK_SIGNING_KEY and GW2_KEY_ENCRYPTION_KEY as random cryptographic values (see comments in .env.example).

Smoke-testing account tools

The REPL has no person identity, so account tools answer with setup guidance there — that itself is the no-identity smoke test. Real-data smoke tests (do NOT commit keys):

  1. Discord path: /link, then store a real API key (all permissions) at /account, then /ask what's in my material storage? in Discord — expect real counts, ephemeral.

  2. Hosted OAuth path: connect Claude to the hosted server, store a key at /account, then ask the same question.

  3. Ask with a key lacking inventories — expect a message naming the missing permission, not an error.

Discord bot

The Discord adapter (spec §6.5–6.6) runs the same agent core behind two slash commands: /gw2 question:<text> (defers ephemerally, then edits the answer in, splitting across follow-ups past Discord's 2000-char limit) and /about. Per-user (5/10 min) and per-guild (30/hour) rate limits plus a global monthly budget kill-switch ($50 default, summed across all runs including REPL and eval) are enforced as aggregate queries over run_traces — fail-closed: if Postgres is unreachable, the bot declines to answer rather than run unmetered.

Discord application setup (once per environment)

Dev and prod are separate Discord applications so guild-scoped dev commands never collide with global prod ones.

  1. Create an application at the Discord Developer PortalBot tab → Reset Token → put it in .env as DISCORD_TOKEN. No privileged intents are needed (slash commands only — leave presence, server members, and message content off).

  2. For dev: enable Developer Mode in your Discord client, right-click your test server → Copy Server ID → set DISCORD_DEV_GUILD_ID in .env. Commands sync instantly to that guild. For prod: leave it unset — commands register globally (first propagation can take up to an hour).

  3. Invite the bot with (replace <APP_ID> from the portal's General Information page):

    https://discord.com/api/oauth2/authorize?client_id=<APP_ID>&scope=bot%20applications.commands&permissions=2048

    permissions=2048 is just Send Messages; interaction replies work even without it, keeping the permission footprint minimal.

Run

uv run gw2mcp-discord     # requires DISCORD_TOKEN in .env, local Supabase running

Rate-limit and budget knobs (RATE_LIMIT_*, MONTHLY_BUDGET_USD) are documented in .env.example.

Eval

uv run python eval/run_eval.py              # full 25-question set, manual scoring
uv run python eval/run_eval.py --category live --limit 2

The question set (eval/questions.yaml) is versioned; re-run it on every significant prompt/tool change. Results land in eval/results/*.jsonl.

Baseline (2026-07-22, claude-sonnet-5, prompt v1): 21/25 pass (84%), 3 partial, 1 fail · median latency 12.0s (target ≤15s ✓) · avg cost $0.0621/question (target ≤$0.06, marginal). The fail + 2 partials traced to a wikitext-cleaner bug that stripped inline cost templates ({{gold|…}}, {{item icon|…}}); fixed after this run — re-run the eval to record a v2 baseline against the ≥90% target.

Model

LLM_PROVIDER env var picks the backend — anthropic (default), openai, or openrouter — and MODEL_ID names the model in that provider's naming (default claude-sonnet-5, $3/M input, $15/M output — the best price/quality Sonnet-class model per the spec's cost target of ≤ $0.06/question; OpenRouter ids are vendor-prefixed, e.g. anthropic/claude-sonnet-5). The agent loop is provider-agnostic (src/gw2mcp/agent/providers/); pricing for cost accounting lives in src/gw2mcp/agent/costs.py and is keyed by (provider, model) — a pair without a pricing entry refuses to start (fail-closed, so nothing can spend invisibly to the monthly budget cap).

Tests

uv run pytest            # fully offline: respx-mocked HTTP, in-memory MCP, fake cache

Observability

Every run writes one JSON line to logs/runs.jsonl (every tool call, tokens, cost, latency) and a queryable row to the run_traces table in Postgres — the table the Discord adapter's rate limits count over. The monthly budget kill-switch aggregates over budget_ledger instead, so admission reserves capacity atomically rather than reading a stale sum (src/gw2mcp/agent/gating.py).

Retention: a scheduled sweeper (src/gw2mcp/common/retention.py, every 6h by default) prunes run_traces/logs/runs.jsonl after 90 days, mcp_tool_calls after 7 days, and budget_ledger rows older than the previous calendar month; cache_entries expire per-row on their own TTL. See docs/data-retention.md for the full policy, including what's collected, the access boundary, and deletion behavior.

Production deployment

Running against a hosted/production Supabase or Postgres instance needs a different database role than local dev (gw2mcp_app, not postgres), a password set for that role, and a decision on the Supabase Data API. See docs/deployment.md for credential separation, the runtime role's exact privileges, Data API guidance, a residual service_role risk, a portability caveat for hosted projects, reverse-proxy setup, and the process model for scaling.

Security

docs/threat-model.md covers the trust boundaries (Discord, browser, MCP client, Postgres, external APIs), the protected assets, the attackers each control is aimed at, and — importantly — the accepted residual risks, including what the /account delete flow does not reach.

docs/security-findings-2026-07-27.md is the findings report from the 2026-07-27 hardening pass: one entry per reviewed hypothesis with status, evidence, files changed, verification, and residual risk — plus the two claims that turned out to be false, four issues the original review missed, and the exact verification commands and their real output.

No GDPR, CCPA, SOC 2, or HIPAA compliance is claimed. See docs/data-retention.md for what is collected and for how long.

Politeness & attribution

  • Wiki requests carry a descriptive User-Agent and are limited to ≤ 2 req/s.

  • Wiki content is cached (pages 24h, search 1h); GW2 API static data is cached keyed to the game build; prices for 5 minutes.

  • Wiki content is GFDL; this project is not affiliated with ArenaNet.

Available Tools

19 tools
account_infoA

Where and how to manage your GW2 API key for account-aware features.

Returns the /account web page URL plus non-secret status (whether a key is stored, tier, Discord link). NEVER ask the user to paste an API key into the conversation — send them to the URL instead.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description discloses the tool's behavior: it returns a URL and non-secret status. It also instructs the agent on appropriate user interaction. However, it does not detail error cases or the exact structure of the response (which may be covered by the output schema).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very concise, consisting of two sentences. It front-loads the purpose and immediately follows with a clear user interaction rule. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has no parameters and an output schema exists, the description covers the essential purpose and behavior. It is complete for an AI agent to understand when and how to invoke this tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has no parameters and the schema coverage is 100% (trivially). The description does not need to add parameter information. Baseline for 0 parameters is 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: providing the URL for managing the GW2 API key and returning non-secret status. It is distinct from sibling tools which are search and get operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly instructs the agent to never ask the user to paste an API key, but instead send them to the URL. This is a clear usage guideline, though it does not mention alternative tools or situations where this tool should not be used.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

find_recipes_for_itemA

Find crafting recipe ids that PRODUCE the given item id.

Use after search_items: item ids and recipe ids are different id spaces. Follow up with get_recipe for ingredients, and my_unlocks(kind="recipes", check_ids=[...]) to see if the user has learned a recipe. Empty recipe_ids means the item is not craftable.

ParametersJSON Schema
NameRequiredDescriptionDefault
item_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It implies a read operation and discloses that item and recipe ids are different id spaces. However, it does not explicitly state read-only behavior or mention any side effects, which would make it a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences long, each serving a purpose: purpose, workflow, and edge case. No redundant words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the context of siblings (search_items, get_recipe, my_unlocks) and an output schema that likely documents return values, the description completes the picture by setting up the workflow and explaining empty results.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. The description does not add any meaning to the parameter 'item_id' beyond the schema (integer type). It mentions that item ids are from a different namespace, but does not describe the parameter itself.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Find' and the resource 'crafting recipe ids that PRODUCE the given item id'. It distinguishes itself from siblings like 'get_recipe' and 'search_items' by specifying the direction (production) and the follow-up actions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says when to use the tool ('after search_items'), what to do next ('follow up with get_recipe... and my_unlocks'), and explains the meaning of an empty result ('not craftable'). This provides excellent workflow guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_build_idA

Fetch the current game build number (useful to note data freshness).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Without annotations, the description carries the behavioral burden. It states a read operation ('Fetch'), but does not disclose return format, caching, or staleness. The output schema exists but the description adds minimal context beyond the action.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence, front-loaded with the primary purpose, and zero wasted words. Perfectly concise for the tool's simplicity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given zero parameters and the existence of an output schema, the description adequately covers what the tool does. No additional context is required for this straightforward operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters exist, and schema coverage is 100%. The description need not explain parameters. Baseline score of 4 applies as there is nothing to add.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Fetch') and names a distinct resource ('current game build number'). No sibling tool performs this function, so it is clearly distinguished.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a clear use case ('useful to note data freshness'), implying when to use the tool. No explicit exclusions or alternatives are needed since no other sibling serves this purpose.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_daily_fractalsA

Fetch today's daily fractal achievements from the official API.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description must convey behavior. It correctly indicates a read-only fetch from an external API but omits details like rate limits, authentication, error handling, or output format.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence that front-loads the action and contains no extraneous information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has no parameters and an output schema, so the description is fairly complete for a simple fetch. However, it could mention that it returns today's achievements specifically.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With zero parameters, the description is not required to explain parameters. The baseline of 4 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool fetches daily fractal achievements with a specific verb and resource, and it is distinct from sibling tools which cover accounts, skills, items, etc.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives or when not to use it. The description lacks context for tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_event_timerA

Get upcoming start times for GW2 timed events: map meta events, world bosses, day/night cycles, and festival activities.

Use this for any "when is the next X" or schedule question — wiki pages render timers with browser JavaScript, so wiki_get_page can never see them. query matches event, map, or category names (e.g. "battle for the jade sea", "tequatl", "dragon's end"). Returns matched events with up to count upcoming occurrences each: start_utc, start_unix (Unix epoch seconds), duration_minutes, starts_in_minutes, and in_progress. Matches may also carry chatlink, an in-game chat code for the event's location (e.g. "[&BKIMAAA=]") — relay it verbatim so players can paste it into the game. If nothing matches, the error lists valid zone names to retry with.

ParametersJSON Schema
NameRequiredDescriptionDefault
countNo
queryYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It details the return fields (start_utc, start_unix, etc.) and mentions chatlink. It does not cover rate limits or auth, but as a read-only tool the disclosure is sufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is informative without waste, front-loads purpose and usage, then details parameters and returns. Slightly long but each sentence contributes value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Tool has 2 simple parameters with thorough explanation. Output fields are fully described in text, so even without seeing the output schema the agent can understand return values and use the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, description fully compensates: explains 'query' matches event/map/category names with examples, and 'count' controls number of upcoming occurrences returned.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states it gets upcoming start times for timed events in GW2, specifying resource (timed events) and verb (get), and distinguishes from siblings like wiki_get_page which cannot see timers due to JavaScript rendering.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says use for 'when is the next X' or schedule questions, and that wiki_get_page cannot see timers. Also advises to retry with valid zone names if nothing matches, providing clear when-to-use and error handling guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_itemA

Fetch a GW2 item's static data (rarity, level, type, description) by id.

ParametersJSON Schema
NameRequiredDescriptionDefault
item_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description implies a read-only operation via 'fetch,' but without annotations, it does not explicitly state non-destructive behavior, rate limits, or auth needs. For a simple lookup, this is adequate but not exceptional.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is one concise sentence with no filler, directly stating the action and key data fields. Front-loaded and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of an output schema, the description sufficiently covers the tool's purpose and primary return fields. For a single-parameter lookup, it is nearly complete, though it could mention that the item_id is required.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema coverage, the description adds minimal value: only 'by id.' It does not clarify the parameter's format, range, or source (e.g., GW2 API item ID).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool fetches static data (rarity, level, type, description) for a GW2 item by ID, distinguishing it from sibling tools like search_items (by name) and get_item_prices (price data).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description lacks explicit guidance on when to use this tool vs alternatives, such as stating 'Use this when you have an item ID and need static data.' The purpose is implied but not directly contrasted with siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_item_pricesA

Fetch live Trading Post buy/sell prices for an item id.

Prices are in coins: 10000 coins = 1 gold, 100 coins = 1 silver. buys.unit_price is the highest buy order; sells.unit_price is the lowest sell listing.

ParametersJSON Schema
NameRequiredDescriptionDefault
item_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full behavioral disclosure. It explains the coin conversion and the meaning of the output fields (buys.unit_price, sells.unit_price). However, it does not mention rate limits, authentication needs, or error behavior, which are common considerations for a live data fetch.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences long, with the purpose stated in the first sentence. Every sentence adds essential information: function, currency conversion, and output field meaning. There is no superfluous text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has only one parameter, and an output schema exists, so the description need not detail return values. It covers the core aspects: purpose, price units, and the key parts of the response. It lacks mention of error handling or data freshness, but for a simple fetch tool, this is acceptable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0% coverage for parameter descriptions, so the description must compensate. It only refers to 'item id' without explaining where to find it or any constraints. This adds minimal value beyond the schema structure, leaving the agent underinformed about the parameter's semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states 'Fetch live Trading Post buy/sell prices for an item id,' which clearly identifies the action (fetch), the resource (Trading Post prices), and the scope (for an item). This distinguishes it from sibling tools like get_item (item details) or wiki_search (wiki content).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implicitly clarifies usage by specifying the tool's domain (Trading Post prices) and output format, which helps an agent decide when to use it. However, it does not explicitly state when not to use it or mention alternatives, though the sibling list provides context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_recipeA

Fetch a crafting recipe by recipe id: disciplines, required rating, output item, and ingredients (item ids resolved to names).

ParametersJSON Schema
NameRequiredDescriptionDefault
recipe_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Lacks annotations, so description carries full burden. It discloses return fields and that item IDs are resolved to names, but omits information on error handling (e.g., invalid ID), authentication requirements, or rate limits. Adequate for a simple read operation but not comprehensive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, front-loaded with action and resource, then lists returned fields. No redundant words; every part serves a purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Describes return fields and mentions name resolution, which is helpful. Lacks mention of error behavior, but output schema (if present) may cover return structure. Reasonably complete for a simple fetch tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one parameter (recipe_id) with no schema description. The description adds context by linking the ID to fetching a recipe, but does not elaborate on expected format, range, or behavior for invalid values. Minimal but sufficient given parameter simplicity.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the tool fetches a crafting recipe by ID, listing exact fields (disciplines, rating, output item, ingredients). It is distinct from siblings like get_item, get_skill, and find_recipes_for_item, which target different resources or operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Description implies usage when a recipe ID is known but does not explicitly contrast with find_recipes_for_item (which searches by output item) or other fetch tools. No when-not or alternative guidance is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_skillA

Fetch a GW2 skill's data (description, facts, recharge) by id.

ParametersJSON Schema
NameRequiredDescriptionDefault
skill_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. The verb 'Fetch' indicates a read-only operation, and the description is straightforward. It does not disclose details like rate limits or authentication, but for a simple data retrieval tool, the transparency is adequate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with no extraneous information. It is front-loaded with the key action and resource, meeting the requirements for conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (one parameter, output schema exists), the description covers the essential purpose and output fields. The sibling tool context and output schema fill any remaining gaps, making the definition complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. The phrase 'by id' clarifies that skill_id is the identifier, but it does not add further context (e.g., where to find valid IDs). For a single integer parameter, this is minimally sufficient.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Fetch' and the resource 'GW2 skill's data' with specific fields (description, facts, recharge) and the lookup method 'by id'. It effectively distinguishes from the sibling tool 'search_skills' which is likely for text-based search.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when you have a skill id, but does not explicitly state when to use this tool versus alternatives like 'search_skills'. It lacks explicit exclusion criteria or when-not-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

my_accountB

The user's own GW2 account data (requires their stored API key).

section="overview": account name, world, access, ranks. section="wallet": currency balances with names (coins: 10000 = 1 gold). If the result contains an "action" field, relay it to the user — it explains how to set up or fix their API key.

ParametersJSON Schema
NameRequiredDescriptionDefault
sectionYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must disclose all behavioral traits. It covers the dependency on API key and the action field, but lacks information on read-only nature, rate limits, error handling, or what happens if the key is missing. This is insufficient for a tool dealing with sensitive account data.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, front-loading the core purpose, and uses clear sectioning with bullet-style lines for parameter details. Every sentence adds value without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the two documented sections well and includes handling of special cases (action field). Since an output schema exists, it does not need to detail return values. However, it may be incomplete if there are additional undocumented sections.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With schema coverage at 0% and no enums, the description adds meaning by documenting two possible values for the 'section' parameter ('overview' and 'wallet') and their outputs. However, it does not specify if other values are valid, leaving ambiguity.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states that the tool returns the user's own GW2 account data using their stored API key, and specifies two sections ('overview' and 'wallet') with details. However, it does not differentiate from the sibling tool 'account_info', which may have a similar purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description mentions that the tool requires a stored API key and provides guidance on handling an 'action' field for key setup/fix. It gives context for when to use but does not explicitly state when not to use or list alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

my_charactersA

The user's characters (requires their stored API key).

section="list" (no name needed): character names. With name: "overview" (core stats), "inventory" (bag contents, aggregated, name_filter supported), "equipment" (worn gear with upgrades/stats preserved), "crafting" (disciplines + ratings). If the result contains an "action" field, relay it to the user.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
sectionNolist
name_filterNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses authentication needs ('requires their stored API key') and details output behaviors (aggregated inventory, name_filter support, upgrades/stats preserved, action field handling). It does not explicitly state read-only or destructive nature, but the content suggests read-only. Without annotations, this is strong transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is information-dense with clear bullet-style explanations. It front-loads the main purpose and each sentence adds value. However, it could be more structured (e.g., numbered sections) for easier parsing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has an output schema (context signal: has output schema: true), the description effectively covers parameter usage, section behaviors, and special handling of action field. It provides sufficient context for an agent to use the tool correctly without needing additional details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0% coverage, but the description thoroughly explains each parameter: name is needed for detailed sections, section selects data type, name_filter works in inventory. This adds significant meaning beyond the bare schema, enabling correct invocation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves the user's characters with their API key, and distinguishes different sections (list, overview, inventory, equipment, crafting) with specific output characteristics, differentiating it from sibling tools like my_account or my_storage.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains when to use each section (e.g., 'section="list" (no name needed): character names') and implies authentication requirements. It does not explicitly state when not to use it or provide alternative tools, but the context of sibling tools and clear section explanations gives good guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

my_progressA

The user's progression (requires their stored API key). kinds: achievements (requires achievement_ids, max 50 — find ids via the wiki or public tools first), masteries, raids, dungeons, worldbosses, mapchests, wizards_vault. raids/dungeons/worldbosses/mapchests list the encounters/chests cleared since their last reset. Note: the GW2 API has no per-map/world completion percentage — use achievements. If the result contains an "action" field, relay it to the user.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindYes
achievement_idsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden. It discloses the need for a stored API key, explains that certain kinds list encounters since last reset, notes API limitations (no per-map completion), and instructs on handling the 'action' field. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is reasonably concise, front-loading the purpose and then detailing kinds, prerequisites, and special notes. It could be slightly more streamlined, but every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has two parameters, an output schema (which is not required to be explained), and moderate complexity (multiple kinds, special conditions), the description covers the key use cases, behavioral notes, and the action field instruction. No major gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Despite 0% schema description coverage, the description adds significant meaning: it enumerates valid values for 'kind', explains that 'achievement_ids' is required when kind is achievements (max 50), and tells users where to find IDs. This compensates well for the schema's lack of descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states it retrieves 'the user's progression' and lists specific kinds (achievements, masteries, etc.), which clearly indicates the tool's function. However, it does not use an explicit verb like 'get' or 'retrieve', making it slightly less direct than ideal.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description mentions the prerequisite of a stored API key and instructs to find achievement IDs via wiki or public tools. It does not differentiate from sibling tools like my_account or my_storage, nor does it specify when not to use this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

my_storageA

The user's account-wide storage: bank, material storage, or shared inventory slots (requires their stored API key).

Item stacks come back aggregated with names resolved; pass name_filter (substring) to narrow — responses cap at 100 entries. If the result contains an "action" field, relay it to the user.

ParametersJSON Schema
NameRequiredDescriptionDefault
sectionYes
name_filterNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, but the description discloses key behaviors: aggregated results with resolved names, name_filter substring matching, 100-entry cap, and handling of an 'action' field. It lacks details on error handling or rate limits but covers the main usage behaviors.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences long, front-loading the purpose and prerequisite. It is concise with no redundant information, though the action field note could be more prominent.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the existence of an output schema, the description explains aggregation, naming, filtering, and special action field behavior. It does not cover pagination beyond the cap or error cases, but it provides a solid understanding of the tool's operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0% description coverage, but the description adds meaning by explaining 'section' as bank, material storage, or shared inventory slots and 'name_filter' as substring narrowing. It does not list exact allowed values for section, but the examples are sufficient for understanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves the user's account-wide storage including bank, material storage, and shared inventory slots. It distinguishes from sibling tools like my_account (account info) or search_items (general item search) by specifying the resources and requiring the user's stored API key.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It mentions a prerequisite (stored API key) and how to use name_filter for narrowing, but does not explicitly list alternatives or when not to use it. However, the context of account-specific storage versus general item searches is implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

my_unlocksA

The user's unlocks (requires their stored API key). kinds: recipes, dyes, skins, minis, outfits, gliders, mounts, home_nodes.

Default: unlocked count only. check_ids (max 50): membership test — the way to answer "does the user know recipe X / own skin Y?" (mounts and home_nodes use string ids). list_missing=true: locked entries with names — only for dyes/minis/outfits/gliders/mounts/home_nodes. If the result contains an "action" field, relay it to the user.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindYes
check_idsNo
name_filterNo
list_missingNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description provides key behavioral traits: requires stored API key, default behavior (unlocked count only), constraints on check_ids (max 50, string ids for mounts/home_nodes), and the 'action' field handling. It could mention error cases or read-only nature, but overall thorough.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense and well-structured, with a front-loaded purpose, then parameter details and special cases. Every sentence adds value with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 4 parameters and no schema descriptions, the description covers most relevant aspects: defaults, special behaviors for different kinds, max constraints, and action field. The missing name_filter documentation prevents a perfect score, but overall it is sufficient for correct agent usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Although schema description coverage is 0%, the description explains kind (via list of values), check_ids (membership test, max 50, string types), and list_missing (scope limits). However, it omits the name_filter parameter entirely, leaving its purpose unclear. This gap reduces the score below what full coverage would provide.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'The user's unlocks' and lists specific kinds (recipes, dyes, etc.), making its purpose unambiguous. It is distinct from sibling tools like my_account and my_storage.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains how to use parameters (e.g., check_ids for membership tests, list_missing for locked entries) but does not explicitly compare this tool to siblings or state when to use alternative tools. The guidance is implicit via feature details.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_itemsA

Find GW2 item ids by (partial) item name.

Returns {status, matches: [{id, name}]}. If status is "index_warming" the local name index is still being built — use the wiki instead or retry with a numeric id. Follow up with get_item / get_item_prices.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Despite no annotations, the description fully discloses behavior: return format with matches array, possible index_warming status, and recommends alternatives. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences covering purpose, return format, edge case, and follow-up. No superfluous words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of searching by partial name, the description includes return format, status explanation, and actionable follow-up. Output schema is referenced but not needed in description.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description compensates by explaining the sole parameter 'name' as a partial item name, adding meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it finds GW2 item ids by (partial) name, distinguishing it from sibling tools like get_item and get_item_prices which retrieve details or prices by ID.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit guidance: what to do when status is 'index_warming' (use wiki or numeric id), and suggests follow-up with get_item/get_item_prices. This helps the agent decide on appropriate usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_skillsB

Find GW2 skill ids by (partial) skill name. Same shape as search_items.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description bears full burden. Only states basic purpose; lacks details on pagination, case sensitivity, error handling, or the shape of results (though references search_items).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Extremely concise: one sentence that conveys the core purpose. No unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Simple tool with one parameter and an output schema. Description covers the key behavior and return type (skill IDs). Missing minor details but sufficient for basic usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description adds meaning by indicating the 'name' parameter is a partial match. However, no further details on matching behavior or constraints.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states the tool finds GW2 skill IDs by partial skill name. References sibling 'search_items' for shape, distinguishing it from other search tools. Specific verb and resource.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool versus alternatives like 'get_skill' or 'search_items'. Only mentions 'same shape as search_items' but does not cover exclusion criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_waypointsA

Find GW2 waypoint and landmark (point of interest) chat codes and map locations by (partial) name.

Returns {status, matches: [{name, type, chat_link, map, continent}]}. chat_link is a copy-pasteable in-game chat code, e.g. "[&BDoBAAA=]" — players paste it into the chat window to locate the spot on their map. Always relay it verbatim when telling a player about a waypoint or landmark. If status is "index_warming" the local index is still being built or refreshed for the current game build — partial matches are included; retry shortly for full coverage.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It discloses the return format, the meaning of 'chat_link' (including example), and a special status condition ('index_warming'). However, it does not mention authentication, rate limits, or whether the search is case-sensitive, though the provided details are above average.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is three concise sentences, each earning its place: first states purpose, second details return structure, third explains chat_link and status. No fluff, front-loaded with key information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (one parameter) and existence of an output schema, the description covers the essential behaviors: what it does, what it returns, how to use results, and a special edge case (index_warming). It could detail partial matching behavior more, but is largely complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so description must compensate. It explains that 'name' is a partial name and that the tool returns matches. This adds meaning beyond the raw schema, though it could specify case-sensitivity or matching rules. Overall, it sufficiently clarifies the parameter's role.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the tool 'find GW2 waypoint and landmark (point of interest) chat codes and map locations by (partial) name'. It specifies a specific verb ('find'), resource ('waypoints and landmarks'), and method ('by (partial) name'), distinguishing it from sibling search tools like search_skills or search_items.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool versus alternatives. Does not mention any prerequisites, limitations, or compare with other search tools. Some context is provided via the 'index_warming' status, but without clear usage boundaries, the agent lacks decision support.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

wiki_get_pageA

Fetch a Guild Wars 2 wiki page as cleaned plain text.

Returns {title, url, text, truncated}. Infobox stats are preserved as "name: value" lines. Skill/trait facts show the wiki's own computed values with game-mode labels, e.g. "Damage: 646 (1.6) [PvE]" — the flat number is the level-80 exotic tooltip value, the parenthesized one the coefficient. Waypoint and point-of-interest listings include in-game chat codes like "[&BDoBAAA=]" — relay them verbatim when directing a player somewhere. Redirects are followed. If truncated is true, the page was cut at a size limit. Cite the returned url when you use facts from this page.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description fully carries the burden. It discloses that redirects are followed, truncation may occur, waypoint chat codes are relayed verbatim, and skill facts include computed values with game-mode labels.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise at six sentences, front-loading the main purpose. Every sentence adds value, covering return format, data interpretation, and edge cases like redirects and truncation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simple tool with one parameter and an output schema, the description is complete. It explains the return structure and key behavioral details, leaving no gaps for an agent to misinterpret.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single parameter 'title' is not described beyond the tool's purpose. While redirects imply some flexibility, there is no explicit detail on expected format, case sensitivity, or whether the title must be exact. Schema coverage is 0%, so the description should compensate more.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool fetches a Guild Wars 2 wiki page as cleaned plain text, specifying the return fields. It distinguishes from the sibling wiki_search by focusing on retrieving a specific page rather than search results.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use (to fetch a wiki page) and when not to (use wiki_search for searching). It provides detailed guidance on interpreting the returned data, including infoboxes, skill facts, waypoint codes, redirects, and truncation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 19 tool updatesv0.1.0
    • First observedaccount_info
    • First observedfind_recipes_for_item
    • First observedget_build_id
    • First observedget_daily_fractals
    • First observedget_event_timer
    • First observedget_item
    • First observedget_item_prices
    • First observedget_recipe
    • First observedget_skill
    • First observedmy_account
    • First observedmy_characters
    • First observedmy_progress
    • First observedmy_storage
    • First observedmy_unlocks
    • First observedsearch_items
    • First observedsearch_skills
    • First observedsearch_waypoints
    • First observedwiki_get_page
    • First observedwiki_search

TDQS

A3.9/5.0
Disambiguation4/5

Tools target distinct GW2 domains (account, skills, items, wiki, events, waypoints, recipes, user data) with clear boundaries. Minor overlap between search_skills and search_items but descriptions disambiguate. The 'my_' prefix clearly separates user-specific from public data.

Naming Consistency4/5

Most tools follow a verb_noun pattern (e.g., search_items, get_skill, wiki_get_page). Inconsistencies exist: 'find_recipes_for_item' is longer, and 'my_account' uses a prefix instead of 'get_my_account'. Overall predictable and readable.

Tool Count4/5

19 tools is slightly above the typical range but each serves a distinct purpose for a game with many subsystems. Could be streamlined (e.g., get_daily_fractals as part of events) but overall well-scoped.

Completeness4/5

Covers core GW2 data: items, skills, events, wiki, recipes, and user progression, storage, characters, unlocks. Missing guild or PvP/WvW stats, but the wiki tools provide fallback. Minor gaps, but agents can handle most queries.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • F
    license
    B
    quality
    C
    maintenance
    A MCP server that allows you to search and retrieve content on any wiki site using MediaWiki with LLMs 🤖. wikipedia.org, fandom.com, wiki.gg and more sites using Mediawiki are supported!
    2
    26
    -
  • A
    license
    Not graded
    quality
    C
    maintenance
    An MCP server that lets Claude answer ARK: Survival Ascended / Evolved questions by querying the ARK community wiki for taming, crafting, spawns, and stats.
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    An MCP server that gives LLM clients reliable, deterministic knowledge of Guild Wars 1 builds: skill data lookup, official template code encoding/decoding, and build validation.
    1
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Guild-Wars-MCP/GW2_MCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server