SwemoMCO是一个非官方的货币政策数据MCP服务器,它封装了瑞典中央银行的开放API,并将其转换为一个模型上下文协议(MCP)微服务。它将原始的REST端点转换为可以由LLMs或通过任何MCP客户端调用的类型化的Python工具。
本README假定您正在使用**Astral的uv**进行依赖管理和执行。
处理货币政策数据可能会很复杂:原始API需要手工编写的查询以及对不同系列的理解。此项目:
自2020年起,瑞典中央银行的服务现在包括预测值和实际(观测)数据,一旦官方数字发布。这使得该数据集适合于历史分析(例如,“2022年通货膨胀实际上发生了什么?”)和预测查询(例如,“瑞典中央银行对未来一年的GDP有何预期?”)。
瑞典中央银行每年发布四到五次新的预测。每次发布都标记为YYYY:I(例如,2025:2表示2025年的第二次发布)。
每个时间序列名称遵循以下模式:
国家-频率-区域-分解-单位-调整
示例:SEQGDPNAYCA → 瑞典(SE),季度(Q),GDP(GDP),国民账户分解(NA),同比变化(Y),日历调整(CA)。通过以下HTTP请求发现目录:
GET /forecasts/series_ids
每个政策周期都会产生关键宏观经济变量的新“版本”的预测。同时,随着实际结果的数据发布,瑞典中央银行会更新其实际观测值。这意味着您可以:
预测元数据示例:
{
"revision_dtm": "2024-07-02T08:55:00Z",
"forecast_cutoff_date": "2024-06-18",
"policy_round": "2024:3",
"policy_round_end_dtm": "2024-07-02T09:30:00Z"
}
┌─────────────────────────────────────────────────────────┐
│ 快速MCP服务器(src/swemo_mcp/server.py) │
│ │
│ • 注册约30个*工具*(每个经济系列一个) │
│ • 通过标准输入/ SSE / HTTP公开它们 │
└───────────────▲──────────────────────────────▲──────────┘
│ │
异步httpx LLM / 用户
│ │
┌───────────────┴────────────┐ ┌────────┴──────────┐
│ 瑞典中央银行REST API │ │ mcp-cli / ChatGPT │
└────────────────────────────┘ └───────────────────┘
services/monetary_policy_api.py – 薄薄的异步包装器,具有自动指数退避(在HTTP 429时最大重试)。tools/monetary_policy_tools.py – 每个系列一个声明性函数;文档字符串作为LLM提示。models.py中确保每个响应都有预期的模式。| 工具 | 系列ID | 描述 |
|---|---|---|
get_gdp_data | SEQGDPNAYCA | GDP同比,日历调整 |
get_unemployment_data | SEQLABUEASA | 劳动力调查失业率 |
get_cpi_data | SEMCPINAYNA | 核心CPI同比 |
| … | … | 总计约30个系列 – 运行list_series_ids()获取完整列表。 |
每个工具签名如下:
async def get_<series>_data(policy_round: str | None = None) -> MonetaryPolicyDataResponse
传递policy_round="2024:3"以固定版本;省略以获取完整历史。对于最终的历史数据,传递policy_round="latest"以便工具合并所有实际(观测)数据点。
前提条件:
- Python ≥ 3.12(使用
typing.TypeAlias/PEP 604联合)- Astral
uv≥ 0.2.0
通过一条命令克隆并设置项目:
uv sync
uv sync安装pyproject.toml中声明的所有生产和开发依赖项,如果需要则创建虚拟环境,并锁定确切版本,以便每位贡献者或CI流水线使用相同的堆栈。
编辑您的claude_desktop_config.json以添加Kolada MCP服务器:
"SwemoMCP": {
"args": [
"run",
"-i",
"--rm",
"--name",
"swemo-mcp-managed",
"swemo-mcp:local"
],
"command": "docker",
"env": {}
}
"SwemoPyPI": {
"args": ["swemo-mcp"],
"command": "/Users/hugi/.cargo/bin/uvx"
}
替换[path to kolada-mcp]为您本地目录:
"SwemoLocal": {
"args": [
"--directory",
"[path to kolada-mcp]/src/kolada_mcp",
"run",
"kolada-mcp"
],
"command": "uv"
}
更新后重启Claude Desktop。
import asyncio
from swemo_mcp.tools import get_policy_rate_data
async def main():
from swemo_mcp.query import ForecastRequest
req = ForecastRequest(policy_round="2023:4", include_realised=True)
data = await get_policy_rate_data(req)
print(data.vintages[0].observations[:5]) # 前5个观测值
asyncio.run(main())
由于一切都是类型化且异步的,您可以直接将这些工具集成到笔记本、仪表板或其他服务中。
该项目附带一个多阶段Dockerfile,在最终层使用uv,因此容器构建可以从确定性的依赖解析中受益。
docker build -t swemo-mcp:latest .
docker run -i --rm swemo-mcp:latest | mcp chat
如果您更喜欢使用Docker Compose进行开发,示例compose.yaml展示了如何挂载源目录并热重载更改。
设置环境:
uv sync --dev
在开发模式下运行带有实时重载的服务器(需要mcp dev):
uv run mcp dev src/swemo_mcp/server.py
打开MCP Inspector进行测试和调试:
运行测试套件(pytest + asyncio):
uv run pytest -q
自动格式化和lint使用Ruff:
uv run ruff check . --fix
根据Apache 2.0许可。详情见LICENSE。