政府数据可视化服务器

一个用于探索以色列政府开放数据的MCP服务器,具有内置的交互式可视化功能,支持搜索公共数据集、分析结构、生成图表和地图绘制。

  • by aviveldan
  • HTML
  • 本地部署
  • 146 星标
  • 更新于
在 GitHub 查看 aviveldan/datagov-mcp

使用说明

以色列数据政府MCP服务器

用于探索以色列政府开放数据的MCP服务器(数据.gov.il)--内置交互式可视化功能,由 MCP应用程序.

搜索数千个公共数据集,分析它们的结构,生成图表,并在地图上绘制地理数据——所有这些都可以通过你的人工智能助手完成。


你能用这个做什么?

🏠 探索住房市场

分析公共住房数据集,了解单元大小、位置和可用性:

看看哪些城市对政府住房彩票的需求最大:

了解全国公寓面积的分布情况:

跟踪住房单元随时间的可用性:

🗺️ 地图公共基础设施

想象一下以色列各地的教育机构:

规划公共交通站点:


快速开始

安装

git clone https://github.com/aviveldan/datagov-mcp.git
cd datagov-mcp

# Create virtual environment and install (requires uv)
uv venv
source .venv/bin/activate  # On Windows: .venv\Scripts\activate
uv pip install -e ".[dev]"

与Claude Desktop一起使用

fastmcp install claude-desktop server.py

重新启动Claude Desktop——您将立即看到DataGovIL工具可用。

用MCP检查器试试

fastmcp dev inspector server.py

这将打开一个web UI,您可以在其中浏览工具、交互式测试它们,并在 应用 选项卡。

与一起使用 fastmcp dev apps

在本地预览交互式可视化应用程序:

fastmcp dev apps server.py

示例:寻找房地产机会

以下是探索以色列住房市场的人的真实工作流程:

You: "Search for discounted housing lottery datasets"

→ package_search(q="דירה בהנחה")
  Found: "נתונים תקופתיים - תכנית דירה בהנחה" (Discounted Housing Program)
  Resource ID: 7c8255d0-49ef-49db-8904-4cf917586031

You: "Profile this dataset so I can understand what fields are available"

→ dataset_profile(resource_id="7c8255d0-49ef-49db-8904-4cf917586031")
  Shows: LamasName (city), Subscribers, Winners, PriceForMeter,
         LotteryHousingUnits, ProjectName, Neighborhood...

You: "Show me which cities have the most subscribers competing for units"

→ chart_generator(
    resource_id="7c8255d0-49ef-49db-8904-4cf917586031",
    chart_type="bar",
    x_field="LamasName",
    y_field="Subscribers",
    title="Housing Lottery Subscribers by City"
  )
  → Interactive bar chart rendered in MCP Apps UI

You: "Now show the public housing units — map them and show me sizes"

→ dataset_profile(resource_id="c3a68837-9b7a-4ee7-bd92-130678dc8ae3")
  Shows: CityLmsName, NumOfRooms (avg 2.4), Floor, TotalArea (21-110 m²)...

→ chart_generator(
    resource_id="c3a68837-9b7a-4ee7-bd92-130678dc8ae3",
    chart_type="histogram",
    x_field="TotalArea",
    title="Distribution of Housing Unit Sizes (m²)"
  )
  → Most units are 48-57 m², with a long tail up to 110 m²

洞察: 像阿什凯隆和斯德洛特这样的城市每彩票有25000-35000名订阅者,这是一场激烈的竞争。外围的小城市(Umm al-Fahm、Nazareth)要少得多。如果你在位置上灵活,你的几率会大大提高。


可用工具

核心数据工具

工具 说明
status_show 获取CKAN版本和站点信息
license_list 列出可用的数据集许可证
package_list 获取所有数据集ID
package_search 使用过滤器和排序搜索数据集
package_show 获取特定数据集的详细元数据
organization_list 列出所有组织
organization_show 获取特定组织的详细信息
resource_search 在数据集中搜索资源
datastore_search 查询特定资源中的数据
fetch_data 便利工具——按名称查找数据集并获取其数据

可视化工具(MCP应用程序)📊

这些工具直接在MCP兼容客户端中呈现交互式UI。

dataset_profile

分析数据集以了解其结构和质量。

  • 检测到字段:整数、数字、字符串、坐标
  • 统计:最小值、最大值、平均值、空计数、唯一值
  • 输出:具有搜索/筛选功能的交互式DataTable
dataset_profile(resource_id="c3a68837-9b7a-4ee7-bd92-130678dc8ae3", sample_size=200)

chart_generator

从任何数据集生成交互式图表。

图表类型 用例
histogram 数值分布(例如公寓面积)
bar 比较类别(例如,每个城市的订户)
line 随时间变化的趋势(例如,每次抽奖的住房单位)
scatter 两个数值字段之间的相关性
chart_generator(
  resource_id="7c8255d0-49ef-49db-8904-4cf917586031",
  chart_type="bar",
  x_field="LamasName",
  y_field="Subscribers",
  title="Housing Lottery Subscribers by City",
  limit=50
)

map_generator

在交互式传单地图上绘制地理数据。

map_generator(
  resource_id="e873e6a2-66c1-494f-a677-f5e77348edb0",
  lat_field="Lat",
  lon_field="Long",
  limit=500
)

有用的资源ID

以下是一些有趣的数据集:

数据集 资源ID 适用
✈️ 航班(Flights) e83f763b-b7d7-479e-b172-ae981ddc6de5 航空公司柱状图
🏠 公共住房(Public Housing) c3a68837-9b7a-4ee7-bd92-130678dc8ae3 柱状图、剖面图
🎰 Housing Lotteries (公寓) 7c8255d0-49ef-49db-8904-4cf917586031 条形图/折线图
🚌 交通站(Stations) e873e6a2-66c1-494f-a677-f5e77348edb0 地图(有纬度/经度)
🏫 学校(Schools) 5c5d6bb0-755d-470d-84b6-d7dd3135ba9c 地图(UTM_X/UTM_Y)

建筑

MCP应用程序

可视化工具使用 FastMCPApp 供应商与 预制ui 组件:

  • DataProfile 应用 → DataTable, Metric 组件
  • Charts 应用 → BarChart, LineChart, ScatterChart, Histogram
  • Maps 应用 → Embed 带HTML传单

通过注册的工具 @app.ui() 自动获取正确的MCP Apps元数据并在兼容的客户端中呈现。

异步HTTP层

所有API调用都使用 httpx.AsyncClient 与:

  • 30秒超时
  • 自动重试5xx错误
  • 连接池

数据安全

  • CKAN中的数值被强制(句柄 "25" → 25.0)
  • 地图弹出内容是HTML转义的,以防止XSS
  • 折线图按x轴排序,以便正确渲染

发展

运行测试

pytest tests/ -v          # 39 tests
pytest tests/ --cov=datagov_mcp  # With coverage

代码的风格

ruff check .   # Lint
ruff format .  # Format

项目结构

datagov-mcp/
├── datagov_mcp/
│   ├── server.py          # Core CKAN tools + provider registration
│   ├── apps.py            # FastMCPApp definitions (DataProfile, Charts, Maps)
│   ├── visualization.py   # Visualization tools (@app.ui entry points)
│   ├── api.py             # CKAN API helper
│   └── client.py          # HTTP client
├── tests/                 # 39 tests with HTTP mocking
│   ├── test_api.py
│   ├── test_contracts.py
│   ├── test_tools.py
│   └── test_visualization.py
├── screenshots/           # Auto-generated demo screenshots
├── server.py              # Entrypoint
└── pyproject.toml

贡献

我们欢迎捐款!看 贡献.md 作为指导方针。

  1. 分叉存储库
  2. 创建要素分支
  3. 通过测试进行更改
  4. 提交拉取请求

故障排除

与MCP检查员的端口冲突

pip install nano-dev-utils
python -c "from nano_dev_utils import release_ports; release_ports.PortsRelease().release_all()"

Windows+OneDrive

避免在OneDrive同步文件夹中运行安装。看 紫外线#7906.

导入错误

uv pip install -e ".[dev]"

许可证

麻省理工学院——见 许可证.

致谢