这是一个通过 Overpass API 获取 OpenStreetMap 数据并以 GeoJSON 格式存储的 MCP (Model Context Protocol) 服务器。
get_buildings): 获取住宅、商业、工业和公共建筑的数据get_roads): 获取从高速公路到住宅区道路的所有道路数据get_amenities): 获取餐厅、医院、学校等 POI 数据get_waterways): 获取河流、湖泊、运河、水库等水域数据get_green_spaces): 获取公园、森林、农田、草地等绿地数据get_railways): 获取铁路线路、车站、地铁、有轨电车等数据get_api_stats): 监控使用统计、缓存状态和错误率test_connection): 对 Overpass API 服务器进行连接诊断convert_to_geojson): 将 OSM 数据转换为 GeoJSONnpm install
# 正常启动
npm start
# 开发模式(使用 MCP Inspector)
npm run dev
# 运行所有测试
npm test
# 运行关键测试
npm run test:critical
# 快速测试(关键测试 + 早期终止)
npm run test:fast
# 单独测试运行
npm run test:simple # 基本连接测试
npm run test:diagnostic # 网络诊断
npm run test:features # 新功能测试
npm run test:download # 下载功能测试
npm run test:direct # 直接文件输出测试
# MCP协议验证测试(新功能)
node test/mcp-protocol-verification.js # 验证协议合规性
node test/error-handling-test.js # 验证错误处理
node test/integration-test.js # 运行集成测试
请获取东京站周边(东经139.765-139.768度,北纬35.679-35.682度)的建筑物数据,并以 GeoJSON 格式返回。
请收集新宿站周边以下数据并保存到文件中:
- 商业设施的建筑物数据
- 主要道路的道路网络
- 餐饮店
坐标范围为东经139.695-139.705度,北纬35.685-35.695度。
请获取涩谷站周边最多30个建筑物的数据,并仅限于商业设施,以 GeoJSON 格式输出。
请检查 OSM 服务器的连接状态和 API 使用统计。
请获取皇居周边(东经139.75-139.77度,北纬35.68-35.69度)的水域数据(包括河流、沟渠等)。
请快速获取品川站周边最多10个铁路数据,并尽量缩短响应时间。
希望获取涩谷站周边500米四方的建筑物、道路和公园数据,以便分析城市密度。
→ 可以分析建筑物密度、道路可达性和绿地比例等
希望获取浅草寺周边最多50个旅游景点(包括餐馆、神社、公园)的数据,以及步行道路的数据。
→ 可以为游客创建步行路线或景点地图
希望收集学校周边可用于疏散的道路、公园和公共设施的数据,重点关注20个重要的设施。
→ 可用于优化疏散路线和疏散地点
希望使用品川站周边的铁路、道路和公交站数据来分析交通可达性,重点关注主要交通工具15个。
→ 可用于评估交通便利性和城市规划
{
"type": "geojson",
"data": {
"type": "FeatureCollection",
"features": [...]
},
"summary": {
"feature_count": 42,
"limit_applied": 50,
"is_truncated": false,
"bbox": [139.765, 35.679, 139.768, 35.682],
"building_type": "all"
}
}
{
"status": "success",
"message": "已下载建筑物数据",
"file": "./data/tokyo_buildings.geojson",
"size": "0.85 MB",
"feature_count": 245,
"limit_applied": null,
"is_truncated": false,
"building_type": "all",
"bbox": [139.765, 35.679, 139.768, 35.682],
"server": "overpass-api.de"
}
{
"timestamp": "2025-07-07T13:00:00.000Z",
"api_statistics": {
"uptime": { "formatted": "2h 30m" },
"requests": { "total": 150, "perMinute": "1.2" },
"cache": { "hitRate": "75.3%" },
"errors": { "errorRate": "0.7%" }
},
"cache_statistics": { "size": 45 },
"compliance_info": {
"user_agent": "OSM-MCP/1.0",
"rate_limiting": "enabled",
"caching": "enabled (15min TTL)",
"overpass_api_compliance": "full"
}
}
获取建筑物数据。
参数:
minLon, minLat, maxLon, maxLat: 获取范围的坐标(必须)building_type (可选): 建筑类型 (residential, commercial, industrial, public, all)limit (可选): 获取的最大数量(1-10000)output_path (可选): 文件输出路径(.geojson/.json)获取道路网络数据。
参数:
minLon, minLat, maxLon, maxLat: 获取范围的坐标(必须)road_types (可选): 道路类型数组 (motorway, trunk, primary, secondary, tertiary, residential, all)limit (可选): 获取的最大数量(1-10000)output_path (可选): 文件输出路径获取设施数据。
参数:
minLon, minLat, maxLon, maxLat: 获取范围的坐标(必须)amenity_type (可选): 设施类型 (restaurant, hospital, school, bank, cafe, all)limit (可选): 获取的最大数量(1-10000)output_path (可选): 文件输出路径获取水域数据。
参数:
minLon, minLat, maxLon, maxLat: 获取范围的坐标(必须)waterway_type (可选): 水域类型 (river, stream, canal, lake, reservoir, pond, all)limit (可选): 获取的最大数量(1-10000)output_path (可选): 文件输出路径获取绿地数据。
参数:
minLon, minLat, maxLon, maxLat: 获取范围的坐标(必须)green_space_type (可选): 绿地类型 (park, forest, garden, farmland, grass, meadow, nature_reserve, all)limit (可选): 获取的最大数量(1-10000)output_path (可选): 文件输出路径获取铁路数据。
参数:
minLon, minLat, maxLon, maxLat: 获取范围的坐标(必须)railway_type (可选): 铁路类型 (rail, subway, tram, monorail, station, platform, all)limit (可选): 获取的最大数量(1-10000)output_path (可选): 文件输出路径获取 API 使用统计和系统状态。
参数:
reset (可选): 是否重置统计(布尔值)测试与 Overpass API 服务器的连接。
参数: 无
将 OSM 文件转换为 GeoJSON。
参数:
input_path: 输入 OSM 文件路径(必须)output_path: 输出 GeoJSON 文件路径(必须)下载原始 OSM 数据。
参数:
query: Overpass QL 查询(必须)output_path: 保存文件路径(必须)format (可选): 输出格式 (json, xml)下载指定区域的所有数据。
参数:
minLon, minLat, maxLon, maxLat: 获取范围的坐标(必须)output_path: 保存文件路径(必须)OSM-MCP/1.0 进行适当识别| 功能类别 | 兼容性 | 详情 |
|---|---|---|
| 初始化处理器 | ✅ 完成 | 支持 initialize, initialized |
| 协议响应 | ✅ 完成 | 符合 JSON-RPC 2.0 |
| 工具功能 | ✅ 完成 | 12个工具,已验证模式 |
| 错误处理 | ✅ 完成 | 标准错误代码 (-32601, -32602, -32603) |
| 集成测试 | ✅ 完成 | 已验证实用场景 |
提示中包含“最多30条”、“10条左右”、“5条以内”等表达时,会自动应用数量限制:
请获取东京站周边最多50条建筑物数据
↓ 自动应用 limit: 50
请获取品川站周边10条左右的铁路数据
↓ 自动应用 limit: 10
limit_applied 和 is_truncated