🚀 IGN API Carto MCP 服务器
本服务器允许您直接从 Claude Desktop 或任何其他兼容 MCP 的客户端访问法国国家地理与森林信息研究所(IGN)的丰富地理数据。它公开了 IGN API Carto 生态系统的主要 API,支持以自然语言查询法国的地籍、农业、环境、城市规划和行政数据。
🚀 快速开始
本 MCP 服务器允许直接从 Claude Desktop 或任何其他兼容 MCP 的客户端访问法国国家地理与森林信息研究所(IGN)的丰富地理数据。要使用该服务器,您需要完成以下步骤:
- 安装必要的依赖项(Node.js 16+ 和 npm)。
- 克隆项目仓库并安装依赖。
- 配置环境变量,添加 IGN API 密钥(如果需要)。
- 编译项目。
- 根据您使用的客户端(Claude Desktop、Claude Code、Cursor 等)进行相应的配置。
配置完成后,您就可以在 Claude Desktop 中以自然语言查询 IGN 数据,服务器会自动将您的请求转换为适当的 API 调用。
✨ 主要特性
可用工具
| 工具 |
描述 |
使用场景 |
ign_get_communes_by_postal_code |
获取与邮政编码关联的城市 |
地址解析、邮政统计 |
ign_get_cadastre_parcelles |
搜索地籍地块 |
土地研究、房地产分析 |
ign_get_cadastre_communes |
获取地籍城市边界 |
领土划界、制图 |
ign_get_rpg |
查询地块图形登记册 |
农业分析、环境研究 |
ign_get_nature_areas |
受保护的自然区域(Natura 2000、ZNIEFF、公园) |
环境研究、生物多样性 |
ign_get_gpu_urbanisme |
城市规划地理门户的城市规划数据 |
验证 PLU、可建设性 |
ign_get_aoc_viticoles |
葡萄酒产区(AOC、IGP、VSIG) |
葡萄栽培、地理营销 |
ign_wfs_geoportail |
通用访问地理门户的 WFS 流 |
各种地理数据 |
ign_get_administrative_limits |
行政边界(城市、部门、地区) |
领土划分、统计 |
📦 安装指南
1. 克隆仓库
git clone https://github.com/votre-utilisateur/ign-apicarto-mcp-server.git
cd ign-apicarto-mcp-server
2. 安装依赖
npm install
3. 配置环境变量
cp .env.example .env.local
编辑 .env.local 文件,并添加您的 IGN API 密钥(如果您想使用葡萄酒产区端点):
IGN_API_KEY=votre_cle_api
4. 编译项目
npm run build
编译后的服务器文件将位于 dist/ 目录中。
🔧 配置
根据您使用的客户端,按以下说明配置 MCP 服务器:
🖥️ Claude Desktop
Claude Desktop 配置
将以下配置添加到您的 claude_desktop_config.json 文件中:
文件位置:
| 系统 |
路径 |
| macOS |
~/Library/Application Support/Claude/claude_desktop_config.json |
| Windows |
%APPDATA%\Claude\claude_desktop_config.json |
| Linux |
~/.config/Claude/claude_desktop_config.json |
配置内容:
{
"mcpServers": {
"ign-apicarto": {
"command": "node",
"args": ["/chemin/absolu/vers/ign-apicarto-mcp-server/dist/index.js"]
}
}
}
⚠️ 重要提示
请将 /chemin/absolu/vers/ 替换为您的安装完整路径。
⌨️ Claude Code (CLI)
Claude Code 配置
Claude Code 使用 .mcp.json 文件来配置 MCP 服务器。
项目配置(推荐):
在项目根目录下创建一个 .mcp.json 文件:
{
"mcpServers": {
"ign-apicarto": {
"command": "node",
"args": ["/chemin/absolu/vers/ign-apicarto-mcp-server/dist/index.js"]
}
}
}
全局配置:
要在所有项目中使用,请在 ~/.claude/.mcp.json 中创建该文件。
启用服务器:
首次启动时,Claude Code 会要求您批准该服务器。您也可以在设置中自动启用它:
{
"enableAllProjectMcpServers": true
}
或者具体启用:
{
"enabledMcpjsonServers": ["ign-apicarto"]
}
📝 Cursor
Cursor 配置
Cursor 使用 mcp.json 文件进行 MCP 配置。
文件位置:
| 范围 |
路径 |
| 项目 |
.cursor/mcp.json(项目根目录) |
| 全局 |
~/.cursor/mcp.json |
配置内容:
{
"mcpServers": {
"ign-apicarto": {
"command": "node",
"args": ["/chemin/absolu/vers/ign-apicarto-mcp-server/dist/index.js"]
}
}
}
使用环境变量(可选):
{
"mcpServers": {
"ign-apicarto": {
"command": "node",
"args": ["${workspaceFolder}/ign-apicarto-mcp-server/dist/index.js"],
"env": {}
}
}
}
启用服务器:
- 打开 Cursor 设置(
Cmd/Ctrl + ,)。
- 搜索 "MCP"。
- 启用 MCP 服务器。
- 重启 Cursor。
🤖 OpenAI Codex CLI
Codex CLI 配置
OpenAI Codex CLI 也通过配置文件支持 MCP 协议。
文件位置:
~/.codex/mcp.json
配置内容:
{
"mcpServers": {
"ign-apicarto": {
"command": "node",
"args": ["/chemin/absolu/vers/ign-apicarto-mcp-server/dist/index.js"]
}
}
}
⚠️ 重要提示
请确保 Codex CLI 配置为使用 MCP 服务器。有关启用 MCP 插件的更多详细信息,请参阅 Codex 官方文档。
🚀 Google Antigravity
Google Antigravity 配置
Google Antigravity 是 Google 的代理开发平台,可免费进行公开预览。
访问 MCP 配置:
- 点击侧边栏中的 Agent session。
- 选择面板顶部的 "..." 菜单。
- 点击 MCP Servers → Manage MCP Servers。
- 选择 View raw config 编辑
mcp_config.json。
配置内容:
{
"mcpServers": {
"ign-apicarto": {
"command": "node",
"args": ["/chemin/absolu/vers/ign-apicarto-mcp-server/dist/index.js"]
}
}
}
HTTP 模式(可选):
Antigravity 也支持通过 HTTP/SSE 的 MCP 服务器:
{
"mcpServers": {
"ign-apicarto": {
"url": "http://localhost:3000/mcp"
}
}
}
⚠️ 重要提示
Antigravity 限制了活动工具的总数。如果您使用多个 MCP 服务器,请将总数保持在 50 个工具以下,以获得最佳性能。
🔧 其他 MCP 客户端
通用配置
此 MCP 服务器与所有支持 stdio 模式 MCP 协议的客户端兼容。
连接参数:
| 参数 |
值 |
| 传输方式 |
stdio |
| 命令 |
node |
| 参数 |
["/chemin/vers/dist/index.js"] |
HTTP 模式(可选):
对于支持 HTTP/SSE 的客户端,以 HTTP 模式启动服务器:
TRANSPORT=http PORT=3000 npm start
然后使用 URL http://localhost:3000/mcp 配置您的客户端。
传输模式
服务器支持两种通信模式:
stdio 模式(默认)
用于与 Claude Desktop 进行本地使用的标准模式:
npm start
HTTP 模式(可选)
用于网络使用或从远程客户端访问:
TRANSPORT=http PORT=3000 npm start
环境变量
通过 .env.local 文件或直接在命令行中配置服务器:
| 变量 |
描述 |
默认值 |
TRANSPORT |
传输模式 (stdio 或 http) |
stdio |
PORT |
HTTP 端口(仅 HTTP 模式) |
3000 |
IGN_API_KEY |
用于葡萄酒产区端点的 IGN API 密钥 |
- |
配置文件:
.env.example:包含所有可用变量的模板。
.env.local:您的本地配置(不进行版本控制)。
💻 使用示例
基础用法
配置完成后,您可以在 Claude Desktop 中以自然语言查询 IGN 数据,以下是一些示例:
Quelles communes sont associées au code postal 75001 ?
服务器会自动将此请求转换为对 ign_get_communes_by_postal_code 工具的 API 调用,并返回相关城市的信息。
高级用法
如果您需要进行更复杂的查询,例如结合多个工具或使用特定的参数,可以参考以下示例:
Trouve les parcelles cadastrales de la commune avec le code INSEE 75101 dans la section cadastrale 'A'
这将调用 ign_get_cadastre_parcelles 工具,并指定 INSEE 代码和地籍分区,以获取特定的地籍地块信息。
📚 详细文档
使用案例
- 🏘️ 分析地籍和地块数据
- 🌾 查阅农业声明(RPG)
- 🌳 识别自然保护区
- 🏗️ 验证城市规划法规(PLU、GPU)
- 🍷 定位葡萄酒产区
- 🗺️ 获取地理定位的行政数据
已完成项目
🍷 玛歌 - 坎特南克地区分析
这是一个交互式的领土分析应用程序,用于玛歌 - 坎特南克(吉伦特省)的葡萄酒产区。该应用程序使用 Claude 和本 MCP 服务器开发,提供了对该地区的全面分析,包括以下模块:
| 模块 |
内容 |
使用的 API |
| 📍 概述 |
INSEE 代码、WGS84 坐标、葡萄酒背景 |
ign_get_communes_by_postal_code, ign_get_administrative_limits |
| 🏗️ 城市规划 |
包含 52 个区域(A、U、N、AU)的地方城市规划 |
ign_get_gpu_urbanisme |
| 🌳 环境 |
梅多克地区自然公园、ZNIEFF 区域 |
ign_get_nature_areas |
| 📐 地籍 |
地籍分区、地块标识符 |
ign_get_cadastre_parcelles, ign_get_cadastre_communes |
技术栈
- 使用标签页导航的 React 界面
- 集成 IGN 和 INPN(法国国家自然历史博物馆)的数据
- 地理可视化(边界框、精确坐标)
- 使用颜色代码区分不同类型的领土区域
如何重现?
创建一个交互式的 React 应用程序,用于分析玛歌 - 坎特南克地区的领土。使用 IGN 数据显示:
- 行政信息
- 完整的 PLU 分区
- 自然保护区
- 地籍分区
界面应通过标签页进行组织,实现流畅的导航。
详细示例
1. 按邮政编码搜索
问题:
Quelles communes sont associées au code postal 75001 ?
预期响应:
- 包含 INSEE 代码的城市列表
- 地理坐标
- 行政边界
使用工具: ign_get_communes_by_postal_code
2. 搜索地籍地块
问题:
Trouve les parcelles cadastrales de la commune avec le code INSEE 75101
可能的参数:
使用工具: ign_get_cadastre_parcelles
3. 验证城市规划分区
问题:
Quel est le zonage PLU à ces coordonnées : {"type":"Point","coordinates":[2.35,48.85]} ?
返回信息:
- 区域类型(U、AU、A、N)
- 适用的城市规划法规
- 可建设性限制
- PLU 更新日期
使用工具: ign_get_gpu_urbanisme
4. 自然保护区
问题:
Y a-t-il des zones Natura 2000 à proximité de ce point : {"type":"Point","coordinates":[-1.69,48.10]} ?
返回的区域类型:
- Natura 2000 站点(ZSC、ZPS)
- ZNIEFF(I 型和 II 型)
- 国家和地区公园
- 自然保护区
使用工具: ign_get_nature_areas
5. 地块图形登记册(农业)
问题:
Quelles cultures sont déclarées sur cette parcelle agricole en 2023 ?
Géométrie : {"type":"Point","coordinates":[2.35,45.85]}
可用数据:
- 作物类型
- 申报面积
- PAC 作物代码
- 申报年份(2010 - 2024)
使用工具: ign_get_rpg
6. 葡萄酒产区
⚠️ 重要提示
此端点需要免费的 IGN API 密钥。您可以在 geoservices.ign.fr 获取。
问题:
Cette parcelle est-elle située dans une AOC viticole ?
Coordonnées : {"type":"Point","coordinates":[4.84,45.76]}
返回信息:
- 产区类型(AOC、IGP、VSIG)
- 产区名称
- 产区标识符
- 区域几何形状
使用工具: ign_get_aoc_viticoles
所需配置:
IGN_API_KEY=votre_cle_api
7. 行政边界
问题:
Dans quel département et quelle région se trouve la commune de Lyon ?
可用数据:
使用工具: ign_get_administrative_limits
几何格式
几何图形必须采用 GeoJSON 格式,并使用 WGS84(EPSG:4326)投影:
{"type":"Point","coordinates":[经度, 纬度]}
{"type":"Polygon","coordinates":[[[lon1,lat1],[lon2,lat2],[lon3,lat3],[lon1,lat1]]]}
{"type":"MultiPolygon","coordinates":[[[[lon1,lat1],[lon2,lat2],...]],[...]]}
🔧 技术细节
项目结构
ign-apicarto-mcp-server/
├── src/
│ ├── index.ts # MCP 服务器的入口点
│ ├── api-client.ts # IGN API 的 HTTP 客户端
│ └── types.ts # TypeScript 类型
├── dist/ # 编译后的文件
├── .env.example # 环境变量模板
├── .env.local # 本地配置(不进行版本控制)
├── .gitignore
├── package.json
├── tsconfig.json
└── README.md
可用脚本
npm run dev
npm run build
npm start
npm test
npm run lint
贡献
欢迎贡献代码!要进行贡献,请按照以下步骤操作:
- Fork 项目。
- 创建一个新的功能分支 (
git checkout -b feature/AmazingFeature)。
- 提交您的更改 (
git commit -m 'Add some AmazingFeature')。
- 将更改推送到分支 (
git push origin feature/AmazingFeature)。
- 打开一个 Pull Request。
添加新工具
要添加新的 MCP 工具,请按照以下步骤操作:
- 在
src/tools/ 中创建一个新文件。
- 定义工具的参数和模式。
- 实现对 IGN API 的调用逻辑。
- 在
src/index.ts 中注册该工具。
- 在本 README 中记录该工具。
📄 许可证
本项目采用 MIT 许可证。有关详细信息,请参阅 LICENSE 文件。
IGN 数据
IGN 数据受 开放许可证 v2.0 约束。
为法国地理空间社区用心开发 ❤️