GrabMaps MCP Server
GrabMaps MCP 服务器
一个用于 GrabMaps API 集成的模型上下文协议 (MCP) 服务器,通过 AWS Location Service 提供对 GrabMaps 服务的访问。
请注意,此 MCP 服务器不隶属于 Grab、GrabMaps 或 AWS Location Service。
重要提示:GrabMaps 仅支持东南亚的八个国家。
🇲🇾 马来西亚 (MYS)
🇸🇬 新加坡 (SGP)
🇹🇭 泰国 (THA)
🇲🇲 缅甸 (MMR)
🇰🇭 柬埔寨 (KHM)
🇻🇳 越南 (VNM)
🇵🇭 菲律宾 (PHL)
🇮🇩 印度尼西亚 (IDN)
在这些国家之外的搜索请求将无法返回准确结果。
功能
此 MCP 服务器通过两个主要类别提供对 GrabMaps 功能的访问:
地点操作 (可通过 MCP 使用)
SearchPlaceIndexForText: 正向地理编码,通过名称或地址查找地点
SearchPlaceIndexForPosition: 反向地理编码,通过坐标查找地点
SearchPlaceIndexForSuggestions: 在输入时获取地点建议
GetPlace: 获取特定地点的详细信息
路线操作 (可通过 MCP 使用)
CalculateRoute: 计算包含航点的点对点路线
CalculateRouteMatrix: 计算多个起点和终点之间的路线矩阵
分析与监控
Firebase Analytics: 使用 Firebase 实时数据库的云端分析存储
本地备份: 作为后备的自动本地文件备份
可视化仪表板: 使用 Chart.js 的实时分析仪表板
请求跟踪: 按方法、端点、客户端 IP 和用户代理跟踪请求
工具调用跟踪: 监控 MCP 工具的使用情况和性能
地图功能 (需要 AWS 控制台)
注意:地图渲染功能无法直接通过 MCP 服务器使用。要查看和使用地图:
前往 AWS Location Service 控制台
找到“地图”部分并点击“试用”按钮
确保选择“Grab”作为提供商
要探索 GrabMaps 数据覆盖范围并在不登录 AWS 的情况下查看地图,请访问: https://grabmaps.grab.com/explore-data-coverage
Related MCP server: Google Maps MCP Server
安装
从 NPM 安装
npm install mcp-grabmaps从源码安装
git clone https://github.com/hithereiamaliff/mcp-grabmaps.git
cd mcp-grabmaps
npm install配置
VPS / HTTP 服务器 (密钥服务模式)
HTTP 服务器通过 MCP 密钥服务 对用户进行身份验证。用户向密钥服务注册其 GrabMaps + AWS 凭据,并获得一个 usr_XXXXXXXX API 密钥。
创建一个 .env 文件:
# MCP Key Service (required for hosted HTTP server)
KEY_SERVICE_URL=http://mcp-key-service:8090/internal/resolve
KEY_SERVICE_TOKEN=your_server_token_here
# Place Index name (default for GrabMaps)
PLACE_INDEX_NAME=explore.place.Grab
# Map name (for rendering maps)
MAP_NAME=explore.map.Grab
# Route calculator name
ROUTE_CALCULATOR_NAME=explore.route-calculator.Grab
# Server port
PORT=3000变量 | 必需 | 描述 |
| 是 (HTTP) | MCP 密钥服务解析端点 |
| 是 (HTTP) | 用于向密钥服务进行身份验证的 Bearer 令牌 |
| 否 | AWS 地点索引名称 (默认: |
| 否 | AWS 地图名称 (默认: |
| 否 | AWS 路线计算器名称 (默认: |
| 否 | 服务器端口 (默认: |
Smithery / 本地开发
通过 Smithery 或本地开发运行时,GrabMaps 和 AWS 凭据直接通过 Smithery SDK 配置模式提供(而非通过密钥服务)。请在 .env 中设置它们:
GRABMAPS_API_KEY=your_grabmaps_api_key_here
AWS_ACCESS_KEY_ID=your_aws_access_key_id_here
AWS_SECRET_ACCESS_KEY=your_aws_secret_access_key_here
AWS_REGION=ap-southeast-5使用方法
方法 1:本地运行
# Development mode
npm run dev
# Production mode
npm run build
npm start方法 2:与 Smithery 一起使用
# Run in development mode
npm run smithery:dev
# Build for production
npm run smithery:build
# Deploy to Smithery
npm run smithery:deploy在 Smithery Playground 中测试
为了获得测试地点和路线 API 的最佳体验,我们建议使用 Smithery playground:
在本地启动您的 MCP 服务器:
npm run dev打开 Smithery playground:https://smithery.ai/playground
连接到您的本地 MCP 服务器:
http://localhost:3000使用 SMITHERY_TESTING.md 中提供的示例测试地点和路线 API 调用
方法 3:自托管 VPS 部署
使用 Docker 和 Nginx 在您自己的 VPS 上部署 MCP 服务器。身份验证由 MCP 密钥服务 处理 — 用户提供一个 usr_XXXXXXXX API 密钥,而不是原始凭据。
VPS URL 格式
# Query parameter
https://mcp.techmavie.digital/grabmaps/mcp?api_key=usr_XXXXXXXX
# Path-based
https://mcp.techmavie.digital/grabmaps/mcp/usr_XXXXXXXX客户端配置
Claude Desktop:
{
"mcpServers": {
"grabmaps": {
"transport": "streamable-http",
"url": "https://mcp.techmavie.digital/grabmaps/mcp?api_key=usr_XXXXXXXX"
}
}
}Cursor/Windsurf: 在其 MCP 配置文件中使用相同格式。
在线演示
公共实例位于:
https://mcp.techmavie.digital/grabmaps/mcp向 MCP 密钥服务注册您的 GrabMaps + AWS 凭据以获取您的 usr_XXXXXXXX API 密钥。
VPS 部署
架构
Client (Claude, Cursor, Windsurf, etc.)
↓ HTTPS (usr_XXXXXXXX key)
https://mcp.techmavie.digital/grabmaps/mcp/usr_XXXXXXXX
↓
Nginx (SSL termination + reverse proxy)
↓ HTTP
Docker Container (port 8092 → 8080)
↓
GrabMaps MCP Server (Streamable HTTP Transport)
↓ resolves usr_ key
MCP Key Service → decrypted GrabMaps + AWS credentials
↓
AWS Location Service (GrabMaps)部署文件
文件 | 描述 |
| 带有流式 HTTP 传输的 HTTP 服务器 |
| VPS 的容器配置 |
| Docker 编排 (端口 8092) |
| Nginx 反向代理配置 |
| 通过 GitHub Actions 自动部署 |
快速部署
# On your VPS — ensure the shared Docker network exists
docker network create mcp-network # only needed once
mkdir -p /opt/mcp-servers/grabmaps
cd /opt/mcp-servers/grabmaps
git clone https://github.com/hithereiamaliff/mcp-grabmaps.git .
# Set key-service env vars
cp .env.example .env
nano .env # set KEY_SERVICE_URL and KEY_SERVICE_TOKEN
docker compose up -d --build
# Configure Nginx (add location block from deploy/nginx-mcp.conf)
sudo nano /etc/nginx/sites-available/mcp.techmavie.digital
sudo nginx -t
sudo systemctl reload nginx端点
端点 | 描述 |
| 服务器信息和使用说明 |
| 带有 Firebase 状态的健康检查 |
| MCP 端点 (查询参数认证) |
| MCP 端点 (基于路径的认证) |
| 分析数据 (JSON) |
| 可视化分析仪表板 |
| MCP 服务器发现 |
| MCP 会话配置模式 |
Firebase 分析
VPS 部署包含用于云端分析存储的 Firebase 实时数据库集成。
功能
双重存储: Firebase (主) + 本地文件备份 (后备)
实时跟踪: 请求、工具调用、客户端 IP、用户代理
可视化仪表板:
/analytics/dashboard处的 Chart.js 仪表板持久化: 分析数据在容器重启和重新部署后依然存在
自动保存: 每 60 秒保存一次 + 在正常关闭时保存
跟踪的分析数据
请求和工具调用总数
按方法划分的请求 (GET, POST)
按端点划分的请求 (/, /health, /mcp, /analytics)
工具使用统计
客户端跟踪 (IP 地址, 用户代理)
每小时请求模式
最近的工具调用历史
Firebase 设置
请参阅 FIREBASE_SETUP.md 获取完整的设置说明。
快速设置:
# On VPS
cd /opt/mcp-servers/grabmaps
mkdir -p .credentials
nano .credentials/firebase-service-account.json # Paste your Firebase service account JSON
# Copy to Docker volume
docker volume create grabmaps_firebase-credentials
docker run --rm \
-v grabmaps_firebase-credentials:/credentials \
-v $(pwd)/.credentials:/source:ro \
alpine cp /source/firebase-service-account.json /credentials/
# Fix permissions
docker run --rm \
-v grabmaps_firebase-credentials:/credentials \
alpine chown -R 1001:1001 /credentials/
# Restart
docker compose down
docker compose up -d --build查看分析
仪表板:
https://mcp.techmavie.digital/grabmaps/analytics/dashboardJSON API:
https://mcp.techmavie.digital/grabmaps/analyticsFirebase 控制台: https://console.firebase.google.com/ → 您的项目 → 实时数据库
Firebase 数据结构
mcp-analytics/
└── mcp-grabmaps/
├── serverStartTime: "2026-01-06T..."
├── totalRequests: 123
├── totalToolCalls: 45
├── requestsByMethod: {...}
├── requestsByEndpoint: {...}
├── toolCalls: {...}
├── recentToolCalls: [...]
├── clientsByIp: {...}
├── clientsByUserAgent: {...}
├── hourlyRequests: {...}
└── lastUpdated: 1704470400000给 AI 模型的重要说明
支持的国家
GrabMaps 仅支持以下东南亚八个国家:
马来西亚 (MYS)
新加坡 (SGP)
泰国 (THA)
缅甸 (MMR)
柬埔寨 (KHM)
越南 (VNM)
菲律宾 (PHL)
印度尼西亚 (IDN)
AI 模型不应尝试将 GrabMaps 用于这些国家之外的地点,因为结果将不准确或不存在。
国家代码要求
在使用地点 API 功能时,AI 模型必须分析用户的查询以确定相应的国家,并在所有请求中包含三字母 ISO 国家代码:
{
"query": "City Square Mall",
"country": "SGP" // SGP for Singapore, MYS for Malaysia, THA for Thailand, etc.
}国家代码示例:
新加坡: SGP
马来西亚: MYS
泰国: THA
印度尼西亚: IDN
菲律宾: PHL
越南: VNM
包含国家代码对于返回准确的搜索结果至关重要。
这种方法允许您测试地点和路线功能,而无需设置地图可视化组件。
API 调用示例
正向地理编码
const response = await fetch('http://localhost:3000/searchPlaceIndexForText', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
query: 'KLCC, Kuala Lumpur',
country: 'my',
maxResults: 5
})
});
const data = await response.json();
console.log(data);计算路线
const response = await fetch('http://localhost:3000/calculateRoute', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
origin: {
longitude: 101.6942371,
latitude: 3.1516964
},
destination: {
longitude: 101.7113,
latitude: 3.1421
},
travelMode: 'Car'
})
});
const data = await response.json();
console.log(data);与 AI 模型集成
此 MCP 服务器可以与支持模型上下文协议的 AI 模型集成。与 AI 模型集成的示例:
// Example of how an AI model would use this MCP server
const result = await mcpClient.call('grabmaps', 'searchPlaceIndexForText', {
query: 'KLCC, Kuala Lumpur',
country: 'my'
});
// The AI model can then use the result in its response
console.log(`The coordinates of KLCC are: ${result.results[0].coordinates.latitude}, ${result.results[0].coordinates.longitude}`);AWS Location Service 设置
在使用此 MCP 服务器之前,您需要在 AWS Location Service 中设置以下资源:
创建一个以 GrabMaps 为数据提供商的地点索引 (Place Index)
创建一个以 GrabMaps 为数据提供商的地图 (Map)
创建一个以 GrabMaps 为数据提供商的路线计算器 (Route Calculator)
地图组件限制及推荐方法
通过 MCP 服务器使用时,地图 API 组件具有某些限制:
getMapTile端点返回的地图瓦片是编码为 base64 字符串的二进制数据getMapGlyphs的字体堆栈必须与 GrabMaps 通过 AWS Location Service 支持的字体堆栈匹配getMapSprites的精灵文件名必须遵循特定的正则表达式模式最大缩放级别受到限制 (通常最大缩放级别为 14)
推荐方法:
对于地图:使用 MapLibre GL 和 AWS Location Service 通过官方演示中所示的方式直接集成 GrabMaps
对于地点和路线:通过 Smithery playground 或直接 API 调用使用 MCP 服务器
这种分离方式可以在利用 MCP 服务器进行地点和路线功能的同时,实现最佳的性能和可视化效果。
官方 GrabMaps MapLibre GL 演示
examples/official-map-demo 目录中包含一个使用官方 GrabMaps 与 MapLibre GL 集成的综合演示。此演示为所有 GrabMaps 组件提供了完整的测试界面:
地点 API: 正向/反向地理编码和地点详情
地图 API: 地图瓦片、样式描述符、精灵和字形
路线 API: 路线计算和路线矩阵
该演示具有选项卡式界面,便于测试不同组件,并为每个 API 调用提供详细反馈。
主要功能
使用 MapLibre GL 通过官方 GrabMaps 地图瓦片的交互式地图
用于测试不同 GrabMaps 组件的选项卡式界面
所有 API 端点的全面测试
可配置的 API 密钥、区域和资源名称
路线、搜索结果和地图组件的可视化显示
运行演示:
# Start the MCP server
npm start
# Then open examples/official-map-demo/index.html in your browser请参阅 官方地图演示 README 获取设置和使用说明。
测试
tests 目录中包含一个全面的测试套件,用于验证所有端点是否正常工作。有关详细的测试说明、示例和故障排除提示,请参阅 TESTING.md 文件。
运行测试:
# Start the MCP server in one terminal
npm start
# Run the test suite in another terminal
node tests/test-suite.js许可证
本项目采用 MIT 许可证 - 有关详细信息,请参阅 LICENSE 文件。
贡献
欢迎贡献!请随时提交 Pull Request。
This server cannot be deployed
Maintenance
Related MCP Connectors
Geospatial intelligence with Mapbox APIs like geocoding, POI search, directions, isochrones, etc.
Geocoding, reverse geocoding, and places search for LatLng.
Geoapify MCP — wraps the Geoapify Location Platform (geoapify.com)
HERE MCP — premium geocoding, places, and TRAFFIC-AWARE routing from HERE
Related MCP Servers
- -licenseAqualityNot gradedmaintenanceEnables users to access Naver Maps API functionality including directions, place search, geocoding, and reverse geocoding through a Model Context Protocol server.4-
- FlicenseNot gradedqualityDmaintenanceEnables interaction with Google Maps services through the Model Context Protocol. Provides location-based functionality and mapping capabilities for AI agents.2-
- AlicenseBqualityDmaintenanceProvides read-only access to AWS resources including S3 buckets, EC2 instances, IAM users, and caller identity verification through the Model Context Protocol.5868 npmMIT
- AlicenseNot gradedqualityDmaintenanceProvides access to Google Maps functionality including places search, geocoding, directions, distance calculations, elevation data, and static map generation through the Model Context Protocol interface.8 npm5MIT