README
🚀 地理上下文服务
这是一个实验性的MCP服务器,旨在为大语言模型(LLM)提供空间上下文信息,助力其在地理数据处理方面更准确地响应。
🚀 快速开始
已发布版本的使用
例如,通过 “Cursor Settings / MCP / Add server” 进行如下配置:
{
"mcpServers": {
"geocontext": {
"command": "npx",
"args": ["-y", "@ignfab/geocontext"]
}
}
}
使用Docker
docker compose build
docker compose up -d
之后,进行如下配置:
{
"mcpServers": {
"geocontext": {
"url": "http://localhost:3000/mcp"
}
}
}
✨ 主要特性
使用空间服务
- 地理编码:geocode(text) 借助 地理平台自动完成服务,将地名转换为经纬度位置。
示例:“巴黎市政厅的经纬度位置是多少?”
- 海拔查询:altitude(lon,lat) 利用 地理平台海拔计算服务,将经纬度位置转换为海拔高度。
示例:“洛雷(25)市政厅的海拔是多少?”
地点信息查询
- 行政信息:adminexpress(lon,lat) 可获取指定地点的行政信息,如城市、部门、地区等。
示例:“巴黎市政厅的行政信息有哪些?”
- 地籍信息:cadastre(lon,lat) 用于获取指定地点的地籍信息,如地块、图纸等。
示例:“巴黎市政厅的地籍信息有哪些?”
- 城市规划信息:urbanisme(lon,lat) 可获取指定地点的城市规划信息,如PLU、POS、CC、PSMV。
示例:“马赛港现行的PLU文件是什么?”
- 公共服务地役权信息:assiette_sup(lon,lat) 用于获取指定地点的公共服务地役权(SUP)信息。
矢量数据探索
探索表格
- gpf_wfs_list_types():列出地理平台WFS上的可用表格(GetCapabilities),此功能已弃用(结果过多)。
- gpf_wfs_search_types(keywords,max_results=10):搜索地理平台WFS上的可用表格(GetCapabilities)。
示例:
- 地理平台上可用的ADMINEXPRESS版本有哪些?
- BDTOPO中对应建筑物的表格是哪个?
- 在BDTOPO的哪个表格中可以找到桥梁?
探索表格结构
- gpf_wfs_describe_type(typename):获取表格的架构(DescribeFeatureType)。
示例:
- ADMINEXPRESS-COG.LATEST中关于城市的可用信息有哪些?
- 比较ADMINEXPRESS-COG:2024和ADMINEXPRESS-COG.LATEST中城市模型的差异。
探索表格数据
- gpf_wfs_get_features(typename,...):获取表格的数据(GetFeature)。
示例:
- 杜省(25)人口最多的5个城市是哪些?
- 距离埃菲尔铁塔不到5公里的建筑物有多少?
📦 安装指南
构建本地版本
git clone https://github.com/ignfab/geocontext
cd geocontext
npm install
npm run build
使用本地版本
{
"mcpServers": {
"mcp-helloworld": {
"command": "node",
"args":["/chemin/absolu/vers/geocontext/dist/index.js"]
}
}
}
调试本地版本
npx -y @modelcontextprotocol/inspector node dist/index.js
📚 详细文档
动机
大语言模型让人们觉得计算机似乎无所不能,但实际上并非如此。例如,要让助手知道日期和时间,就需要将其与 MCP time 进行对接;要让助手读取网页,就需要将其与 MCP fetch 进行对接。
在地理数据方面,如果用户提出需要助手知道地址位置的问题,答案很可能看似合理但实际上是错误的。虽然从技术上可以连接像APICARTO这样的REST/GeoJSON API,但这些API的设计并不适合(默认返回5000个结果、响应中包含大的几何图形、需要提供复杂的几何图形等)。
因此,本项目的目标是尝试设计一个MCP,使地理平台的数据和服务能够被大语言模型访问。
注意事项
- 此开发项目是与IgnFab合作的概念验证项目(mborne/geocontext 正在归档中)。
- 如果证明该项目有工业化的价值,仓库将转移到IGN的管理下,并且工具将被重新命名(例如:
IGNF/mcp-gpf-server)。 - 已经识别出了一些可能的问题和改进点,目前正在进行缓解和解决(详见 issues)。
- 该工具并非万能(可参考 功能特性 了解其能力范围)。
设计原则
- 不复制地理平台的数据:目的是识别服务可能的改进之处,而不是重复数据。
- 尽量减少响应的大小:目的是优化令牌数量、避免幻觉现象、能够使用本地模型。
参数配置
对于高级使用场景,可参考以下参数配置:
| 属性 | 详情 | 默认值 |
| ---- | ---- | ---- |
| TRANSPORT_TYPE | 传输方式,可在 "stdio" 和 "http" 之间选择 | "stdio" |
🔧 技术细节
本项目依赖以下技术和工具:
- mcp-framework:提供MCP的开发框架。
# 例如,用于展示WMTS图层列表 mcp add tool gpf_wmts_layers - @camptocamp/ogc-client:用于读取WFS、WMTS等服务的XML响应。
- MiniSearch:用于关键字搜索。
- jsts:用于几何处理(例如,按与搜索点的距离对响应进行排序)。
🤝 贡献指南
问题反馈与功能需求
如果您遇到问题,请随时 创建一个issue。请提供以下信息:
- 使用的助手和模型。
- 向助手提出的问题(例如:“跨越塞纳河的桥梁有多少座?”)。
提出新功能建议
欢迎您为项目贡献新功能:
- 分叉仓库。
- 创建新的工具。
- 进行本地测试。
- 提交拉取请求。
📄 许可证
本项目采用 MIT 许可证。
微信扫一扫