Back to MCP directory
publicPublicdnsLocal runtime

open-streetmap-mcp

一个基于OpenStreetMap的MCP服务器,为LLM提供地理空间数据服务

article

README

🚀 OpenStreetMap (OSM) MCP 服务器

OpenStreetMap MCP 服务器是一个增强大型语言模型(LLM)功能的实现方案,它将位置服务与地理空间数据相结合,为用户提供强大的地理信息处理能力。

🚀 快速开始

本地测试

运行服务器

  1. 安装依赖:
uv sync
  1. 启动服务器:
uv run --port 8000

测试客户端

import asyncio
from mcp.client import Client

async def main():
    client = Client("http://localhost:8000")
    
    # 地理编码测试
    results = await client.invoke_tool("geocode_address", {"address": "Empire State Building"})
    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": ["amenity"],
            "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())

✨ 主要特性

  • 地理编码:将地址转换为经纬度。
  • 反向地理编码:根据经纬度获取地址信息。
  • 附近地点搜索:查找指定范围内的兴趣点。
  • 路径规划:计算两点之间的最优路线。
  • 地图数据访问:访问 OpenStreetMap 的原始地理数据。

📦 安装指南

开发模式

  1. 安装依赖:
uv sync
  1. 启动服务器:
uv run --port 8000

生产环境

  1. 构建发布包:
uv build
  1. 部署到生产环境,确保配置文件路径正确:
    • MacOS~/Library/Application Support/osm-mcp-server/
    • Windows%APPDATA%/osm-mcp-server/
    • Linux~/.config/osm-mcp-server/

💻 使用示例

基础用法

import asyncio
from mcp.client import Client

async def main():
    client = Client("http://localhost:8000")
    
    # 地理编码测试
    results = await client.invoke_tool("geocode_address", {"address": "Empire State Building"})
    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": ["amenity"],
            "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())

🔍 演示

会合点优化

会合点优化

社区分析

社区分析

停车场搜索

停车场搜索

📚 详细文档

组件

资源

  1. 地理位置资源:提供地理位置的详细信息,包括经纬度、地址和相关标签。
  2. 搜索资源:支持基于关键词、类别或过滤条件的位置搜索。
  3. 路线规划资源:计算两点之间的路径,并返回详细的路径数据。

工具

  • 地理编码工具:用于将地址转换为经纬度。
  • 反向地理编码工具:根据经纬度获取地址信息。
  • 附近地点工具:查找指定范围内的兴趣点。
  • 路径规划工具:计算两点之间的最优路线。

使用场景

房地产决策

帮助用户分析目标区域的房地产价值,通过周边设施和交通便利性来评估房产价格。

EV 充电站查找

为电动汽车用户提供附近充电站的位置、可用性和实时状态信息。

开发和发布

准备发行

  1. 同步依赖:
uv sync
  1. 构建发行包:
uv build
  1. 发布到 PyPI:
uv publish

调试

使用 MCP 绝缘子工具进行调试:

npx @modelcontextprotocol/inspector uv --directory /path/to/osm-mcp-server run osm-mcp-server
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