kyrodata
OfficialA) kyrodata_resolve_entity
Kyrodata
Brazilian trade, crop and commodity data over MCP
Kyrodata is a remote Model Context Protocol server. There is nothing to install or run: point your agent at the hosted endpoint and give it your API key.
https://mcp.kyrodata.com/mcpAsk in plain language — "how did Brazil's coffee exports do this year against last?" — and get the measured figure, the window it covers, and the source behind it.
Get a key
Create one at kyrodata.com/user/api-keys. It is shown only once. Queries spend the credits already included in your plan — the connector is not a separate subscription.
Related MCP server: agrobr-mcp
Connect
Any agent that accepts a header (Cline, Claude Code, Cursor, VS Code, Codex, n8n, Zapier, Make):
{
"mcpServers": {
"kyrodata": {
"url": "https://mcp.kyrodata.com/mcp",
"headers": { "Authorization": "Bearer YOUR_KYRODATA_API_KEY" }
}
}
}Command-line equivalents:
claude mcp add --transport http kyrodata https://mcp.kyrodata.com/mcp \
--header "Authorization: Bearer $KYRODATA_API_KEY"
codex mcp add kyrodata --url https://mcp.kyrodata.com/mcp \
--bearer-token-env-var KYRODATA_API_KEY
gemini mcp add --transport http --header "Authorization: Bearer $KYRODATA_API_KEY" \
kyrodata https://mcp.kyrodata.com/mcpChat assistants (claude.ai, ChatGPT) have no field for a key — they ask for your authorization instead. Add Kyrodata as a custom connector with the same URL and sign in when prompted. Walkthrough per client: kyrodata.com/developers.
What you get
Read-only tools over Brazilian foreign trade (MDIC/ComexStat), crop production, supply and demand balances, climate readings and commodity forecasts.
Tool | What it answers |
| Search the public trade catalog |
| Open one public trade document by id |
| Resolve country, HS code or commodity |
| Compare exports/imports between equal windows |
| Raw monthly trade series as rows |
| Top partner countries with growth |
| Overview of an HS heading (SH4) |
| Build a like-for-like comparison window |
| Supply and demand balance sheet |
| Climate reading and physical crop loss |
| Commodity hub summary and forecast verdict |
| Explain one level of the forecast pyramid |
| Run one of the catalog reports |
| Data coverage and latest closed month |
| Credit balance and limits for this key (free) |
tools/list on the live endpoint is the authoritative list.
† The two price-forecast tools are part of an additional plan. Trade, climate and supply-and-demand tools are not.
How it answers
Windows are equal-weight by construction. Three months are never compared against a full year; the server refuses the unequal window and returns the largest matching one, labeled.
Every answer names its window and its source.
"No signal" is a real answer where the data does not support a verdict.
Read-only. No tool writes, deletes or buys anything.
Running it as a local command (you almost certainly should not)
bridge/server.py is a stdio-to-HTTP forwarder, and the Dockerfile packages
it. This is not the server. The server is remote, and any client that speaks
remote MCP should connect straight to the URL above — one hop fewer, nothing to
install. The bridge exists for two cases only: a client that can only launch a
local command, and a directory that will not score what it cannot build, start
and introspect.
docker build -t kyrodata-mcp .
docker run -i --rm -e KYRODATA_API_KEY=kd_live_... kyrodata-mcpIt implements no tools of its own: initialize, tools/list and tools/call
are forwarded verbatim, so there is no second copy of the catalogue here that
could drift from the server. Zero third-party dependencies, and the key never
goes into the image.
Notes
Transport is
streamable-http. The deprecated HTTP+SSE transport is not served.Without credentials the endpoint answers
401— never403.Keys go in the
Authorizationheader. A key in a query string is not accepted, because query strings land in browser history and proxy logs.
MIT for this repository's contents. The hosted service has its own terms.
Available Tools
15 toolskyrodata_compare_tradeCompare exports/imports between equal windowsARead-onlyIdempotent
Compares Brazil's exports or imports between two equal-length windows (like-for-like), in value (USD FOB) and in volume (kg). mode changes the reading: quarterly, semestral, annual, ytd and rolling_3m/6m/12m look a year back and hold the season constant, while monthly and semestral_sequential compare against the period immediately before and cross one. codes and countryIds filter both windows alike and combine: together they isolate one product to one partner (1201 soybean to 160 China); omitted, every product and partner counts. The result carries both windows, the % change of each metric, the window label, whether it crosses a season, and the monthly series spanning both, capped at 24 months. This returns the FIGURES of a comparison — kyrodata_resolve_comparison_window only names the window, and kyrodata_list_trade_series hands over raw monthly points without comparing them. Credit class: comex (up to 2 comex tools per 60-second session = 1 credit).
| Name | Required | Description | Default |
|---|---|---|---|
| flow | Yes | Direction of the trade flow, from Brazil’s side: `export` leaves the country, `import` enters it. | |
| mode | Yes | Which pair of equal-length windows to compare. Against the same period a year earlier: `quarterly`, `semestral`, `annual`, `ytd` (January to the last published month) and `rolling_3m`/`6m`/`12m`. Against the period immediately before, which crosses a season: `monthly` and `semestral_sequential`. Use `ytd` when the question names no period. | |
| codes | No | Products to filter by, as HS codes — 4 digits (heading), 6 (subheading) or 8 (Brazilian NCM), up to 10. Omit for every product. kyrodata_resolve_entity turns a product name into its code. | |
| countryIds | No | Partner countries to filter by, as ids from kyrodata_resolve_entity. Omit for every partner. | |
| response_format | No | How much of the answer to return. `concise` (the default) carries the headline figures; `detailed` adds the row-level series behind them and counts against the export quota. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | Raw numbers behind the text. |
| memo | Yes | true = identical call in the last 10 min, served again: 0 credits. |
| rows | No | Table rows; detailed only, capped per tool. |
| error | No | Failure message when status = error. |
| links | Yes | screen = product page with these numbers. |
| denied | No | When status = denied: reason, feature, upgradeUrl. |
| status | Yes | ok = data; denied = plan; error = failure or timeout. |
| window | No | Like-for-like window: from, to (YYYY-MM), label, months, crossesSeason. |
| caveats | Yes | Reading caveats. |
| credits | Yes | charged, balance (null = unlimited), resetAt, session {charged, endsAt} of the 60-s billing session. |
| sources | Yes | Per source: label, nameable, asOf. |
| dataVersion | Yes | Identity of the data that answered. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool read-only, idempotent, and non-destructive, and the description adds meaningful behavioral context: the credit class and rate limit (comex, up to 2 tools per 60-second session = 1 credit), the monthly series cap at 24 months, and the result carrying both windows plus % change and season-crossing labels. This goes well beyond the structured annotations.
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 but well-organized: purpose first, then mode semantics, filters, result shape, sibling distinction, and credit cost. Each sentence earns its place, and the most decision-relevant contrast with siblings is clearly highlighted.
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 complexity and the presence of an output schema, the description supplies everything an agent needs to select and invoke it correctly: metrics, mode behavior, filtering semantics, return contents, sibling boundaries, and credit implications. No critical operational context 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 coverage is 100%, so the baseline is 3. The description adds value by explaining how `mode` groups map to window semantics)Skip? It says `codes` and `countryIds` filter both windows alike and combine, with a concrete soybean-to-China examplechers, and notes that omitting them counts every product and partner. That supplements the schema's per-parameter 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 opens with a specific verb and resource: 'Compares Brazil's exports or imports between two equal-length windows,' and names the metrics (USD FOB value, kg volume). It explicitly differentiates itself from siblings by stating this returns the FIGURES of a comparison while kyrodata_resolve_comparison_window only names the window and kyrodata_list_trade_series returns raw points without comparing.
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 exactly which mode to use for which kind of comparison: year-back windows that hold season constant versus monthly/semestral_sequential that cross a season. It also points to the sibling tools as alternatives and clarifies the division of labor, so an agent knows when to choose this tool over them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kyrodata_explain_pyramid_levelExplain one level of the forecast pyramidARead-onlyIdempotent
Explains the pyramid's arithmetic for one commodity and horizon: the seven levels side by side (label, push %, weight share, confidence, contribution %) and, for the levels that did not enter, the reason with its ruler (hit rate vs base rate, number of origins). horizon fixes the month and shows the seven levels; levelKey flips the cut, following one level across all four horizons instead. This is the drill-down of kyrodata_get_hub_summary — the 'por quê?' behind a verdict that tool already gave. A question about the physical harvest rather than the arithmetic belongs to kyrodata_get_climate_reading. Credit class: level (any level tool in a 60-second session = 2 credits; a session is capped at 3).
| Name | Required | Description | Default |
|---|---|---|---|
| hub | Yes | Which commodity hub to read. | |
| horizon | Yes | How far ahead the forecast looks: 1, 3, 6 or 12 months from the last published month. | |
| levelKey | No | One level of the pyramid. Given, the answer follows that level across all four horizons instead of showing the seven side by side. | |
| response_format | No | How much of the answer to return. `concise` (the default) carries the headline figures; `detailed` adds the row-level series behind them and counts against the export quota. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | Raw numbers behind the text. |
| memo | Yes | true = identical call in the last 10 min, served again: 0 credits. |
| rows | No | Table rows; detailed only, capped per tool. |
| error | No | Failure message when status = error. |
| links | Yes | screen = product page with these numbers. |
| denied | No | When status = denied: reason, feature, upgradeUrl. |
| status | Yes | ok = data; denied = plan; error = failure or timeout. |
| window | No | Like-for-like window: from, to (YYYY-MM), label, months, crossesSeason. |
| caveats | Yes | Reading caveats. |
| credits | Yes | charged, balance (null = unlimited), resetAt, session {charged, endsAt} of the 60-s billing session. |
| sources | Yes | Per source: label, nameable, asOf. |
| dataVersion | Yes | Identity of the data that answered. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the description does not need to repeat safety. It adds valuable behavioral context beyond annotations: the credit class ('level' tools cost 2 credits per 60-second session, capped at 3) and that the 'detailed' response_format counts against the export quota. This extra context is useful for an agent deciding whether to invoke the tool. No contradiction with annotations.
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 dense paragraph, but every sentence serves a purpose: it defines the output, explains the two modes, names the parent tool and the alternative for different questions, and states the credit cost. It is front-loaded with the core purpose and uses efficient phrasing. Slightly long but justified given the tool's complexity.
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, idempotent tool with an output schema and full parameter schema coverage, the description is remarkably complete. It covers the two usage modes, the relationship to sibling tools, credit costs, and the export quota impact. Nothing an agent needs to decide whether to call this tool and how to format the request 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 coverage is 100%, so the baseline is 3. The description adds meaning beyond the schema: it explains that 'horizon' fixes the month and shows the seven levels, while 'levelKey' flips the cut to follow one level across all four horizons. It also clarifies that 'response_format' with 'detailed' adds row-level series and counts against the export quota. This enriches parameter understanding without redundancy.
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: 'Explains the pyramid's arithmetic for one commodity and horizon,' listing the seven levels side by side and reasons for excluded levels. It explicitly distinguishes itself as the drill-down of kyrodata_get_hub_summary and contrasts with kyrodata_get_climate_reading for physical harvest questions. The verb 'Explains' plus the specific resource (pyramid levels) makes the purpose unambiguous and differentiated from 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 guidance is explicit: it is the drill-down for a verdict already given by kyrodata_get_hub_summary, and it specifies that questions about physical harvest belong to kyrodata_get_climate_reading. It also explains the two invocation modes (horizon vs levelKey) and the credit cost implications, giving the agent clear conditions for when and 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.
kyrodata_fetchOpen one public trade document by idARead-onlyIdempotent
Opens ONE public foreign-trade document by id and returns it as prose to quote: title, body text and a public URL for citation. id is not free text — it is an id kyrodata_search returned, shaped heading:1201 (an HS heading) or country:160 (a partner country); anything else is refused rather than guessed. The body carries the measured figures of the latest published year, Brazilian exports and imports in USD FOB and kg, plus the window, the source and its caveats. Public government trade data only. The output here is a citable DOCUMENT with a URL, and this is the only tool that returns one. A heading as structured figures and a monthly series to reason over is kyrodata_get_heading_overview; free text to find an id in the first place is kyrodata_search. Credit class: comex (up to 2 comex tools per 60-second session = 1 credit).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Identifier of a document returned by kyrodata_search. Not a free-text query. | |
| response_format | No | How much of the answer to return. `concise` (the default) carries the headline figures; `detailed` adds the row-level series behind them and counts against the export quota. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | The document id that was fetched. |
| url | Yes | Public page with the same data, for citation. |
| text | Yes | The document body: the measured figures, the window, the source. |
| title | Yes | Human-readable name of the document. |
| metadata | Yes | kind, code, flow, window, sources, caveats and dataVersion. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the tool read-only, idempotent, and non-destructive guardian, but the description adds valuable context: the id format ('heading:1201' or 'country:160'), the data contents (Brazilian exports/imports in USD FOB and kg), the data source, and the credit cost (1 credit, max 2 per session). It also notes the output is citable with a public URL. These details are not in the annotations and enhance transparency. The only minor gap is not covering the response_format parameter's quota implication in the description, but it's already in the 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 structured into clear sentences with no filler. It front-loads the core action and output, then covers constraints and sibling tools, and ends with credit costing. It's appropriately sized given the tool's complexity and the need to distinguish from many siblings.
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 tool with an output schema and detailed annotations, the description is complete. It covers purpose, id constraints, output content, sibling differentiation, and costing. There is no missing information an agent would need 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?
With schema description coverage at 100%, the baseline is 3, but the description adds significant meaning beyond schema: it tells the agent that 'id' is not arbitrary text but must match specific shapes from kyrodata_search, and it explains the semantics of 'response_format' (concise vs detailed) and its quota implications. This goes well beyond the schema's brief 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 clearly states the tool's purpose: opening one public foreign-trade document by id and returning it as citable prose. It specifies the verb, resource, and output (title, body text, URL). It explicitly distinguishes itself from siblings by noting it is the only tool that returns a document with a URL, and it names complementary tools (kyrodata_get_heading_overview and kyrodata_search) to avoid confusion.
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 explicit usage guidance: use this tool when you need a citable document, use kyrodata_get_heading_overview for structured figures, and use kyrodata_search to find an id. It also clarifies when not to use it and enforces the id constraint (not free text). This is exactly the kind of when/when-not alternative guidance that scores high.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kyrodata_get_climate_readingClimate reading and physical crop lossARead-onlyIdempotent
Current climate reading for a commodity: risk level, the measured production shock in % of the harvest, and the projected physical loss in tonnes per horizon (1, 3, 6 and 12 months) with its range. scope sets the geographic cut — 'br' (the default) reads the country, 'region:SE' a macro-region (N, NE, CW, SE, S), 'uf:MG' a single state — and moves only the risk level and the shock: the loss in tonnes stays national at any scope. A commodity without a validated model returns a descriptive reading with no verdict, and a season not yet measurable returns the previous one, each flagged in the caveats. Climate here predicts PRODUCTION. The price question for the same hub is kyrodata_get_hub_summary, and the published season-by-season balance sheet is kyrodata_get_supply_demand_balance. Credit class: level (any level tool in a 60-second session = 2 credits; a session is capped at 3).
| Name | Required | Description | Default |
|---|---|---|---|
| hub | Yes | Which commodity hub to read. Climate forecasts PRODUCTION, never price. | |
| scope | No | Geographic cut: `br` for the whole country, `region:<N|NE|CW|SE|S>` for a macro-region, or `uf:<XX>` for a state. Defaults to the country. | |
| response_format | No | How much of the answer to return. `concise` (the default) carries the headline figures; `detailed` adds the row-level series behind them and counts against the export quota. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | Raw numbers behind the text. |
| memo | Yes | true = identical call in the last 10 min, served again: 0 credits. |
| rows | No | Table rows; detailed only, capped per tool. |
| error | No | Failure message when status = error. |
| links | Yes | screen = product page with these numbers. |
| denied | No | When status = denied: reason, feature, upgradeUrl. |
| status | Yes | ok = data; denied = plan; error = failure or timeout. |
| window | No | Like-for-like window: from, to (YYYY-MM), label, months, crossesSeason. |
| caveats | Yes | Reading caveats. |
| credits | Yes | charged, balance (null = unlimited), resetAt, session {charged, endsAt} of the 60-s billing session. |
| sources | Yes | Per source: label, nameable, asOf. |
| dataVersion | Yes | Identity of the data that answered. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnly, idempotent, and non-destructive behavior. The description adds significant behavioral context beyond that: scope only changes risk level and shock while losses stay national, invalid models return a descriptive reading with no verdict, unmeasurable seasons fall back to the previous one with caveats, and credit costs are disclosed. This goes well beyond what annotations provide.
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 yet well organized, with each sentence carrying distinct value: result contents, scope semantics, edge cases, hub clarification, sibling routing, and credit pricing. Nothing is redundant or padded, and the most important facts are front-loaded.
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 tool with 3 parameters, an output schema, and read-only annotations, the description covers all necessary operational context: result structure, scope behavior, fallback behavior, caveats, sibling alternatives, and cost implications. An agent has enough information to invoke this tool correctly in almost any reasonable situation.
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 100% and parameter descriptions are already strong, but the description adds crucial semantic detail, especially for scope: it clarifies that scope 'moves only the risk level and the shock', and that the loss in tonnes remains national at any scope. It also reinforces that hub means production, not price.
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 names a specific verb and resource: 'Current climate reading for a commodity', and enumerates exactly what is returned: risk level, production shock, and projected physical loss by horizon. It also distinguishes itself from siblings by noting the price question belongs to kyrodata_get_hub_summary and the balance sheet to kyrodata_get_supply_demand_balance.
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 explicitly states that climate predicts PRODUCTION and that the price question for the same hub belongs to kyrodata_get_hub_summary, while the season-by-season balance sheet belongs to kyrodata_get_supply_demand_balance. This gives an agent clear routing criteria for when to call this tool versus its siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kyrodata_get_credit_balanceCredit balance and limits for this keyARead-onlyIdempotent
Reports the credit balance and the limits of the API key making the request: credits left in the current cycle and when it resets, the daily credit and daily call ceilings of the key, and which tools the key reaches. response_format is the only input and it changes verbosity, not scope — there is no argument that selects another key, since the answer describes whichever key authenticated this call. It reads no market data, so it answers a question about the ACCOUNT, never about trade, climate or a commodity. A question about how far the data itself goes is kyrodata_get_data_coverage. Credit class: free (0 credits).
| Name | Required | Description | Default |
|---|---|---|---|
| response_format | No | How much of the answer to return. `concise` (the default) carries the headline figures; `detailed` adds the row-level series behind them and counts against the export quota. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | Raw numbers behind the text. |
| memo | Yes | true = identical call in the last 10 min, served again: 0 credits. |
| rows | No | Table rows; detailed only, capped per tool. |
| error | No | Failure message when status = error. |
| links | Yes | screen = product page with these numbers. |
| denied | No | When status = denied: reason, feature, upgradeUrl. |
| status | Yes | ok = data; denied = plan; error = failure or timeout. |
| window | No | Like-for-like window: from, to (YYYY-MM), label, months, crossesSeason. |
| caveats | Yes | Reading caveats. |
| credits | Yes | charged, balance (null = unlimited), resetAt, session {charged, endsAt} of the 60-s billing session. |
| sources | Yes | Per source: label, nameable, asOf. |
| dataVersion | Yes | Identity of the data that answered. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the description needs less safety disclosure. It adds real context beyond the annotations: only the authenticated key is ever described, no other key can be selected, the tool reads no market data, and the credit class is free (0 credits). This meaningfully clarifies behavior without contradicting the annotations.
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 short, front-loaded paragraph: purpose first, then scope, then sibling routing, then credit class. Each sentence has a distinct purpose. It's slightly redundant in saying both 'reads no market data' and 'never about trade ... commodity', but overall it is tightly written and never wanders.
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 is simple (one optional parameter, output schema present), and the description fully covers the purpose, the input semantics, scope exclusions, the likely mis-generation of response_format, and the correct sibling alternative. An agent neither false nor has to inspect more than this definition to call 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 100%, so the baseline is 3. The description adds that response_format is the only input, that it changes verbosity and not scope, and that there is no argument for selecting another key—clarifying the parameter's role beyond the schema's own wording and preventing a likely agent assumption.
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 opens by naming the exact resource ('credit balance and the limits of the API key making the request') and lists concrete fields it reports (credits left, reset time, ceilings, reachable tools). It also explicitly contrasts with the sibling kyrodata_get_data_coverage, so an agent can distinguish the tool without opening schemas.
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 an explicit when-to-use (account/credit-limit questions) and when-not-to-use (never for trade, climate, or commodity data), and points directly to the right sibling, kyrodata_get_data_coverage, for data-depth questions. It also warns that response_format cannot change the scope, preventing a common misuse.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kyrodata_get_data_coverageData coverage and latest closed monthARead-onlyIdempotent
Returns the calendar of the trade data: first and last published month (YYYYMM), whether the current year is partial, the last fully closed month, and when the aggregates were last refreshed. response_format is the only input; the answer covers the whole dataset, so there is no window or product to narrow it with. This answers 'até quando tem dado?' and 'qual o último mês?' — the CALENDAR, never figures. Turning that calendar into a like-for-like window is kyrodata_resolve_comparison_window; reading the figures inside it is kyrodata_get_heading_overview. Credit class: free (0 credits).
| Name | Required | Description | Default |
|---|---|---|---|
| response_format | No | How much of the answer to return. `concise` (the default) carries the headline figures; `detailed` adds the row-level series behind them and counts against the export quota. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | Raw numbers behind the text. |
| memo | Yes | true = identical call in the last 10 min, served again: 0 credits. |
| rows | No | Table rows; detailed only, capped per tool. |
| error | No | Failure message when status = error. |
| links | Yes | screen = product page with these numbers. |
| denied | No | When status = denied: reason, feature, upgradeUrl. |
| status | Yes | ok = data; denied = plan; error = failure or timeout. |
| window | No | Like-for-like window: from, to (YYYY-MM), label, months, crossesSeason. |
| caveats | Yes | Reading caveats. |
| credits | Yes | charged, balance (null = unlimited), resetAt, session {charged, endsAt} of the 60-s billing session. |
| sources | Yes | Per source: label, nameable, asOf. |
| dataVersion | Yes | Identity of the data that answered. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent, non-destructive behavior. The description adds meaningful context beyond those hints: it explains the response is a calendar, never figures, that the detailed response_format counts against the export quota, and that the tool is credit class free. No contradiction with annotations exists.
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 compact but information-dense; every sentence earns its place. It front-loads the return value, then states the input scope, addresses likely user questions, and closes with routing to sibling tools and credit cost. There is no filler or redundant restating 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 single-parameter read-only getter with a full input schema and an output schema, the description covers everything an agent needs: what it returns, what it doesn't return, how the parameter affects behavior, related sibling tools, and cost implications. None of the critical context 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 coverage is 100% with a well-described enum, so the baseline is 3. The description adds value by explicitly declaring that response_format is the only input and that the answer covers the whole dataset with no narrowing by window or product. It reinforces the parameter's role without relying solely on 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 opens with a precise verb and resource, stating it 'Returns the calendar of the trade data' and enumerates the concrete fields returned. It also explicitly contrasts itself with siblings: 'the CALENDAR, never figures' while routing figure-reading to kyrodata_get_heading_overview. This makes the tool unmistakably distinct from its sibling tools.
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 clearly states that the answer covers the whole dataset, so there is no window or product to narrow it with, and that it answers specific questions like 'até quando tem dado?' and 'qual o último mês?'. It also gives explicit alternatives: use kyrodata_resolve_comparison_window for building a like-for-like window and kyrodata_get_heading_overview for reading figures inside it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kyrodata_get_heading_overviewOverview of an HS heading (SH4)ARead-onlyIdempotent
Structured read of ONE HS heading (SH4, 4 digits) for exports or imports: totals of the published year (USD FOB, kg), the last closed month against the previous one (average price per kg and volume), and a monthly price-by-volume series. year centres the overview and defaults to the most recent published year, with coverage starting in 2000; months sets only how far the series reaches back from the last published month, and leaves the totals untouched. A caveat states that US$/kg is an average unit value, not a quoted price. Public data. The output here is FIGURES and a series to reason over. The same heading as a citable document with a URL is kyrodata_fetch, and a comparison between two windows is kyrodata_compare_trade. Credit class: comex (up to 2 comex tools per 60-second session = 1 credit).
| Name | Required | Description | Default |
|---|---|---|---|
| sh4 | Yes | The 4-digit HS heading to describe. | |
| flow | Yes | Direction of the trade flow, from Brazil’s side: `export` leaves the country, `import` enters it. | |
| year | No | Calendar year to centre the overview on. Omit for the most recent published year; coverage starts in 2000. | |
| months | No | Length of the monthly series returned, counting back from the last published month. | |
| response_format | No | How much of the answer to return. `concise` (the default) carries the headline figures; `detailed` adds the row-level series behind them and counts against the export quota. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | Raw numbers behind the text. |
| memo | Yes | true = identical call in the last 10 min, served again: 0 credits. |
| rows | No | Table rows; detailed only, capped per tool. |
| error | No | Failure message when status = error. |
| links | Yes | screen = product page with these numbers. |
| denied | No | When status = denied: reason, feature, upgradeUrl. |
| status | Yes | ok = data; denied = plan; error = failure or timeout. |
| window | No | Like-for-like window: from, to (YYYY-MM), label, months, crossesSeason. |
| caveats | Yes | Reading caveats. |
| credits | Yes | charged, balance (null = unlimited), resetAt, session {charged, endsAt} of the 60-s billing session. |
| sources | Yes | Per source: label, nameable, asOf. |
| dataVersion | Yes | Identity of the data that answered. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal read-only, idempotent, and non-destructive behavior. The description adds valuable context beyond those flags: the data is public, USD/kg is an average unit value rather than a quoted price, the output is figures and a series, and the credit-class policy for comex tools is disclosed. No contradiction with annotations.
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 but every sentence earns its place: core output, caveat, default behaviors, sibling alternatives, and credit cost are all covered. It could be slightly tightened, but the important information is front-loaded and there is 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 read-only, non-destructive tool with an output schema and full parameter documentation, the description supplies everything an agent needs to select and call it correctly: default behavior, historical coverage from 2000, an important data caveat, sibling routing, and credit implications.
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 100%, but the description adds interpretive meaning beyond the field docs: year centres the overview and defaults to the most recent published year, months only affects how far the series reaches back and leaves totals untouched. This exceeds the baseline expected from a fully documented 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 states a precise operation: structured read of ONE 4-digit HS heading for exports or imports, and enumerates the output (yearly totals, month-over-month averages, monthly price-by-volume series). It also differentiates itself from siblings by naming kyrodata_fetch for citable documents and kyrodata_compare_trade for comparisons.
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 gives explicit selection guidance: choose this tool when you want figures and a series to reason over, kyrodata_fetch when you need a citable document with a URL, and kyrodata_compare_trade for window comparisons. It also clarifies how year and months affect behavior, so an agent knows how to tailor the call.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kyrodata_get_hub_summaryCommodity hub summary and forecast verdictARead-onlyIdempotent
Reads the Kyrodata pyramid verdict for a commodity hub: direction of the leading horizon, expected move in % per horizon (1, 3, 6 and 12 months), the 80% band as a half-width in percentage points, which levels drive the verdict and the measured accuracy. A horizon without an arrow names the reason, and an empty one means no level passed the confidence gate: no signal, not a stable price. horizon re-centres the verdict on the month given; omitted, it centres on the horizon the model leads with, and all four come back either way. It also carries the month-over-month and year-over-year % change of the reference price and its kind (doméstico, mundial or paridade de exportação), never the price level. This is the tool for where a hub's price is heading. The arithmetic behind the verdict is kyrodata_explain_pyramid_level, and the physical harvest of the same hub is kyrodata_get_climate_reading. Credit class: level (any level tool in a 60-second session = 2 credits; a session is capped at 3).
| Name | Required | Description | Default |
|---|---|---|---|
| hub | Yes | Which commodity hub to read. | |
| horizon | No | How far ahead the forecast looks: 1, 3, 6 or 12 months from the last published month. Omitted, the verdict centres on the horizon the model leads with; given, it re-centres on that one — either way all four horizons come back. | |
| response_format | No | How much of the answer to return. `concise` (the default) carries the headline figures; `detailed` adds the row-level series behind them and counts against the export quota. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | Raw numbers behind the text. |
| memo | Yes | true = identical call in the last 10 min, served again: 0 credits. |
| rows | No | Table rows; detailed only, capped per tool. |
| error | No | Failure message when status = error. |
| links | Yes | screen = product page with these numbers. |
| denied | No | When status = denied: reason, feature, upgradeUrl. |
| status | Yes | ok = data; denied = plan; error = failure or timeout. |
| window | No | Like-for-like window: from, to (YYYY-MM), label, months, crossesSeason. |
| caveats | Yes | Reading caveats. |
| credits | Yes | charged, balance (null = unlimited), resetAt, session {charged, endsAt} of the 60-s billing session. |
| sources | Yes | Per source: label, nameable, asOf. |
| dataVersion | Yes | Identity of the data that answered. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool read-only and idempotent, and the description adds valuable behavior beyond that: omitted horizon centers on the model's leading horizon, all four horizons always come back, arrowless horizons name the reason, empty horizons mean no signal, and it never returns the price level. It also discloses the credit class and session cap, which are non-obvious runtime 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 dense but every sentence earns its place: the headline capability is front-loaded, parameter behavior is explained, alternatives are named, and the credit quirk is placed at the end. It is long because the tool has genuine nuances, not because of 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?
Given the rich schema with 100% parameter coverage, a present output schema, and strong annotations, the description covers everything needed to select and invoke the tool correctly. It explains the return contents, horizon semantics, no-price-level limitation, related tools, and credit cost. No meaningful gap remains.
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 100%, so the baseline is 3. The description goes further by explaining the horizon parameter's re-centering behavior and that all four horizons return regardless, and it clarifies the response_format distinction including the export-quota implication for 'detailed'. This adds real meaning beyond the schema without needing to repeat the enum values.
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 opens with a specific verb and resource: it reads the Kyrodata pyramid verdict for a commodity hub, and then enumerates exactly what comes back (direction, expected move %, band, driving levels, accuracy). It also differentiates itself from siblings by naming kyrodata_explain_pyramid_level and kyrodata_get_climate_reading and stating what each is for.
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 explicitly says 'This is the tool for where a hub's price is heading' and points to alternatives: the arithmetic behind the verdict is kyrodata_explain_pyramid_level, and the physical harvest is kyrodata_get_climate_reading. This gives an agent clear routing decisions without needing to inspect sibling schemas.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kyrodata_get_supply_demand_balanceSupply and demand balance sheetARead-onlyIdempotent
Published supply and demand balance (physical, in tonnes) for one agricultural hub, season by season: production, imports, exports, consumption, initial and final stock, whether the season is still an estimate, and how many months a partial season measures. hub accepts only the hubs that have a published balance sheet, which is fewer than the hubs the forecast tools cover; closedOnly drops the current season, which is a projection and still moves. The source is a Brazilian government body and is named in the result. This is the physical BALANCE of a season. The price verdict for the same hub is kyrodata_get_hub_summary, and the weather risk behind production is kyrodata_get_climate_reading. Credit class: level (any level tool in a 60-second session = 2 credits; a session is capped at 3).
| Name | Required | Description | Default |
|---|---|---|---|
| hub | Yes | Which commodity hub to read. Only hubs with a published balance sheet appear here. | |
| closedOnly | No | Restrict to seasons already closed. The current season is a projection and still moves. | |
| response_format | No | How much of the answer to return. `concise` (the default) carries the headline figures; `detailed` adds the row-level series behind them and counts against the export quota. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | Raw numbers behind the text. |
| memo | Yes | true = identical call in the last 10 min, served again: 0 credits. |
| rows | No | Table rows; detailed only, capped per tool. |
| error | No | Failure message when status = error. |
| links | Yes | screen = product page with these numbers. |
| denied | No | When status = denied: reason, feature, upgradeUrl. |
| status | Yes | ok = data; denied = plan; error = failure or timeout. |
| window | No | Like-for-like window: from, to (YYYY-MM), label, months, crossesSeason. |
| caveats | Yes | Reading caveats. |
| credits | Yes | charged, balance (null = unlimited), resetAt, session {charged, endsAt} of the 60-s billing session. |
| sources | Yes | Per source: label, nameable, asOf. |
| dataVersion | Yes | Identity of the data that answered. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description states the data is published, identifies it as a balance sheet, clarifies the current season is a projection that 'still moves,' names the data source, and notes credit cost and session cap. Annotations declare read-only and idempotent, and the description adds context about changing projections without contradicting the hints.
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 but every sentence serves a purpose: data type, units, temporal behavior, source, credit cost, and sibling differentiators. It front-loads the core purpose before adding constraints and alternatives. No filler or repetition.
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?
Covers input restrictions (published hubs only), parameter semantics (closedOnly meaning), data domain (physical, seasonal), source attribution, output nuance (estimate vs closed), and how siblings differ. Combined with 100% schema coverage and output schema, the agent has everything to select and invoke the 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 coverage is 100%, and the description reinforces important parameter semantics: hub is restricted to published balance sheets, and closedOnly excludes the projection. It also clarifies how response_format maps to result size. The description does not restate parameter names but provides valuable context 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 this returns a published supply and demand balance sheet in physical tonnes, for one agricultural hub, by season. It enumerates the exact contents (production, imports, exports, etc.) and distinguishes itself from the related price and weather tools.
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 this tool versus get_hub_summary (price verdict) and get_climate_reading (weather risk). It also clarifies which hubs are valid, the meaning of `closedOnly`, and the special projection status of the current season.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kyrodata_list_trade_partnersTop partner countries with growthARead-onlyIdempotent
Ranks Brazil's partner countries for exports or imports, one row per country with value (USD FOB), volume (kg), price per kg and share of the window. from/to are YYYYMM and default to the last 12 published months; codes narrows to HS codes (4, 6 or 8 digits) so the ranking answers 'who buys THIS product'; withGrowth adds the last 12 months against the previous 12, which is the only way growth enters the answer. The country is the OUTPUT of this tool, so it takes no country filter — a question about one known country is a filter on kyrodata_compare_trade or kyrodata_list_trade_series instead. This ranks partners inside one window; comparing two windows is kyrodata_compare_trade. Credit class: comex (up to 2 comex tools per 60-second session = 1 credit).
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | Last month of the window, as YYYYMM. Omit for the last published month. | |
| flow | Yes | Direction of the trade flow, from Brazil’s side: `export` leaves the country, `import` enters it. | |
| from | No | First month of the window, as YYYYMM (200403 = March 2004). Omit for the last twelve published months. | |
| codes | No | Products to filter by, as HS codes — 4 digits (heading), 6 (subheading) or 8 (Brazilian NCM), up to 10. Omit for every product. kyrodata_resolve_entity turns a product name into its code. | |
| limit | No | How many partner countries to return, largest first by value. | |
| withGrowth | No | Also return each partner’s change against the same window a year earlier. | |
| response_format | No | How much of the answer to return. `concise` (the default) carries the headline figures; `detailed` adds the row-level series behind them and counts against the export quota. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | Raw numbers behind the text. |
| memo | Yes | true = identical call in the last 10 min, served again: 0 credits. |
| rows | No | Table rows; detailed only, capped per tool. |
| error | No | Failure message when status = error. |
| links | Yes | screen = product page with these numbers. |
| denied | No | When status = denied: reason, feature, upgradeUrl. |
| status | Yes | ok = data; denied = plan; error = failure or timeout. |
| window | No | Like-for-like window: from, to (YYYY-MM), label, months, crossesSeason. |
| caveats | Yes | Reading caveats. |
| credits | Yes | charged, balance (null = unlimited), resetAt, session {charged, endsAt} of the 60-s billing session. |
| sources | Yes | Per source: label, nameable, asOf. |
| dataVersion | Yes | Identity of the data that answered. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and non-destructive, so the description adds value beyond them: it explains the ranking's shape, default window behavior, HS-code narrowing semantics, and the credit-class/quota implication. It also surfaces a potentially surprising trait: the tool takes no country filter because country is the output. No contradiction with annotations exists.
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?
Every sentence in the description earns its place: purpose, defaults, key parameters, sibling routing, comparison guidance, and credit constraints are all included without repetition or filler. The most decision-relevant distinction — 'country is the OUTPUT' — is front-loaded in a clear warning.
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 complexity (7 parameters, multiple sibling alternatives, output schema present), the description is complete: it covers defaults, parameter semantics, the one required parameter's role, growth behavior, alternatives, and resource cost. The existence of an output schema means return-value details are unnecessary here, and nothing an agent needs to call this correctly 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?
Although the schema already has 100% parameter coverage, the description adds meaningful semantic context: 'from/to default to the last 12 published months,' 'codes narrows to HS codes so the ranking answers who buys THIS product,' and 'withGrowth adds the last 12 months against the previous 12.' These explanations help an agent choose parameter values far more effectively than the schema alone.
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 opens with a specific verb and resource: 'Ranks Brazil's partner countries for exports or imports, one row per country...' It precisely defines the tool's output (partner countries) and the metrics included, and explicitly contrasts it with siblings like kyrodata_compare_trade. This makes the tool's role unmistakable even before 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?
The description gives explicit when-to-use and when-not-to-use guidance: a question about one known country should go to kyrodata_compare_trade or kyrodata_list_trade_series, and comparing two windows should use kyrodata_compare_trade. It also clarifies that withGrowth is 'the only way growth enters the answer,' removing ambiguity about how to request growth comparisons.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kyrodata_list_trade_seriesRaw monthly trade series as rowsARead-onlyIdempotent
Returns Brazil's monthly export or import series as rows — one row per month, with value (USD FOB), volume (kg) and the implied price per kg. from/to are YYYYMM and default to the last 24 published months; the span is capped at 200 months and a wider one is refused rather than silently truncated. A month with nothing published is ABSENT from the series rather than present as zero, so gaps stay visible instead of reading as collapse. codes and countryIds narrow the same series and can combine, which is how a single product-and-partner line is drawn. This hands over the POINTS. A question about them — two equal windows compared — is kyrodata_compare_trade, and a ranking of partners inside one window is kyrodata_list_trade_partners. Credit class: comex (up to 2 comex tools per 60-second session = 1 credit).
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | Last month of the window, as YYYYMM. Omit for the last published month. | |
| flow | Yes | Direction of the trade flow, from Brazil’s side: `export` leaves the country, `import` enters it. | |
| from | No | First month of the window, as YYYYMM (200403 = March 2004). Omit for the last twenty-four published months. | |
| codes | No | Products to filter by, as HS codes — 4 digits (heading), 6 (subheading) or 8 (Brazilian NCM), up to 10. Omit for every product. kyrodata_resolve_entity turns a product name into its code. | |
| countryIds | No | Partner countries to filter by, as ids from kyrodata_resolve_entity. Omit for every partner. | |
| response_format | No | How much of the answer to return. `concise` (the default) carries the headline figures; `detailed` adds the row-level series behind them and counts against the export quota. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | Raw numbers behind the text. |
| memo | Yes | true = identical call in the last 10 min, served again: 0 credits. |
| rows | No | Table rows; detailed only, capped per tool. |
| error | No | Failure message when status = error. |
| links | Yes | screen = product page with these numbers. |
| denied | No | When status = denied: reason, feature, upgradeUrl. |
| status | Yes | ok = data; denied = plan; error = failure or timeout. |
| window | No | Like-for-like window: from, to (YYYY-MM), label, months, crossesSeason. |
| caveats | Yes | Reading caveats. |
| credits | Yes | charged, balance (null = unlimited), resetAt, session {charged, endsAt} of the 60-s billing session. |
| sources | Yes | Per source: label, nameable, asOf. |
| dataVersion | Yes | Identity of the data that answered. |
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 valuable behavioral context beyond that: the 200-month cap is refused rather than silently truncated, missing months are ABSENT rather than zero, and the credit class (comex, up to 2 tools per 60-second session = 1 credit) is disclosed. It doesn't detail pagination or exact response shape, but the output schema exists and the description covers the non-obvious behaviors that would surprise an agent.
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 but every sentence earns its place: the return shape, the date semantics, the cap behavior, the absence-vs-zero semantics, the filter combination, the sibling routing, and the credit cost. It is front-loaded with the core purpose and scoping constraints before the sibling differentiation and credit note. No filler or repetition of schema content.
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, idempotent list tool with a 100%-covered schema and an output schema present, the description is complete. It covers the default window, the cap, the missing-month semantics, how filters combine, how to resolve entity references, which sibling handles related questions, and the credit cost. An agent has everything needed to select and invoke the tool correctly without opening 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 the baseline is 3. The description adds meaning beyond the schema: it explains that `from`/`to` are YYYYMM and default to the last 24 published months, that `codes` and `countryIds` can combine to draw a single product-and-partner line, and that the span cap is enforced by refusal. It also cross-references kyrodata_resolve_entity for codes and countryIds, which the schema mentions but the description reinforces. This is meaningful added value over the schema, though not exhaustive.
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 opens with a specific verb and resource: 'Returns Brazil's monthly export or import series as rows' and immediately specifies the row structure (month, value USD FOB, volume kg, implied price per kg). It distinguishes itself from siblings by naming kyrodata_compare_trade and kyrodata_list_trade_partners as the tools for different question shapes, so an agent can tell them apart without opening schemas.
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 states when to use this tool ('This hands over the POINTS') and when not to: 'A question about them — two equal windows compared — is kyrodata_compare_trade, and a ranking of partners inside one window is kyrodata_list_trade_partners.' It also gives concrete behavioral constraints: default window, 200-month cap, refusal rather than truncation, and absence-vs-zero semantics. This is explicit when/when-not guidance with named alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kyrodata_resolve_comparison_windowBuild a like-for-like comparison windowARead-onlyIdempotent
Resolves an equal-length comparison window (like-for-like) for the trade data, anchored on the last fully published month, and returns ONLY the window metadata — from, to, label, months and whether it crosses a season. No figures. mode splits into two families, and the split is what matters: quarterly, semestral, annual, ytd and rolling_3m/6m/12m compare against the same period a year earlier and hold the season constant, while monthly and semestral_sequential compare against the period immediately before and therefore cross one. ytd runs January to the last published month, in both years. This exists to NAME a window in prose before it is described. The same window resolved internally and answered with value and volume in one call is kyrodata_compare_trade. Credit class: free (0 credits).
| Name | Required | Description | Default |
|---|---|---|---|
| mode | Yes | Which pair of equal-length windows to compare. Against the same period a year earlier: `quarterly`, `semestral`, `annual`, `ytd` (January to the last published month) and `rolling_3m`/`6m`/`12m`. Against the period immediately before, which crosses a season: `monthly` and `semestral_sequential`. Use `ytd` when the question names no period. | |
| response_format | No | How much of the answer to return. `concise` (the default) carries the headline figures; `detailed` adds the row-level series behind them and counts against the export quota. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | Raw numbers behind the text. |
| memo | Yes | true = identical call in the last 10 min, served again: 0 credits. |
| rows | No | Table rows; detailed only, capped per tool. |
| error | No | Failure message when status = error. |
| links | Yes | screen = product page with these numbers. |
| denied | No | When status = denied: reason, feature, upgradeUrl. |
| status | Yes | ok = data; denied = plan; error = failure or timeout. |
| window | No | Like-for-like window: from, to (YYYY-MM), label, months, crossesSeason. |
| caveats | Yes | Reading caveats. |
| credits | Yes | charged, balance (null = unlimited), resetAt, session {charged, endsAt} of the 60-s billing session. |
| sources | Yes | Per source: label, nameable, asOf. |
| dataVersion | Yes | Identity of the data that answered. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint false. The description adds that it returns ONLY metadata (from, to, label, months, season-crossing flag) and no figures, and that it is free (0 credits). It also explains the behavioral consequence of crossing a season for certain modes. This is more than the annotations alone convey, though it doesn't detail the exact output structure (but an output schema exists).
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 moderately long but every sentence carries weight: purpose, mode family explanation, usage note, reason for existence, alternative, and credit cost. It is front-loaded with the core purpose and flows logically. Slightly dense, but not wasteful.
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 9 enum modes and the need to pick correctly, the description fully covers the mode semantics, what is returned (metadata fields), the cost, and the alternative for value/volume. An agent can confidently select and invoke this tool without further ambiguity.
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 100%, so both parameters are documented. The description adds significant meaning to the 'mode' parameter by grouping the nine enums into two families (year-over-year vs sequential) and explaining the season-crossing implication, plus the special 'ytd' behavior and the 'use ytd when no period is named' rule. This goes well beyond the schema's per-value 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?
States a specific verb ('Resolves') and resource ('equal-length comparison window') anchored on the last fully published month, and explicitly distinguishes itself from kyrodata_compare_trade by noting it exists only to NAME a window in prose. This is unambiguous and clearly separate from 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?
Provides explicit when-to-use guidance: it names the alternative (kyrodata_compare_trade) that handles value/volume in one call, and instructs to use 'ytd' when no period is named. It also explains the mode split into two families, so an agent knows exactly which mode fits the question.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kyrodata_resolve_entityResolve country, HS code or commodityARead-onlyIdempotent
Resolves a free-text name into platform identifiers for FILTERING other tools: commodity hubs (slug plus anchor SH4), HS headings (SH4), NCM codes (8 digits) and partner countries (country id). 'soja' resolves to the soybean hub and SH4 1201; 'China' to country id 160. query takes a name already known rather than a topic to explore, and up to 10 matches per kind come back — an ambiguous term returns the candidates instead of one guess, so the caller picks. The output is an ID to pass to another tool, and it carries no document and no URL. Finding what exists in the public catalog, and getting a citable document back, is kyrodata_search. Credit class: free (0 credits).
| Name | Required | Description | Default |
|---|---|---|---|
| q | Yes | What to look up, in plain words: a country, a product, or a code. Portuguese and English both work. | |
| kinds | No | Narrow the search to these kinds of entity. Omit to search all of them. | |
| response_format | No | How much of the answer to return. `concise` (the default) carries the headline figures; `detailed` adds the row-level series behind them and counts against the export quota. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | Raw numbers behind the text. |
| memo | Yes | true = identical call in the last 10 min, served again: 0 credits. |
| rows | No | Table rows; detailed only, capped per tool. |
| error | No | Failure message when status = error. |
| links | Yes | screen = product page with these numbers. |
| denied | No | When status = denied: reason, feature, upgradeUrl. |
| status | Yes | ok = data; denied = plan; error = failure or timeout. |
| window | No | Like-for-like window: from, to (YYYY-MM), label, months, crossesSeason. |
| caveats | Yes | Reading caveats. |
| credits | Yes | charged, balance (null = unlimited), resetAt, session {charged, endsAt} of the 60-s billing session. |
| sources | Yes | Per source: label, nameable, asOf. |
| dataVersion | Yes | Identity of the data that answered. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safe, non-mutating nature is covered. The description adds meaningful behavioral context beyond that: the output is an identifier to pass to another tool, carries no document and no URL, and returns up to 10 matches per kind with ambiguous terms yielding candidates rather than a single guess. It also states the credit cost. No contradictions with annotations. It could go further with details on pagination or rate limits, but for a resolver tool this 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?
The description is a single paragraph of about 80 words, densely packed with useful information. It front-loads the core purpose, provides concrete examples and alternate-tool guidance, and ends with the credit cost. Every sentence contributes value; there is no filler, repetition, or unnecessary elaboration. The structure leads with the main action and then systematically covers output, ambiguity handling, and contrast.
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 that an output schema exists (so return format is already structured), the description does not need to detail the return shape. It covers everything an agent needs to call correctly: what identifiers look like, how ambiguity is handled, which sibling to use instead, and the cost. The covered scope is complete for the tool's complexity; no critical information 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?
The input schema has 100% coverage: all three parameters (q, kinds, response_format) are documented with types and constraints. The description adds semantic nuance beyond the schema, notably that 'query takes a name already known rather than a topic to explore,' and clarifies the kinds parameter by listing the entity types and saying to omit for all. The response_format parameter is described in the schema, but the description reinforces the distinction between concise and detailed with a note about export quota, which is extra context. Overall, the description compensates well despite schema coverage being high.
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 leads with a precise verb–resource pair: 'Resolves a free-text name into platform identifiers for FILTERING other tools,' and enumerates the exact entity kinds and their output forms (commodity hubs with slug plus SH4, HS headings SH4, NCM 8-digit, country id). It also gives concrete examples ('soja' → hub and SH4 1201; 'China' → country id 160), making the purpose unmistakable. This clearly differentiates it from sibling kyrodata_search, which is about finding documents, not identifiers.
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 states when to use this tool: for resolving a name already known into an ID to pass to other tools, and explicitly contrasts it with kyrodata_search for finding things in the public catalog and getting citable documents. It also explains behavior for ambiguous terms, telling the caller they get candidates to pick from, which is a clear usage guideline. The credit class mention ('free (0 credits)') further guides cost-aware routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kyrodata_run_reportRun one of the catalog reportsARead-onlyIdempotent
Runs one of the product's pre-built catalogue reports by id and returns its rows, up to 50. reportId is an enum of the catalogue's ids, so the whole catalogue travels in this schema and no lookup call is needed; params carries the values the chosen report declares, and columnIds narrows the projection — omitted, the report's default columns come back, and the columns that identify each row are included either way. Columns locked behind a paid plan are declared, with a header stating what an upgrade unlocks, while their values stay out. Rows count against the account's export quota. This serves a report that already exists as a product. An ad-hoc question about trade is kyrodata_compare_trade or kyrodata_list_trade_series, and a citable public document is kyrodata_fetch. Credit class: comex (up to 2 comex tools per 60-second session = 1 credit).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum rows to return. | |
| params | No | Values for the parameters the chosen report declares. | |
| reportId | Yes | Which catalogue report to run, by id. Each report declares its own parameters, which go in `params`. | |
| columnIds | No | Only these columns, by id. Omit for the report’s default set; the columns that identify a row are always returned. | |
| response_format | No | How much of the answer to return. `concise` (the default) carries the headline figures; `detailed` adds the row-level series behind them and counts against the export quota. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | Raw numbers behind the text. |
| memo | Yes | true = identical call in the last 10 min, served again: 0 credits. |
| rows | No | Table rows; detailed only, capped per tool. |
| error | No | Failure message when status = error. |
| links | Yes | screen = product page with these numbers. |
| denied | No | When status = denied: reason, feature, upgradeUrl. |
| status | Yes | ok = data; denied = plan; error = failure or timeout. |
| window | No | Like-for-like window: from, to (YYYY-MM), label, months, crossesSeason. |
| caveats | Yes | Reading caveats. |
| credits | Yes | charged, balance (null = unlimited), resetAt, session {charged, endsAt} of the 60-s billing session. |
| sources | Yes | Per source: label, nameable, asOf. |
| dataVersion | Yes | Identity of the data that answered. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint, idempotentHint, destructiveHint), the description discloses concrete behavioral traits: the 50-row cap, the projection behavior for locked paid-plan columns (headers returned, values withheld), the export-quota accounting, and the credit-class rate limit. These are material operational details an agent needs and are not present in the 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?
The description is dense and front-loaded, with the core action in the first sentence and behavior details following logically. It is longer than average because it covers many nuances (locked columns, quota, credit, alternatives), and nearly every sentence earns its place. The phrase 'This serves a report that already exists as a product' is slightly redundant with the opening, but it does set up the contrast with alternatives.
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 tool with 5 parameters, a 16-value enum, nested objects, quotas, and credit accounting, the description covers all the essential operational context: how reportId is self-contained, how params and columnIds interact, default-column behavior, locked-column handling, export quota, and credit class. The output schema exists, so return-value details are appropriately left 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?
Although schema description coverage is 100%, the description adds meaningful semantics: it explains why no lookup call is needed (the reportId enum carries the whole catalogue), how params relates to the chosen report's declared parameters, and exactly how columnIds behaves when omitted or provided. This goes well beyond the baseline of restating schema text.
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 opens with a specific verb and resource: 'Runs one of the product's pre-built catalogue reports by id and returns its rows'. It clearly identifies the tool's scope (pre-built reports) and immediately distinguishes it from ad-hoc tools like kyrodata_compare_trade and kyrodata_list_trade_series. The purpose is unmistakable even 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?
The description explicitly states when this tool is appropriate ('serves a report that already exists as a product') and names precise alternatives for other cases: 'An ad-hoc question about trade is kyrodata_compare_trade or kyrodata_list_trade_series, and a citable public document is kyrodata_fetch.' No inference is required to decide between this and its siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kyrodata_searchSearch the public trade catalogARead-onlyIdempotent
Searches the public Brazilian foreign-trade catalogue and returns document ids for kyrodata_fetch — HS headings (SH4, 4 digits) and partner countries — each with a public URL. query is free text in Portuguese or a code, and both reach the same place: 'soja' and '1201' land on the soybean heading, 'China' on the partner country. This is DISCOVERY: it finds what exists when the caller has words rather than an id. Turning a name already known into an id for filtering another tool is kyrodata_resolve_entity, which returns no document and no URL. Credit class: free (0 credits).
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | What to look for, in plain words. Returns document ids to pass to kyrodata_fetch. | |
| response_format | No | How much of the answer to return. `concise` (the default) carries the headline figures; `detailed` adds the row-level series behind them and counts against the export quota. |
Output Schema
| Name | Required | Description |
|---|---|---|
| results | Yes | Matching documents, most relevant first. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds meaningful context beyond that: the tool costs 0 credits, returns documents with URLs, and clarifies the semantic quirk that free text and codes converge on the same result. No contradiction with annotations.
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 denser than the calibration examples but every sentence earns its place: purpose, return value, query semantics with examples, the discovery framing, the sibling distinction, and the credit cost. It is front-loaded with purpose and contains no filler, though it is slightly long.
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 2-parameter tool with an output schema and full annotations, the description is complete. The output schema covers return structure, annotations cover safety, and the description covers purpose, alternatives, query semantics, examples, and credit cost. Nothing an agent needs to call it correctly 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 coverage is 100%, so the baseline is 3. The description adds real value by clarifying that `query` accepts either Portuguese free text or a code and that both reach the same place, with concrete examples ('soja' and '1201' both land on soybean, 'China' on partner country). This goes beyond the schema's terse 'plain words' description.
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 ('Searches') and resource ('public Brazilian foreign-trade catalogue') and states exactly what it returns: document ids for kyrodata_fetch covering HS headings and partner countries, each with a public URL. It actively distinguishes itself from the sibling kyrodata_resolve_entity by naming it, so an agent can tell them apart without opening schemas.
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 frames this as DISCOVERY ('when the caller has words rather than an id') and names the alternative tool for the opposite case ('Turning a name already known into an id for filtering another tool is kyrodata_resolve_entity'). This is an explicit when/when-not with the alternative named.
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.
15 tool updates
v1.0.0- First observed
kyrodata_compare_trade - First observed
kyrodata_explain_pyramid_level - First observed
kyrodata_fetch - First observed
kyrodata_get_climate_reading - First observed
kyrodata_get_credit_balance - First observed
kyrodata_get_data_coverage - First observed
kyrodata_get_heading_overview - First observed
kyrodata_get_hub_summary - First observed
kyrodata_get_supply_demand_balance - First observed
kyrodata_list_trade_partners - First observed
kyrodata_list_trade_series - First observed
kyrodata_resolve_comparison_window - First observed
kyrodata_resolve_entity - First observed
kyrodata_run_report - First observed
kyrodata_search
TDQS
Scored across 15 tools
The descriptions exhaustively delineate boundaries between similar tools: compare_trade vs resolve_comparison_window (figures vs metadata only), list_trade_series vs list_trade_partners vs get_heading_overview, search vs resolve_entity (discovery+URL vs filter id), and fetch vs get_heading_overview (citable document vs figures). Each tool explicitly names its neighbors and states what it does not do, so an agent can reliably pick the right one.
Every tool uses the kyrodata_ prefix followed by a consistent snake_case verb_noun or noun form (get_, list_, compare_, resolve_, explain_, run_, search, fetch). The convention is fully predictable across all 15 tools with no mixing of styles.
15 tools is at the upper end of the ideal band but every tool earns its place, covering distinct facets of a rich domain: discovery, resolution, coverage, series, comparison, partners, documents, reports, three forecasting layers, and account info. Nothing is redundant.
For a read-only trade/forecasting data API the surface is comprehensive: discovery (search, resolve_entity), calendar (get_data_coverage), figures (heading_overview, list_trade_series, list_trade_partners, compare_trade), windowing (resolve_comparison_window), documents (fetch), reports (run_report), forecasts (hub_summary, explain_pyramid_level, climate_reading, supply_demand_balance), and account (credit_balance). No obvious lifecycle gaps given the read-only nature.
Maintenance
Related MCP Connectors
Brazilian foreign trade, crop and commodity data as a remote MCP server. Exports and imports from MDIC/ComexStat since 2000, by HS code (SH4/SH6/NCM) and partner country, in USD FOB and kilograms — plus crop production, supply-and-demand balances, climate readings and production forecasts for hubs such as soybean, coffee, corn, beef and cocoa. Every comparison is like-for-like: two windows of equal length, each labelled with the period it actually measures, and every answer names its window and its source. 15 read-only tools, metered in credits. Nothing to install: Streamable HTTP at https://mcp.kyrodata.com/mcp with a bearer key or OAuth 2.1 (PKCE). Official registry: com.kyrodata/kyrodata.
UN FAOSTAT global food & agriculture statistics over a local SQLite mirror, via MCP.
Trade Intel MCP — Compound tools that chain Comtrade, Census, Treasury,
IBGE: geography, census, economy and health from the official APIs, with provenance. 23 tools.
Related MCP Servers
- AlicenseDqualityCmaintenanceServidor MCP para a API do ComexStat, ferramenta de acesso às estatísticas de comércio exterior do Brasil.206 npm2MIT
- AlicenseAqualityCmaintenanceAn MCP server that provides real-time access to Brazilian agricultural data, including commodity prices, crop estimates, climate information, and deforestation rates. It integrates data from 19 public sources like CEPEA, CONAB, and IBGE to enable LLMs to analyze the Brazilian agribusiness sector.21027MIT
- AlicenseAqualityBmaintenanceExposes official IBGE data as MCP tools, including Brazilian localities, SIDRA statistical aggregates, and population indicators.11MIT
- AlicenseAqualityAmaintenanceProvides Brazilian agribusiness data such as livestock, crop prices, weather, exchange rates, and news through MCP tools.1564MIT