Kyrodata — Brazil Trade, Crop & Commodity Data
Server Details
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.
- Status
- Healthy
- Uptime
- 98.4% over 23 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 15 tools
Every tool targets a distinct resource or operation, and the descriptions explicitly cross-reference likely lookalikes (compare_trade vs list_trade_series vs resolve_comparison_window; search vs resolve_entity; fetch vs get_heading_overview). No two tools appear substitutable, so an agent should be able to select the right one reliably.
Names follow a consistent kyrodata_<verb>_<object> snake_case pattern, with clear clusters like get_*, list_trade_*, and resolve_*. Minor deviations are kyrodata_fetch and kyrodata_search, which omit an explicit noun object, and a few names use compound objects, but the overall convention remains predictable.
Fifteen tools is within the well-scoped range and each tool covers a distinct capability spanning trade data, commodity analytics, metadata, and account state. The count feels complete without redundancy, and no tool seems superfluous to the server's stated purpose.
The tool surface covers discovery, document retrieval, structured figures, time series, comparisons, partner ranking, reports, data coverage, credit balance, and the commodity pyramid (summary, explanation, climate, supply/demand). Minor gaps exist: there is no direct way to get a hub's absolute price level or browse the full catalog of available hubs/headings, though identifiers and average prices are available through other tools.
Available Tools
15 toolskyrodata_compare_tradeCompare exports/imports between equal windowsARead-onlyIdempotentInspect
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-onlyIdempotentInspect
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-onlyIdempotentInspect
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-onlyIdempotentInspect
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?
Beyond the readOnlyHint/idempotent/destructive annotations, the description reveals important behaviors: scope changes only the risk/shock but not national loss tonnage, missing validated models yield a descriptive reading with no verdict, and an unmeasurable season falls back to the previous one with caveats. It also discloses the credit cost cap, which annotations do not 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 core output is front-loaded in the first sentence, followed by scope semantics, edge cases, production clarification, alternatives, and credit class. Each sentence earns its place and there is no filler despite the length needed to explain a nuanced tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values are already covered. The description fills the remaining gaps: parameter interactions, edge cases, fallback behavior, sibling routing, and cost semantics. A calling agent has everything needed to select and invoke 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 goes further by explaining subtle behavior of the scope parameter—moving only risk level and shock while loss stays national—and reinforcing that hub is about production, not price. This adds real meaning beyond the schema 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: 'Current climate reading for a commodity', then enumerates the concrete outputs: risk level, production shock in % of harvest, and projected physical loss in tonnes per horizon. It also distinguishes itself from siblings by explicitly naming kyrodata_get_hub_summary and kyrodata_get_supply_demand_balance, so an agent can tell what this tool is not.
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 states the core use case—climate-driven production reading—and explicitly gives alternatives for price questions (kyrodata_get_hub_summary) and the balance sheet (kyrodata_get_supply_demand_balance). It also says 'Climate here predicts PRODUCTION', effectively telling the agent when not to use this tool. This is explicit when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kyrodata_get_credit_balanceCredit balance and limits for this keyARead-onlyIdempotentInspect
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-onlyIdempotentInspect
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-onlyIdempotentInspect
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 of the TOTALS (USD FOB, kg). Omit for the most recent published year; coverage starts in 2000. The month-over-month figures and the price-by-volume series always describe the latest published months, whatever `year` says. | |
| 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 cover the safety profile (readOnly, idempotent, closed-world, non-destructive), but the description goes further with public-data status, a documented caveat that US$/kg is an average unit value rather than a quoted price, a credit cost rule (up to 2 comex tools per 60-second session = 1 credit) and the fact that `detailed` counts against the export quota. These are genuine operational traits not present in structured fields.
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?
Dense but front-loaded: the core action and output shape come first, then parameter semantics, then caveat, then sibling routing and cost. Each sentence carries information, though the credit-class sentence is appended rather than integrated, making the block slightly longer than needed.
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 5-parameter analytical read with an output schema, the description covers the action, both axis semantics, the data caveat, sibling routing and cost model. Nothing needed to invoke it correctly or interpret the result 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 the non-obvious interaction semantics that `year` centres the overview (defaulting to latest published, coverage from 2000) while `months` only extends the series backwards and never alters the totals. That clarifies a genuinely ambiguous coupling the schema states only in passing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource+scope: 'Structured read of ONE HS heading (SH4, 4 digits) for exports or imports', then enumerates the three things returned (yearly totals, month-over-month, price-by-volume series). It explicitly differentiates itself from siblings kyrodata_fetch (citable document with URL) and kyrodata_compare_trade (two-window comparison).
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?
Names the two nearest alternatives and the condition that selects each: kyrodata_fetch for a citable URL-backed document, kyrodata_compare_trade for comparisons. It also clarifies the scope split between `year` (centres totals) and `months` (only series depth), which prevents 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_hub_summaryCommodity hub summary and forecast verdictARead-onlyIdempotentInspect
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-onlyIdempotentInspect
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-onlyIdempotentInspect
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 growth: the twelve months ending at `to` against the twelve before them. It does NOT follow `from` — with a window of any other length, the ranking and the growth describe different periods. | |
| 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 cover the safety profile (readOnly, idempotent, non-destructive), and the description adds real operational context beyond them: the credit class and rate limit (up to 2 comex tools per 60s = 1 credit), the quota cost of response_format=detailed, and the non-obvious withGrowth caveat that it ignores `from`.
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?
Dense but front-loaded: the ranking purpose and its output shape come first, then routing alternatives, then the credit note. Every clause carries information, though the single packed paragraph is heavier than strictly necessary.
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 7-parameter, one-required ranking tool with an output schema, the description covers purpose, window defaults, filtering semantics, growth behavior, sibling routing, and quota 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 goes beyond the schema by tying `codes` to the ranking intent ('who buys THIS product'), restating the YYYYMM default window, and warning that withGrowth is the only channel for growth. It adds intent-level meaning rather than raw syntax.
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 ('Ranks') and resource ('Brazil's partner countries for exports or imports') plus the row granularity (one row per country) and returned measures. It explicitly contrasts itself with kyrodata_compare_trade and kyrodata_list_trade_series, so an agent can distinguish it without opening a 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?
Explicitly states when to use it (ranking partners inside one window, 'who buys THIS product') and when not to (a question about one known country belongs on kyrodata_compare_trade or kyrodata_list_trade_series; comparing two windows is kyrodata_compare_trade). Alternatives and the selecting condition are named.
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-onlyIdempotentInspect
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-onlyIdempotentInspect
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-onlyIdempotentInspect
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-onlyIdempotentInspect
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-onlyIdempotentInspect
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.
1 tool update
- Changed
kyrodata_get_climate_reading1 field changed- changed
Input schema / properties / hub / enumPrevious value: -[ - "sugar", - "beef", - "coffee", - "ethanol", - "chicken", - "corn", - "soybean", - "pork", - "cotton", - "cocoa", - "orange-juice", - "wheat", - "rice" -]New value: +[ + "sugar", + "beef", + "ethanol", + "chicken", + "pork", + "cocoa", + "orange-juice", + "wheat" +]
2 tool updates
- Changed
kyrodata_get_heading_overview1 field changed- changed
Input schema / properties / year / descriptionPrevious value: -"Calendar year to centre the overview on. Omit for the most recent published year; coverage starts in 2000."New value: +"Calendar year of the TOTALS (USD FOB, kg). Omit for the most recent published year; coverage starts in 2000. The month-over-month figures and the price-by-volume series always describe the latest published months, whatever `year` says."
- Changed
kyrodata_list_trade_partners1 field changed- changed
Input schema / properties / withGrowth / descriptionPrevious value: -"Also return each partner’s change against the same window a year earlier."New value: +"Also return each partner’s growth: the twelve months ending at `to` against the twelve before them. It does NOT follow `from` — with a window of any other length, the ranking and the growth describe different periods."
2 tool updates
- Changed
kyrodata_get_hub_summary1 field changed- changed
Input schema / properties / horizon / descriptionPrevious value: -"How far ahead the forecast looks: 1, 3, 6 or 12 months from the last published month."New value: +"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."
- Changed
kyrodata_run_report2 fields changed- changed
Input schema / properties / reportId / descriptionPrevious value: -"Which catalogue report to run. Call the tool with no arguments to list the reports and the parameters each one takes."New value: +"Which catalogue report to run, by id. Each report declares its own parameters, which go in `params`." - added
Input schema / properties / reportId / enumAdded value: +[ + "comex.exports.1", + "comex.imports.1", + "comex.partners.1", + "comex.opportunities.1", + "comex.series.1", + "comex.elasticities.1", + "comex.heading.partners.1", + "comex.country.basket.1", + "hub.trade.flow.1", + "hub.trade.flow.2", + "hub.production.regions.1", + "hub.production.regions.2", + "hub.balance.sheet.1", + "hub.climate.regions.1", + "costs.survey.1", + "climate.history.1" +]
1 tool update
- Added
kyrodata_list_trade_series
4 tool updates
- Removed
kyrodata_compare_periods - Removed
kyrodata_get_balance - Added
kyrodata_get_credit_balance - Added
kyrodata_resolve_comparison_window
16 tool updates
- Changed
kyrodata_compare_periods2 fields changed- added
Input schema / properties / mode / descriptionAdded value: +"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." - added
Input schema / properties / response_format / descriptionAdded value: +"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."
- Added
kyrodata_compare_trade - Changed
kyrodata_explain_pyramid_level4 fields changed- added
Input schema / properties / horizon / descriptionAdded value: +"How far ahead the forecast looks: 1, 3, 6 or 12 months from the last published month." - added
Input schema / properties / hub / descriptionAdded value: +"Which commodity hub to read." - added
Input schema / properties / levelKey / descriptionAdded value: +"One level of the pyramid. Given, the answer follows that level across all four horizons instead of showing the seven side by side." - added
Input schema / properties / response_format / descriptionAdded value: +"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."
- Changed
kyrodata_fetch2 fields changed- added
Input schema / properties / id / descriptionAdded value: +"Identifier of a document returned by kyrodata_search. Not a free-text query." - added
Input schema / properties / response_format / descriptionAdded value: +"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."
- Changed
kyrodata_get_balance1 field changed- added
Input schema / properties / response_format / descriptionAdded value: +"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."
- Changed
kyrodata_get_climate_reading3 fields changed- added
Input schema / properties / hub / descriptionAdded value: +"Which commodity hub to read. Climate forecasts PRODUCTION, never price." - added
Input schema / properties / response_format / descriptionAdded value: +"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." - added
Input schema / properties / scope / descriptionAdded value: +"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."
- Changed
kyrodata_get_data_coverage1 field changed- added
Input schema / properties / response_format / descriptionAdded value: +"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."
- Changed
kyrodata_get_heading_overview5 fields changed- added
Input schema / properties / flow / descriptionAdded value: +"Direction of the trade flow, from Brazil’s side: `export` leaves the country, `import` enters it." - added
Input schema / properties / months / descriptionAdded value: +"Length of the monthly series returned, counting back from the last published month." - added
Input schema / properties / response_format / descriptionAdded value: +"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." - added
Input schema / properties / sh4 / descriptionAdded value: +"The 4-digit HS heading to describe." - added
Input schema / properties / year / descriptionAdded value: +"Calendar year to centre the overview on. Omit for the most recent published year; coverage starts in 2000."
- Added
kyrodata_get_hub_summary - Changed
kyrodata_get_supply_demand_balance3 fields changed- added
Input schema / properties / closedOnly / descriptionAdded value: +"Restrict to seasons already closed. The current season is a projection and still moves." - added
Input schema / properties / hub / descriptionAdded value: +"Which commodity hub to read. Only hubs with a published balance sheet appear here." - added
Input schema / properties / response_format / descriptionAdded value: +"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."
- Removed
kyrodata_hub_summary - Changed
kyrodata_list_trade_partners7 fields changed- added
Input schema / properties / codes / descriptionAdded value: +"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." - added
Input schema / properties / flow / descriptionAdded value: +"Direction of the trade flow, from Brazil’s side: `export` leaves the country, `import` enters it." - added
Input schema / properties / from / descriptionAdded value: +"First month of the window, as YYYYMM (200403 = March 2004). Omit for the last twelve published months." - added
Input schema / properties / limit / descriptionAdded value: +"How many partner countries to return, largest first by value." - added
Input schema / properties / response_format / descriptionAdded value: +"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." - added
Input schema / properties / to / descriptionAdded value: +"Last month of the window, as YYYYMM. Omit for the last published month." - added
Input schema / properties / withGrowth / descriptionAdded value: +"Also return each partner’s change against the same window a year earlier."
- Changed
kyrodata_resolve_entity3 fields changed- added
Input schema / properties / kinds / descriptionAdded value: +"Narrow the search to these kinds of entity. Omit to search all of them." - added
Input schema / properties / q / descriptionAdded value: +"What to look up, in plain words: a country, a product, or a code. Portuguese and English both work." - added
Input schema / properties / response_format / descriptionAdded value: +"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."
- Changed
kyrodata_run_report5 fields changed- added
Input schema / properties / columnIds / descriptionAdded value: +"Only these columns, by id. Omit for the report’s default set; the columns that identify a row are always returned." - added
Input schema / properties / limit / descriptionAdded value: +"Maximum rows to return." - added
Input schema / properties / params / descriptionAdded value: +"Values for the parameters the chosen report declares." - added
Input schema / properties / reportId / descriptionAdded value: +"Which catalogue report to run. Call the tool with no arguments to list the reports and the parameters each one takes." - added
Input schema / properties / response_format / descriptionAdded value: +"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."
- Changed
kyrodata_search2 fields changed- added
Input schema / properties / query / descriptionAdded value: +"What to look for, in plain words. Returns document ids to pass to kyrodata_fetch." - added
Input schema / properties / response_format / descriptionAdded value: +"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."
- Removed
kyrodata_trade_compare
2 tool updates
- Added
kyrodata_fetch - Added
kyrodata_search
12 tool updates
- First observed
kyrodata_compare_periods - First observed
kyrodata_explain_pyramid_level - First observed
kyrodata_get_balance - First observed
kyrodata_get_climate_reading - First observed
kyrodata_get_data_coverage - First observed
kyrodata_get_heading_overview - First observed
kyrodata_get_supply_demand_balance - First observed
kyrodata_hub_summary - First observed
kyrodata_list_trade_partners - First observed
kyrodata_resolve_entity - First observed
kyrodata_run_report - First observed
kyrodata_trade_compare
Publisher details
- Operator
- Kyrodata · Publisher source
- Operator website
- https://kyrodata.com · Publisher source
- Vendor relationship
- First-party · Publisher source
- Documentation
- https://kyrodata.com/en-US/developers · Publisher source
- Trust center
- https://kyrodata.com/en-US/trust · Publisher source
- Restrictions
- Requires a Kyrodata account and an API key sent as a Bearer token. A free credit tier is available; higher usage requires a paid plan. Tools are credit-metered. · Publisher source
Related MCP Connectors
UN FAOSTAT global food & agriculture statistics over a local SQLite mirror, via MCP.
Comtrade MCP — UN Comtrade API for international bilateral trade data
Trade Intel MCP — Compound tools that chain Comtrade, Census, Treasury,
Read-only developer, date, finance, and text utilities. Authless remote MCP server by Clean.tools.
Related MCP Servers
- AlicenseAqualityAmaintenanceBrazilian foreign trade from MDIC/ComexStat -- exports and imports 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 commodity forecasts for hubs such as soybean, coffee and beef. 15 read-only tools, remote at https://mcp.kyrodata.com/mcp; official registry com.kyrodata/kyrodata.58151MIT
- 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
- AlicenseNot gradedqualityBmaintenanceMCP server that provides real-time access to Brazilian public data from 6 official sources via 11 read-only tools, including Pix, IBGE, Câmara dos Deputados, Senado Federal, Diário Oficial da União, and Agência Brasil, with no API key required.4MIT
- FlicenseAqualityBmaintenanceEnables querying Brazilian foreign trade data through MCP tools for trade flows, freight costs, code resolution, and dataset caveats, with known data defects corrected in responses.4-
Glama MCP Gateway
Add one secure layer between your agents and this server.