Skip to main content
Glama
Guild-Wars-MCP

GW2 MCP Server

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
MODEL_IDNoModel ID for the chosen LLM provider (optional).claude-sonnet-5
LLM_PROVIDERNoLLM provider: 'anthropic', 'openai', or 'openrouter' (optional).anthropic
DISCORD_TOKENNoDiscord bot token (required for Discord adapter, not for MCP server).
AUTHKIT_DOMAINNoAuthKit domain (required if MCP_AUTH_ENABLED=true).
MCP_SERVER_URLNoURL of a separately running MCP server (if not in-process).
WORKOS_API_KEYNoWorkOS API key (required if MCP_AUTH_ENABLED=true).
PUBLIC_BASE_URLNoPublic base URL for OAuth callbacks (required if MCP_AUTH_ENABLED=true).
LINK_SIGNING_KEYNoRandom cryptographic signing key for link flow (required if MCP_AUTH_ENABLED=true).
MCP_AUTH_ENABLEDNoEnable OAuth authentication for HTTP MCP server (requires WorkOS config).false
WORKOS_CLIENT_IDNoWorkOS client ID (required if MCP_AUTH_ENABLED=true).
ANTHROPIC_API_KEYNoAPI key for Anthropic provider (required for agent core, not for MCP server alone).
MONTHLY_BUDGET_USDNoMonthly budget cap in USD (kill-switch, optional).50
RATE_LIMIT_PER_USERNoPer-user rate limit configuration (e.g., '5/10m', optional).
RATE_LIMIT_PER_GUILDNoPer-guild rate limit configuration (e.g., '30/1h', optional).
ACCOUNT_SESSION_TTL_SNoBrowser session lifetime for /account page (optional).1800
GW2_KEY_ENCRYPTION_KEYNoFernet key for encrypting GW2 API keys (required if MCP_AUTH_ENABLED=true).

Capabilities

Features and capabilities supported by this server

CapabilityDetails
tools
{
  "listChanged": true
}
logging
{}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
extensions
{
  "io.modelcontextprotocol/ui": {}
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
wiki_search

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.

wiki_get_page

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.

get_event_timer

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.

search_items

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.

get_item

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

get_item_prices

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.

search_skills

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

get_skill

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

search_waypoints

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.

get_build_id

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

get_daily_fractals

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

find_recipes_for_item

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.

get_recipe

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

my_account

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.

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.

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.

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.

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.

account_info

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.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

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