Back to MCP directory
publicPublicdnsLocal runtime

openstreetmap-mcp-server

一个基于OpenStreetMap的MCP服务器实现,通过提供地理编码、地点搜索、路线规划等功能增强LLM的位置服务能力。

article

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. 房地产决策

  • 用例:在某个城市中心查找适合购房的区域。
  • 步骤
    1. 使用地理位置编码获取目标区域的经纬度。
    2. 在该区域内搜索教育资源、医疗设施和商业中心。
    3. 分析结果以评估该区域的生活质量。

2. EV 充电站寻找

  • 用例:找到距离最近的电动汽车充电站。
  • 步骤
    1. 获取当前所在位置的经纬度。
    2. 在半径为 500 米范围内搜索分类为 "electric_charge" 的地点。
    3. 显示结果并排序。

🔧 技术细节

调试

由于 MCP 服务器通过标准输入输出运行,调试可能较为困难。我们强烈推荐使用 MCP 检查器 来进行调试。

你可以通过以下命令启动 MCP 检查器:

npx @modelcontextprotocol/inspector uv --directory /path/to/osm-mcp-server run osm-mcp-server

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

help

Runtime guide

cloud

Hosted runtime

Hosted servers run from a provider-managed environment. You usually connect the MCP client to the hosted endpoint or follow the provider's authorization flow, without keeping a local process alive

  1. Open provider connection page
  2. Authorize or copy endpoint
  3. Connect from your MCP client
terminal

Local runtime / other methods

Local servers run on your own machine or infrastructure. You normally copy the server_config into your MCP client, install the required package, and provide env variables from env_schema when needed

  1. Copy server_config
  2. Install required package
  3. Fill env variables and restart client