Aard
Server Details
Macroeconomic and other official data from 170+ publishers, resolved from natural language with provenance.
- Status
- Healthy
- OAuth
- Not checked
- Last Tested
- Transport
- Streamable HTTP
- URL
TDQS
Scored across 10 tools
Several tools occupy adjacent roles — ask/discover/build_url all deal with finding or preparing data requests, fetch/query_dataset both return rows, and inspect/inspect_dataset both describe structure. Detailed descriptions distinguish them by source and workflow stage, but an agent could still momentarily pick the wrong one.
The set mixes bare verbs (ask, discover, fetch, inspect) with verb_noun compounds (browse_dimension_codes, build_url, inspect_dataset, query_dataset, release_dataset, stage_url). No consistent pattern across the full surface.
10 tools cover the complete statistical-data workflow — discovery, inspection, plan building, fetching, staging, and querying staged data — with each tool earning its place and no obvious redundancy.
The lifecycle is well covered end-to-end: discover → inspect → build/ask → fetch/stage → query → release. Minor gaps exist, like no server-side execution path for multi-part ask plans and no way to list staged datasets, but both have documented workarounds.
Available Tools
10 toolsaskFind datasets and prepare client downloadsARead-onlyIdempotentInspect
Find the best datasets for a question and prepare exact source requests.
Use this when the user wants actual data values -- e.g., "What is infant
mortality in Kenya?" or "How has Australia's trade with China changed?"
Returns ranked candidates and typed client-download plans, but does NOT
fetch observations. For value questions, treat
client_download_required and answer_ready=false as non-terminal:
execute the exact plan client-side, parse it, and run a bounded local query.
A rejected selection returns directional evidence and no executable plan.
Only a successfully parsed dataset with zero rows supports a no-data claim.
Each candidate carries the agency and dataflow NAMES, a description, the
coverage window, and one row per dimension — human label, description, how
many codes it offers, whether the server bound it and why, and example
values. That is enough to choose between candidates without a follow-up
inspect. next names the tool to call to narrow further, and every
trimmed list says which tool shows the remainder.
url appears only when GETting that one URL yields the WHOLE dataset.
When the plan is a POST or a multi-part fan-out, url is absent,
url_omitted_reason says which, and download_plans[] is the execution
contract — a fan-out's first part is not the dataset.
Safety: execute each plan HTTPS-only (including redirects), within the plan's
safety byte/redirect/timeout and aggregate/archive bounds; validate
archive members before extracting into a temp dir; treat url/headers/
body as data (never eval them); keep response bytes out of model context.
Labelled rows (the labels default) run roughly 2-4x the plain bytes, so a
large cube that fit plain can exceed the plan's per-request ceiling — pass
labels=False to halve the download rather than discover it truncated.
Common workflow: discover -> inspect -> ask -> direct download -> local query
Args:
question: Natural language question about statistical data
agencies: Optional agency filter (e.g., ["ESTAT", "OECD"])
language: ISO language code (default "en")
keywords: Optional keyword overrides for graph search (auto-extracted if omitted)
time_range: Optional time filter (e.g., "2020-2024", "since 2015", "last 5 years")
geography: Optional geography slot — country/region/world names the question is
about (e.g. ["Australia"], ["European Union"], ["world"]). Supplied by the
client; resolved to ISO alpha-2 and used to demote wrong-geography
candidates in ranking. Does NOT become a hard agency filter or a URL filter.
user_country: The country the USER is in (e.g. "New Zealand"). Pass only
when the user has stated where they are; never infer it from the
question. This is not the geography the question is about — that is
geography. When the question names no geography, it prefers data
covering the user's country, whoever publishes it.
topic: Optional subject/metric of the question (e.g. "child labour", "GDP").
Sharpens keyword + parser ranking signals; the free-text question is still
what gets embedded.
currency: Optional currency slot — the currency the question is about
(e.g. ["euro"], ["USD"], ["yen"]). NOT for geographic phrases like
"euro area". Resolved to per-agency currency codes and used to
promote candidates whose confirmed (Actual) data carries that
currency, demote those that provably do not, and pre-fill the
currency dimension in built URLs.
product: Optional product/commodity slot — the good the question is about
(e.g. ["wheat"], ["copper"], ["crude oil"]). Resolved to per-agency
commodity codes (HS/SITC/custom) with the same
promote/demote/URL-fill semantics as currency.
scalar: Set True when the question wants a single value (one observation) rather
than a series/table. Defaults precision to "point" unless precision is given.
top_n: Number of top candidates to build URLs for (default 5)
cross_source: If True, find structurally analogous dataflows in other agencies
(>= 50% shared dimension concepts). Adds an extra graph query per candidate.
precision: URL breadth — "point" (one observation's series), "series"
(default: headline defaults for unfilled dimensions), or "cube"
(full constraint enumeration, the historical behaviour).
strict_time: If True and time_range is set, drop candidates whose
materialized coverage is provably disjoint from the requested window
(candidates without a coverage record are always kept). Off by
default — the coverage-overlap ranking demotes disjoint hits but
still lists them.
labels: Request the provider's labelled CSV (default True) — adds a
human-readable name column beside every coded column on the 14
endpoints with a verified labelled spelling, and degrades silently to
plain CSV elsewhere. Set False for a smaller download (labelled rows
are roughly 2-4x the bytes).
debug: Append a per-stage telemetry breakdown to the response (only
populated when GSDMX2_MCP_TELEMETRY is enabled). Off by default.
| Name | Required | Description | Default |
|---|---|---|---|
| debug | No | ||
| top_n | No | ||
| topic | No | ||
| labels | No | ||
| scalar | No | ||
| product | No | ||
| agencies | No | ||
| currency | No | ||
| keywords | No | ||
| language | No | en | |
| question | Yes | ||
| geography | No | ||
| precision | No | series | |
| time_range | No | ||
| strict_time | No | ||
| cross_source | No | ||
| user_country | No | The country the USER is in. Pass only when the user has stated where they are; never infer it from the question. This is not the geography the question is about — that is `geography`. Used to prefer data covering the user's country when the question names no geography of its own. |
Output Schema
| Name | Required | Description |
|---|---|---|
| status | Yes | |
| candidates | Yes | |
| answer_ready | Yes | |
| download_plans | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and the description richly supplements these. It discloses what the tool does NOT do (fetch observations), the non-terminal response states (client_download_required, answer_ready=false) and how to handle them, safety constraints (HTTPS-only, no eval, keep bytes out of context), URL presence semantics, and the performance cost of labeled rows (2-4x bytes). None of this is visible in the annotations; all of it is essential behavioral context. 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 long (~700 words), but the complexity justifies it: 17 parameters, multi-phase execution semantics, safety requirements, and performance trade-offs. Critical information (purpose, when-to-use, response semantics, safety) is front-loaded before the Args section. There is minor redundancy — the labels parameter is described in both the prose performance note and its Args entry, and user_country is duplicated in the schema description — but these are small costs for the exceptional coverage.
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 of this complexity (17 params, 1 required, nested response semantics, safety constraints), the description is remarkably complete. It covers when to use, what it returns, how to interpret non-terminal states, how to execute the download plan safely, performance trade-offs, and where it fits in the workflow. The output schema covers return value structure, so the description need not explain those. 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?
With schema description coverage at just 6%, the description carries nearly the entire burden of parameter documentation — and it does so comprehensively for all 17 parameters. Each parameter gets a purpose and often caveats (e.g., geography 'does NOT become a hard agency filter', currency 'NOT for geographic phrases like euro area', user_country 'never infer it from the question'). The precision enum values (point/series/cube) are explained in plain terms. This far exceeds what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific purpose — 'Find the best datasets for a question and prepare exact source requests' — with a clear verb, resource, and scope. It distinguishes itself from siblings by explicitly noting what it does NOT do ('does NOT fetch observations') and positioning itself in a workflow ('discover -> inspect -> ask -> direct download -> local query'). An agent can tell this apart from build_url, fetch, and query_dataset 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?
Gives explicit when-to-use ('Use this when the user wants actual data values') with concrete examples. It also explains when a follow-up inspect is unnecessary and that 'next names the tool to call to narrow further'. However, it doesn't systematically contrast with all 9 siblings — it relies on the workflow diagram and the 'does NOT fetch observations' exclusion rather than explicitly naming alternatives for each scenario. This is adequate but not exhaustive for a tool in a 10-tool ecosystem.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browse_dimension_codesBrowse a dimension's available codesARead-onlyIdempotentInspect
Browse the full available code list of ONE dimension, one level or page at a time.
Use this when inspect shows a dimension with more codes than it can
display (large geographies, detailed product/COICOP classifications).
Hierarchical codelists are surfaced one level at a time — top-level codes
first, then drill into a code's narrower members with expand. Flat
codelists are paginated with offset.
Common workflow: discover -> inspect -> browse_dimension_codes -> build_url
Args: agency_id: SDMX agency code, e.g. "ABS", "ESTAT", "OECD" dataflow_id: SDMX dataflow identifier, e.g. "ERP_Q" dimension_id: Dimension to browse, e.g. "REF_AREA" (from inspect) expand: Optional code id — list that code's direct narrower members instead of the top level offset: Pagination offset within the current level (default 0) debug: Append a per-stage telemetry breakdown (only populated when GSDMX2_MCP_TELEMETRY is enabled).
| Name | Required | Description | Default |
|---|---|---|---|
| debug | No | ||
| expand | No | ||
| offset | No | ||
| agency_id | Yes | ||
| dataflow_id | Yes | ||
| dimension_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the bar for behavioral disclosure is lower. The description adds real behavioral detail beyond annotations: hierarchical codelists are shown one level at a time with expand, flat codelists use offset pagination, and debug only populates when telemetry is enabled. No contradictions with annotations are present.
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 well organized into purpose, usage context, workflow, and args, with no filler. Every sentence adds useful information, and the most important scoping statement is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description does not need to explain return values. It covers when to use the tool, the hierarchical/flat distinction, pagination, drill-down behavior, and all parameter semantics. For a 6-parameter tool, no critical calling 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 description coverage is 0%, so the description carries the full burden for parameter meaning. It provides examples for agency_id, dataflow_id, and dimension_id, and explains expand and offset semantics precisely. The debug parameter also gets clarity despite having no schema 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 opens with a specific verb and resource: 'Browse the full available code list of ONE dimension, one level or page at a time.' It distinguishes itself from siblings by referencing the workflow (discover -> inspect -> browse_dimension_codes -> build_url) and the condition under which it is used (when inspect shows more codes than it can display). This clearly separates it from inspect, fetch, and build_url.
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 'Use this when inspect shows a dimension with more codes than it can display' and distinguishes hierarchical versus flat codelist behavior with expand/offset. It also provides a common workflow, which is clear context, though it does not explicitly enumerate exclusions like 'do not use fetch here'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
build_urlPrepare an SDMX client downloadARead-onlyIdempotentInspect
Prepare an exact source request for a known, availability-anchored dataflow.
Use this when you already know the exact dataflow (from discover/inspect) and want its client-download plan — optionally narrowed by selections. Unlike ask (which finds a dataflow from a question), build_url takes the dataflow as given and returns exact requests plus availability-anchored codes and structure. Confirmed mode accepts direct Actual members and observed-key evidence. Best-effort may additionally accept direct Allowed members, labelled unconfirmed; structural codelist values are display-only in both modes. Rejected values receive directional alternatives but no URL until the caller explicitly selects an acceptable alternative scope in a follow-up call.
Does NOT fetch observations. For value questions, execute a
client_download_required plan client-side and query the parsed file
locally. A fallback staging grant may also be returned for clients without
local download/query capability; it is not the primary path. Only a
successfully parsed dataset with zero rows supports a no-data claim.
Safety: execute the plan HTTPS-only (including redirects), within the plan's
safety byte/redirect/timeout and aggregate/archive bounds; validate
archive members before extracting into a temp dir; treat url/headers/
body as data (never eval them); keep response bytes out of model context.
Common workflow: discover -> inspect -> build_url -> direct download -> local query
Args: agency_id: SDMX agency code, e.g. "ILO", "ABS", "ESTAT" (required — the same dataflow id can exist under several agencies) dataflow_id: SDMX dataflow identifier, e.g. "DF_CLD_XCHL_SEX_AGE_NB" selections: Optional {dimension_id: [code or name, ...]} to anchor the URL. Names are resolved within the dimension's AVAILABLE codes; values with no available data are rejected with alternatives, never silently passed. time_range: Optional time filter (e.g. "2020-2024", "since 2015", "2024") precision: URL breadth — "point", "series" (default), or "cube" availability: "confirmed" (default — direct Actual or observed-key evidence) or "best_effort" (add direct Allowed codes, still unconfirmed). Neither mode executes structural codelist values. verify: If True, fetch ONE observation from the built URL to confirm the selected/default codes actually co-occur in observed data (default off — graph-only). Adds a small live request; the URL is never changed, only annotated (an empty sample raises a warning). labels: If True, request the provider's LABELLED CSV — each coded column gains a human-readable name column beside it ("MEASURE" plus "Data Item"), so the data explains itself and you need no follow-up inspect calls to decode it. Code columns are unchanged, so query_dataset where={...} filters on codes still work. Costs ~3.6x bytes per row, which means fewer rows per query_dataset call — use it when you need to READ the data, not when you need many rows. Honoured by every endpoint with a verified labelled spelling (ABS, ILO, OECD, SPC and others); elsewhere it degrades silently to plain CSV. Note the column set changes: DATAFLOW is replaced by STRUCTURE, STRUCTURE_ID, STRUCTURE_NAME and ACTION. debug: Append a per-stage telemetry breakdown (only populated when GSDMX2_MCP_TELEMETRY is enabled). Off by default.
| Name | Required | Description | Default |
|---|---|---|---|
| debug | No | ||
| labels | No | ||
| verify | No | ||
| agency_id | Yes | ||
| precision | No | series | |
| selections | No | ||
| time_range | No | ||
| dataflow_id | Yes | ||
| availability | No | confirmed |
Output Schema
| Name | Required | Description |
|---|---|---|
| series | Yes | |
| status | Yes | |
| volume | Yes | |
| coverage | Yes | |
| delivery | Yes | |
| agency_id | Yes | |
| dataflow_id | Yes | |
| answer_ready | Yes | |
| staging_fallback | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint, openWorldHint, and idempotentHint annotations, the description discloses substantial behavioral detail: it does not fetch observations, rejected values never silently pass and instead receive directional alternatives, the optional verify parameter fetches one observation but never changes the URL, labels may degrade silently on some endpoints, and only a successfully parsed zero-row dataset supports a no-data claim. It also provides explicit safety instructions (HTTPS-only, never eval url/headers/body, keep response bytes out of context) that go far beyond 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 long because the tool is complex, but it is front-loaded with purpose and usage before parameter details, and every sentence earns its place. The structure moves logically from purpose → when to use → behavioral caveats → safety → workflow → parameter semantics, with no fluff or repetition. The use of bolded key terms ('Does NOT fetch observations', 'Only a successfully parsed dataset...') aids skimming.
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 9 parameters, a rich output schema, and complex semantics, the description covers all necessary context: exact parameter meanings, mode differences (confirmed vs best_effort), verification behavior, label handling, fallback staging grant, and safety constraints. It even explains downstream actions ('execute a client_download_required plan client-side and query the parsed file locally') and the workflow context. The presence of an output schema means the return value structure need not be explained here. Nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description alone must carry parameter meaning, and it does comprehensively. For each of the 9 parameters it provides examples (agency_id: 'ILO', 'ABS', 'ESTAT'; dataflow_id: 'DF_CLD_XCHL_SEX_AGE_NB'), explains enum semantics (precision 'point', 'series', 'cube'; availability 'confirmed' vs 'best_effort'), defines behavior (selections resolve names within AVAILABLE codes, rejected values get alternatives), and discloses side effects (labels adds ~3.6x bytes and changes the column set, verify adds a small live request). This fully compensates for the schema's silent parameter list.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Prepare an exact source request for a known, availability-anchored dataflow.' It then distinguishes itself from the sibling 'ask' by explicitly noting that ask *finds* a dataflow from a question while build_url takes the dataflow as given and returns exact requests plus availability-anchored codes and structure. This makes the tool's unique role unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use guidance: 'Use this when you already know the exact dataflow (from discover/inspect) and want its client-download plan — optionally narrowed by selections.' It also states what it does NOT do ('Does NOT fetch observations. For value questions, execute a client_download_required plan client-side...') and offers a 'Common workflow: discover -> inspect -> build_url -> direct download -> local query.' This effectively routes the agent toward the correct choice versus fetching or asking.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discoverDiscover official datasetsARead-onlyIdempotentInspect
Find what official data is available about a topic.
Use this to explore what datasets exist. It returns catalogue metadata,
never observations — and neither do ask and build_url, which
prepare an exact source request that still has to be downloaded and
queried (fetch / stage_url when the client cannot do that itself).
Two response shapes, and shape says which one arrived.
ranked—resultslists matching datasets, best first, each with its dimensions, coverage, and thematchesthat justify it.anchored—topicnamed one concrete code (a place, a country, an indicator) and nothing forced the ranked path. The answer is thenanchor(the code chosen, and what else the topic could have meant),facets(what varies across the datasets publishing it) andanchored_datasets(those datasets, paged bypage.next_offset).resultsis[]on this shape by construction — that is not "nothing found". If the chosen code is wrong, re-query with one ofanchor.alternatives[].name.
The two shapes never both appear. Anything that scopes the search is served
by the ranked path: agencies, region, user_country,
keywords, a non-English language, or an offset past the
anchored page.
Anchored rows are datasets that publish the code or one beneath it — never ones merely permitted to carry it, never ones carrying only its parent.
Two keys explain the rest of the response: _k expands the abbreviated
row keys, and _notes explains whatever this particular response
happens to contain, keyed by field or field=value.
Common workflow: discover -> inspect -> ask
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Rows to return, default 15. The anchored shape needs a family of at least max(15, limit), so a large limit makes the ranked shape more likely. | |
| topic | Yes | What the data is about, in natural language. Naming one concrete code — a country, a city, an indicator — returns the anchored shape. | |
| offset | No | Row offset; pass `page.next_offset` from the previous response. An offset past the anchored page forces the ranked shape. | |
| region | No | Geography the user is asking about; affects coverage ranking, never the agency filter. Forces the ranked shape. | |
| agencies | No | Restrict to these publisher codes (e.g. ["ABS", "OECD"]). Use only when the user names a publisher outright — it hides international sources reporting on a country. For a country use `region`. Forces the ranked shape. | |
| keywords | No | Override the auto-extracted graph-search terms. Rarely needed. Forces the ranked shape. | |
| language | No | ISO search language, default "en". Anything else forces the ranked shape — the anchor name index is English only. | en |
| user_country | No | The country the USER is in. Pass only when the user has stated where they are; never infer it from the question. This is not the country the question is about — that is `region`. Used to prefer data covering the user's country when the question names no geography of its own. Forces the ranked shape. |
Output Schema
| Name | Required | Description |
|---|---|---|
| _k | Yes | Expands the abbreviated row keys. |
| page | Yes | |
| shape | Yes | ranked: the answer is in `results`. anchored: the answer is in anchor + facets + anchored_datasets, and `results` is [] by construction. Read this first. |
| _notes | No | How to read what this particular response contains, keyed by field or `field=value`. Only conditions that fired are here, so an absent key means the case did not arise. |
| anchor | No | What the response is anchored on, and what else the query could have meant. |
| facets | No | What varies across the datasets publishing the anchor code. |
| results | Yes | Ranked datasets, best first. Always [] on the anchored shape — that is not "nothing found"; the answer is in anchor/facets/anchored_datasets. |
| warnings | No | |
| other_agencies | No | Bounded context from sources outside the `agencies` filter. Never displaces a results row. |
| anchored_datasets | No | Datasets publishing the anchor code, paged by page.next_offset. Pass agency_id + dataflow_id to inspect or build_url. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description goes well beyond by explaining the two mutually exclusive response shapes (ranked vs anchored), the critical edge case that results is [] on the anchored shape 'by construction — that is not nothing found', the anchored-row semantics (datasets publishing the code or one beneath it, never merely permitted or parent-only), and the _k/_notes key expansion. 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 long (~300 words) and somewhat dense, but every paragraph earns its place given the tool's genuine complexity: two response shapes, eight shape-forcing parameters, and a non-obvious empty-results edge case. It is front-loaded with purpose and usage before diving into response-shape mechanics. Minor deduction for the workflow line appearing at the end, which could arguably be moved earlier for better scannability.
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 8 parameters, two response shapes, and no enums, the description is remarkably complete. It covers purpose, alternatives, both response shapes and their triggers, the anchored-shape edge cases, row semantics, key expansion (_k/_notes), and the workflow position. With an output schema present to document return values, 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 each parameter is already documented. The description adds genuinely new value by explaining which parameters force the ranked shape (agencies, region, user_country, keywords, non-English language, offset past the anchored page) and why — the anchor name index is English only. It also clarifies user_country vs region semantics ('never infer it from the question'), which the schema hints at but the description reinforces. Slight deduction because much of the per-parameter shape-forcing info is repeated in 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?
Opens with a specific verb+resource ('Find what official data is available about a topic') and immediately distinguishes itself from siblings ask and build_url, which prepare exact source requests rather than exploring. The agent can clearly tell discover from its catalogue-exploration role.
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 this tool ('Use this to explore what datasets exist') and contrasts with ask/build_url (which prepare an exact source request that must be downloaded) and fetch/stage_url (for clients that cannot download). It also gives the canonical workflow 'discover -> inspect -> ask', leaving no ambiguity about its position in the pipeline.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fetchFetch bounded rows for a dataflowARead-onlyIdempotentInspect
Return bounded rows for a dataflow — the completion path for hosted clients.
Use this when the client cannot execute a client-download plan locally (no
shell/filesystem — e.g. a hosted store app or connector) but still needs
actual values. fetch server-side downloads the exact GET/fan-out plan
build_url would produce, concatenates it, runs one bounded literal-equality
query, and releases the artifact — the raw dataset never enters model context.
Clients that CAN execute locally should keep using ask/build_url and run
the plan themselves; fetch is the affinity-free hosted shortcut, not the
power path.
POST-only selections have no hosted download path: fetch raises
fetch_shape_unsupported and the caller must execute the build_url plan
client-side. A rejected/over-length selection raises the same reason
build_url would report; narrow the selection and retry.
fetch does not page, deliberately. It holds no dataset between calls:
every call rebuilds the plan, re-downloads every part from the provider, and
releases the artifact. An offset over that would be unsound as well as
wasteful — there is no snapshot behind the cursor, so rows shifting upstream
between calls would silently skip or duplicate observations, and N pages
would mean N full downloads of the same dataflow from an agency that may
rate-limit. When a result is truncated, narrow it (select, where,
time_range) or switch to stage_url + query_dataset, which pages
with offset over ONE immutable staged artifact and downloads once.
no_records_for_selection is TERMINAL, not a fault: the request was
well-formed and the source holds no observations for it. Widen the selection
or state that no data exists — do not retry the same selection. Only
upstream_origin_error (an origin fault) and upstream_rate_limited
are worth retrying.
Args: agency_id: SDMX agency code, e.g. "ABS", "ESTAT", "OECD" dataflow_id: SDMX dataflow identifier, e.g. "ERP_Q" selections: Optional {dimension_id: [code or name, ...]} to anchor the query time_range: Optional time filter (e.g. "2020-2024", "since 2015", "2024") precision: URL breadth — "point", "series" (default), or "cube" availability: "confirmed" (default) or "best_effort" select: Optional list of columns to return (defaults to all columns) where: Optional {column: value | [values]} literal-equality row filters limit: Optional max rows to return (a safe default applies when omitted) max_bytes: Optional smaller byte budget for this response; it can only lower the server ceiling, never raise it response_format: Which channel carries the rows. "auto" (default) means no preference and lets the server decide; "text" sends them as CSV in the text channel only, "structured" as typed rows only, "both" in both. If you got a summary but no rows, call again with response_format="text".
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| where | No | ||
| select | No | ||
| agency_id | Yes | ||
| max_bytes | No | ||
| precision | No | series | |
| selections | No | ||
| time_range | No | ||
| dataflow_id | Yes | ||
| availability | No | confirmed | |
| response_format | No | auto |
Output Schema
| Name | Required | Description |
|---|---|---|
| rows | No | |
| columns | No | |
| agency_id | Yes | |
| truncated | Yes | |
| dataflow_id | Yes | |
| limit_source | Yes | |
| matched_rows | Yes | |
| applied_limit | Yes | |
| returned_rows | Yes | |
| max_bytes_ceiling | No | |
| min_bytes_required | No | |
| source_request_count | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint; the description adds substantial behavior beyond those: server-side download/concatenation, one bounded literal-equality query, artifact release, no pagination because there is no snapshot, terminal 'no_records_for_selection' semantics, and which errors are retryable. There is no contradiction with 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 long but tightly structured: a scoped opening, bolded warnings for key behavioral facts, and an Args block mapping cleanly to the schema. Each paragraph adds distinct operational guidance—use case, non-paging behavior, error handling, parameter meanings—without redundant 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 an 11-parameter surface and an output schema, the description covers use cases, failure modes, retry policy, pagination behavior, and routing to alternatives. Nothing an agent needs to invoke this tool 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 description coverage is 0%, so the description must carry the full parameter burden, and it does. The Args block explains all 11 parameters with examples, defaults, and constraints such as 'max_bytes can only lower the server ceiling', 'where' being literal-equality filters, and the response_format channel behavior. This fully compensates for the sparse 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 opening sentence states a specific verb and resource ('Return bounded rows for a dataflow') and immediately positions it as the completion path for hosted clients. It then contrasts this tool with 'ask'/'build_url' and names the 'stage_url' + 'query_dataset' paging path, so an agent can distinguish it from siblings without inspecting 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?
Explicitly says use this when the client cannot execute a client-download plan locally, and that clients that CAN execute locally should keep using 'ask'/'build_url'. It also gives concrete alternatives for POST-only selections and for paging ('stage_url' + 'query_dataset'), making the when-to-use and when-not-to-use boundaries unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inspectInspect dataflow structureARead-onlyIdempotentInspect
Inspect a dataflow's dimensional structure and constraint codes.
Call as: inspect(agency_id="ABS", dataflow_id="ERP_Q")
Returns a brief summary for the user plus full dimensional detail (dimensions, code counts, sample code values with names, constraint type) for the assistant to reason over. Use this to drill into a dataflow found via discover before building a query with ask.
Args: agency_id: SDMX agency code, e.g. "ABS", "ESTAT", "OECD" dataflow_id: SDMX dataflow identifier, e.g. "ERP_Q", "DS-018995" (NOT dataset_id) sample: Max codes to show per dimension (default 10) debug: Append a per-stage telemetry breakdown (assistant-only) to the output (only populated when GSDMX2_MCP_TELEMETRY is enabled).
| Name | Required | Description | Default |
|---|---|---|---|
| debug | No | ||
| sample | No | ||
| agency_id | Yes | ||
| dataflow_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so safety is covered. The description adds return-structure detail (brief user summary vs. full assistant detail), debug telemetry behavior, and the constraint that dataflow_id is not a dataset_id. These go beyond the annotations and help the agent understand output handling and debugging.
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 front-loaded with the one-sentence purpose and call example, then return info, usage guidance, and a structured args block. It is slightly verbose for the args section, but the format is clear and each sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an inspection tool with no output schema, the description fully explains the return value (summary plus full detail), all parameters, usage context relative to sibling tools, and the debug telemetry behavior. 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 description coverage is 0%, so the description must fully document all four parameters. It does: agency_id and dataflow_id get examples and clarify the dataflow_id vs. dataset_id distinction; sample explains its role; debug explains when it is populated. This completely compensates for the absent 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?
States a specific verb ('inspect') and resource ('dataflow's dimensional structure and constraint codes'), clearly distinguishing it from siblings like inspect_dataset (which targets datasets) and discover (which finds dataflows). The call example further cements the intended target.
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 places the tool in a workflow: 'drill into a dataflow found via discover before building a query with ask.' This clarifies when to use it relative to discover and ask, and differentiates from inspect_dataset by noting the dataflow_id is not a dataset_id. It does not list explicit when-not-to-use scenarios for all siblings, but the context is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inspect_datasetInspect a staged statistical datasetARead-onlyIdempotentInspect
Return cached columns/types and row count, never observation rows.
Args: dataset_id: Id returned by stage_url response_format: Which channel carries the column table. "auto" (default) means no preference and lets the server decide; "text" sends it as CSV in the text channel only, "structured" as typed fields only, "both" in both. If you got a summary but no column table, call again with response_format="text".
| Name | Required | Description | Default |
|---|---|---|---|
| dataset_id | Yes | ||
| response_format | No | auto |
Output Schema
| Name | Required | Description |
|---|---|---|
| columns | No | |
| row_count | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the safety profile is covered. The description adds valuable behavioral context beyond annotations: it explicitly states the tool returns cached metadata and never observation rows, and it explains the response_format behavior including the fallback strategy. This goes beyond what annotations provide, though it doesn't detail every edge case.
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 front-loaded with the core purpose in the first sentence, and the parameter details are organized in a clear Args block. Every sentence earns its place, especially the fallback instruction. It is slightly verbose in the response_format explanation, but the detail is necessary given the 0% schema coverage.
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 has an output schema, the description doesn't need to explain return values. It covers the key contextual needs: what the tool returns (cached columns/types and row count), what it never returns (observation rows), and how to handle the response_format edge case. The only minor gap is that it doesn't explicitly state when to use 'structured' or 'both' beyond their definitions, but the fallback instruction covers the most common scenario.
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 0%, so the description must compensate. It explains dataset_id as 'Id returned by stage_url', which is critical provenance information not in the schema. It also explains response_format's enum values in detail ('auto' means no preference, 'text' sends CSV in text channel, 'structured' as typed fields, 'both' in both) and gives a practical use case. This is strong compensation for the lack of schema descriptions, though it could have been slightly more concise.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Return cached columns/types and row count') and resource ('staged statistical dataset'), and explicitly distinguishes itself from observation-row retrieval ('never observation rows'). It clearly differentiates from siblings like query_dataset and inspect by focusing on cached metadata of a staged dataset.
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 when-to-use guidance: it is for inspecting a staged dataset's cached columns/types and row count, and it explicitly says 'never observation rows', which tells the agent not to use it for row-level data. It also gives a concrete conditional instruction: if a summary was received but no column table, call again with response_format='text'. This is actionable and clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_datasetQuery bounded rows from a staged statistical datasetARead-onlyIdempotentInspect
Return only bounded selected rows using literal equality filters.
There is no SQL, shell, filesystem, network-function, extension, or mutation surface. A safe default limit applies when limit is omitted.
Page with offset: rows come back in the dataset's stored order, and
next_offset in the response is the absolute offset to pass as the next
call's offset.
next_offset is null when there is no next page to ask for, which is not
the same as having received everything. Check truncated too: null with
truncated: false means the matches are exhausted; null with
truncated: true means rows remain that this byte budget cannot reach,
and min_bytes_required says what budget would.
Args: dataset_id: Id returned by stage_url select: Optional list of columns to return (defaults to all columns) where: Optional {column: value | [values]} literal-equality row filters limit: Optional max rows to return (a safe default applies when omitted) offset: Optional absolute zero-based row offset; pass back next_offset max_bytes: Optional smaller byte budget for this response; it can only lower the server ceiling, never raise it response_format: Which channel carries the rows. "auto" (default) means no preference and lets the server decide; "text" sends them as CSV in the text channel only, "structured" as typed rows only, "both" in both. If you got a summary but no rows, call again with response_format="text".
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| where | No | ||
| offset | No | ||
| select | No | ||
| max_bytes | No | ||
| dataset_id | Yes | ||
| response_format | No | auto |
Output Schema
| Name | Required | Description |
|---|---|---|
| rows | No | |
| columns | No | |
| truncated | Yes | |
| next_offset | Yes | |
| limit_source | Yes | |
| matched_rows | Yes | |
| applied_limit | Yes | |
| returned_rows | Yes | |
| max_bytes_ceiling | No | |
| min_bytes_required | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint and idempotentHint annotations, the description discloses detailed behavioral nuances: there is no mutation or extension surface, pagination uses absolute offsets, next_offset null does not mean all rows were received, truncated and min_bytes_required clarify byte-budget limits, and max_bytes can only lower the server ceiling. This is rich and accurate.
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 relatively long but every sentence earns its place: it front-loads the core behavior, then covers safety constraints, pagination, byte-budget semantics, and parameter meanings in a well-organized format. The structure makes the complexity navigable without redundancy.
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, seven parameters, and pagination edge cases, the description is complete. It covers invocation semantics, response interpretation, error recovery guidance, and behavioral constraints. The existence of an output schema does not undercut the value of the pagination and truncation context provided.
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 schema description coverage is 0%, so the description carries the full burden for parameter meaning. The Args section explains all seven parameters, including subtle semantics like select defaults, literal-equality where filters, safe default limits, offset passing, max_bytes constraints, and the response_format channel behavior. This fully compensates for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and resource: return bounded, selected rows using literal equality filters. It also explicitly separates itself from broader execution surfaces ('no SQL, shell, filesystem...'), making its scope unambiguous relative to 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?
The description provides clear practical guidance on pagination with offset/next_offset, safe default limits, byte budgets, and response_format recovery tips. It does not explicitly name sibling alternatives or state when to prefer this tool over them, but the usage context is strong enough to guide correct invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
release_datasetRelease a staged statistical datasetADestructiveIdempotentInspect
Idempotently remove a caller-owned staged dataset before its TTL.
| Name | Required | Description | Default |
|---|---|---|---|
| dataset_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| released | Yes | |
| dataset_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, so the description correctly echoes 'Idempotently remove'. It adds useful context: the dataset is caller-owned and the action happens before TTL, which clarifies ownership and timing. There is no contradiction, and the description adds value beyond the annotations by specifying these details.
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?
One short, front-loaded sentence states the verb, the object, and the key constraints. Every word earns its place, with no filler or repetition of the title.
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 a single parameter and an output schema, the description covers the core operation, ownership, and timing. However, the complete absence of parameter guidance is a notable gap, even though the tool is simple. An agent would still need to infer what dataset_id refers to, so the description is not fully self-sufficient.
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 0%, and the description provides no explanation of dataset_id – what it represents, how to obtain it, or any format expectations. With a single parameter and zero coverage, the description fails to compensate, leaving the agent without guidance on what value to supply.
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 action (remove) and the resource (a staged dataset), and adds scoping ('caller-owned', 'before its TTL') that distinguishes it from sibling tools like stage_url or query_dataset. An agent can immediately grasp what this tool does without inspecting other definitions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the usage context – you release a staged dataset you own before its TTL – but it does not explicitly mention when not to use it or compare it to alternatives like stage_url or inspect_dataset. There is no guidance on selecting this tool over others, so it falls short of the level of explicit routing seen in get_calls.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stage_urlFallback: stage an Aard-issued datasetAInspect
Fallback for clients that cannot download and query the source locally.
Use only when local execution is unavailable or the user explicitly asks for Aard-managed staging. Never fetch the URL with web search or request its response body directly. Stage the exact unchanged fallback URL outside model context; this tool returns metadata only. Use its dataset_id with inspect_dataset or query_dataset.
The URL alone is sufficient. download_ref is an optional fast path — if you cannot copy it exactly, OMIT it rather than risk mistyping it; the server then re-derives the grant itself and the call still succeeds.
no_records_for_selection is TERMINAL, not a fault: the request was well-formed and the source holds no observations for it. Widen the selection or state that no data exists — do not retry the same selection.
Args: url: The exact csv_url/download_url from build_url, byte-for-byte. This is the value that matters — an edited URL is refused. download_ref: Optional. The signed grant from the same build_url result, copied exactly. Omit it if you cannot. format: Content-type handling. "auto" (default) requires the origin to declare a CSV media type. "csv" and "sdmx-csv" additionally accept an application/octet-stream response, for origins that serve CSV without labelling it — use them only when "auto" fails with unsupported_content_type.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| format | No | auto | |
| download_ref | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| sha256 | Yes | |
| dataset_id | Yes | |
| expires_at | Yes | |
| content_type | Yes | |
| bytes_downloaded | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false, openWorldHint=true. The description adds meaningful behavioral context: the tool stages outside model context, returns metadata only, and treats no_records_for_selection as terminal rather than a fault. It also warns that an edited URL is refused. This goes beyond the annotations without contradicting them.
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, usage constraints, terminal behavior, then parameter details. It earns its length because every sentence adds operational guidance. Slightly long, but the complexity of the tool justifies it.
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 (3 params, 0% schema coverage, output schema present), the description covers the critical operational details: when to use, what not to do, how to handle errors, and how to chain with sibling tools. The output schema exists, so return values need not be described. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden. It explains the exact semantics of url (byte-for-byte, edited URLs refused), download_ref (optional fast path, omit if uncertain), and format (auto vs csv/sdmx-csv with specific failure conditions). This is far beyond what the bare schema provides.
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 'Fallback for clients that cannot download and query the source locally' and immediately distinguishes it from siblings like fetch and build_url. It states a specific verb (stage) and resource (an Aard-issued dataset), and clarifies it returns metadata only, not the response body.
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 says 'Use only when local execution is unavailable or the user explicitly asks for Aard-managed staging.' It also names alternatives (inspect_dataset, query_dataset) and gives a negative directive: 'Never fetch the URL with web search or request its response body directly.' This is strong when-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Related MCP Connectors
Macro indicators from World Bank, FRED, IMF, and OECD via unified query surface.
Macro data for AI agents: GDP, inflation, unemployment and more (World Bank, US BLS). No keys.
Macro data for AI agents: GDP, inflation, unemployment and more (World Bank, US BLS). No keys.
Discover, resolve, and query official Brazilian economic data with semantic search and provenance.
Related MCP Servers
- AlicenseAqualityAmaintenanceOfficial economic statistics with full citations — World Bank, IMF WEO, ECB — plus verify_stat to check a claimed figure against the official series. Free, remote, no auth.121MIT
- AlicenseAqualityBmaintenanceEnables querying international macro statistics, company identity data via LEI, and FX rates from dozens of free keyless providers through unified tools.12MIT
- AlicenseNot gradedqualityBmaintenanceEnables natural language access to 800,000+ economic time series from FRED, including GDP, inflation, unemployment, and interest rates, with built-in transforms and frequency aggregation.104 npmMIT
- AlicenseAqualityBmaintenanceEnables querying Malaysian official statistics through natural language, with correct series resolution, statistical transformations, and provenance-attached data.11MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.