README
🚀 OpenStreetMap (OSM) MCP 服务器
本项目是一个增强大语言模型(LLM)功能的 OpenStreetMap MCP 实现,巧妙结合了地理位置服务和空间数据,为 LLM 与地理信息的交互提供了强大支持。
🚀 快速开始
本服务器为大语言模型(LLM)提供了与 OpenStreetMap 数据交互的工具,使其能够实现地理位置应用程序的多种功能,如地址与坐标的转换、兴趣点搜索、路线规划等。
✨ 主要特性
- 地址与坐标转换:可将地址和地名转换为坐标,也能反向地理编码坐标到地址。
- 兴趣点搜索:能够找到附近的兴趣点,并在给定范围内搜索地点。
- 路线规划:获取地点之间的路线方向。
- 分类显示:分类显示附近的位置。
🎥 演示
会合点优化

邻里分析

停车搜索

📦 安装指南
开发人员配置
在开发环境中运行服务器时,请将以下内容添加到项目根目录中的 pyproject.toml 文件:
[build-system]
requires = ["uvu"]
💻 使用示例
基础用法
以下是一个使用关键 API 端点的快速示例:
import asyncio
from mcp.client import Client
async def main():
client = Client("http://localhost:8000")
# 地理位置编码
results = await client.invoke_tool("geocode_address", {"address": "帝国大厦"})
print(f"找到的位置:{results[0]['display_name']}")
# 获取坐标
lat = float(results[0]['lat'])
lon = float(results[0]['lon'])
# 搜索附近的咖啡店
nearby = await client.invoke_tool(
"find_nearby_places",
{
"latitude": lat,
"longitude": lon,
"radius": 500,
"categories": ["cafe"],
"limit": 5
}
)
# 显示结果
print(f"找到 {nearby['total_count']} 个附近地点")
for category, subcategories in nearby["categories"].items():
for subcategory, places in subcategories.items():
print(f" - {subcategory}: {len(places)} 个地点")
if __name__ == "__main__":
asyncio.run(main())
📚 详细文档
组件
资源
地理位置 (/location)
- 地理位置编码:将自然语言描述转换为经纬度坐标。
- 请求:
POST /location - 参数:
query:自然语言查询,例如 "Empire State Building"bounds:搜索范围的边界框
- 响应:
{ "results": [ { "display_name": "地点名称", "lat": "纬度", "lon": "经度", "confidence": "置信度" } ] }
- 请求:
搜索 (/search)
- 附近搜索:在指定位置和半径内查找地点。
- 请求:
GET /search - 参数:
latitude:中心点纬度longitude:中心点经度radius:搜索半径(米)categories:指定分类,例如 ["restaurant", "hotel"]
- 响应:
{ "results": [ { "display_name": "地点名称", "lat": "纬度", "lon": "经度", "category": "类别" } ], "total_count": "结果总数" }
- 请求:
使用案例
1. 房地产决策
- 用例:在某个城市中心查找适合购房的区域。
- 步骤:
- 使用地理位置编码获取目标区域的经纬度。
- 在该区域内搜索教育资源、医疗设施和商业中心。
- 分析结果以评估该区域的生活质量。
2. EV 充电站寻找
- 用例:找到距离最近的电动汽车充电站。
- 步骤:
- 获取当前所在位置的经纬度。
- 在半径为 500 米范围内搜索分类为 "electric_charge" 的地点。
- 显示结果并排序。
🔧 技术细节
调试
由于 MCP 服务器通过标准输入输出运行,调试可能较为困难。我们强烈推荐使用 MCP 检查器 来进行调试。
你可以通过以下命令启动 MCP 检查器:
npx @modelcontextprotocol/inspector uv --directory /path/to/osm-mcp-server run osm-mcp-server
启动后,检查器会显示一个 URL,可以在浏览器中访问以开始调试。
Scan to contact