Amap MCP Server

Amap MCP Server

Provides comprehensive geographic information services and route planning for AI agents via the Amap (Gaode Maps) API. It supports geocoding, multi-modal navigation, POI searches, and administrative region queries.

Category
Visit Server

README

🌐 Amap MCP Server

Python License MCP Version

🗺️ 高德地图 MCP (Model Context Protocol) 服务器 - 为 AI 智能体提供完整的地理信息服务和路线规划功能

基于 Model Context Protocol (MCP) 协议的高德地图服务集成,支持地理编码、路线规划、POI搜索等核心功能,专为 AI 智能体和 LLM 应用设计。

✨ 核心特性

功能模块 描述 工具数量
🗺️ 地理编码 地址与坐标相互转换 2
🚗 路线规划 驾车/步行/骑行/公交/地铁 6
🔍 POI搜索 关键字/周边/多边形/详情查询 4
🏛️ 行政区划 城市区域层级查询 1
🌐 IP定位 基于IP的地理位置 1
📍 AOI边界 兴趣区域边界查询 1

总计:15+ 个专业工具


🚀 快速开始

1️⃣ 安装依赖

# 使用 pip
pip install -r requirements.txt

# 使用 uv (推荐,更快)
uv pip install -r requirements.txt

2️⃣ 配置环境变量

方式一:复制配置文件(推荐)

# 复制环境变量模板
cp .env.example .env
# 编辑 .env 文件,填入您的 API Key

方式二:直接创建 .env 文件

创建 .env 文件并配置高德 API 密钥:

# ========== 必需配置 ==========
# 高德地图 Web 服务 API Key
# 获取地址:https://lbs.amap.com/dev/
AMAP_API_KEY=your_amap_api_key_here

# ========== API 地址配置(可选,使用默认值) ==========
# 地理编码
AMAP_GEO_URL=https://restapi.amap.com/v3/geocode/geo
AMAP_REGEO_URL=https://restapi.amap.com/v3/geocode/regeo

# 路线规划
AMAP_DRIVING_URL=https://restapi.amap.com/v5/direction/driving
AMAP_WALKING_URL=https://restapi.amap.com/v5/direction/walking
AMAP_BICYCLING_URL=https://restapi.amap.com/v5/direction/bicycling
AMAP_EBIKE_URL=https://restapi.amap.com/v5/direction/electrobike
AMAP_BUS_URL=https://restapi.amap.com/v5/direction/transit/integrated
AMAP_SUBWAY_TRANSIT=https://restapi.amap.com/v5/direction/transit/integrated

# POI 搜索
AMAP_SEARCH_POI_URL=https://restapi.amap.com/v5/place/text
AMAP_SEARCH_POI_AROUND_URL=https://restapi.amap.com/v5/place/around
AMAP_SEARCH_POI_POLYGON_URL=https://restapi.amap.com/v5/place/polygon
AMAP_SEARCH_POI_DETAIL_URL=https://restapi.amap.com/v5/place/detail
AMAP_AOI_POLYLINE_URL=https://restapi.amap.com/v5/aoi/polyline

# 行政区划 & IP
AMAP_REGION_QUERY_URL=https://restapi.amap.com/v3/config/district
AMAP_IP_URL=https://restapi.amap.com/v3/ip

# ========== 日志配置(可选) ==========
# 日志级别: DEBUG, INFO, WARNING, ERROR, CRITICAL
# AMAP_LOG_LEVEL=INFO
# 日志文件路径
# AMAP_LOG_FILE=amap_mcp.log

3️⃣ 获取 API 密钥

  1. 访问 高德开放平台
  2. 注册/登录账号
  3. 创建应用 → 选择「Web服务」
  4. 获取 API Key

4️⃣ 启动服务

# 方式1: 直接运行 MCP 服务器
python amap_mcp.py

# 方式2: 使用 MCP CLI
mcp run amap_mcp.py

🔧 MCP Server 集成配置

Claude Desktop / Cursor 等 MCP 客户端

在 MCP 客户端配置文件中添加:

{
  "mcpServers": {
    "amap-mcp-server": {
      "transport": "stdio",
      "command": "python",
      "args": ["D:\\mycode\\travelagent\\amap_mcp\\amap_mcp.py"],
      "env": {
        "AMAP_API_KEY": "your_amap_api_key_here"
      }
    }
  }
}

环境变量配置(推荐)

{
  "mcpServers": {
    "amap-mcp-server": {
      "transport": "stdio",
      "command": "python",
      "args": ["D:\\mycode\\travelagent\\amap_mcp\\amap_mcp.py"]
    }
  }
}

配合 .env 文件使用:

AMAP_API_KEY=your_amap_api_key_here

Linux/macOS 路径示例

{
  "mcpServers": {
    "amap-mcp-server": {
      "transport": "stdio",
      "command": "python",
      "args": ["/home/user/travelagent/amap_mcp/amap_mcp.py"]
    }
  }
}

📚 API 工具列表

📍 地理编码

工具名称 功能描述 输入示例
geocoding 地址转坐标 {"address": "北京市朝阳区阜通东大街6号"}
reverse_geocoding 坐标转地址 {"location": "116.481488,39.990464"}

🚗 路线规划

工具名称 功能描述 策略选项
driving_route_planning 驾车路线 速度优先/费用最低/距离最短/推荐路线
walking_route_planning 步行路线 室内外路线规划
bicycling_route_planning 骑行路线 自行车专用路线
elect_bike_route_planning 电动车路线 续航/充电站优化
public_transit_route_planning 公交路线 地铁/公交/换乘方案
amap_route_subway 地铁路线 城市地铁换乘

🔍 POI 搜索

工具名称 功能描述
search_poi 关键字搜索 POI
search_poi_around 周边 POI 搜索
search_poi_polygon 多边形区域 POI 搜索
search_poi_detail POI 详情查询
search_aoi_boundary AOI 边界查询

🏛️ 行政区划 & IP

工具名称 功能描述
administrative_region_query 行政区划查询
ip_positioning IP 定位

💡 使用示例

Python 示例

import asyncio
from amap_mcp import geocoding, driving_route_planning

async def travel_planner():
    """智能行程规划示例"""
    
    # 1️⃣ 地址转坐标
    address_result = await geocoding({
        "address": "北京市朝阳区望京soho",
        "city": "北京"
    })
    origin = address_result["data"]["location"]
    
    # 2️⃣ 获取目的地坐标
    dest_result = await geocoding({
        "address": "上海浦东新区陆家嘴",
        "city": "上海"
    })
    destination = dest_result["data"]["location"]
    
    # 3️⃣ 规划驾车路线
    route = await driving_route_planning({
        "origin": origin,
        "destination": destination,
        "strategy": 32,  # 推荐路线
        "show_fields": "cost,navi"
    })
    
    # 4️⃣ 输出路线信息
    print(f"总距离: {route['data']['summary']['distance']}米")
    print(f"预计时间: {route['data']['summary']['duration']}秒")
    
    return route

# 运行
asyncio.run(travel_planner())

MCP Client 示例

from mcp import Client

async def use_amap_mcp():
    async with Client("amap_mcp.py") as client:
        # 地理编码
        result = await client.call_tool(
            "geocoding",
            {"address": "杭州市西湖区"}
        )
        print(result)
        
        # POI搜索
        pois = await client.call_tool(
            "search_poi",
            {"keywords": "美食", "page_size": 5}
        )
        return pois

⚙️ 环境配置

完整环境变量

# ========== 必需 ==========
AMAP_API_KEY=your_api_key_here

# ========== 地理编码 ==========
AMAP_GEO_URL=https://restapi.amap.com/v3/geocode/geo
AMAP_REGEO_URL=https://restapi.amap.com/v3/geocode/regeo

# ========== 路线规划 ==========
AMAP_DRIVING_URL=https://restapi.amap.com/v5/direction/driving
AMAP_WALKING_URL=https://restapi.amap.com/v5/direction/walking
AMAP_BICYCLING_URL=https://restapi.amap.com/v5/direction/bicycling
AMAP_EBIKE_URL=https://restapi.amap.com/v5/direction/electrobike
AMAP_BUS_URL=https://restapi.amap.com/v5/direction/transit/integrated
AMAP_SUBWAY_TRANSIT=https://restapi.amap.com/v5/direction/transit/integrated

# ========== POI搜索 ==========
AMAP_SEARCH_POI_URL=https://restapi.amap.com/v3/place/text
AMAP_SEARCH_POI_AROUND_URL=https://restapi.amap.com/v5/place/around
AMAP_SEARCH_POI_POLYGON_URL=https://restapi.amap.com/v5/place/polygon
AMAP_SEARCH_POI_DETAIL_URL=https://restapi.amap.com/v5/place/detail
AMAP_AOI_POLYLINE_URL=https://restapi.amap.com/v5/aoi/polyline

# ========== 行政区划 & IP ==========
AMAP_REGION_QUERY_URL=https://restapi.amap.com/v3/config/district
AMAP_IP_URL=https://restapi.amap.com/v3/ip

🛠️ 开发指南

项目结构

amap_mcp/
├── amap_mcp.py          # MCP 服务器主入口
├── models.py            # 数据模型定义
├── config.py            # 配置和工具函数
├── output.py           # 响应格式化处理
├── main.py             # IP 查询服务入口
├── amap_enum.py        # API 地址枚举
├── config_log.py       # 日志配置
├── requirements.txt    # 依赖列表
├── pyproject.toml      # 项目配置
├── README.md           # 项目文档
└── utils/              # 工具函数

添加新工具

from mcp.server.fastmcp import FastMCP
from config import get_api_key, validate_location_format

mcp = FastMCP(name="amap-mcp")

@mcp.tool(name="custom_tool")
async def custom_function(param: str) -> dict:
    """
    自定义工具描述
    
    Args:
        param: 参数描述
        
    Returns:
        标准化响应
    """
    # 1. 获取 API Key
    api_key = get_api_key()
    
    # 2. 构建请求参数
    params = {"key": api_key, "param": param}
    
    # 3. 发起请求(使用 httpx)
    # 4. 处理响应
    
    return {"status": 1, "data": {...}}

运行测试

# 运行所有测试
pytest test_amap_mcp.py -v

# 运行特定测试
pytest test_amap_mcp.py::test_geocoding -v

# 生成覆盖率报告
pytest --cov=amap_mcp test_amap_mcp.py

📊 响应格式

所有 API 返回统一格式:

{
  "status": 1,
  "data": {...},
  "error": null,
  "info": "OK"
}

错误响应:

{
  "status": 0,
  "data": null,
  "error": "详细错误信息",
  "info": "请求失败"
}

🧪 测试覆盖

本项目包含完整的测试用例:

# 地理编码测试
pytest test_amap_mcp.py -k "geocoding"

# 路线规划测试
pytest test_amap_mcp.py -k "route"

# POI搜索测试
pytest test_amap_mcp.py -k "poi"

# 完整测试套件
pytest test_amap_mcp.py -v --tb=short

🤝 贡献指南

  1. Fork 本项目
  2. 创建特性分支:git checkout -b feature/amazing-feature
  3. 提交更改:git commit -m 'Add amazing feature'
  4. 推送分支:git push origin feature/amazing-feature
  5. 创建 Pull Request

开发规范

  • 使用 black 格式化代码
  • 运行 mypy 进行类型检查
  • 添加必要的测试用例
  • 更新相关文档

📚 相关文档

资源 链接
高德开放平台 https://lbs.amap.com/
地理编码 API https://lbs.amap.com/api/webservice/guide/api/geocode
路线规划 API https://lbs.amap.com/api/webservice/guide/api/newroute
POI 搜索 API https://lbs.amap.com/api/webservice/guide/api/search
MCP 协议文档 https://modelcontextprotocol.io/
FastMCP 框架 https://github.com/modelcontextprotocol/servers/tree/main/src/fastmcp

📄 许可证

本项目基于 MIT 许可证 开源。


🙏 致谢


❓ 常见问题

Q: API 调用频率限制?

A: 高德地图 Web 服务 API 免费用户:30万次/天

Q: 坐标系说明?

A: 高德地图使用 GCJ-02 坐标系(国测局坐标)

Q: 如何获取高德 POI 类型代码?

A: 参考 POI 分类代码表


<div align="center">

⭐ 如果这个项目对您有帮助,请给它一个 Star!

</div>

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
E2B

E2B

Using MCP to run code via e2b.

Official
Featured