An MCP server that discovers and retrieves official statistics from SDMX services.
Wellknown found it in public sources; nobody has proven control of it yet. Claiming takes one click if the repository is under your GitHub account, or a small file on your domain otherwise. Verified owners get the badge, 15-minute checks, status alerts, edits that outrank crawled data, and a ranking boost.
Agents can do it too: POST https://wellknown.network/api/v1/claims with {"agent":"sdmx-data-mcp","method":"well_known_file"} — machine-readable steps at claim.json, guide at /docs/claim.
Everything here was measured by our prober or read from a registry. Nothing is self-reported.
Attributed to the source that supplied each field. Treated as claims, not facts.
# sdmx-data-mcp An [MCP](https://modelcontextprotocol.io) server that lets an AI assistant discover **and retrieve** official statistics from SDMX services. Built on the BIS's own [pysdmx](https://github.com/bis-med-it/pysdmx) library. ## Why Existing SDMX MCP servers navigate metadata well and then hand back a *query URL*. The assistant ends up with a link, not numbers. `sdmx-data-mcp` finishes the job: `get_data` returns the observations. ## Install ```bash pip install sdmx-data-mcp ``` Python 3.10+. ## Configure your client **Claude Code** ```bash claude mcp add sdmx -- sdmx-data-mcp ``` **Claude Desktop** — in `claude_desktop_config.json`: ```json { "mcpServers": { "sdmx": { "command": "sdmx-data-mcp" } } } ``` **Cursor** — in `.cursor/mcp.json`: ```json { "mcpServers": { "sdmx": { "command": "sdmx-data-mcp" } } } ``` If `sdmx-data-mcp` is not on your `PATH`, use the absolute path to the executable in the environment where you installed it, or `"command": "python", "args": ["-m", "sdmx_data_mcp"]`. To share one instance over the network instead: ```bash sdmx-data-mcp --transport http --host 127.0.0.1 --port 8000 ``` ## The four tools Meant to be called in order. | Tool | Purpose | | --- | --- | | `list_services` | Known endpoints, plus any SDMX-REST v2 base URL you supply | | `search_dataflows` | One `dataflows()` call, then local term matching | | `inspect_dataflow` | Components, available codes, size signals | | `get_data` | **Retrieves the observations** | ## A worked example Asking an assistant *"how much do Swiss banks have in foreign claims since 2020?"* drives this sequence against the BIS. **1. Find the dataflow.** ```text search_dataflows(query="consolidated banking") -> ref: BIS:WS_CBS_PUB(1.0) name: Consolidated banking matched_on: name ``` **2. Work out what "Swiss" actually means here.** ```text inspect_dataflow(ref="BIS:WS_CBS_PUB(1.0)", find_code="CH") -> code_locations: …
Mapped onto the structured taxonomy from declared text and observed tool names. Confidence shown for derived entries.
Every source is kept verbatim. Field changes are logged as events.