地图服务服务器

一个支持Google Maps、OpenStreetMap和RiskScape三种地图提供商的MCP服务器,提供统一的地图服务接口,适用于位置搜索、地理编码、距离计算和导航等功能。

  • by LeonFNortje
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 leonfnortje/mcp-map-server

使用说明

MCP地图服务器

一个强大的模型上下文协议(MCP)服务器,通过三个不同的提供商提供全面的映射服务:

  • 谷歌地图API -具有广泛数据的高级功能
  • 开放街道图 -免费、开源的替代方案
  • API风险范围 -企业空间分析平台

所有提供商都提供具有流式HTTP传输支持和LLM处理功能的统一接口。

🚀 30秒内快速启动

# Install globally
npm install -g mcp-map-server

# Start with your preferred provider:

# Option 1: OpenStreetMap (FREE - No API key needed!)
mcp-map-server --port 3200 --provider osm

# Option 2: Google Maps (Requires API key)
mcp-map-server --port 3200 --apikey "your_google_api_key"

# Option 3: RiskScape (Enterprise)
mcp-map-server --port 3200 --provider riskscape --riskscape-key "your_key"

服务器将在 http://localhost:3200/mcp ✨

🤖 使用克劳德桌面(克劳德代码)

步骤1:启动MCP服务器

首先,使用您首选的提供商启动MCP服务器(请参阅上面的快速入门)。

步骤2:配置Claude桌面

将服务器添加到Claude Desktop配置文件中:

在 macOS 上: ~/Library/Application Support/Claude/claude_desktop_config.json
在Windows上: %APPDATA%\Claude\claude_desktop_config.json
在Linux上: ~/.config/Claude/claude_desktop_config.json

添加以下配置:

{
  "mcpServers": {
    "maps": {
      "command": "npx",
      "args": [
        "mcp-map-server",
        "--port", "3200",
        "--provider", "osm"
      ]
    }
  }
}

对于不同的提供者,调整args:

// For Google Maps
"args": [
  "mcp-map-server",
  "--port", "3200",
  "--apikey", "your_google_api_key"
]

// For OpenStreetMap (recommended for testing)
"args": [
  "mcp-map-server",
  "--port", "3200",
  "--provider", "osm"
]

// For RiskScape
"args": [
  "mcp-map-server",
  "--port", "3200",
  "--provider", "riskscape",
  "--riskscape-key", "your_riskscape_key"
]

步骤3:重新启动克劳德桌面

更新配置后,重新启动Claude Desktop以加载MCP服务器。

步骤4:在Claude中使用地图工具

配置后,您可以要求Claude使用映射工具:

示例提示:

  • “搜索纽约时代广场附近的咖啡店”
  • “获取从旧金山到洛杉矶的路线”
  • “坐标37.7749,-122.4194处的地址是什么?”
  • “计算伦敦和巴黎之间的距离”
  • “查找埃菲尔铁塔2公里范围内评级高于4.0的餐厅”
  • “获取珠穆朗玛峰大本营的海拔高度”

Claude将自动使用适当的映射工具来回答您的问题。

备选方案:环境变量配置

您还可以在Claude Desktop配置中使用环境变量:

{
  "mcpServers": {
    "maps": {
      "command": "npx",
      "args": ["mcp-map-server"],
      "env": {
        "MCP_SERVER_PORT": "3200",
        "MAP_API_PROVIDER": "osm"
        // Add API keys here if needed:
        // "GOOGLE_MAPS_API_KEY": "your_key",
        // "RISKSCAPE_API_KEY": "your_key"
      }
    }
  }
}

验证连接

重新启动Claude Desktop后,您可以验证MCP服务器是否已连接:

  1. 打开克劳德桌面
  2. 寻找🔌 右下角的图标
  3. 点击查看已连接的MCP服务器
  4. 你应该看到7个可用工具的“地图”

如果看不到连接的服务器:

  • 检查Claude Desktop日志是否有错误
  • 确保MCP服务器已全局安装: npm list -g mcp-map-server
  • 验证配置文件JSON语法是否有效
  • 请先尝试手动运行服务器进行测试: mcp-map-server --port 3200 --provider osm

🙌 特别感谢

这个项目得到了社区的捐助。
特别感谢 @junyinnnn 用于帮助添加支持 streamablehttp.

✅ 测试状态

此MCP服务器已通过测试和验证,可与以下设备正常工作:

  • 克劳德桌面
  • 潜水桌面
  • MCP协议实现

所有工具和功能都通过实际测试确认其功能。

特性

🌍 三重提供商支持:谷歌地图、OpenStreetMap和RiskScape

选择您首选的映射提供商:

  • 谷歌地图 -需要API密钥的高级功能
  • 开放街道图 -无需API密钥的免费开源替代方案
  • RiskScape -具有高级空间分析功能的企业级API

🗺️ 测绘服务

  • 位置搜索

    • 使用可定制的半径和过滤器搜索特定位置附近的地点
    • 获取详细的地点信息,包括评级、开放时间和联系方式
  • 地理编码服务

    • 将地址转换为坐标(地理编码)
    • 将坐标转换为地址(反向地理编码)
  • 距离和方向

    • 计算多个出发地和目的地之间的距离和旅行时间
    • 获取两点之间的详细转弯方向
    • 支持不同的出行方式(驾驶、步行、骑自行车、公交)
  • 高程

    • 检索特定位置的高程数据

🚀 高级功能

  • 可流式HTTP传输:具有实时流功能的最新MCP协议
  • 会话管理:具有基于UUID标识的状态会话
  • 多连接支持:处理多个并发客户端连接
  • 回声服务:MCP服务器功能的内置测试工具

快速开始

安装

npm install -g mcp-map-server

启动服务器

MCP服务器可以用三个地图提供程序中的任何一个启动。选择最适合您需求的一个:

选项1:谷歌地图(默认提供程序)

要求: 谷歌地图API密钥(在这里买一个)

# Using command line arguments
mcp-map-server --port 3200 --apikey "your_google_api_key"

# Using environment variables
GOOGLE_MAPS_API_KEY="your_google_api_key" mcp-map-server --port 3200

# Short form
mcp-map-server -p 3200 -k "your_google_api_key"

选项2:OpenStreetMap(免费,无需API密钥)

要求: 无-完全免费使用!

# Using command line arguments
mcp-map-server --port 3200 --provider osm

# Using environment variables
MAP_API_PROVIDER=osm mcp-map-server --port 3200

# Short form
mcp-map-server -p 3200 -r osm

选项3:RiskScape API(企业)

要求: RiskScape API密钥(联系RiskScape)

# Using command line arguments
mcp-map-server --port 3200 --provider riskscape --riskscape-key "your_riskscape_key"

# Using environment variables
MAP_API_PROVIDER=riskscape RISKSCAPE_API_KEY="your_key" mcp-map-server --port 3200

# Short form
mcp-map-server -p 3200 -r riskscape -s "your_riskscape_key"

验证服务器是否正在运行

启动后,服务器将显示:

✅ MCP Server started successfully!
🌐 Endpoint: http://localhost:3200/mcp
📚 Tools: 7 available

命令行选项

mcp-map-server --help
选项 别名 描述 默认值
--port -p 在 3200上运行服务器的端口
--provider -r 地图提供商(谷歌、osm、riskscape) 谷歌
--apikey -k 谷歌地图API密钥 -
--riskscape-key -s RiskScape API密钥 -
--help -h 显示帮助信息 -
--version -v 显示版本号 -

配置

使用环境变量

创建一个 .env 工作目录中的文件:

对于谷歌地图:

MAP_API_PROVIDER=google
GOOGLE_MAPS_API_KEY=your_google_maps_api_key_here
MCP_SERVER_PORT=3200

对于OpenStreetMap:

MAP_API_PROVIDER=osm
MCP_SERVER_PORT=3200
# No API key needed!

对于风险范围:

MAP_API_PROVIDER=riskscape
RISKSCAPE_API_KEY=your_riskscape_api_key_here
MCP_SERVER_PORT=3200

备注:命令行参数始终优先于环境变量。

选择供应商

提供商比较

功能 谷歌地图 OpenStreetMap RiskScape
需要API密钥 ✅ 是 ❌ 否 ✅ 是的
成本 使用免费套餐按次付费 100%免费 企业定价
最适合 商业应用程序、详细的业务数据 开源项目、注重成本的用户 企业空间分析
地点评分/评论 ✅ 广泛 ❌ 否 ⚠️ 有限
营业时间 ✅ 实时 ⚠️ 社区提供 ⚠️ 有限
实时业务 ✅ 是 ❌ 否 ❌ 没有
全球覆盖 ✅ 优秀 ✅ 好 ⚠️ 区域重点
速率限制 基于计费 合理使用政策 基于API层
空间分析 基本 基本 ✅ 高级
API版本 最新 天桥API v2端点

何时使用每个提供者

需要时使用谷歌地图:

  • 业务信息(评级、评论、小时数)
  • 实时交通数据
  • 街景集成
  • 卓越的地理编码精度
  • 详细的地点信息

需要时使用OpenStreetMap:

  • 完全免费使用
  • 开源兼容性
  • 没有API密钥管理
  • 社区驱动数据
  • 基本映射功能

需要时使用RiskScape:

  • 企业空间分析
  • 风险评估特征
  • 高级路由算法
  • 自定义空间查询
  • 专业支持

可用工具

所有三个提供商都通过统一的接口支持同一组工具:

  1. search_nearby -根据位置搜索附近的地点,可选择按关键字、距离、评级和营业时间进行过滤
  2. get_place_details -获取特定地点的详细信息,包括联系方式、评论、评级和营业时间
  3. 地图_地理编码 -将地址或地名转换为地理坐标(纬度和经度)
  4. maps_reverse_geocode -将地理坐标转换为人类可读的地址
  5. 地图_距离_矩阵 -计算多个出发地和目的地之间的旅行距离和持续时间
  6. 地图_方向 -获取两个位置之间的详细转弯导航方向
  7. 地图_立面图 -获取特定地理位置的海拔高度数据

完整设置示例

示例1:使用谷歌地图进行设置

  1. 从获取Google Maps API密钥 谷歌云控制台
  2. 启用所需的API:地点API、地理编码API、方向API、距离矩阵API、高程API
  3. 启动服务器:
    mcp-map-server --port 3200 --apikey "AIzaSyB..."
    

示例2:使用OpenStreetMap进行设置

  1. 不需要API密钥!
  2. 只需启动服务器:
    mcp-map-server --port 3200 --provider osm
    

示例3:使用RiskScape进行设置

  1. 从获取API密钥 RiskScape
  2. 启动服务器:
    mcp-map-server --port 3200 --provider riskscape --riskscape-key "rsk_..."
    

示例4:使用.env文件(建议用于生产环境)

  1. 复制示例环境文件:

    cp .env.example .env
    
  2. 编辑 .env 与您首选的供应商:

    MAP_API_PROVIDER=osm  # or 'google' or 'riskscape'
    MCP_SERVER_PORT=3200
    # Add API keys if needed:
    # GOOGLE_MAPS_API_KEY=your_key_here
    # RISKSCAPE_API_KEY=your_key_here
    
  3. 启动服务器:

    mcp-map-server
    

故障排除

常见问题及解决方法

问题:“找不到API密钥”错误

解决方案: 确保您已通过命令行或环境变量提供了API密钥:

# For Google Maps
mcp-map-server --apikey "your_key"
# For RiskScape
mcp-map-server --provider riskscape --riskscape-key "your_key"

问题:端口已在使用中

解决方案: 使用其他端口:

mcp-map-server --port 3201

问题:OpenStreetMap速率限制

解决方案: OpenStreetMap有合理使用限制。如果你打他们,考虑一下:

  • 减少请求频率
  • 将谷歌地图或RiskScape用于高容量应用程序
  • 在应用程序中实现缓存

问题:RiskScape v2端点不工作

解决方案: 请确保您的API密钥可以访问v2终结点。服务器自动使用v2端点以获得更好的性能和功能。

🐳 Docker支持

Docker快速入门

MCP服务器可以使用Docker运行,支持所有三个地图提供商:

构建Docker镜像

# Clone the repository
git clone https://github.com/LeonFNortje/mcp-map-server.git
cd mcp-map-server

# Build the Docker image
docker build -t mcp-map-server .

使用Docker运行

选项1:谷歌地图提供商

docker run -d \
  --name mcp-google-maps \
  -p 3200:3200 \
  -e GOOGLE_MAPS_API_KEY="your_api_key" \
  -e MAP_API_PROVIDER=google \
  mcp-map-server

选项2:OpenStreetMap提供程序(不需要API密钥)

docker run -d \
  --name mcp-osm \
  -p 3200:3200 \
  -e MAP_API_PROVIDER=osm \
  mcp-map-server \
  --port 3200 --provider osm

选项3:RiskScape提供商

docker run -d \
  --name mcp-riskscape \
  -p 3200:3200 \
  -e MAP_API_PROVIDER=riskscape \
  -e RISKSCAPE_API_KEY="your_api_key" \
  mcp-map-server \
  --port 3200 --provider riskscape

使用Docker Compose

为了便于管理,请使用Docker Compose运行任何或所有提供程序:

  1. 创建一个 .env 文件 使用API密钥:
GOOGLE_MAPS_API_KEY=your_google_api_key
RISKSCAPE_API_KEY=your_riskscape_api_key
  1. 启动特定服务:
# Start only Google Maps server
docker-compose up -d mcp-google-maps

# Start only OpenStreetMap server (no API key needed)
docker-compose up -d mcp-openstreetmap

# Start only RiskScape server
docker-compose up -d mcp-riskscape

# Or start all services at once (on different ports)
docker-compose up -d

docker-compose.yml配置:

  • 谷歌地图:端口3200
  • 开放街道图:端口3201
  • RiskScape:端口3202
  1. 检查服务状态:
docker-compose ps
docker-compose logs mcp-google-maps
  1. 停止服务:
docker-compose down

Docker功能

  • 多阶段构建 优化图像大小(~150MB)
  • 非root用户 增强安全性
  • 健康检查 用于集装箱自动监控
  • 环境变量支持 便于配置
  • 三家供应商 支持简单的环境变量切换

Docker与克劳德桌面

要在Claude Desktop中使用Docker容器,请更新您的配置:

{
  "mcpServers": {
    "maps": {
      "command": "docker",
      "args": [
        "run", "--rm",
        "-e", "MAP_API_PROVIDER=osm",
        "mcp-map-server",
        "--port", "3200",
        "--provider", "osm"
      ]
    }
  }
}

发展

地方发展

# Clone the repository
git clone https://github.com/LeonFNortje/mcp-map-server.git
cd mcp-map-server

# Install dependencies
npm install

# Set up environment variables
cp .env.example .env
# Edit .env with your preferred provider and API keys

# Build the project
npm run build

# Start the server
npm start

# Or run in development mode
npm run dev

项目结构

src/
├── cli.ts                    # Main CLI entry point
├── config.ts                 # Server configuration
├── index.ts                  # Package exports
├── core/
│   └── BaseMcpServer.ts     # Base MCP server with streamable HTTP
├── services/
│   ├── PlacesSearcher.ts    # Service layer with provider switching
│   ├── toolclass.ts         # Google Maps API client
│   ├── OpenStreetMapTools.ts # OpenStreetMap API client
│   └── RiskScapeTools.ts    # RiskScape API client
└── tools/
    └── maps/                # Map service tools
        ├── searchNearby.ts  # Search nearby places
        ├── placeDetails.ts  # Place details
        ├── geocode.ts       # Geocoding
        ├── reverseGeocode.ts # Reverse geocoding
        ├── distanceMatrix.ts # Distance matrix
        ├── directions.ts    # Directions
        └── elevation.ts     # Elevation data

技术栈

  • TypeScript -类型安全开发
  • Node.js -运行时环境
  • 谷歌地图服务JS -谷歌地图API集成
  • 模型上下文协议SDK -MCP协议实现
  • Express.js -HTTP服务器框架
  • 萨德 -架构验证

安全考虑

  • 为了安全起见,API密钥在服务器端进行处理
  • DNS重新绑定保护可用于生产
  • 使用Zod模式进行输入验证
  • 错误处理和日志

许可证

麻省理工学院

贡献

欢迎社区参与和贡献!以下是您如何做出贡献:

  • ⭐️ 如果你觉得这个项目有帮助,就给它标上星号
  • 🐛 提交问题:报告错误或提供建议
  • 🔧 创建拉取请求:提交代码改进
  • 📖 文档:帮助改进文档

联系

如果您有任何问题或建议,请随时联系:

  • 📧 电子邮件: lnortje@gmail.com
  • 💻 github: LeonFNortje
  • 🤝 合作:欢迎洽谈项目合作
  • 📚 技术指导:真诚欢迎您的建议和指导

更新日志

v0.2.0(最新)-三重提供商支持

  • 新 添加RiskScape API作为第三个提供程序选项
  • 新 实现了所有RiskScape v2端点以获得更好的性能
  • 新 添加 --riskscape-key RiskScape身份验证的CLI选项
  • 改进: 增强的README,为所有提供商提供全面的设置说明
  • 补充: 提供商比较指南和故障排除部分
  • 补充: 在risk-API-uses.md中完成RiskScape API文档
  • 特点: 全面的三重提供商支持:谷歌地图、OpenStreetMap和RiskScape

v0.1.0-OpenStreetMap集成

  • 新 添加OpenStreetMap作为谷歌地图的免费替代品
  • 新 通过以下方式实现提供商切换 --provider CLI选项
  • 改变: 将默认端口从3000更新为3200,以避免冲突
  • 固定的: 将所有错误信息从中文翻译成英文
  • 补充: 在maps-API-uses.md中提供全面的API文档
  • 特点: 使用OpenStreetMap提供程序时不需要API密钥
  • 固定的: 解决了飞行中和glob包的npm弃用警告

v0.0.5

  • 添加了流式HTTP传输支持
  • 改进了带有表情符号指示器的CLI界面
  • 增强的错误处理和日志记录
  • 为LLM集成添加了全面的工具描述
  • 更新到最新的MCP SDK版本