GW2 MCP Server
The GW2 MCP Server is an agentic AI assistant that provides Guild Wars 2 answers using official wiki content and live game data. It exposes tools to:
Wiki: Search and fetch cleaned wiki pages.
Events: Get event timers for world bosses, meta events, and daily fractals.
Items & Trading Post: Search items, get static data, and live buy/sell prices.
Skills: Search and fetch skill details.
Waypoints: Find waypoints and POIs with in-game chat codes.
Crafting: Find recipes for items and get recipe details.
Meta: Current game build number.
Personal Account (with stored API key): View account overview, wallet, storage (bank, materials, shared slots), characters (overview, inventory, equipment, crafting), unlocks (recipes, dyes, skins, etc.), and progression (achievements, masteries, raid clears, Wizard's Vault).
API Key Management:
account_infoprovides a secure URL to manage keys without entering them in chat.
The server works with any MCP client (e.g., Claude, ChatGPT, Gemini) via stdio or HTTP, and also powers its own agent for REPL and Discord bot use.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@GW2 MCP ServerWhat are today's daily fractals?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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_KEYEvery 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 :8720To 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):
/linkopens a temporary login URL to your AuthKit application.User completes sign-up or login at the AuthKit domain.
Authorization redirects back to the MCP server with an authorization code (which the server exchanges with WorkOS).
The bot stores the linked identity (person and tier); future
/gw2calls run at the linked tier with higher rate limits.Manage your GW2 API key from the /account page (link via
/setkeyoraccount_info): keys are validated against the GW2 API before storing and encrypted at rest; Discord never processes them./whoamishows the current link status;/unlinkdisconnects 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:
Create an AuthKit application in your WorkOS organization; note the AuthKit domain, Client ID, and API key.
In AuthKit → Configuration → Dynamic Client Registration: enable it (required so Claude/ChatGPT can self-register with the MCP server).
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/callbackto the allowed Redirect URIs (exact byte match —127.0.0.1vslocalhostmatters).
Recommended: In OAuth → Resource Indicators (RFC 8707): enable it and register the MCP resource URL (e.g.,
https://your-host.example.com/mcp). This ensures tokens carry the correctaud(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):
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.Hosted OAuth path: connect Claude to the hosted server, store a key at /account, then ask the same question.
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.
Create an application at the Discord Developer Portal → Bot tab → Reset Token → put it in
.envasDISCORD_TOKEN. No privileged intents are needed (slash commands only — leave presence, server members, and message content off).For dev: enable Developer Mode in your Discord client, right-click your test server → Copy Server ID → set
DISCORD_DEV_GUILD_IDin.env. Commands sync instantly to that guild. For prod: leave it unset — commands register globally (first propagation can take up to an hour).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=2048permissions=2048is 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 runningRate-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 2The 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 cacheObservability
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 toolsaccount_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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| item_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | ||
| query | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| item_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| item_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| recipe_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| skill_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| section | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| section | No | list | |
| name_filter | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | ||
| achievement_ids | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| section | Yes | ||
| name_filter | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | ||
| check_ids | No | ||
| name_filter | No | ||
| list_missing | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
wiki_searchA
Search the official Guild Wars 2 wiki for pages matching a query.
Returns up to limit results with title, url, and a text snippet.
Use this first when you don't know the exact page title. Reformulate
the query (official game terms, singular nouns) if results look off.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses it returns up to limit results with title, url, and a text snippet. With no annotations, this description fully conveys the read-only, search behavior and hints at query handling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences: purpose, output, and usage tip. Front-loaded and every sentence adds value. No fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple search tool with an output schema, the description covers input, output, and usage guidance. It is complete and leaves no major gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
References both parameters: 'query' in 'matching a query' and 'limit' in 'Returns up to limit results'. With 0% schema coverage, it adds meaningful context, though could further explain query format.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it searches the official GW2 wiki for pages matching a query, and distinguishes from sibling wiki_get_page by indicating this tool is for when you don't know the exact page title.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises to use this tool first when uncertain about the title, and provides guidance to reformulate queries using official terms or singular nouns if results are poor.
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.
19 tool updates
v0.1.0- First observed
account_info - First observed
find_recipes_for_item - First observed
get_build_id - First observed
get_daily_fractals - First observed
get_event_timer - First observed
get_item - First observed
get_item_prices - First observed
get_recipe - First observed
get_skill - First observed
my_account - First observed
my_characters - First observed
my_progress - First observed
my_storage - First observed
my_unlocks - First observed
search_items - First observed
search_skills - First observed
search_waypoints - First observed
wiki_get_page - First observed
wiki_search
TDQS
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.
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.
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.
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
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
Driflyte MCP server which lets AI assistants query topic-specific knowledge from web and GitHub.
An MCP server that integrates with Discord to provide AI-powered features.
MCP server for skill documentation, generated by doc2mcp.
An MCP server that provides congressional transcripts
Related MCP Servers
- FlicenseBqualityCmaintenanceA 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!226-
- AlicenseBqualityAmaintenanceRead-only MCP server for public Guild Wars 1 sources (wiki, builds, YouTube, Reddit) and optional local install inventory.142MIT
- AlicenseNot gradedqualityCmaintenanceAn MCP server that lets Claude answer ARK: Survival Ascended / Evolved questions by querying the ARK community wiki for taming, crafting, spawns, and stats.MIT
- AlicenseNot gradedqualityAmaintenanceAn 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.1MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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