Skip to content

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.

Changes · 1

7 tools: 1 change things and 6 only read.

Scanned Oct 21, 2026

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

Findings

Matches of fixed checks, with the text they matched.

1 warn
  • The server marks "oecd_dataframe_query" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"idempotentHint":true,"openWorldHint":false}; The name "oecd_dataframe_query" says "query": a word for reading.

    What this check looks for

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".

      Matched text

      annotations: {"readOnlyHint":true,"idempotentHint":true,"openWorldHint":false}; The name "oecd_dataframe_query" says "query": a word for reading.

      What this check looks for
    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/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

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