WarEra MCP
Click on "Deploy 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., "@WarEra MCPWhat is the current price of iron and how deep is the order book?"
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.
WarEra MCP
A small, read-only MCP server that lets an AI assistant look things up in the browser game WarEra — players, companies, countries, markets, battles and events — and answer questions about them in plain language.
⚠️ Unofficial project
This is an unofficial, community-made project. It is not affiliated with, endorsed by, sponsored by, or supported by the WarEra developers or publishers in any way. "WarEra" and related names belong to their respective owners.
It is a personal open-source hobby project, built in my free time with the help of AI. It relies on WarEra's public web API, which is undocumented and may change or break at any time. Use it at your own risk and please be considerate with the game's servers.
What is this?
MCP (Model Context Protocol) is a standard way to plug tools into AI assistants such as Claude Desktop. This server gives an assistant a handful of purpose-built, game-aware tools instead of raw web requests, so you can simply ask:
"What does player Kiro own, and what are their production bonuses?"
"What is the current price of iron, and how deep is the order book?"
"Which countries is Freedonia at war with, and are there active battles?"
"Who is dealing the most damage in this battle?"
The server fetches the data, tidies it up, and hands the assistant a compact, size-limited answer. Tools accept optional request-scoped WarEra credentials (api_key or jwt) in player_context; the project never provides a default or global WarEra credential.
Related MCP server: Chess.com MCP Server
Tools
Area | Tools |
Players |
|
Companies |
|
World |
|
Market |
|
Battles |
|
Events |
|
Every tool is marked read-only. There is deliberately no generic "call any endpoint" tool.
Quick start
You need Python 3.11+ and uv.
git clone <this-repository-url> warera-mcp
cd warera-mcp
uv sync
uv run warera-mcp # serves over stdioUse it from an MCP client (for example Claude Desktop) by adding it to the client's config:
{
"mcpServers": {
"warera": {
"command": "uv",
"args": ["--directory", "/path/to/warera-mcp", "run", "warera-mcp"]
}
}
}Run it as a small web service instead:
uv run warera-mcp --transport streamable-http --port 8000 # MCP endpoint: http://127.0.0.1:8000/mcpIf you expose it beyond your own machine, turn on client authentication and set trusted hosts
(see .env.example). The server prints a warning when it is reachable without them.
How it works (the short version)
Read-only by design. It can only read a short, reviewed list of public WarEra queries. Nothing in it can change anything in the game.
Meaningful tools, not raw data. Each tool answers a question ("who owns what?") by combining a few upstream calls and returning a tidy, normalized result.
Bounded. Results, number of upstream calls, response size and time per request are all capped, so one question can't run away.
Stateless and lightweight. No database and no accounts. Only a small in-memory cache of public data.
Game text is treated as untrusted. Player and company names are cleaned and length-limited before the assistant sees them.
Privacy & security
The tools read WarEra data and current public operations can be called anonymously.
If supplied,
player_contextcarries the caller's own request-scopedapi_keyorjwt.The project has no default or global WarEra credential.
Submitted credentials are not logged, cached or persisted by the server, but they are sent in the MCP tool request and may be visible in the LLM/client conversation history.
Nothing you ask is stored.
Found a security problem? Please report it privately (for example via your hosting platform's security-advisory feature) rather than opening a public issue.
Configuration
Settings are read from WARERA_MCP_* environment variables. Copy .env.example for the full,
commented list. The WarEra host itself is fixed and cannot be redirected.
Development
uv sync
uv run pytest # tests run offline against a stubbed API
uv run ruff check . # lint
uv run mypy # strict type checkingThe test suite never calls the real game API unless you opt in with WARERA_MCP_LIVE_TESTS=1.
Contributing
Issues and pull requests are welcome. Please keep changes small and focused, add or update tests,
and make sure ruff, mypy and pytest pass. The one hard rule: this project stays read-only —
changes that add anything able to modify game state will not be accepted.
Acknowledgements
Built with the help of AI tooling, by a player, for players. Thanks to the WarEra community for sharing what they've learned about the game.
License
Released under the MIT License. Provided "as is", without warranty of any kind.
Available Tools
13 toolsget_battleARead-onlyIdempotent
Get a battle's status: sides, current round and optionally a live snapshot. Live values are volatile snapshots with an explicit tick timestamp. It does not return last-hits lists or equipment payloads.
| Name | Required | Description | Default |
|---|---|---|---|
| battle_id | Yes | Opaque WarEra identifier. | |
| player_context | No | Optional per-request WarEra credentials: an object containing api_key or jwt. Never use a project-wide or default credential. | |
| include_history | No | Include previous rounds when available. | |
| include_live_status | No | Also fetch the live round snapshot. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the bar is lower, and the description still adds real value: live values are volatile snapshots stamped with an explicit tick timestamp, plus an explicit statement of what is not returned. It stops short of describing pagination or history behavior for the include_history path.
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 tight sentences with the core purpose front-loaded and the volatility caveat and exclusions packed into the second. Every clause earns its place.
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?
With no output schema, the description carries the burden of telling the agent what comes back, and it does: sides, current round, optional live snapshot, plus explicit exclusions. The picture is nearly complete, with only the history-rounds behavior left unstated.
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 100%, so the four parameters are already fully documented, and the description adds almost nothing beyond implying the live snapshot is optional via include_live_status. The include_history parameter, which also changes what rounds are returned, is never mentioned in the description. Baseline 3 is appropriate.
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?
States a specific verb and resource ('Get a battle's status') and enumerates the returned content (sides, current round, optional live snapshot). It reads as distinct from search_battles or get_battle_ranking, though it never explicitly contrasts itself with those siblings.
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?
Usage is implied by the tool name and the returned fields, but there is no explicit when-to-use guidance or routing to siblings like search_battles or get_battle_ranking. The negative scope note (no last-hits lists or equipment payloads) does help an agent rule this tool in or out, which lifts it above pure inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_battle_rankingARead-onlyIdempotent
Get a battle leaderboard by damage or points for players, countries, or military units on one side. The upstream ranking is unbounded, so results are capped locally and truncated says whether more rows exist. This is a battle ranking, not the deferred global wealth ranking.
| Name | Required | Description | Default |
|---|---|---|---|
| side | No | Which side of the battle to rank. | merged |
| limit | No | Maximum rows to return (1-10). | |
| metric | No | Ranking metric. | damage |
| battle_id | Yes | Opaque WarEra identifier. | |
| entity_type | No | Which entity type the ranking lists. | user |
| player_context | No | Optional per-request WarEra credentials: an object containing api_key or jwt. Never use a project-wide or default credential. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/idempotent safety, but the description adds real behavioral context: the upstream ranking is unbounded, results are capped locally, and the `truncated` field signals whether more rows exist. That truncation contract is exactly what an agent needs and is not derivable from annotations or 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?
Three short sentences, front-loaded with the core purpose, then the truncation caveat, then the disambiguation. No filler, though the final disambiguation sentence references a tool not present in the sibling list, slightly diluting its payoff.
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?
With no output schema, the description usefully names the `truncated` return field and the local cap, and it covers the ranking axes. It omits return row shape and credential/player_context handling, so it is strong but not fully complete for a 6-param 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?
Schema description coverage is 100% and enums document side/metric/entity_type, so the schema does the heavy lifting. The description loosely restates the metric and entity-type options ("damage or points for players, countries, or military units") but adds no format or syntax beyond the schema; baseline 3 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?
States a specific verb+resource (get a battle leaderboard) plus the ranking dimensions (damage/points; players/countries/military units) and explicitly separates itself from the global wealth ranking. An agent can pick it against the sibling get_battle/search_battles without reading the schema.
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?
Gives clear context for the call (battle ranking) and rules out a plausible look-alike (the deferred global wealth ranking). It does not state when to prefer it over siblings like get_battle or search_battles, so it stops short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_company_overviewARead-onlyIdempotent
Get one company's details: what it produces, where it sits, its workforce and its production bonus (normalized to a fraction). Recipe inputs are only reported when a validated local catalog is available, and they describe configured requirements, not current stock.
| Name | Required | Description | Default |
|---|---|---|---|
| company_id | Yes | Opaque WarEra identifier. | |
| player_context | No | Optional per-request WarEra credentials: an object containing api_key or jwt. Never use a project-wide or default credential. | |
| include_region_context | No | Also resolve the company's region. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, but the description adds genuinely non-obvious behavior: recipe inputs appear only when a validated local catalog exists, and they reflect configured requirements rather than current stock. That kind of conditional-availability disclosure is not derivable from the schema. It stops short of covering error handling or credential behavior.
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 sentences, front-loaded with the core purpose before the caveat, with no filler. The second sentence is dense but each clause carries real information about return behavior.
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?
There is no output schema, so the description carries the burden of describing return contents, and it does so: the four detail categories plus the conditional recipe-input caveat. Combined with 100% schema coverage for inputs, an agent has everything needed to call it 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 description coverage is 100%, so all three parameters are already documented in the schema, which sets the baseline at 3. The description adds only indirect signal ('where it sits' hinting at region context, 'normalized to a fraction' clarifying the bonus format) rather than parameter-level guidance.
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 a specific verb and resource ('Get one company's details') and enumerates the actual payload (production, location, workforce, production bonus). It is clear what the tool returns, though it never names or contrasts itself with the plausible sibling get_player_companies, so the agent must infer the boundary.
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?
Usage is implied by 'one company's details' versus the list-style siblings, but there is no explicit 'use this when' statement, no mention of when to prefer get_player_companies or region/country tools, and no prerequisites or exclusions. Adequate but with a clear gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_country_overviewARead-onlyIdempotent
Get selected verified facts about a country plus, optionally, its regions. Names are matched exactly and case-insensitively, and this is a current snapshot only. It does not report war relationships — use get_country_wars for those.
| Name | Required | Description | Default |
|---|---|---|---|
| country_id | No | Opaque WarEra identifier. Prefer this over a name when you have it. | |
| country_name | No | Exact country name. | |
| limit_regions | No | Maximum regions to list (1-20). | |
| player_context | No | Optional per-request WarEra credentials: an object containing api_key or jwt. Never use a project-wide or default credential. | |
| include_regions | No | Also list the country's regions. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, open-world behavior, so the safety profile is covered. The description adds meaningful non-annotation context: name matching is exact and case-insensitive, and the result is 'a current snapshot only' (no history). It does not describe pagination or response shape, but for a read-only tool this is solid added value.
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 sentences, zero filler, front-loaded with the core action and scope, followed by the matching rule and the sibling exclusion. Every clause carries information an agent needs.
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 read-only, 5-parameter tool with full schema coverage and rich annotations, the description supplies the missing behavioral pieces (exact case-insensitive matching, snapshot-only, war exclusion). It does not enumerate what facts are returned, but with no output schema and a well-annotated read operation, this is nearly 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 100%, so the baseline is 3. The description adds semantics beyond the schema by specifying that names are matched exactly and case-insensitively, which clarifies the country_name parameter's matching behavior, and reinforces that regions are optional (include_regions). That justifies a bump above baseline.
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?
States a specific verb (get) and resource (country overview), and explicitly scopes it to 'selected verified facts about a country plus, optionally, its regions.' It names the sibling it excludes (get_country_wars), so an agent can differentiate. The only weakness is that 'selected verified facts' leaves the actual content of the payload undefined.
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?
Gives an explicit exclusion and alternative: 'It does not report war relationships — use get_country_wars for those.' That is real routing guidance. However, it offers no guidance on when to prefer this over other siblings like get_region or get_company_overview, so it stops short of full when/when-not coverage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_country_warsARead-onlyIdempotent
Show the countries this country is currently listed as at war with, plus its active battles. This is a current snapshot from the country's war relationship field, not a war-history or treaty report; an empty result is not proof that no battles ever occurred.
| Name | Required | Description | Default |
|---|---|---|---|
| country_id | No | Opaque WarEra identifier. Prefer this over a name when you have it. | |
| country_name | No | Exact country name. | |
| limit_battles | No | Maximum active battles (1-10). | |
| player_context | No | Optional per-request WarEra credentials: an object containing api_key or jwt. Never use a project-wide or default credential. | |
| include_active_battles | No | Also fetch active battles involving the country. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, open-world safety, so the bar is lower. The description adds genuinely useful behavioral context: the data source (war relationship field), snapshot-in-time semantics, and the interpretation trap of empty results. Return format and pagination are not described, but no output schema exists to cover that.
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 sentences, no filler, with the primary capability front-loaded and the important caveat placed last. Every clause carries 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?
For a five-parameter, zero-required read tool with no output schema, the description conveys what comes back (war list plus active battles) and the limits of that data. It does not explain how country_id vs country_name are resolved or the default/limit behavior, though the schema covers those.
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 100%, so the schema already documents country_id, country_name, limit_battles, player_context, and include_active_battles with constraints. The description only indirectly hints at the battle-listing behavior and adds no syntax or format detail beyond the schema, so the baseline 3 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?
States a specific verb ('Show') and two concrete resources (war relationships and active battles) scoped to a single country. It is clearly distinguishable from siblings like search_battles and get_battle, which operate on battles rather than a country's war list.
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 frames when the tool applies ('current snapshot from the country's war relationship field') and when it does not ('not a war-history or treaty report'), plus a caveat that an empty result is not proof of no historical battles. It does not, however, name an alternative sibling for historical war data.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_market_priceARead-onlyIdempotent
Get the latest global quoted price for one item. This is a single price snapshot for one item, not an order book or a market average.
| Name | Required | Description | Default |
|---|---|---|---|
| item_code | Yes | WarEra item code, e.g. 'iron' or 'bread'. | |
| player_context | No | Optional per-request WarEra credentials: an object containing api_key or jwt. Never use a project-wide or default credential. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is fully covered. The description adds the meaningful behavioral fact that the result is a global quote rather than an order book or average, but says nothing about freshness/latency, rate limits, or credential behavior.
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 tight sentences with zero waste; the core scope statement is front-loaded and the disambiguation follows. Every sentence earns its place.
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 two-parameter read tool with full annotation coverage and no output schema, the description tells the agent what the returned value represents (a latest global quoted price for one item). It stops short of describing freshness or handling of unknown item codes, but nothing critical to invoking it is missing.
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 100%: item_code is documented with examples ('iron', 'bread') and player_context explains the credential shape, so the schema does the heavy lifting. The description only implies the single-item constraint ('for one item') and adds no syntax or format detail beyond the schema, warranting the baseline 3.
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?
States a specific verb and resource ('Get the latest global quoted price') and immediately bounds the scope ('single price snapshot for one item'). An agent can distinguish this from the sibling search_market, which suggests a broader search/list operation.
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 clarifies what the tool is not (not an order book, not a market average), which implies usage boundaries, but it never names an alternative tool or states the condition under which it should be chosen over search_market or search_events. Usage is inferable rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_playerARead-onlyIdempotent
Get a player's public profile and selected public stats. Use the WarEra user ID when available; username resolution requires an exact, unambiguous match and otherwise asks you to disambiguate. Does not return private inventory, balance, or session-only data.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | Field groups to include; omit for all. | |
| user_id | No | Opaque WarEra identifier. Prefer this over a name when you have it. | |
| username | No | Exact in-game username. | |
| player_context | No | Optional per-request WarEra credentials: an object containing api_key or jwt. Never use a project-wide or default credential. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is covered. The description adds genuinely new behavioral context: the ambiguity-resolution behavior for usernames and the explicit exclusion of private inventory, balance, and session-only data, which tells the agent what it will not get back.
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 sentences, zero waste, and the core purpose is front-loaded ahead of the identifier guidance and the exclusion note. Each sentence carries distinct information (what it returns, how to identify the player, what is omitted).
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?
With no output schema, the description correctly states the return scope and its exclusions, and annotations cover safety. Minor gaps remain: it does not say what happens when no identifier is supplied despite zero required parameters, and the fields projection is left entirely to the schema.
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 100%, so every parameter is already documented, including the 'prefer this over a name' note on user_id that the description largely repeats. The only semantic addition is the disambiguation behavior for username, which is behavioral rather than parameter-level, so the baseline 3 holds.
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 gives a specific verb and resource ('Get a player's public profile and selected public stats') and scopes it with a negative statement about private inventory, balance, and session-only data. It does not name any sibling tool explicitly, so an agent must infer the boundary against get_player_companies on its own, which keeps it just short of a 5.
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 gives clear operative guidance: prefer the WarEra user ID when available, and expect username resolution to require an exact, unambiguous match with a disambiguation follow-up otherwise. It stops short of stating when to reach for this tool versus search_events or the overview tools, so there is no explicit alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_player_companiesARead-onlyIdempotent
List the companies a player owns, with product, location, workforce and optional production bonus. This answers ownership questions in one call instead of many company lookups. It is not a country-wide company directory.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum companies to return (1-10). | |
| offset | No | Local offset into the owned list. | |
| user_id | No | WarEra user id (preferred). | |
| username | No | Exact in-game username. | |
| include_bonus | No | Fetch each company's production bonus. | |
| player_context | No | Optional per-request WarEra credentials: an object containing api_key or jwt. Never use a project-wide or default credential. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the safety profile is covered. The description adds the aggregation benefit and that bonus fetching is optional, but says nothing about pagination behavior, result ordering, or what happens when the user is not found.
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 short sentences, no filler, with the core purpose front-loaded and the scope exclusion last. Every sentence carries 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?
With no output schema, the description usefully names the returned fields and the optional bonus, and the player_context parameter documents the per-request credential requirement. Minor gap: no mention of paging semantics or result ordering, though the schema covers limit/offset bounds.
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 100%, so limit/offset/user_id/username/include_bonus/player_context are all documented in the schema. The description only echoes the optional production bonus, adding no format or precedence guidance (e.g., user_id vs username) beyond what the schema states. Baseline 3 is appropriate.
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?
States a specific verb and resource ('List the companies a player owns') and enumerates the returned fields (product, location, workforce, production bonus). The negative clause 'not a country-wide company directory' separates it from directory-style lookups such as get_country_overview.
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?
Gives a clear usage trigger ('answers ownership questions in one call instead of many company lookups') and a when-not condition ('not a country-wide company directory'). It never names the specific sibling to use instead, so routing is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_regionARead-onlyIdempotent
Get a region's detail by id or exact name: population, development, climate, deposit and optionally its country. Region names repeat across countries, so ambiguous matches are rejected and reported instead of guessed. It does not recommend where to build.
| Name | Required | Description | Default |
|---|---|---|---|
| region_id | No | Opaque WarEra identifier. Prefer this over a name when you have it. | |
| region_name | No | Exact region name. | |
| player_context | No | Optional per-request WarEra credentials: an object containing api_key or jwt. Never use a project-wide or default credential. | |
| include_country | No | Also resolve the linked country. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description adds genuinely new behavior: ambiguous name matches are rejected and reported rather than guessed, which is important error semantics an agent must anticipate.
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 sentences, zero filler, with the primary capability front-loaded and the ambiguity caveat immediately after. Every sentence carries information the agent needs.
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?
With no output schema, the description compensates by naming the returned fields, and the ambiguity and no-recommendation caveats cover the main failure modes. It does not say what the ambiguity-rejection response looks like or what 'deposit' contains, minor gaps for a single-entity read.
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 100%, so all four parameters are already documented, including the preference for region_id. The description reinforces id-or-exact-name and the optional country resolution but adds no syntax or format detail beyond the schema, making 3 the correct baseline.
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?
States a specific verb (Get) and resource (region) and enumerates the returned fields: population, development, climate, deposit, and optionally country. No sibling tool in the list touches regions, so the scope is unambiguous without further differentiation.
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?
Tells the agent it can look up by id or exact name and explains the ambiguity handling that governs name lookups. It also states a when-not ("does not recommend where to build"), though it names no alternative tool for that need, leaving the agent to infer the right sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_work_marketARead-onlyIdempotent
Get the wage benchmark for one item together with a small set of matching work offers. Offers are filtered locally on the first upstream page. It reports wage facts only and does not assess eligibility or suitability.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum work offers to return (1-10). | |
| item_code | Yes | WarEra item code, e.g. 'iron' or 'bread'. | |
| region_id | No | Filter offers by region id. | |
| player_context | No | Optional per-request WarEra credentials: an object containing api_key or jwt. Never use a project-wide or default credential. | |
| minimum_net_wage | No | Minimum acceptable wage. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive). The description adds genuinely useful behavior beyond that: offers are filtered locally on the first upstream page, meaning results are a bounded subset rather than an exhaustive market scan. It also draws a clear scope line at wage facts only. It does not mention rate limits or return shape, keeping it short of 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?
Three short sentences, front-loaded with the core capability and followed by the two constraints an agent most needs. Every sentence carries distinct information with no repetition of the schema.
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 five-parameter, read-only tool with no output schema, the description conveys the primary return (wage benchmark plus offers) and the important caveat that offer filtering is local to one upstream page. It could say more about what the wage benchmark contains or how the offer set is ordered, but nothing essential to a correct call is missing.
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 100%, so limit, item_code, region_id, player_context and minimum_net_wage are all documented in the schema itself. The description adds only the loose notion of 'one item' and 'matching offers', which does not extend parameter meaning. Baseline 3 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?
States a specific verb and resource ('get the wage benchmark for one item') plus the accompanying payload (matching work offers). This clearly separates it from price-oriented siblings like get_market_price and search_market, though it never names an alternative explicitly.
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 through scope boundaries ('reports wage facts only and does not assess eligibility or suitability'), which tells the agent what this tool is not for. However, it gives no explicit when-to-use condition or pointer to a sibling when the agent wants prices or eligibility rather than wages.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_battlesARead-onlyIdempotent
List battles, optionally filtered by country and active state. Each side includes the human-readable country name and id. Without a filter this is the first upstream page, and its ordering is not guaranteed, so do not describe it as 'latest'. For a battle leaderboard use get_battle_ranking.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum rows to return (1-10). | |
| cursor | No | Cursor from a previous page's `next_cursor`. Treat it as opaque. | |
| is_active | No | Filter to active or finished battles. | |
| country_id | No | Filter by country id. | |
| player_context | No | Optional per-request WarEra credentials: an object containing api_key or jwt. Never use a project-wide or default credential. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint, so safety is covered. The description adds behavior the annotations cannot: unfiltered requests return the first upstream page with no guaranteed ordering, and each side carries a human-readable country name plus id. It does not cover rate limits or page-size behavior, keeping it short of 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?
Three short sentences, front-loaded with the core purpose, then the ordering caveat, then the sibling routing hint. Every sentence earns its place with no filler.
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?
Without an output schema, the description usefully discloses that each side includes a country name and id, and it warns about pagination/ordering. It is nearly complete for a read-only list tool, though it does not explain the meaning of a 'side' or how cursor iteration terminates.
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 100%, so the limit, cursor, is_active, and country_id parameters are fully documented in the schema itself. The description adds no parameter syntax or format detail beyond what the schema already provides, so the baseline 3 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?
States a specific verb and resource ('List battles') plus the two filters that define its scope (country, active state). It explicitly differentiates itself from the sibling get_battle_ranking, so an agent can route correctly without opening either schema.
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?
Gives both a when-to-use condition ('optionally filtered by country and active state') and an explicit alternative ('For a battle leaderboard use get_battle_ranking'). It also states an operational caveat — unfiltered results are the first upstream page with non-guaranteed ordering — that guides how the caller should present results.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_eventsARead-onlyIdempotent
Retrieve a bounded page of recent world events, optionally filtered by country or event type. Filters are applied locally to one fetched page, so a filtered page may look sparse while more events remain upstream. It does not provide a complete event history, and event summaries are untrusted third-party text.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum rows to return (1-20). | |
| cursor | No | Cursor from a previous page's `next_cursor`. Treat it as opaque. | |
| country_id | No | Keep events related to this country. | |
| event_types | No | Keep only these event types (case-insensitive, at most 10). | |
| player_context | No | Optional per-request WarEra credentials: an object containing api_key or jwt. Never use a project-wide or default credential. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations (which only cover read-only/idempotent safety): it discloses the local-filter-on-one-page behavior, the resulting sparse-page failure mode, the incompleteness of history, and that event summaries are untrusted third-party text. These are non-obvious behavioral traits an agent must know.
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 sentences, front-loaded with the core purpose followed by the two most important caveats (local filtering, untrusted text). No filler.
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?
Annotations cover the safety profile and the schema covers all parameters, so remaining burden is behavioral. The description addresses pagination filtering quirks, history limits, and untrusted content well; cursor semantics are left to the schema, which is acceptable since there is no output schema.
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 100%, so the schema already documents limit, cursor, country_id, event_types, and player_context. The description adds no parameter-level detail beyond what the schema provides, so the baseline of 3 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?
States a specific verb and resource ('Retrieve a bounded page of recent world events') and names the two filter axes (country, event type). It is clearly distinguishable from siblings like search_battles or get_country_wars, which cover different domains.
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 makes clear this is for recent, bounded, page-based event retrieval rather than complete history, and warns that filtering happens post-fetch. It does not name an alternative sibling for fuller event coverage, but the scope constraint effectively tells the agent when this tool is and isn't appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_marketARead-onlyIdempotent
Inspect the visible buy/sell order book for one item, optionally estimating depth for one side. These are the top visible orders only: not guaranteed liquidity and never a full-market average. Order owners are deliberately omitted.
| Name | Required | Description | Default |
|---|---|---|---|
| side | No | Book side to return. | both |
| item_code | Yes | WarEra item code, e.g. 'iron' or 'bread'. | |
| max_orders | No | Maximum price levels per side (1-10). | |
| depth_quantity | No | Estimate visible depth for this quantity on a single side. | |
| player_context | No | Optional per-request WarEra credentials: an object containing api_key or jwt. Never use a project-wide or default credential. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/openWorld, so the bar is lower, and the description adds real value: it discloses that only top visible orders are returned, that this is not guaranteed liquidity or a full-market average, and that order owners are omitted. It does not cover rate limits or credential scoping beyond what the schema says.
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 tight sentences, front-loaded with the core action, then immediately the critical data limitations. No filler; every clause carries information an agent needs.
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 read-only inspection tool with no output schema, the description covers what the data represents and its limitations well. Missing only explicit routing guidance to sibling price tools, which would round it out.
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 100%, so baseline is 3. The description adds marginal meaning ('for one item', 'estimating depth for one side') that reinforces the item_code and depth_quantity semantics, but the schema already documents each parameter including the single-side depth constraint.
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?
States a specific verb ('Inspect') and resource ('visible buy/sell order book for one item'), with the depth-estimation capability noted. It is distinguishable from siblings like get_market_price and get_work_market by the 'order book' framing, though it never names or contrasts those siblings explicitly.
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 a read-only market-inspection use case but gives no explicit when-to-use/when-not-to-use guidance or alternative tools (e.g., get_market_price for a single price). The caveats about data scope hint at the intended usage context without stating it.
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.
13 tool updates
v0.1.0- First observed
get_battle - First observed
get_battle_ranking - First observed
get_company_overview - First observed
get_country_overview - First observed
get_country_wars - First observed
get_market_price - First observed
get_player - First observed
get_player_companies - First observed
get_region - First observed
get_work_market - First observed
search_battles - First observed
search_events - First observed
search_market
TDQS
Scored across 13 tools
Each tool targets a distinct resource and action: player, company, country, region, market, work market, battles, battle detail, and battle ranking. Overlaps such as country wars versus battle search are explicitly clarified, and no two tools appear to do the same thing.
Most names follow predictable get_* for retrievals and search_* for list/search operations. A few list-like tools use get_ (e.g., get_player_companies, get_country_wars), which is a minor deviation but still readable.
Thirteen tools are well within a reasonable range and each covers a meaningful slice of the WarEra data domain. The set does not feel bloated or artificially thin.
The read-only surface covers core entities and workflows: players, companies, countries, regions, markets, work, wars, battles, and rankings. Minor gaps exist, such as no write/action tools and no global wealth ranking, but these appear intentional or clearly bounded.
Related MCP Connectors
Web search, browser automation, scraping, crawling and CAPTCHA solving for AI agents.
Discover, inspect and run 63,000+ agent tools from one balance. Pay per call, no subscriptions.
Public web tools for agents: product extraction, claim checks, webpage QA and ranked audits.
Global B2B intelligence for AI agents: 35M+ companies, 1.6M sanctions, KYB pack. 78 tools.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceProvides AI assistants with access to real-time Brawl Stars game data including player statistics, club information, brawler details, battle logs, and current events through the Brawl Stars API.18 npm1MIT
- FlicenseBqualityDmaintenanceProvides tools to interact with the Chess.com Public API for fetching real-time player profiles and detailed game statistics. It enables LLMs to access information like player ratings, win/loss records, and current online status.2-
- AlicenseAqualityDmaintenanceProvides AI assistants with real-time access to Warframe game data including world state, item stats, market prices, drop tables, builds, crafting, and farming optimization through 19 tools.19281 npm1MIT
- FlicenseAqualityDmaintenanceEnables AI assistants to look up World of Warcraft character information and reputation from Blizzard's Armory website.21-