关于 oecd-mcp-server
这是一个通过 SDMX API 搜索和查询 1,500 多个 OECD 统计数据集的 MCP 服务,面向跨国统计分析用户。它支持发现维度,并可将大型结果存入 DataCanvas 后执行 SQL 查询。
主要功能
- 01搜索 OECD 数据集和机构
- 02查看维度及有效代码
- 03按维度和时期查询观测值
- 04将大型结果存入 DataCanvas
- 05对暂存表运行只读 SQL
适用场景
- 01查找贸易或就业相关数据集
- 02选择国家和指标代码
- 03获取时间序列观测数据
- 04用 SQL 分析大型跨国数据
MCP 相关
提供八种工具和一个资源,用于 OECD SDMX 数据集发现、元数据、维度值、观测数据及 DataCanvas SQL 分析。支持 STDIO 与 Streamable HTTP,无需 API 密钥。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://oecd.caseyjhand.com/mcpclaude mcp add --transport http cyanheads-oecd https://oecd.caseyjhand.com/mcp{"mcpServers":{"cyanheads-oecd":{"type":"http","url":"https://oecd.caseyjhand.com/mcp"}}}在 Cursor 中打开{"servers":{"cyanheads-oecd":{"type":"http","url":"https://oecd.caseyjhand.com/mcp"}}}在 VS Code 中打开{"mcpServers":{"cyanheads-oecd":{"type":"http","url":"https://oecd.caseyjhand.com/mcp"}}}{"mcpServers":{"cyanheads-oecd":{"serverUrl":"https://oecd.caseyjhand.com/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
7此工具无需参数。
详细介绍
@cyanheads/oecd-mcp-server
通过 MCP,借助 OECD SDMX API 搜索、探索和查询 1,500 多个 OECD 统计数据集(国民账户、就业、贸易、教育、健康)。支持 STDIO 或 Streamable HTTP。
公开托管服务: https://oecd.caseyjhand.com/mcp
概览
涵盖国民账户、就业、贸易、教育和健康领域的 1,500 多个数据集中的 OECD 统计数据。搜索数据集、检查其维度、查询观测值,并对大型多国家时间序列运行 SQL。无需 API 密钥。
工具
五个发现和数据工具,以及三个用于处理大型查询结果的 DataCanvas 工具:
| 工具 | 描述 |
|---|---|
oecd_list_agencies | 列出 OECD SDMX 机构及其所属司局和各自发布的数据流数量 |
oecd_search_datasets | 按关键词或主题搜索 1,500 多个 OECD 数据流 |
oecd_get_dataset_info | 获取数据流的维度、键顺序和代码列表引用 |
oecd_get_dimension_values | 获取某个维度的有效代码和标签(国家、指标、频率) |
oecd_query_dataset | 按维度键和时间范围筛选并获取观测值;大型结果会转存到 DataCanvas |
oecd_dataframe_describe | 列出先前由 oecd_query_dataset 转存的 DataCanvas 表和列 |
oecd_dataframe_query | 对 DataCanvas 表运行只读 SQL SELECT |
oecd_dataframe_drop | 分析完成后删除暂存的 DataCanvas 表或视图 — 需通过 OECD_DATAFRAME_DROP_ENABLED=true 启用 |
资源
| 资源 | 描述 |
|---|---|
oecd://dataflow/{agency_id}/{flow_id} | 单个 OECD 数据流的维度元数据 — 与 oecd_get_dataset_info 内容相同 |
所有资源数据也可通过工具访问。使用 oecd_get_dataset_info 可获取相同内容。
能力参考
oecd_list_agencies 工具
- 无输入;返回所有机构 ID(例如
OECD.SDD.NAD)、对应的局名称和数据流数量,并按数量排序 - 通过同一目录发布数据流的 OECD 以外发布方(
ESTAT、IAEG-SDGs)没有局名称
oecd_search_datasets 工具
query会与数据流名称和描述进行分词匹配;可选的agency_id用于限定范围;limit(1–100)和offset用于分页,并返回total_matches- 每条结果都包含其
flow_ref(其他所有工具使用的标识符)和matched_in(name、description或both)
oecd_get_dataset_info 工具
- 接受
flow_ref;按键顺序返回每个维度、对应的概念名称和代码列表引用,以及供oecd_query_dataset使用的key_example - 对不是数据流引用的字符串返回
invalid_flow_ref错误;对 OECD 未发布的数据流返回dataflow_not_found错误
oecd_get_dimension_values 工具
- 接受
flow_ref和dimension_id;可选的query会对代码和标签进行子字符串匹配 limit(1–500,默认值为 50)和offset用于对匹配结果分页;有更多结果时会返回完整匹配数
oecd_query_dataset 工具
flow_ref加上以点分隔的key(多个值用+表示,空段作为通配符),以及可选的start_period/end_period- 每条观测值占一行,每个维度和属性各占一列;
value已预先乘以value_scale - 大型结果会溢出到 DataCanvas,并返回
truncated: true、canvas_id和table_name;没有画布时,所有行都会保留在structuredContent中,只有渲染后的表格会受到限制(content_table_capped) - 溢出时会附带一条
notice,其中会标明画布和表格名称:使用oecd_dataframe_describe检查列,然后使用oecd_dataframe_query对完整结果执行 SQL。适合当前限制的结果不会分配新画布;显式提供的canvas_id仍会经过验证。
oecd_dataframe_describe 工具
- 接受
oecd_query_dataset返回的canvas_id;列出每个暂存表和视图的行数、列名及类型
oecd_dataframe_query 工具
canvas_id加上一条只读 SQLSELECT;写入操作、DDL 和系统目录访问都会被拒绝- 返回的行数不超过画布行数上限;
row_count报告完整行数
oecd_dataframe_drop 工具
canvas_id加上oecd_dataframe_describe列出的table_name;返回被删除对象的kind和remaining_tables- 需主动启用:该工具会列出,但除非
OECD_DATAFRAME_DROP_ENABLED=true,否则无法调用
oecd://dataflow/{agency_id}/{flow_id} 资源
- 内容与
oecd_get_dataset_info相同,格式为application/json {flow_id}的格式为{dsd_id}@{df_id},其中@编码为%40(例如oecd://dataflow/OECD.SDD.NAD/DSD_NAAG%40DF_NAAG_I),也可以是纯{df_id}
功能
基于 @cyanheads/mcp-ts-core 构建:支持 stdio 和 Streamable HTTP 传输、可插拔身份验证(none / jwt / oauth)、可切换存储(in-memory、filesystem、Supabase、Cloudflare KV/R2/D1),并提供结构化日志记录和可选的 OpenTelemetry 跟踪。
OECD 专属功能:
- 无密钥访问——无需 API 密钥;OECD SDMX 2.1 REST API 完全公开
- 覆盖 20 多个 OECD 统计部门的 1,500 多个数据流(国民账户、就业、通胀、贸易、教育、卫生、环境、税收、不平等)
- 端到端解析委托数据流和代码列表修订版本——如果 OECD 在一个服务根目录中编录某个数据流,却在另一个服务根目录中定义它,则会沿用目录自身的链接来获取结构、代码和观测值;代码取自数据结构指定的修订版本,而非端点当前的最新版本
AllDimensions观测模式——一次性将 SDMX-JSON 解码为扁平行对象,无需重建嵌套序列键oecd_query_dataset会将大型观测集(多国家时间序列)物化到 DuckDB DataCanvas,以便在对话中进行 SQL 分析;三个oecd_dataframe_*工具可对其进行操作,并且需要CANVAS_PROVIDER_TYPE=duckdb
面向 Agent 的输出:
- 支持工作流的工具界面——搜索返回的
flow_ref可直接传入信息、值和查询工具,无需重建 - 溢出提示——
truncated: true+canvas_id会告知 Agent 改用 SQL,而不是解析被截断的内联列表 - 在服务端完整解码 SDMX——Agent 看到的是
{ REF_AREA: "United States", MEASURE: "Gross domestic product", UNIT_MULT: "Billions", value: 26054614000000, value_scale: 1000000000 },而不是原始索引数组
入门
公共托管实例
公共实例位于 https://oecd.caseyjhand.com/mcp,无需安装即可使用。该实例提供 Streamable HTTP;每个客户端的配置格式各不相同。
Claude Code 配置:
claude mcp add --transport http oecd-mcp-server https://oecd.caseyjhand.com/mcp
Cline 配置(cline_mcp_settings.json):
{
"mcpServers": {
"oecd-mcp-server": {
"type": "streamableHttp",
"url": "https://oecd.caseyjhand.com/mcp"
}
}
}
Cursor 配置(mcp.json):
{
"mcpServers": {
"oecd-mcp-server": {
"url": "https://oecd.caseyjhand.com/mcp"
}
}
}
Claude Desktop 可在 Settings → Connectors 下添加远程服务。
自托管 / 本地运行
将以下内容添加到 MCP 客户端配置文件中。
{
"mcpServers": {
"oecd-mcp-server": {
"type": "stdio",
"command": "bunx",
"args": ["@cyanheads/oecd-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info"
}
}
}
}
也可使用 npx(无需 Bun):
{
"mcpServers": {
"oecd-mcp-server": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@cyanheads/oecd-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info"
}
}
}
}
也可使用 Docker:
{
"mcpServers": {
"oecd-mcp-server": {
"type": "stdio",
"command": "docker",
"args": [
"run", "-i", "--rm",
"-e", "MCP_TRANSPORT_TYPE=stdio",
"ghcr.io/cyanheads/oecd-mcp-server:latest"
]
}
}
}
大型查询结果的 DataCanvas SQL 分析默认已启用。要关闭它,请添加 CANVAS_PROVIDER_TYPE=none:
{
"mcpServers": {
"oecd-mcp-server": {
"type": "stdio",
"command": "bunx",
"args": ["@cyanheads/oecd-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"CANVAS_PROVIDER_TYPE": "none"
}
}
}
}
对于 Streamable HTTP,请设置传输方式并启动服务:
MCP_TRANSPORT_TYPE=http MCP_HTTP_PORT=3010 bun run start:http
# Server listens at http://localhost:3010/mcp
前置条件
- Bun v1.4.0 或更高版本(或 Node.js v24+)。
- 无需 API 密钥——OECD SDMX 是免费公开的 API。
安装
- 克隆代码库:
git clone https://github.com/cyanheads/oecd-mcp-server.git
- 进入目录:
cd oecd-mcp-server
- 安装依赖:
bun install
- 配置环境:
cp .env.example .env
# edit .env — most vars are optional; no API key required
配置
所有配置都会在启动时通过 src/config/server-config.ts 中的 Zod 架构进行验证。主要环境变量:
| 变量 | 描述 | 默认值 |
|---|---|---|
OECD_BASE_URL | OECD SDMX REST API 基础 URL。必须是可直接响应的 https 来源,不会跟随重定向,因此纯文本 http:// 来源会直接失败,而不会升级为 https。 | https://sdmx.oecd.org/public/rest |
OECD_TIMEOUT_MS | 每次请求的超时时间,单位为毫秒。 | 30000 |
CANVAS_PROVIDER_TYPE | Canvas 引擎。使用 duckdb 时,大型 oecd_query_dataset 结果会溢出到可查询的表中,而不只是限制渲染的预览;使用 none 时,所有行仍会在 structuredContent 中返回,只有渲染的表格会受到限制。 | duckdb |
OECD_DATAFRAME_DROP_ENABLED | 设置为 true 以注册 oecd_dataframe_drop。关闭时,该工具会标记为禁用,客户端无法调用。 | false |
MCP_TRANSPORT_TYPE | 传输方式:stdio 或 http。 | stdio |
MCP_HTTP_PORT | HTTP 服务的端口。 | 3010 |
MCP_SESSION_MODE | HTTP 会话模式:stateful、stateless 或 auto。源码中将服务声明为 stateless——它不保留每个会话的状态,DataCanvas 句柄由 canvas_id 标识——因此只有要覆盖该设置时才需要设置此项。 | stateless |
MCP_AUTH_MODE | 身份验证模式:none、jwt 或 oauth。 | none |
MCP_LOG_LEVEL | 日志级别(RFC 5424)。 | info |
LOGS_DIR | 日志文件目录(仅限 Node.js)。 | <project-root>/logs |
LOG_TOOL_FAILURE_PAYLOADS | 记录每次失败的工具调用参数和结果,按键名脱敏,并限制在 LOG_TOOL_FAILURE_PAYLOAD_MAX_BYTES(默认值为 16384)字节以内。自由格式值中的机密不会被脱敏。 | false |
OTEL_ENABLED | 启用 OpenTelemetry 插桩。 | false |
完整的可选覆盖项列表请参阅 .env.example。
运行服务
本地开发
-
构建并运行:
# One-time build bun run rebuild # Run the built server bun run start:stdio # or bun run start:http -
运行检查和测试:
bun run devcheck # Lint, format, typecheck, security bun run test # Vitest test suite bun run lint:mcp # Validate MCP definitions against spec
Docker
docker build -t oecd-mcp-server .
docker run --rm -p 3010:3010 oecd-mcp-server
Dockerfile 默认使用 HTTP 传输、无状态会话模式,并将日志写入 /var/log/oecd-mcp-server。默认会安装 OpenTelemetry 对等依赖;如要省略这些依赖,请使用 --build-arg OTEL_ENABLED=false 进行构建。
项目结构
| 目录 | 用途 |
|---|---|
src/index.ts | createApp() 入口点——注册工具和资源并初始化服务。 |
src/config/ | 使用 Zod 解析并验证服务专用的环境变量。 |
src/mcp-server/tools/definitions/ | 工具定义(*.tool.ts)——用于 OECD 数据发现、检索和 DataCanvas 分析的八个工具。 |
src/mcp-server/resources/definitions/ | 资源定义(*.resource.ts)——oecd://dataflow 资源。 |
src/services/oecd-http/ | 共享的 OECD 获取边界——其中包含供下方两个服务使用的超时和重试分类修正、每个被委派的服务根路径在访问前都会通过的来源检查、对配置主机之外任何重定向的拒绝,以及一项分类机制,可让上游拒绝在每个工具和资源中返回相同的声明原因。 |
src/services/oecd-structure/ | OECD SDMX 结构服务——数据流、数据结构、代码列表。 |
src/services/oecd-data/ | OECD SDMX 数据服务——观测值、SDMX-JSON 解码、DataCanvas 溢出。 |
src/services/canvas-accessor/ | DataCanvas 访问器——向工具注册并公开框架 Canvas 实例。 |
tests/ | 与 src/ 结构对应的单元测试和集成测试。 |
开发指南
请参阅 CLAUDE.md 了解开发指南和架构规则。简而言之:
- 处理器抛出异常,框架负责捕获——工具逻辑中不要使用
try/catch - 使用
ctx.log记录请求范围内的日志,使用ctx.state存储租户范围内的数据 - 通过
src/mcp-server/*/index.ts中的汇总导出注册新工具和资源 - 封装外部 API 调用:验证原始 SDMX-JSON → 规范化为领域类型 → 返回输出模式;绝不编造缺失字段
贡献
欢迎提交 Issue——请参阅 CONTRIBUTING.md,了解怎样的 Issue 才便于采取行动;并参阅 CODE_OF_CONDUCT.md,了解我们的协作方式。提交前请运行检查和测试:
bun run devcheck
bun run test
许可证
Apache-2.0——详情请参阅 LICENSE。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。