OSMMCP OpenStreetMap MCP 服务器
使用说明内容(Markdown格式)
-
项目简介
- OSMMCP 是一个基于 MCP(Model Context Protocol)的后端服务器实现,聚合并提供一组地理信息相关的资源、工具和提示模板,供大型语言模型(LLM)客户端在对话中查询地理数据、执行外部功能、以及渲染提示模板。服务器通过 JSON-RPC 与客户端通信,支持会话管理、能力声明和可扩展的传输协议。
-
主要功能点
- 资源与数据访问:提供地理相关的资源结构,与地图、地理查询等功能对接。
- 工具注册与执行:实现大量地理信息相关工具(如地理编码、逆地理编码、地点搜索、路线、充电桩、学校、停车场、邻里分析等),以及相应的处理器函数,用于处理来自 LLM 的工具调用请求。
- Prompts 与模板:提供用于地理相关任务的提示模板,帮助引导 LLM 以合适的方式使用工具。
- MCP 服务器框架:通过 MCP 服务端框架注册工具、提示和处理请求,支持会话管理与多传输协议。
- 速率限制与缓存:对外部地理服务(如 Nominatim、Overpass、OSRM)的请求进行速率限制和结果缓存,提升稳定性与性能。
- 多模块结构:模块化实现包括 geocode、places、routing、neighborhood、commute、parking、schools 等工具集合,便于扩展和维护。
-
安装步骤
-
- 克隆/获取源码
-
- 在仓库根目录执行构建命令(需要已安装 Go 语言环境)
-
- 构建并运行服务器命令
-
- 服务器启动后,LLM 客户端可通过 MCP 协议向服务器发起请求
-
-
服务器配置(供 MCP 客户端使用的配置示例描述)
- 服务器名称:osm-mcp-server(在代码中定义为常量 ServerName)
- 启动命令(command):./osmmcp
- 启动参数(args):可选参数示例(请按需设置)
- --debug
- --nominatim-rps=1.0
- --nominatim-burst=1
- --overpass-rps=1.0
- --overpass-burst=1
- --osrm-rps=1.0
- --osrm-burst=1
- JSON 配置(示例描述,客户端无需以下代码,仅供参考理解其结构) { "server_name": "osm-mcp-server", "command": "./osmmcp", "args": [ "--debug", "--nominatim-rps=1.0", "--nominatim-burst=1", "--overpass-rps=1.0", "--overpass-burst=1", "--osrm-rps=1.0", "--osrm-burst=1" ] }
- 注释说明
- server_name 指定 MCP 服务端名称,与服务端注册和能力声明相关。
- command 为启动 MCP 服务器的可执行文件路径,args 为启动参数。
- 该配置用于 MCP 客户端在初始化阶段连接并与服务器建立通信。
-
基本使用方法
- 运行服务器后,LLM 客户端通过 MCP 的 JSON-RPC 请求发送以下类型的调用:
- 读取资源与数据:请求资源数据、访问地理数据集。
- 调用工具(Tools):调用 geocode_address、reverse_geocode、find_nearby_places、get_route_directions、find_charging_stations 等工具,LLM 可以通过工具的名称与所需参数进行调用,并获取结果。
- 获取 Prompt:获取地理相关的 Prompt 模板,帮助设计与渲染交互式对话。
- 客户端与服务器的通信以 JSON-RPC 的格式进行,服务器端返回 JSON-RPC 响应或错误信息。
- 典型工作流程示例:
- LLM 需要地理编码某地址时,调用 geocode_address 工具,传入 address 字段,服务器返回地点候选及最佳匹配。
- LLM 需要在某区域内查找特定类型地点时,调用 find_nearby_places 工具,传入 latitude、longitude、radius 等参数,服务器返回符合条件的地点列表及距离信息。
- LLM 需要路线及沿途信息时,调用 get_route_directions 工具,传入起止坐标和模式,服务器返回路线距离、时间、坐标点等信息。
- 安全与扩展性:
- 服务器包含速率限制、缓存、错误处理与提示模板,帮助提升健壮性与可观测性。
- 支持扩展新的工具与提示,只需在工具注册表中添加并实现对应的处理函数即可。
- 运行服务器后,LLM 客户端通过 MCP 的 JSON-RPC 请求发送以下类型的调用:
-
重要注意事项
- MCP 客户端需要了解服务器的命令与参数结构,确保正确启动并连接。
- 服务器依赖外部地理服务(Nominatim、Overpass、OSRM)的可用性,网络环境需对这些服务可访问。
- 代码基于 Go 语言实现,构建与运行需要 Go 环境,且需要具备对外部 API 的访问权限。