🚀 西班牙公共數據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中的日誌以獲取詳細錯誤信息。