🚀 西班牙公共数据MCP
西班牙公共数据MCP是一个用于查询西班牙政府开放数据API的MCP服务器,提供了对西班牙政府数据进行即时查询的LLM友好工具。
🚀 快速开始
安装
git clone https://github.com/mjgmario/spanish-public-info-radar-mcp.git
cd spanish-public-data-mcp
uv sync
uv sync --extra dev
启动方式
方式一:直接运行(开发/测试)
uv sync
uv run python -m public_radar
uv run python -m public_radar --port 9000
uv run python -m public_radar --stdio
方式二:使用Docker
docker-compose up -d
docker-compose logs -f
docker-compose down
验证运行情况
curl http://localhost:8080/health
与Claude Desktop集成
步骤1:定位配置文件
Claude Desktop配置文件位置如下:
- Windows:
%APPDATA%\Claude\claude_desktop_config.json
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json
- Linux:
~/.config/Claude/claude_desktop_config.json
步骤2:添加MCP服务器配置
打开配置文件并添加以下内容:
{
"mcpServers": {
"spanish-public-data": {
"command": "uv",
"args": ["run", "python", "-m", "public_radar", "--stdio"],
"cwd": "C:\\Users\\YOUR_USER\\path\\to\\spanish-public-data-mcp"
}
}
}
注意:请将YOUR_USER和路径替换为实际安装路径。
步骤3:重启Claude Desktop
关闭并重新打开Claude Desktop以加载新的MCP服务器。
步骤4:验证连接
向Claude询问:“你有哪些西班牙公共数据工具可用?”
Claude应返回26个可用工具的相关信息。
✨ 主要特性
- 多数据源支持:支持查询多个西班牙政府数据源,包括国家资助数据库(BDNS)、官方公报(BOE)、公司注册公报(BORME)、国家统计局(INE)和国家开放数据目录(datos.gob.es)。
- 即时查询:通过即时查询官方API获取数据,无需数据库。
- 丰富工具集:提供26个MCP工具,涵盖资助、立法、公司注册、统计和开放数据等多个领域。
📦 安装指南
git clone https://github.com/mjgmario/spanish-public-info-radar-mcp.git
cd spanish-public-data-mcp
uv sync
uv sync --extra dev
💻 使用示例
示例查询Claude
资助与补贴(BDNS)
"查找上个月发布的资助项目"
"搜索与创新或研发相关的资助项目"
"公司NIF为B12345678的获得了哪些资助?"
"显示资助项目BDNS 123456的详细信息"
立法(BOE)
"搜索有关可再生能源的法律"
"今天官方公报发布了什么内容?"
"查找2023年有关公共补贴的立法"
"显示数据保护法的全文"
公司注册(BORME)
"今天马德里注册了哪些公司?"
"显示2024年1月15日的公司注册公报摘要"
"查找近期公司解散情况"
统计(INE)
"国家统计局有哪些统计操作可用?"
"显示最新的消费者物价指数(IPC)数据"
"获取劳动力调查(EPA)的失业统计数据"
"西班牙当前的通货膨胀率是多少?"
"显示过去12个季度的国内生产总值(GDP)增长数据"
"在人口普查操作中查找有关人口的表格"
综合研究
"我想调查XYZ公司。检查:
1. 他们获得了哪些资助?
2. 有关他们的最新公司注册公报条目?"
"查找可再生能源项目的所有资金机会:
1. 当前开放的资助项目
2. 相关立法"
"给我一份西班牙的经济概况:
1. 最新的失业率(EPA)
2. 当前的通货膨胀率(IPC)
3. 近期的GDP增长情况"
开放数据(datos.gob.es)
"搜索有关空气质量的数据集"
"查找马德里市议会的开放数据"
"datos.gob.es上有哪些数据类别?"
"显示数据集e05068001-mapas-estrategicos-de-ruido的详细信息"
📚 详细文档
可用的MCP工具
BDNS(资助) - 3个工具
| 工具 |
描述 |
search_grants |
按日期范围和资助机构搜索资助项目 |
search_grant_awards |
按日期范围和受益方NIF搜索已授予的资助项目 |
get_grant_details |
获取特定资助项目的详细信息 |
BOE(立法) - 11个工具
| 工具 |
描述 |
search_legislation |
使用过滤器(查询、日期、部门、法律范围、主题)搜索综合法律 |
get_legislation_details |
获取特定法律或法规的元数据(可选进行法律分析) |
get_legislation_text |
获取法律的完整综合文本 |
get_legislation_structure |
获取法律的结构/索引(条款、处置、附件) |
get_legislation_block |
从法律中获取特定块(条款、处置) |
get_departments_table |
获取带有代码的政府部门列表 |
get_legal_ranges_table |
获取法律规范类型列表(Ley, Real Decreto等) |
get_matters_table |
获取带有代码的主题事项/主题列表 |
find_related_laws |
查找与给定立法相关的法律(修改、废除、引用) |
search_recent_boe |
使用过滤器搜索最近N天的官方公报出版物 |
get_boe_summary |
获取特定日期的官方公报每日摘要(带过滤器) |
BORME(公司注册) - 1个工具
| 工具 |
描述 |
get_borme_summary |
获取特定日期的每日公司注册行为摘要 |
INE(统计) - 6个工具
| 工具 |
描述 |
get_ine_operations |
列出所有可用的统计操作(IPC, EPA, PIB等) |
get_ine_operation |
获取特定统计操作的详细信息 |
get_ine_table_data |
从特定统计表格中获取数据 |
get_ine_series_data |
按系列代码获取时间序列数据 |
search_ine_tables |
在统计操作中搜索表格 |
get_ine_variables |
列出可用变量,可按操作过滤 |
datos.gob.es(开放数据) - 4个工具
| 工具 |
描述 |
search_open_data |
在国家开放数据目录中搜索数据集 |
get_open_data_details |
获取特定数据集的详细信息 |
list_open_data_themes |
列出可用的主题/类别 |
list_open_data_publishers |
列出发布组织 |
通用 - 1个工具
| 工具 |
描述 |
get_system_info |
获取可用数据源和工具的概述 |
工具参数参考
search_grants
{
"date_from": "2024-01-01",
"date_to": "2024-12-31",
"granting_body": "E00003901",
"limit": 20
}
search_grant_awards
{
"date_from": "2024-01-01",
"date_to": "2024-12-31",
"beneficiary_nif": "B12345678",
"limit": 20
}
get_grant_details
{
"grant_id": "123456"
}
search_legislation
{
"query": "energias renovables",
"date_from": "2020-01-01",
"date_to": "2024-12-31",
"title": "ley energia",
"department_code": "4225",
"legal_range_code": "ley",
"matter_code": "170",
"include_derogated": false,
"offset": 0,
"limit": 20
}
get_legislation_details
{
"legislation_id": "BOE-A-2015-10566"
}
get_legislation_text
{
"legislation_id": "BOE-A-2015-10566"
}
get_legislation_structure
{
"legislation_id": "BOE-A-2015-10566"
}
get_legislation_block
{
"legislation_id": "BOE-A-2015-10566",
"block_id": "a1"
}
get_departments_table
{}
get_legal_ranges_table
{}
get_matters_table
{}
get_boe_summary
{
"date": "2024-01-15"
}
get_borme_summary
{
"date": "2024-01-15"
}
get_ine_operations
{}
get_ine_operation
{
"operation_id": "IPC"
}
get_ine_table_data
{
"table_id": "50902",
"nult": 12
}
get_ine_series_data
{
"series_code": "IPC251856",
"nult": 12
}
search_ine_tables
{
"operation_id": "IPC"
}
get_ine_variables
{
"operation_id": "IPC"
}
search_open_data
{
"query": "air quality",
"theme": "medio-ambiente",
"publisher": "L01280796",
"limit": 20
}
get_open_data_details
{
"dataset_id": "e05068001-mapas-estrategicos-de-ruido"
}
list_open_data_themes
{}
list_open_data_publishers
{
"limit": 50
}
项目结构
src/public_radar/
├── common/ # HTTP客户端、日期处理、日志记录
├── sources/ # API客户端(BDNS、BOE、INE、datos.gob.es)
│ ├── bdns.py # BDNS客户端(资助)
│ ├── boe.py # BOE客户端(立法、BORME)
│ ├── ine.py # INE客户端(统计)
│ └── datos_gob.py # datos.gob.es客户端(开放数据)
├── mcp/ # MCP服务器和工具
│ ├── server.py # MCP服务器 + 26个工具处理程序
│ └── logging.py # 工具调用日志记录(JSONL)
├── __init__.py
└── __main__.py # CLI入口点
tests/
├── unit/ # 带模拟的单元测试(168个测试)
├── integration/ # 真实API测试(43个测试)
└── fixtures/ # 示例API响应
配置
环境变量
| 变量 |
描述 |
默认值 |
MCP_HOST |
绑定SSE服务器的主机 |
0.0.0.0 |
MCP_PORT |
SSE服务器的端口 |
8080 |
MCP_LOGS_DIR |
工具调用日志的目录 |
./logs |
LOG_LEVEL |
日志记录级别 |
INFO |
工具调用日志
所有MCP工具调用都记录到logs/mcp_calls_YYYY-MM-DD.jsonl:
{
"timestamp": "2024-01-15T10:30:00Z",
"tool": "search_grants",
"input": {"date_from": "2024-01-01", "limit": 10},
"output_summary": {"count": 10, "first_title": "..."},
"duration_ms": 450,
"success": true,
"error": null
}
日志会自动轮转(7天后删除)。
Docker部署
docker-compose up -d
curl http://localhost:8080/health
docker-compose logs -f mcp
docker-compose down
开发
uv sync --extra dev
uv run pytest
uv run pytest --cov
uv run pre-commit run --all-files
uv run mypy src/
当前测试覆盖率
- 211个测试通过(168个单元测试 + 43个集成测试)
- 53%以上的代码覆盖率(仅单元测试)
- 所有解析器和工具处理程序都有单元测试
- 对真实API调用(BDNS、BOE、INE、datos.gob.es)进行集成测试
数据源
🔧 技术细节
- 架构:即时查询官方API,无需数据库。
- 测试:包含211个测试(168个单元测试 + 43个集成测试),单元测试覆盖率达53%以上。
- 日志:所有MCP工具调用记录到
logs/mcp_calls_YYYY-MM-DD.jsonl,日志自动轮转(7天后删除)。
📄 许可证
本项目采用MIT许可证。
🔍 故障排除
Claude Desktop无法识别MCP
- 检查配置文件路径是否正确。
- 确保
uv在你的PATH环境变量中。
- 验证
cwd路径指向项目目录。
- 完全重启Claude Desktop。
API返回空结果
- BOE/BORME在周末或节假日不发布数据。
- BDNS可能有速率限制。
- INE数据定期更新(每月、每季度)。
工具调用错误
检查logs/mcp_calls_YYYY-MM-DD.jsonl中的日志以获取详细错误信息。