Skip to main content
Glama

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 服务器使用。要查看和使用地图:

  1. 前往 AWS Location Service 控制台

  2. 找到“地图”部分并点击“试用”按钮

  3. 确保选择“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

变量

必需

描述

KEY_SERVICE_URL

是 (HTTP)

MCP 密钥服务解析端点

KEY_SERVICE_TOKEN

是 (HTTP)

用于向密钥服务进行身份验证的 Bearer 令牌

PLACE_INDEX_NAME

AWS 地点索引名称 (默认: explore.place.Grab)

MAP_NAME

AWS 地图名称 (默认: explore.map.Grab)

ROUTE_CALCULATOR_NAME

AWS 路线计算器名称 (默认: explore.route-calculator.Grab)

PORT

服务器端口 (默认: 3000)

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:

  1. 在本地启动您的 MCP 服务器:npm run dev

  2. 打开 Smithery playground:https://smithery.ai/playground

  3. 连接到您的本地 MCP 服务器:http://localhost:3000

  4. 使用 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)

部署文件

文件

描述

src/http-server.ts

带有流式 HTTP 传输的 HTTP 服务器

Dockerfile

VPS 的容器配置

docker-compose.yml

Docker 编排 (端口 8092)

deploy/nginx-mcp.conf

Nginx 反向代理配置

.github/workflows/deploy-vps.yml

通过 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

端点

端点

描述

/

服务器信息和使用说明

/health

带有 Firebase 状态的健康检查

/mcp?api_key=usr_...

MCP 端点 (查询参数认证)

/mcp/usr_...

MCP 端点 (基于路径的认证)

/analytics

分析数据 (JSON)

/analytics/dashboard

可视化分析仪表板

/.well-known/mcp/server-card.json

MCP 服务器发现

/.well-known/mcp-config

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/dashboard

  • JSON API: https://mcp.techmavie.digital/grabmaps/analytics

  • Firebase 控制台: 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 中设置以下资源:

  1. 创建一个以 GrabMaps 为数据提供商的地点索引 (Place Index)

  2. 创建一个以 GrabMaps 为数据提供商的地图 (Map)

  3. 创建一个以 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。

-
security - not tested
A
license - permissive license
-
quality - not tested

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/hithereiamaliff/mcp-grabmaps'

If you have feedback or need assistance with the MCP directory API, please join our Discord server