oecd-mcp-server
Server Details
Search and query 1,500+ OECD statistical datasets via SDMX. Keyless.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP
- URL
- Repository
- cyanheads/oecd-mcp-server
- GitHub Stars
- 2
- Server Listing
- OECD MCP Server
Available Tools
7 toolsoecd_dataframe_describeOecd Dataframe DescribeARead-onlyIdempotentInspect
List tables and columns staged on a DataCanvas by a prior oecd_query_dataset spill. Call this before oecd_dataframe_query to discover exact table and column names for SQL. Only available when CANVAS_PROVIDER_TYPE=duckdb is set.
| Name | Required | Description | Default |
|---|---|---|---|
| canvas_id | Yes | Canvas ID returned by oecd_query_dataset. Identifies the DataCanvas session holding the staged observation tables. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Present when the call failed. Absent on success. |
| tables | No | Tables and views staged on this canvas. |
| canvas_id | No | The canvas ID whose tables are listed. |
| table_count | No | Total number of tables and views. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the description's listing behavior is consistent and adds no contradiction. It adds context beyond annotations by revealing the dependency on a prior spill and the environmental requirement for duckdb. It does not detail output shape, but the presence of an output schema lowers the need for that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each with distinct value: what it lists, when to call it relative to oecd_dataframe_query, and the only environment where it is available. The most actionable statement is front-loaded, and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read-only metadata tool with a rich schema description and an output schema, the description fully covers what the agent needs: the object being inspected, the prerequisite spill, the ordering relative to the query tool, and the duckdb-only availability. No critical guidance is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the canvas_id schema entry already explains its provenance ('Canvas ID returned by oecd_query_dataset') and referent ('DataCanvas session holding the staged observation tables'). The description reinforces this linkage but adds no new parameter-level meaning, so the baseline score applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description opens with a specific verb and object: 'List tables and columns staged on a DataCanvas by a prior oecd_query_dataset spill.' It distinguishes itself from sibling oecd_dataframe_query by positioning itself as the pre-query discovery step, so an agent knows exactly what this tool does and which sibling it complements.
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: 'Call this before oecd_dataframe_query to discover exact table and column names for SQL.' It also names the prerequisite (prior oecd_query_dataset spill) and a hard restriction (CANVAS_PROVIDER_TYPE=duckdb), leaving no ambiguity about the invocation context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
oecd_dataframe_queryOecd Dataframe QueryARead-onlyIdempotentInspect
Run a read-only SQL SELECT against OECD observation tables staged on a DataCanvas by oecd_query_dataset. Call oecd_dataframe_describe first to discover exact table and column names, then use this tool for aggregation, filtering, GROUP BY, JOIN, and window functions. Only available when CANVAS_PROVIDER_TYPE=duckdb is set.
| Name | Required | Description | Default |
|---|---|---|---|
| sql | Yes | Read-only SELECT statement. Reference tables by the names returned by oecd_dataframe_describe. Only SELECT statements are allowed — DDL, DML, and file-reading functions are rejected. | |
| canvas_id | Yes | Canvas ID returned by oecd_query_dataset. Identifies the DataCanvas session holding the observation tables. |
Output Schema
| Name | Required | Description |
|---|---|---|
| rows | No | Result rows from the SQL query (capped at the canvas row limit). |
| error | No | Present when the call failed. Absent on success. |
| row_count | No | Full result count before any row cap. |
| column_names | No | Column names in the result, in order. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint and idempotentHint annotations, the description discloses important behavioral constraints: only SELECT statements are allowed, DDL/DML and file-reading functions are rejected, and the tool operates on tables staged by oecd_query_dataset. This adds meaningful safety and restriction context beyond what annotations already convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each carrying essential information: the core operation, required precursor and use cases, and a hard environment prerequisite. There is no filler or redundant restatement of the tool name or 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?
With a 100%-covered schema, an output schema present, and annotations already signaling read-only/idempotent behavior, the description supplies the remaining critical context: the dependency on oecd_query_dataset, the need to call oecd_dataframe_describe first, and the DuckDB provider condition. An agent has enough information to invoke this 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?
Both parameters are already fully described in the schema (100% coverage), so the baseline is 3. The description adds value by explaining that sql should reference table names from oecd_dataframe_describe and that canvas_id identifies the DataCanvas session from oecd_query_dataset, reinforcing the relationship between parameters and workflow.
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 action ('Run a read-only SQL SELECT'), names the target resource ('OECD observation tables staged on a DataCanvas by oecd_query_dataset'), and clearly separates this from sibling tools like oecd_dataframe_describe and oecd_query_dataset. It uses a concrete verb and resource, making the tool's role immediately identifiable.
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 clear usage context: call oecd_dataframe_describe first to learn table/column names, use this tool for aggregation, filtering, GROUP BY, JOIN, and window functions, and note that it is only available when CANVAS_PROVIDER_TYPE=duckdb is set. It does not explicitly enumerate when-not-to-use alternatives, but the prerequisite and environment condition provide solid operational guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
oecd_get_dataset_infoOecd Get Dataset InfoARead-onlyIdempotentInspect
Fetch a dataflow's dimensions, their order, and how to construct a query key. Returns per-dimension names, codelist references, and position in the dot-delimited key. Required before calling oecd_query_dataset to understand key structure.
| Name | Required | Description | Default |
|---|---|---|---|
| flow_ref | Yes | Full flow reference, either {agencyID},{dsd_id}@{df_id} — e.g. "OECD.SDD.NAD,DSD_NAAG@DF_NAAG_I" — or the bare {agencyID},{df_id} form OECD uses for the few dataflows published without a datastructure prefix. Obtain from oecd_search_datasets. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Present when the call failed. Absent on success. |
| source | No | Data source attribution — always "OECD". |
| flow_ref | No | The resolved flow reference. |
| dimensions | No | Dimensions in ascending position order. |
| key_example | No | Example dot-delimited key with wildcards — each dot corresponds to one dimension in position order. Empty segments are wildcards. Replace with actual codes from oecd_get_dimension_values. |
| non_production | No | True if OECD flagged this dataflow as experimental or deprecated. |
| time_dimension | No | Time dimension — used for startPeriod/endPeriod filtering in oecd_query_dataset. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and openWorldHint=true, so the safety profile is covered. The description adds value by disclosing that the tool returns key-construction information (position in the dot-delimited key) and that it is a prerequisite step, which is behavioral context beyond the annotations. It doesn't discuss rate limits or error cases, but for a read-only metadata fetch the annotations plus the description are 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?
Three sentences, each earning its place: the first states what the tool returns, the second details the return contents, and the third gives the usage context. The most important information (what it fetches and why it's needed) is front-loaded. No filler or repetition of schema details.
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 has one parameter, a rich schema description, an output schema, and annotations covering safety and idempotency. The description explains the return value's purpose and the prerequisite relationship to oecd_query_dataset. Nothing an agent needs to decide whether to call this tool and how to use its output is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents flow_ref thoroughly, including the two accepted forms and an example. The description adds context by explaining that the output is needed to construct query keys, which helps the agent understand why flow_ref matters. Since the schema does the heavy lifting, a 4 is appropriate rather than a 5.
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 ('Fetch'), a specific resource ('a dataflow's dimensions'), and the concrete output (dimension names, codelist references, position in the dot-delimited key). It also explicitly distinguishes itself from oecd_query_dataset by saying it is required before calling that tool to understand key structure. This clearly differentiates it from siblings like oecd_get_dimension_values and oecd_query_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 explicitly says 'Required before calling oecd_query_dataset to understand key structure,' which gives a clear when-to-use directive and names the alternative it supports. It also implies this is a prerequisite/metadata tool rather than a data-fetching tool, which helps an agent choose it over oecd_query_dataset or oecd_get_dimension_values. No exclusions are needed because the tool's role as a prerequisite is clearly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
oecd_get_dimension_valuesOecd Get Dimension ValuesARead-onlyIdempotentInspect
Fetch the valid codes and labels for one dimension of a dataflow. Use to resolve human-readable names (countries, measures) to SDMX codes before querying with oecd_query_dataset. Pass query to match a code or label by substring — codelists run to a thousand-plus entries, and the response is a page of at most limit codes either way.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum codes to return (1–500, default 50). | |
| query | No | Case-insensitive substring matched against both the code and its label, so "PA" and "percent" each reach the code "PA" / "Percent per annum". Omit to page the whole codelist. | |
| offset | No | Zero-based index of the first code to return within the matching list, applied before limit. Advance it to page; an offset past the last match returns an empty page. | |
| flow_ref | Yes | Full flow reference — e.g. "OECD.SDD.NAD,DSD_NAAG@DF_NAAG_I", or the bare "OECD.TAD.ARP,DF_AEI2024_DASHBOARD" form for a dataflow published without a datastructure prefix. Obtain from oecd_search_datasets. | |
| dimension_id | Yes | Dimension identifier to fetch codes for — e.g. "REF_AREA" or "MEASURE". Obtain valid dimension IDs from oecd_get_dataset_info. |
Output Schema
| Name | Required | Description |
|---|---|---|
| codes | No | The requested page of codes, after query, offset, and limit are applied. |
| error | No | Present when the call failed. Absent on success. |
| notice | No | Present when the page needs explaining — the dimension has no codelist, the query matched nothing, or codes remain beyond the page. States how to reach the rest. |
| source | No | Data source attribution — always "OECD". |
| flow_ref | No | The flow reference this dimension belongs to. |
| code_count | No | Number of codes in this page — not the size of the dimension's codelist. |
| totalCount | No | Codes matching before offset and limit, disclosed when the page does not cover them all. |
| dimension_id | No | The dimension whose codes are listed. |
| effectiveQuery | No | The substring filter as applied. Absent when the whole codelist was paged. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral context beyond the readOnly/openWorld/idempotent annotations: responses are paginated at 'at most limit codes either way,' and codelists 'run to a thousand-plus entries,' explaining why querying and paging matter. 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?
Two sentences deliver purpose, usage context, a rationale for the query parameter, and pagination behavior. Everything earns its place and the key action 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?
Input schema fully documents parameters, an output schema exists, and the description supplies the workflow context and pagination behavior. It is complete for practical use, though explicit alternative tool guidance would make it stronger.
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 applies. The description adds workflow context but does not materially elaborate on individual parameter meanings beyond what the schema already documents, so it neither compensates nor needs to.
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: 'Fetch the valid codes and labels for one dimension of a dataflow.' It also frames the tool's role in the workflow, resolving human-readable names to SDMX codes before using oecd_query_dataset, which differentiates it from 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?
Clear context is provided: use this tool to resolve names to codes before querying with oecd_query_dataset. It does not enumerate exclusions or alternative tools explicitly, but the intended position in the workflow is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
oecd_list_agenciesOecd List AgenciesARead-onlyIdempotentInspect
List OECD SDMX agencies, the directorate each belongs to, and the number of dataflows each publishes. Use to discover agency IDs before filtering oecd_search_datasets by department.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Present when the call failed. Absent on success. |
| source | No | Data source attribution — always "OECD". |
| agencies | No | Agencies and their dataflow counts, sorted descending by count. |
| total_agencies | No | Total number of distinct agencies. |
| total_dataflows | No | Total number of dataflows across all agencies. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the safety profile is covered. The description adds value by naming the returned content (agencies, directorate, dataflow counts) and its intended role in a search workflow. It does not go further into behavior such as pagination, ordering, or how open-world results should be interpreted, but for a zero-parameter list 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?
Two sentences with no filler. The first sentence states what the tool returns, and the second gives the concrete workflow purpose. Every word earns its place and the key action 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?
For a zero-parameter, read-only, idempotent listing tool with an output schema present, the description covers the essential information: what is returned and why an agent would invoke it. The annotations handle side-effect concerns, and the output schema handles return structure details.
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 tool has zero parameters, so the input schema is complete by definition and there is nothing for the description to clarify. Baseline for no-parameter tools is 4, and the description appropriately avoids inventing parameter information that does not exist.
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 ('List OECD SDMX agencies') and specifies the exact output fields ('directorate each belongs to, and the number of dataflows each publishes'). It differentiates itself from siblings by positioning itself as the precursor to filtering oecd_search_datasets, so an agent can distinguish it without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives an explicit use case: discover agency IDs before filtering oecd_search_datasets by department. It names the sibling tool and the workflow context. It does not explicitly state when not to use it, but the positive guidance is specific enough to route an agent effectively.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
oecd_query_datasetOecd Query DatasetARead-onlyIdempotentInspect
Fetch observations from an OECD dataflow filtered by a dimension key and optional time range. Returns decoded rows (one per observation) with dimension and attribute labels, and values already scaled by the observation unit multiplier. Large multi-country time-series spill to a DataCanvas table — follow up with oecd_dataframe_query; without DataCanvas every row still comes back, but the rendered table stops at a preview slice. Call oecd_get_dataset_info first to learn the dimension order for constructing the key.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Dot-delimited dimension key matching the dimension order from oecd_get_dataset_info. Empty segments are wildcards; "+" separates multiple values per segment. Example: "A.USA+DEU.B1GQ.." — Annual, USA or Germany, GDP, all remaining dimensions. | |
| flow_ref | Yes | Full flow reference — e.g. "OECD.SDD.NAD,DSD_NAAG@DF_NAAG_I", or the bare "OECD.TAD.ARP,DF_AEI2024_DASHBOARD" form for a dataflow published without a datastructure prefix. Obtain from oecd_search_datasets and pass it through unchanged. | |
| canvas_id | No | Canvas ID from a prior oecd_query_dataset call, to stage this result alongside that one. Omit to let the server mint a canvas if this result needs one — a canvas_id comes back only when the result was large enough to spill, never on a result that fits inline. | |
| end_period | No | End of the time range — ISO period code such as "2023" or "2023-Q4". Omit to include up to the latest available period. | |
| start_period | No | Start of the time range — ISO period code such as "2010", "2010-Q1", or "2010-01". Omit to include all history (may produce very large results). |
Output Schema
| Name | Required | Description |
|---|---|---|
| rows | No | Observation rows. Every row of the result when truncated is absent; the leading preview slice when truncated is true — query the canvas table for the rest. |
| error | No | Present when the call failed. Absent on success. |
| source | No | Data source attribution — always "OECD". |
| canvas_id | No | Canvas handle for the staged result. Present only when DataCanvas is configured and the result exceeded the inline budget; absent when DataCanvas is off, and absent when it is on but the result fit inline. Pass to oecd_dataframe_query or oecd_dataframe_describe. |
| query_key | No | Dimension key used in this query. |
| row_count | No | Total rows in the result (or on the canvas when truncated). |
| truncated | No | True when rows is a preview slice and the full result was staged on DataCanvas; omitted entirely (never false) when rows holds the complete result. Use oecd_dataframe_query with the canvas_id for analytics over the full set. A complete rows never means a complete rendered table — content_table_capped reports that separately. |
| table_name | No | Canvas table name holding the full result — present when canvas_id is set. |
| query_flow_ref | No | Flow reference used in this query. |
| query_end_period | No | End period filter applied in this query, if any. |
| content_table_rows | No | Rows the rendered table shows when content_table_capped is true. |
| query_start_period | No | Start period filter applied in this query, if any. |
| content_table_capped | No | True when the rendered table shows only the leading rows of the result. Distinct from truncated: nothing was staged anywhere, and structuredContent.rows still holds every row. To shrink the result itself, name fewer values per key segment or set a narrower start_period / end_period; to reach the full set as a queryable table instead, run with CANVAS_PROVIDER_TYPE=duckdb and follow up with oecd_dataframe_query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavior beyond the annotations: rows are decoded with labels, values are scaled by the observation unit multiplier, large results spill to DataCanvas, and without DataCanvas every row still returns but the rendered table preview is sliced. No contradiction with the readOnly, openWorld, or idempotent 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?
Three dense sentences deliver the core action, return behavior, spill handling, and prerequisite in order. Every clause earns its place with no redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the detailed input schema, annotations, and output schema, the description covers what the tool returns, how result size behaves, what to do for large spills, and what to call beforehand. An agent has enough context to invoke this tool correctly and route to siblings when appropriate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and each parameter already has a detailed explanation, so the description does not need to repeat parameter-level semantics. The main description adds context around result behavior rather than new parameter meaning, which matches the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: it fetches observations from an OECD dataflow filtered by dimension key and optional time range. It differentiates itself from siblings by explicitly naming the prerequisite oecd_get_dataset_info and the follow-up oecd_dataframe_query.
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 usage context: call oecd_get_dataset_info first to learn dimension order, and follow up with oecd_dataframe_query when large results spill to a DataCanvas table. This tells an agent when this tool fits into a multi-step workflow versus when another sibling is needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
oecd_search_datasetsOecd Search DatasetsARead-onlyIdempotentInspect
Search OECD dataflows by keyword or theme, matching against dataflow names and descriptions. Returns flow_ref identifiers, names, and agency IDs for use with oecd_get_dataset_info.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results to return (1–100, default 20). | |
| query | Yes | Keyword or phrase to search for in dataflow names and descriptions — e.g. "GDP", "employment", "education". Every whitespace-separated token must appear somewhere in the name or description. | |
| offset | No | Zero-based index of the first match to return, applied before limit. Page through results past the limit by advancing it; an offset at or past total_matches returns an empty list. | |
| agency_id | No | Optional agency identifier to restrict the search scope — e.g. "OECD.SDD.NAD". Obtain valid agency IDs from oecd_list_agencies. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Present when the call failed. Absent on success. |
| offset | No | Zero-based index of the first returned result within the full match list. |
| source | No | Data source attribution — always "OECD". |
| dataflows | No | Matching dataflows for the requested page, up to the requested limit. |
| totalCount | No | Total dataflows matching the query, disclosed when matches remain beyond the returned page. |
| result_count | No | Number of results returned (may be less than total_matches). |
| total_matches | No | Total dataflows matching the query before applying offset and limit. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and openWorld behavior, so the description only needs to add context. It adds the matching behavior (against names and descriptions) and the specific return payload, which is useful beyond the annotations. No contradiction with the annotation 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?
Two sentences with no filler; the search action and matching scope are front-loaded, and the return-value note is relevant to downstream tool selection.
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 search tool with a fully documented schema, rich annotations, and an output schema, the description covers the necessary selection and invocation context. It tells the agent what to expect and how the result connects to oecd_get_dataset_info.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the input schema already documents query, limit, offset, and agency_id with examples and constraints. The tool description adds no parameter-level meaning, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description specifies a concrete action (search OECD dataflows by keyword or theme), the matching target (dataflow names and descriptions), and the returned identifiers (flow_ref, names, agency IDs). It also positions the tool as the discovery step preceding oecd_get_dataset_info, distinguishing it from sibling query/dataframe 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 makes the intended workflow clear: search by keyword or theme to obtain identifiers 'for use with oecd_get_dataset_info.' It does not explicitly list when not to use it or name alternatives, so it stops short of full exclusion guidance.
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. Dates show when Glama detected each change.
7 tool updates
- First observed
oecd_dataframe_describe - First observed
oecd_dataframe_query - First observed
oecd_get_dataset_info - First observed
oecd_get_dimension_values - First observed
oecd_list_agencies - First observed
oecd_query_dataset - First observed
oecd_search_datasets
Frequently Asked Questions
Claiming proves that you control a remote MCP connector. It does not move, proxy, or interrupt the server.
Open the connector listing, choose Claim ownership, and sign in to Glama.
Complete one verification method:
GitHub identity — fastest for official registry listings. For a namespace such as
io.github.alice/server, link the matching GitHub user, then choose Claim with GitHub. An organization namespace such asio.github.acme/serveralso needs that organization to have installed the Glama AI GitHub App and approved its permissions, because GitHub discloses organization membership only to apps it has installed. Use HTTP or DNS when it has not.HTTP challenge — works when you can deploy a public file. Generate a token, publish the exact JSON Glama shows at
/.well-known/glama.jsonon the same origin as the connector, then choose Check HTTP challenge.DNS challenge — works when you control DNS but cannot change the server. Generate a token, create the exact TXT record Glama shows, wait for it to propagate, then choose Check DNS challenge.
After verification, Glama sends a confirmation email and gives you access to listing details, thumbnails, health checks, and analytics. Keep the HTTP file or DNS record in place: Glama periodically checks it and ownership remains verified while the token is discoverable.
The HTTP ownership file has this structure:
{
"$schema": "https://glama.ai/mcp/schemas/connector.json",
"claim": "glama_claim_..."
}Claim tokens are opaque, stable, and bound to the signed-in Glama account. They contain no email address or other personal information. If Glama can no longer discover a verified HTTP or DNS token, it starts a seven-day grace period before removing claim-based access. Restore the same token during that period to keep ownership verified. Never publish an email address, Glama session token, GitHub token, or connector credential as ownership proof.
If verification fails, confirm that you copied the current token exactly. The HTTP file must be public, return valid JSON with a successful HTTP response, and stay on the connector's origin. DNS changes may need more time to propagate. A claim cannot transfer to a different origin or hostname: if the connector target changes, Glama starts the grace period and the new target must be claimed separately after the previous claim is released.
For a connector linked to the official MCP Registry, registry updates continue to replace its name, description, and URL by default. After claiming, open Manage connector and enable Use Glama listing details as the source of truth if edits made on Glama should be preserved. Categories and thumbnails are always managed on Glama; registry linkage and technical connection settings continue to sync.
Control your server's listing on Glama, including description and metadata
Access analytics and receive server usage reports
Get monitoring and health status updates for your server
Feature your server to boost visibility and reach more users
To improve your MCP server's ranking:
Claim ownership of the server listing
Complete the server profile with an accurate description and thumbnail
Provide a test profile so Glama can connect to and evaluate the server
Keep tool definitions clear and complete to earn a high Tool Definition Quality Score (TDQS)
Route real usage through the Glama Gateway; more recorded successful server uses also improve the ranking
For users:
Full audit trail – every tool call is logged with inputs and outputs for compliance and debugging
Granular tool control – enable or disable individual tools per connector to limit what your AI agents can do
Centralized credential management – store and rotate API keys and OAuth tokens in one place
Change alerts – get notified when a connector changes its schema, adds or removes tools, or updates tool definitions, so nothing breaks silently
For server owners:
Proven adoption – public usage metrics on your listing show real-world traction and build trust with prospective users
Tool-level analytics – see which tools are being used most, helping you prioritize development and documentation
Direct user feedback – users can report issues and suggest improvements through the listing, giving you a channel you would not have otherwise
The connector status is unhealthy when Glama is unable to successfully connect to the server. This can happen for several reasons:
The server is experiencing an outage
The URL of the server is wrong
Credentials required to access the server are missing or invalid
If you are the owner of this MCP connector and would like to make modifications to the listing, including providing test credentials for accessing the server, please contact support@glama.ai.
Discussions
No comments yet. Be the first to start the discussion!
Related MCP Connectors
Query IMF SDMX 3.0 macroeconomic dataflows — WEO, BOP, CPI, exchange rates, 190 countries.
UK Office for National Statistics dataset catalogue + Beta JSON API
Search and query the Eurostat catalogue — EU economy, demography, trade, and NUTS regional data.
Search and query government open-data portals (Socrata SODA API).
Related MCP Servers
- AlicenseAqualityFmaintenanceProvides AI assistants access to over 5,000 OECD economic and statistical datasets via the SDMX API for search, analysis, and comparison across 38 countries.9308MIT
- AlicenseNot gradedqualityCmaintenanceEnables querying OECD data through MCP, including searching curated dataflows, fetching tidy dataset rows from the OECD SDMX REST API, and asking natural-language questions via the Pipeworx gateway.8MIT
- AlicenseAqualityBmaintenanceProvides OECD statistical data (employment, wages, etc.) through SDMX API, supporting Korean-language queries. Enables listing indicators, retrieving stats, trends, comparisons, and rankings among OECD countries.8MIT
- AlicenseAqualityBmaintenanceEnables querying, exploring, and downloading ISTAT statistical datasets via SDMX REST API, with unified metadata, territorial code resolution, and data extraction.7MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.
TDQS
Each tool occupies a distinct stage of the OECD data workflow: search/agency discovery, dataset structure, dimension values, observation querying, and SQL analysis of spilled results. The two query tools are differentiated by source (SDMX vs staged DataCanvas tables), and the two metadata tools are differentiated by purpose (key structure vs codelist values).
Most tools follow an oecd_<verb>_<noun> pattern (get, list, query, search), and all share the oecd_ prefix and snake_case. The two dataframe tools shift to oecd_dataframe_<verb>, a minor but noticeable ordering deviation.
Seven tools is well-scoped for an OECD data access server: discovery, metadata, dimension values, observation query, and large-result SQL handling. There is no apparent bloat or overly thin coverage.
The set covers the full journey from finding datasets and agencies, learning the SDMX key structure, resolving dimension codes, fetching observations, and analyzing spilled datasets with SQL. This is a complete read-only workflow for the domain.