OpenStreetMap MCP 服务器是一个增强大型语言模型(LLM)功能的实现方案,它将位置服务与地理空间数据相结合,为用户提供强大的地理信息处理能力。
uv sync
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())
uv sync
uv run --port 8000
uv build
~/Library/Application Support/osm-mcp-server/
%APPDATA%/osm-mcp-server/
~/.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())
帮助用户分析目标区域的房地产价值,通过周边设施和交通便利性来评估房产价格。
为电动汽车用户提供附近充电站的位置、可用性和实时状态信息。
uv sync
uv build
uv publish
使用 MCP 绝缘子工具进行调试:
npx @modelcontextprotocol/inspector uv --directory /path/to/osm-mcp-server run osm-mcp-server