io. github. cyanheads/ oecd-mcp-server
by cyanheads · remote · local (npm) · no sign-in to list tools · v0.4.0 · published by GitHub user cyanheads
Search and query 1,500+ OECD statistical datasets via SDMX. Keyless.
7 tools: 1 change things and 6 only read.
Scanned Oct 21, 2026
- Deletes or cancels0Claude Code: deny
- Can't be undone0Claude Code: ask
- Changes things1Claude Code: ask: see these tools
- Only reads6Claude Code: allow: see these tools
1 check matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.
claude mcp add --transport http oecd https://oecd.caseyjhand.com/mcpFindings
Matches of fixed checks, with the text they matched.
The server marks "oecd_dataframe_query" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"idempotentHint":true,"openWorldHint":false}; The name "oecd_dataframe_query" says "query": a word for reading.
Tools
Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.
7 tools
Changes things 1Claude Code: ask
oecd_dataframe_queryRun a read-only SQL SELECT against OECD observation tables staged on a DataCanvas by oecd_query_dataset.1 finding
Why it is in this group
- The name "oecd_dataframe_query" says "query": a word for reading.
- The description's first verb is "run": a word for a change.
- The input takes a statement or command to run (input.sql), which can change anything it can reach.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "oecd_dataframe_query" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"idempotentHint":true,"openWorldHint":false}; The name "oecd_dataframe_query" says "query": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: false
Only reads 6Claude Code: allow
oecd_dataframe_describeList tables and columns staged on a DataCanvas by a prior oecd_query_dataset spill.No findings
Why it is in this group
- The name "oecd_dataframe_describe" says "describe": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: false
oecd_get_dataset_infoFetch a dataflow's dimensions, their order, and how to construct a query key.No findings
Why it is in this group
- The name "oecd_get_dataset_info" says "get": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: true
oecd_get_dimension_valuesFetch the valid codes and labels for one dimension of a dataflow.No findings
Why it is in this group
- The name "oecd_get_dimension_values" says "get": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: true
oecd_list_agenciesList OECD SDMX agencies, the directorate each belongs to, and the number of dataflows each publishes.No findings
Why it is in this group
- The name "oecd_list_agencies" says "list": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: true
oecd_query_datasetFetch observations from an OECD dataflow filtered by a dimension key and optional time range.No findings
Why it is in this group
- The name "oecd_query_dataset" says "query": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: true
oecd_search_datasetsSearch OECD dataflows by keyword or theme, matching against dataflow names and descriptions.No findings
Why it is in this group
- The name "oecd_search_datasets" says "search": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: true
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Install
Pinned to version 0.4.0. Values in angle brackets are yours to fill in.
claude mcp add --transport http oecd https://oecd.caseyjhand.com/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__oecd__oecd_list_agencies",
"mcp__oecd__oecd_search_datasets",
"mcp__oecd__oecd_get_dataset_info",
"mcp__oecd__oecd_get_dimension_values",
"mcp__oecd__oecd_query_dataset",
"mcp__oecd__oecd_dataframe_describe"
],
"ask": [
"mcp__oecd__oecd_dataframe_query"
],
"deny": []
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as oecd. Review it before you use it.
