Skip to main content
Glama

Kyrodata

Brazilian trade, crop and commodity data over MCP

Quality, maintenance and endpoint health on Glama catalog tools mcp registry License: MIT

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/mcp

Ask 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/mcp

Chat 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

kyrodata_search

Search the public trade catalog

kyrodata_fetch

Open one public trade document by id

kyrodata_resolve_entity

Resolve country, HS code or commodity

kyrodata_compare_trade

Compare exports/imports between equal windows

kyrodata_list_trade_series

Raw monthly trade series as rows

kyrodata_list_trade_partners

Top partner countries with growth

kyrodata_get_heading_overview

Overview of an HS heading (SH4)

kyrodata_resolve_comparison_window

Build a like-for-like comparison window

kyrodata_get_supply_demand_balance

Supply and demand balance sheet

kyrodata_get_climate_reading

Climate reading and physical crop loss

kyrodata_get_hub_summary †

Commodity hub summary and forecast verdict

kyrodata_explain_pyramid_level †

Explain one level of the forecast pyramid

kyrodata_run_report

Run one of the catalog reports

kyrodata_get_data_coverage

Data coverage and latest closed month

kyrodata_get_credit_balance

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-mcp

It 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 — never 403.

  • Keys go in the Authorization header. 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 tools
kyrodata_compare_tradeCompare exports/imports between equal windowsA
Read-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).

ParametersJSON Schema
NameRequiredDescriptionDefault
flowYesDirection of the trade flow, from Brazil’s side: `export` leaves the country, `import` enters it.
modeYesWhich 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.
codesNoProducts 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.
countryIdsNoPartner countries to filter by, as ids from kyrodata_resolve_entity. Omit for every partner.
response_formatNoHow 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

ParametersJSON Schema
NameRequiredDescription
dataYesRaw numbers behind the text.
memoYestrue = identical call in the last 10 min, served again: 0 credits.
rowsNoTable rows; detailed only, capped per tool.
errorNoFailure message when status = error.
linksYesscreen = product page with these numbers.
deniedNoWhen status = denied: reason, feature, upgradeUrl.
statusYesok = data; denied = plan; error = failure or timeout.
windowNoLike-for-like window: from, to (YYYY-MM), label, months, crossesSeason.
caveatsYesReading caveats.
creditsYescharged, balance (null = unlimited), resetAt, session {charged, endsAt} of the 60-s billing session.
sourcesYesPer source: label, nameable, asOf.
dataVersionYesIdentity of the data that answered.

TDQS

A4.9/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 pyramidA
Read-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).

ParametersJSON Schema
NameRequiredDescriptionDefault
hubYesWhich commodity hub to read.
horizonYesHow far ahead the forecast looks: 1, 3, 6 or 12 months from the last published month.
levelKeyNoOne level of the pyramid. Given, the answer follows that level across all four horizons instead of showing the seven side by side.
response_formatNoHow 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

ParametersJSON Schema
NameRequiredDescription
dataYesRaw numbers behind the text.
memoYestrue = identical call in the last 10 min, served again: 0 credits.
rowsNoTable rows; detailed only, capped per tool.
errorNoFailure message when status = error.
linksYesscreen = product page with these numbers.
deniedNoWhen status = denied: reason, feature, upgradeUrl.
statusYesok = data; denied = plan; error = failure or timeout.
windowNoLike-for-like window: from, to (YYYY-MM), label, months, crossesSeason.
caveatsYesReading caveats.
creditsYescharged, balance (null = unlimited), resetAt, session {charged, endsAt} of the 60-s billing session.
sourcesYesPer source: label, nameable, asOf.
dataVersionYesIdentity of the data that answered.

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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

The description clearly states the tool's purpose: '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.

Usage Guidelines5/5

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 idA
Read-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).

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifier of a document returned by kyrodata_search. Not a free-text query.
response_formatNoHow 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

ParametersJSON Schema
NameRequiredDescription
idYesThe document id that was fetched.
urlYesPublic page with the same data, for citation.
textYesThe document body: the measured figures, the window, the source.
titleYesHuman-readable name of the document.
metadataYeskind, code, flow, window, sources, caveats and dataVersion.

TDQS

A4.8/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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

The description clearly states the tool's purpose: 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.

Usage Guidelines5/5

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 lossA
Read-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).

ParametersJSON Schema
NameRequiredDescriptionDefault
hubYesWhich commodity hub to read. Climate forecasts PRODUCTION, never price.
scopeNoGeographic 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_formatNoHow 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

ParametersJSON Schema
NameRequiredDescription
dataYesRaw numbers behind the text.
memoYestrue = identical call in the last 10 min, served again: 0 credits.
rowsNoTable rows; detailed only, capped per tool.
errorNoFailure message when status = error.
linksYesscreen = product page with these numbers.
deniedNoWhen status = denied: reason, feature, upgradeUrl.
statusYesok = data; denied = plan; error = failure or timeout.
windowNoLike-for-like window: from, to (YYYY-MM), label, months, crossesSeason.
caveatsYesReading caveats.
creditsYescharged, balance (null = unlimited), resetAt, session {charged, endsAt} of the 60-s billing session.
sourcesYesPer source: label, nameable, asOf.
dataVersionYesIdentity of the data that answered.

TDQS

A5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 keyA
Read-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).

ParametersJSON Schema
NameRequiredDescriptionDefault
response_formatNoHow 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

ParametersJSON Schema
NameRequiredDescription
dataYesRaw numbers behind the text.
memoYestrue = identical call in the last 10 min, served again: 0 credits.
rowsNoTable rows; detailed only, capped per tool.
errorNoFailure message when status = error.
linksYesscreen = product page with these numbers.
deniedNoWhen status = denied: reason, feature, upgradeUrl.
statusYesok = data; denied = plan; error = failure or timeout.
windowNoLike-for-like window: from, to (YYYY-MM), label, months, crossesSeason.
caveatsYesReading caveats.
creditsYescharged, balance (null = unlimited), resetAt, session {charged, endsAt} of the 60-s billing session.
sourcesYesPer source: label, nameable, asOf.
dataVersionYesIdentity of the data that answered.

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 monthA
Read-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).

ParametersJSON Schema
NameRequiredDescriptionDefault
response_formatNoHow 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

ParametersJSON Schema
NameRequiredDescription
dataYesRaw numbers behind the text.
memoYestrue = identical call in the last 10 min, served again: 0 credits.
rowsNoTable rows; detailed only, capped per tool.
errorNoFailure message when status = error.
linksYesscreen = product page with these numbers.
deniedNoWhen status = denied: reason, feature, upgradeUrl.
statusYesok = data; denied = plan; error = failure or timeout.
windowNoLike-for-like window: from, to (YYYY-MM), label, months, crossesSeason.
caveatsYesReading caveats.
creditsYescharged, balance (null = unlimited), resetAt, session {charged, endsAt} of the 60-s billing session.
sourcesYesPer source: label, nameable, asOf.
dataVersionYesIdentity of the data that answered.

TDQS

A4.9/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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)A
Read-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).

ParametersJSON Schema
NameRequiredDescriptionDefault
sh4YesThe 4-digit HS heading to describe.
flowYesDirection of the trade flow, from Brazil’s side: `export` leaves the country, `import` enters it.
yearNoCalendar year to centre the overview on. Omit for the most recent published year; coverage starts in 2000.
monthsNoLength of the monthly series returned, counting back from the last published month.
response_formatNoHow 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

ParametersJSON Schema
NameRequiredDescription
dataYesRaw numbers behind the text.
memoYestrue = identical call in the last 10 min, served again: 0 credits.
rowsNoTable rows; detailed only, capped per tool.
errorNoFailure message when status = error.
linksYesscreen = product page with these numbers.
deniedNoWhen status = denied: reason, feature, upgradeUrl.
statusYesok = data; denied = plan; error = failure or timeout.
windowNoLike-for-like window: from, to (YYYY-MM), label, months, crossesSeason.
caveatsYesReading caveats.
creditsYescharged, balance (null = unlimited), resetAt, session {charged, endsAt} of the 60-s billing session.
sourcesYesPer source: label, nameable, asOf.
dataVersionYesIdentity of the data that answered.

TDQS

A4.8/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 verdictA
Read-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).

ParametersJSON Schema
NameRequiredDescriptionDefault
hubYesWhich commodity hub to read.
horizonNoHow 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_formatNoHow 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

ParametersJSON Schema
NameRequiredDescription
dataYesRaw numbers behind the text.
memoYestrue = identical call in the last 10 min, served again: 0 credits.
rowsNoTable rows; detailed only, capped per tool.
errorNoFailure message when status = error.
linksYesscreen = product page with these numbers.
deniedNoWhen status = denied: reason, feature, upgradeUrl.
statusYesok = data; denied = plan; error = failure or timeout.
windowNoLike-for-like window: from, to (YYYY-MM), label, months, crossesSeason.
caveatsYesReading caveats.
creditsYescharged, balance (null = unlimited), resetAt, session {charged, endsAt} of the 60-s billing session.
sourcesYesPer source: label, nameable, asOf.
dataVersionYesIdentity of the data that answered.

TDQS

A4.9/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 sheetA
Read-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).

ParametersJSON Schema
NameRequiredDescriptionDefault
hubYesWhich commodity hub to read. Only hubs with a published balance sheet appear here.
closedOnlyNoRestrict to seasons already closed. The current season is a projection and still moves.
response_formatNoHow 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

ParametersJSON Schema
NameRequiredDescription
dataYesRaw numbers behind the text.
memoYestrue = identical call in the last 10 min, served again: 0 credits.
rowsNoTable rows; detailed only, capped per tool.
errorNoFailure message when status = error.
linksYesscreen = product page with these numbers.
deniedNoWhen status = denied: reason, feature, upgradeUrl.
statusYesok = data; denied = plan; error = failure or timeout.
windowNoLike-for-like window: from, to (YYYY-MM), label, months, crossesSeason.
caveatsYesReading caveats.
creditsYescharged, balance (null = unlimited), resetAt, session {charged, endsAt} of the 60-s billing session.
sourcesYesPer source: label, nameable, asOf.
dataVersionYesIdentity of the data that answered.

TDQS

A4.9/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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

The description explicitly says when to use 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 growthA
Read-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).

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoLast month of the window, as YYYYMM. Omit for the last published month.
flowYesDirection of the trade flow, from Brazil’s side: `export` leaves the country, `import` enters it.
fromNoFirst month of the window, as YYYYMM (200403 = March 2004). Omit for the last twelve published months.
codesNoProducts 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.
limitNoHow many partner countries to return, largest first by value.
withGrowthNoAlso return each partner’s change against the same window a year earlier.
response_formatNoHow 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

ParametersJSON Schema
NameRequiredDescription
dataYesRaw numbers behind the text.
memoYestrue = identical call in the last 10 min, served again: 0 credits.
rowsNoTable rows; detailed only, capped per tool.
errorNoFailure message when status = error.
linksYesscreen = product page with these numbers.
deniedNoWhen status = denied: reason, feature, upgradeUrl.
statusYesok = data; denied = plan; error = failure or timeout.
windowNoLike-for-like window: from, to (YYYY-MM), label, months, crossesSeason.
caveatsYesReading caveats.
creditsYescharged, balance (null = unlimited), resetAt, session {charged, endsAt} of the 60-s billing session.
sourcesYesPer source: label, nameable, asOf.
dataVersionYesIdentity of the data that answered.

TDQS

A5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 rowsA
Read-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).

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoLast month of the window, as YYYYMM. Omit for the last published month.
flowYesDirection of the trade flow, from Brazil’s side: `export` leaves the country, `import` enters it.
fromNoFirst month of the window, as YYYYMM (200403 = March 2004). Omit for the last twenty-four published months.
codesNoProducts 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.
countryIdsNoPartner countries to filter by, as ids from kyrodata_resolve_entity. Omit for every partner.
response_formatNoHow 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

ParametersJSON Schema
NameRequiredDescription
dataYesRaw numbers behind the text.
memoYestrue = identical call in the last 10 min, served again: 0 credits.
rowsNoTable rows; detailed only, capped per tool.
errorNoFailure message when status = error.
linksYesscreen = product page with these numbers.
deniedNoWhen status = denied: reason, feature, upgradeUrl.
statusYesok = data; denied = plan; error = failure or timeout.
windowNoLike-for-like window: from, to (YYYY-MM), label, months, crossesSeason.
caveatsYesReading caveats.
creditsYescharged, balance (null = unlimited), resetAt, session {charged, endsAt} of the 60-s billing session.
sourcesYesPer source: label, nameable, asOf.
dataVersionYesIdentity of the data that answered.

TDQS

A4.7/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 windowA
Read-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).

ParametersJSON Schema
NameRequiredDescriptionDefault
modeYesWhich 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_formatNoHow 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

ParametersJSON Schema
NameRequiredDescription
dataYesRaw numbers behind the text.
memoYestrue = identical call in the last 10 min, served again: 0 credits.
rowsNoTable rows; detailed only, capped per tool.
errorNoFailure message when status = error.
linksYesscreen = product page with these numbers.
deniedNoWhen status = denied: reason, feature, upgradeUrl.
statusYesok = data; denied = plan; error = failure or timeout.
windowNoLike-for-like window: from, to (YYYY-MM), label, months, crossesSeason.
caveatsYesReading caveats.
creditsYescharged, balance (null = unlimited), resetAt, session {charged, endsAt} of the 60-s billing session.
sourcesYesPer source: label, nameable, asOf.
dataVersionYesIdentity of the data that answered.

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 commodityA
Read-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).

ParametersJSON Schema
NameRequiredDescriptionDefault
qYesWhat to look up, in plain words: a country, a product, or a code. Portuguese and English both work.
kindsNoNarrow the search to these kinds of entity. Omit to search all of them.
response_formatNoHow 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

ParametersJSON Schema
NameRequiredDescription
dataYesRaw numbers behind the text.
memoYestrue = identical call in the last 10 min, served again: 0 credits.
rowsNoTable rows; detailed only, capped per tool.
errorNoFailure message when status = error.
linksYesscreen = product page with these numbers.
deniedNoWhen status = denied: reason, feature, upgradeUrl.
statusYesok = data; denied = plan; error = failure or timeout.
windowNoLike-for-like window: from, to (YYYY-MM), label, months, crossesSeason.
caveatsYesReading caveats.
creditsYescharged, balance (null = unlimited), resetAt, session {charged, endsAt} of the 60-s billing session.
sourcesYesPer source: label, nameable, asOf.
dataVersionYesIdentity of the data that answered.

TDQS

A4.7/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 reportsA
Read-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).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum rows to return.
paramsNoValues for the parameters the chosen report declares.
reportIdYesWhich catalogue report to run, by id. Each report declares its own parameters, which go in `params`.
columnIdsNoOnly these columns, by id. Omit for the report’s default set; the columns that identify a row are always returned.
response_formatNoHow 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

ParametersJSON Schema
NameRequiredDescription
dataYesRaw numbers behind the text.
memoYestrue = identical call in the last 10 min, served again: 0 credits.
rowsNoTable rows; detailed only, capped per tool.
errorNoFailure message when status = error.
linksYesscreen = product page with these numbers.
deniedNoWhen status = denied: reason, feature, upgradeUrl.
statusYesok = data; denied = plan; error = failure or timeout.
windowNoLike-for-like window: from, to (YYYY-MM), label, months, crossesSeason.
caveatsYesReading caveats.
creditsYescharged, balance (null = unlimited), resetAt, session {charged, endsAt} of the 60-s billing session.
sourcesYesPer source: label, nameable, asOf.
dataVersionYesIdentity of the data that answered.

TDQS

A4.9/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 15 tool updatesv1.0.0
    • First observedkyrodata_compare_trade
    • First observedkyrodata_explain_pyramid_level
    • First observedkyrodata_fetch
    • First observedkyrodata_get_climate_reading
    • First observedkyrodata_get_credit_balance
    • First observedkyrodata_get_data_coverage
    • First observedkyrodata_get_heading_overview
    • First observedkyrodata_get_hub_summary
    • First observedkyrodata_get_supply_demand_balance
    • First observedkyrodata_list_trade_partners
    • First observedkyrodata_list_trade_series
    • First observedkyrodata_resolve_comparison_window
    • First observedkyrodata_resolve_entity
    • First observedkyrodata_run_report
    • First observedkyrodata_search

TDQS

A4.8/5.0

Scored across 15 tools

Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness5/5

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

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    D
    quality
    C
    maintenance
    Servidor MCP para a API do ComexStat, ferramenta de acesso às estatísticas de comércio exterior do Brasil.
    20
    6 npm
    2
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    An 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.
    2
    10
    27
    MIT