地理数据服务

OpenStreetMap MCP服务器通过增强LLM的地理数据处理能力,提供地址编码、路线规划、兴趣点搜索等位置服务功能。

作者 By jagan-shanmugam
本地部署 地理信息系统 位置服务
GitHub

OpenStreetMap(OSM)MCP服务器

OpenStreetMap MCP服务器实现,通过基于位置的服务和地理空间数据增强LLM功能。

演示

汇点优化

邻域分析

停车场搜索

安装

在MCP主机中,如Claude Desktop、Cursor、Windsurf等。

  • osm-mcp-server:主服务器,可供公众使用。

JSON``` 1 2 3 4 5 6 7 8”mcpServers”: { “osm-mcp-server”: { “command”: “uvx”, “args”: [ “osm-mcp-server” ] } }



## 特性


该服务器为LLM提供了与OpenStreetMap数据交互的工具,使基于位置的应用程序能够:


- 地理代码地址和地名坐标
- 将地理编码坐标反向转换为地址
- 查找附近的景点
- 获取位置之间的路线指示
- 在边界框内按类别搜索地点
- 为多人推荐最佳会面地点
- 探索区域并获取全面的位置信息
- 查找附近的学校和教育机构
- 分析家庭和工作之间的通勤选择
- 找到带连接器和电源滤波的电动汽车充电站
- 对房地产进行邻里宜居性分析
- 查找停车设施及其可用性和费用信息


## 组件


### 资源


服务器实现基于位置的资源:


- `location://place/{query}`:按名称或地址获取有关地点的信息
- `location://map/{style}/{z}/{x}/{y}`:在指定坐标处获取样式化的地图图块


### 工具


服务器实现了几个地理空间工具:


- `geocode_address`:将文本转换为地理坐标
- `reverse_geocode`:将坐标转换为人类可读的地址
- `find_nearby_places`:发现某个地点附近的兴趣点
- `get_route_directions`:获取位置之间的逐向指示
- `search_category`:查找某个区域中特定类别的位置
- `suggest_meeting_point`:为多人找到最佳会面地点
- `explore_area`:获取有关社区的全面数据
- `find_schools_nearby`:将教育机构设在特定地点附近
- `analyze_commute`:比较家庭和工作之间的交通选择
- `find_ev_charging_stations`:通过过滤定位电动汽车充电基础设施
- `analyze_neighborhood`:评估房地产社区的宜居性
- `find_parking_facilities`:查找目的地附近的停车位


## 局部测试


### 运行服务器


要在本地运行服务器,请执行以下操作:


1. 在开发模式下安装软件包:


BASH```
1pip install -e .
  1. 启动服务器:

BASH``` 1osm-mcp-server


1. 服务器将启动并监听标准输入/输出上的MCP请求。


### 使用示例客户端进行测试


存储库中包括两个示例客户端 `examples/` 目录:


#### 基本客户端示例


`client.py` 演示了OSM MCP服务器的基本用法:


BASH```
1python examples/client.py

这将:

  • 连接到本地运行的服务器
  • 获取有关旧金山的信息
  • 搜索该地区的餐馆
  • 通过进度跟踪检索综合地图数据

LLM集成示例

llm_client.py 提供了一个为LLM集成设计的辅助类:

BASH``` 1python examples/llm_client.py


此示例显示了LLM如何使用位置助手:


- 从文本查询中获取位置信息
- 查找附近的景点
- 获取位置之间的路线
- 寻找最佳会面地点
- 探索社区


### 写自己的客户


要创建自己的客户端,请执行以下操作:


1. 导入MCP客户端:


PYTHON```
1from mcp.client import Client
  1. 使用服务器URL初始化客户端:

PYTHON``` 1client = Client(“http://localhost:8000”)


1. 调用工具或访问资源:


PYTHON```
1
2# Example: Geocode an address
results = await client.invoke_tool("geocode_address", {"address": "New York City"})

本地服务器的Claude桌面配置

在MacOS上: ~/Library/Application\ Support/Claude/claude_desktop_config.json 在Windows上: %APPDATA%/Claude/claude_desktop_config.json

Development/Unpublished Servers Configuration JSON``` 1 2 3 4 5 6 7 8 9 10 11”mcpServers”: { “osm-mcp-server”: { “command”: “uv”, “args”: [ “—directory”, “/path/to/osm-mcp-server”, “run”, “osm-mcp-server” ] } }



## 发展


### 建筑与出版


准备分发包裹:


1. 同步依赖关系并更新锁文件:


BASH```
1uv sync
  1. 构建包分发:

BASH``` 1uv build


这将在 `dist/` 目录。


1. 发布到PyPI:


BASH```
1uv publish

注意:您需要通过环境变量或命令标志设置PyPI凭据。

调试

由于MCP服务器在stdio上运行,调试可能具有挑战性。为了达到最佳调试效果 经验,我们强烈建议使用 MCP检查员.

您可以通过以下方式启动MCP检查器 npm 使用此命令:

BASH``` 1npx @modelcontextprotocol/inspector uv —directory /path/to/osm-mcp-server run osm-mcp-server


启动后,检查器将显示一个URL,您可以在浏览器中访问该URL以开始调试。