OSM GeoJSON MCP服务器
OpenStreetMap数据Overpass API中所述方法的备选方法GeoJSON格式保存MCP (Model Context Protocol)服务器。
🌟 主要机能
🗺️ 地理数据检索工具(8种)
- 🏢 建筑物数据取得 (
get_buildings):住宅、商业、工业、公共建物の取得 - 🛣️ 道路网络取得 (
get_roads):从高速公路到住宅街道路的道路数据 - 🏪 取得美式咖啡 (
get_amenities):餐厅、医院、学校等POI数据 - 🌊 水域数据取得 (
get_waterways):河流、湖泊、运河、蓄水池等水域数据 - 🌳 绿地数据取得 (
get_green_spaces):公园、森林、农地、草地等绿地 - 🚃 铁路数据获取 (
get_railways):铁路线路、车站、地铁、电车等
🔧 系统功能(4种)
- 📊 API統計 (
get_api_stats:监视使用统计信息、高速缓存状态和错误率 - 🔧 连接测试 (
test_connection): Overpass API服务器连接诊断 - 🔄 数据转换 (
convert_to_geojson): OSM从数据GeoJSON转换为 - 📁 下载功能:3种数据下载工具
- 📁 文件输出:所有工具的文件导出功能(.geojson/.json)
🚀 高级功能
💾 高速缓存系统
- 15分TTL: OSM符合条款的高速缓存期间
- LRU算法:高效内存管理
- 防止重复请求:使用同一查询的自动缓存
📈 日志监视功能
- 详细日志: API跟踪使用情况、响应时间和错误率
- 统计情报:高速缓存命中率,服务器性能
- 实时监控:查看工作时间和请求频率
⚡ 错误处理
- MCP符合性错误: McpError类支持标准错误代码
- 支持多服务器:3服务器自动回退
- 指数回调:速率限制时的自适应等待
- 5xx系统错误对应:服务器错误时的自动重试
- 详细错误信息:提供对调试有用的附加信息
📦 安装和使用
1.安装相关性
npm install2.启动服务器
# 通常の起動
npm start
# 開発モード(MCP Inspectorを使用)
npm run dev3.测试运行
# 全テストを実行
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 # 統合テスト実行🎯 Claude 使用示例
💬 提示示例
📍 特定地域建筑物ー取得
東京駅周辺(東経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件まで取得して、レスポンス時間を短縮してください。🗺️ 地图数据活用例
1.都市计画・不动产分析
渋谷駅周辺500m四方の建物、道路、公園データを取得して都市密度を分析したい→可以分析建筑物密度、道路交通、绿地率等
2.创建旅游路线
浅草寺周辺の観光スポット(レストラン、神社、公園)を50件まで取得して歩行者道路のデータも欲しい→制作面向游客的步行路线和看点地图
3.灾害时避难计画
学校周辺の避難に使える道路、公園、公共施設のデータを収集したい。重要度の高い施設を20件程度で→用于避难路线和避难场所的优化
4.交通基础设施调查
品川駅周辺の鉄道、道路、バス停のデータで交通アクセスを分析したい。主要な交通機関を15件まで→用于交通便利性的评价和城市计划
📄 响应格式
GeoJSON响应(典型值)
{
"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"
}API统计响应
{
"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"
}
}🛠️ 可用工具详细信息(共12个工具)
🏢 get_buildings
获取建筑数据。
参数:
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(可选):文件输出路径
🏪 get_amenities
取得美式咖啡(设施、设备)。
参数:
minLon,minLat,maxLon,maxLat:捕获范围坐标(必需)amenity_type(可选):美式咖啡类型(restaurant,hospital,school,bank,cafe,all)limit(可选):获取件数的上限(1-10000)output_path(可选):文件输出路径
🌊 get_waterways
获取水域、河流数据。
参数:
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(可选):文件输出路径
🚃 get_railways
获取铁路数据。
参数:
minLon,minLat,maxLon,maxLat:捕获范围坐标(必需)railway_type(可选):铁路类型(rail,subway,tram,monorail,station,platform,all)limit(可选):获取件数的上限(1-10000)output_path(可选):文件输出路径
📊 get_api_stats
API获取使用统计信息和系统状况。
参数:
reset(可选):是否重置统计信息(boolean)
🔧 test_连接
Overpass API测试到服务器的连接。
参数: 无
🔄 convert_to_gejson
OSM打开文件GeoJSON中所述修改相应参数的值。
参数:
input_path:输入OSM文件路径(必需)output_path:输出GeoJSON文件路径(必需)
📁 download_osm_data
生的OSM下载数据。
参数:
query: Overpass QL查询(必需)output_path:目标文件路径(必需)format(可选):输出格式(json,xml)
🌐 download_area_all
下载指定区域的所有数据。
参数:
minLon,minLat,maxLon,maxLat:捕获范围坐标(必需)output_path:目标文件路径(必需)
🔬 技术细节
MCP协议实现
- JSON-RPC 2.0准据:完整的协议实现
- 标准错误代码: McpError正确的类错误处理
- 初始化处理程序: InitializedNotificationSchema対応
- MCP SDK活用: SDK最大限度地利用功能,最大限度地减少自己的实施
OSM/Overpass API规约准据
- User-Agent识别:
OSM-MCP/1.0正确识别 - 汇率限制遵守:指数衰减和服务器负载平衡
- 高速缓存实现:15分钟TTL防止重复请求
- 内存限制: 1GB限制降低服务器负载
- 超时优化:180秒でOverpass API推奨値准据
高性能体系结构
- 多服务器回退:3自动切换服务器
- IP直接接続: DNS直接解决问题IP使用地址
- 非同期処理: Node.js标准https/fs模块高效通信
- 流式传输:直接写入大容量数据文件
数据质量保证
- OSM→GeoJSON变换:使用自定义转换逻辑进行高精度转换
- 几何处理: Point/LineString/Polygon の適切な形状生成
- 坐标検证:边框框和WGS84精确检查坐标系
- 元数据保留: OSM完全保留标记GeoJSON属性转换
监视调试功能
- 实时统计:跟踪请求数、响应时间和错误率
- 高速缓存分析:命中率、内存使用量、TTL管理
- 服务器监视:每个Overpass API服务器运行状况检查
- 全面测试:自动运行连接、功能和性能测试
🏆 MCP协议支持情况
✅ 完全准据(2025年7月更新)
- 📋 MCP 2024-11-05 仕様:完全准据
- 🔧 错误处理: McpError 类支持标准错误代码
- 🧪 测试质量:协议错误集成测试100%成功率
- 🚀 Claude Code 统合:已确认稳定动作
📊 実装详细
|功能类别|对应状况|详细情况| |------------|---------|------| | 初始化处理程序 | ✅ 完了 | initialize, initialized 対応 | | 协议响应 |✅ 完了|JSON-RPC 2.0 准据| | 工具功能 | ✅ 完成=12工具,已验证方案 | 错误处理 | ✅ 完成|标准错误代码(-32601,-32602,-32603)| | 集成测试 | ✅ 完成|已确认实用情景下的动作|
🧪 品质保证
- 协议测试: 5/5 成功(ping、初始化、初始化、工具/列表、工具/调用)
- 错误处理测试:5/5成功(参数验证、坐标验证、不明工具等)
- 集成测试:9/9成功(实际数据获取、并行处理、所有工具动作确认)
- 性能测试:支持并行处理,高速缓存功能正常运行
⚠️ 限制和建议
边界框大小
- 建议的大小:0.005°×0.005°以下(约500m四方)
- 最大大小:0.001平方度以下(防止超时)
- 都市部:建议在较小范围内进行分区检索
性能注意事项
- 建筑物查询:比道路查询成本高
- 关系处理:边界数据复杂度高
- 高速缓存利用:同一范围的重新获取缓存15分钟
利用规约遵守
- 汇率限制:建议每秒不超过一个请求
- 适当的利用:用于教育、研究、非营利目的
- 服务器负载减轻:积极利用缓存功能
📈 性能指标
実测値(东京駅周辺0.003°×0.003°)
- 建筑数据: 20件、4.4秒、22KB
- 道路数据: 361件、2.1秒、129KB
- 美式咖啡: 24件、12.6秒、4.5KB
- 高速缓存命中: \< 1秒(75%高速化)
🔢 件数制限机能
自然语言限制
如果在提示中包含“最多30件”、“10件左右”、“最多5件”等表达,则会自动应用件数限制:
東京駅周辺の建物データを最大50件まで取得してください
↓ 自動的に limit: 50 が適用される
品川駅の鉄道データを10件程度で
↓ 自動的に limit: 10 が適用される对应的表现模式
- 日本语:最大N件N最多N件以内、上限N件N最多N脚手架
- 英语:极限N,最大N,顶部N,第一个N,最多N
限制值规格
- 范围: 1-10000件
- 适用: Overpass API 有效限制级别
- 元数据:响应
limit_applied和is_truncated包含 - 性能:通过限制实现高速化和内存效率化
🎛️ Claude Code 设定
Claude Code 在中使用
Claude Code 那么 claude mcp add 在工作空间的边缘MCP注册服务器:
# プロジェクトに移動
cd /path/to/osm-geojson-mcp-server
# 実行権限を付与(初回のみ必要)
chmod +x src/index.js
# MCPサーバーを登録(ローカルスコープ)
claude mcp add osm-geojson node src/index.js
# または絶対パスで登録
claude mcp add osm-geojson [absolute path to ]/osm-geojson-mcp-server/src/index.js详情 Claude Code MCP 文档 来修改标记元素的显示属性。
使用开始
claude启动后/mcp执行命令MCP请确认是否正确连接。
✔ connected的规格化距离的幂函数。
Claude 请像下面这样搭话:
「東京駅周辺の建物データを取得して」
「新宿の地図データを分析したい」
「OSMサーバーの接続状況を確認して」Claude 将条目添加到文档注册表。
📝 更新履歴
v1.1.0 (2025-07-08) - MCP完全遵守协议
- ✅ MCP完全遵守协议: MCP 2024-11-05 完全符合规格要求
- ✅ 错误处理改善: McpError类和标准错误代码实现
- ✅ 全面测试添加:协议错误集成测试100%成功
- ✅ test_connection改善: JSON形式响应统一
- ✅ Claude Code统合:稳定行为确认和文档更新
v1.0.0 - 初始版本
- 🗺️ 8种地理数据检索工具
- 🔧 4种系统功能工具
- 💾 LRU高速缓存系统实现
- 📈 详细日志监视功能
- ⚡ 多服务器回退功能
🤝 分发
- 分叉此存储库
- 创建功能分支(
git checkout -b feature/AmazingFeature) - 提交更改(
git commit -m 'Add some AmazingFeature') - 推到分支(
git push origin feature/AmazingFeature) - 创建拉式请求
📄 许可证
MIT License - 详情 许可证 浏览文件
