百度地图API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
百度地图提供的MCP Server,包含10个符合MCP协议标准的API接口,涵盖逆地理编码、地点检索、路线规划等。
依赖MCP Python SDK和MCP Typescript SDK开发,任意支持MCP协议的智能体助手(如Claude、Cursor以及千帆AppBuilder等)都可以快速接入。
强烈推荐通过SSE接入百度地图MCP Server, 以获得更低的延迟和更高的稳定性。请不要忘记在控制台为你的AK勾选上MCP(SSE)服务。
- 
地理编码 map_geocode- 描述: 将地址解析为对应的位置坐标, 地址结构越完整, 地址内容越准确, 解析的坐标精度越高
- 参数: address地址信息
- 输出: location纬经度坐标
 
- 
逆地理编码 map_reverse_geocode- 描述: 根据纬经度坐标, 获取对应位置的地址描述, 所在行政区划, 道路以及相关POI等信息
- 参数:
- latitude纬度坐标
- longitude经度坐标
 
- 输出: formatted_address,uid,addressComponent等语义化地址信息
 
- 
地点检索 map_search_places- 描述: 支持检索城市内的地点信息(最小到city级别), 也可支持圆形区域内的周边地点信息检索
- 参数:
- query检索关键词, 可用名称或类型, 多关键字使用英文逗号隔开, 如:- query=天安门,美食
- tag检索的类型偏好, 格式为- tag=美食或者- tag=美食,酒店
- region检索的行政区划, 格式为- region=cityname或- region=citycode
- location圆形检索中心点纬经度坐标, 格式为- location=lat,lng
- radius圆形检索的半径
 
- 输出: POI列表, 包含name,location,address等
 
- 描述: 支持检索城市内的地点信息(最小到
- 
地点详情检索 map_place_details- 描述: 根据POI的uid,检索其相关的详情信息, 如评分、营业时间等(不同类型POI对应不同类别详情数据)
- 参数: uidPOI的唯一标识
- 输出: POI详情, 包含name,location,address,brand,price等
 
- 
批量算路 map_directions_matrix- 描述: 根据起点和终点坐标计算路线规划距离和行驶时间,支持驾车、骑行、步行。步行时任意起终点之间的距离不得超过200KM,驾车批量算路一次最多计算100条路线,起终点个数之积不能超过100。
- 参数:
- origins起点纬经度列表, 格式为- origins=lat,lng,多个起点用- |分隔
- destinations终点纬经度列表, 格式为- destinations=lat,lng,多个终点用- |分隔
- model算路类型,可选取值包括- driving,- walking,- riding,默认使用- driving
 
- 输出: 每条路线的耗时和距离, 包含distance,duration等
 
- 
路线规划 map_directions- 描述: 根据起终点位置名称或经纬度坐标规划出行路线和耗时, 可指定驾车、步行、骑行、公交等出行方式
- 参数:
- origin起点位置名称或纬经度, 格式为- origin=lat,lng
- destination终点位置名称或纬经度, 格式为- destination=lat,lng
- model出行类型, 可选取值包括- driving,- walking,- riding,- transit, 默认使用- driving
 
- 输出: 路线详情,包含steps,distance,duration等
 
- 
天气查询 map_weather- 描述: 通过行政区划或是经纬度坐标查询实时天气信息及未来5天天气预报
- 参数:
- district_id行政区划编码
- location经纬度坐标, 格式为- location=lng, lat
 
- 输出: 天气信息, 包含temperature,weather,wind等
 
- 
IP定位 map_ip_location- 描述: 通过所给IP获取具体位置信息和城市名称, 可用于定位IP或用户当前位置。可选参数ip,如果为空则获取本机IP地址(支持IPv4和IPv6)。
- 参数:
- ip(可选)需要定位的IP地址
 
- 输出: 当前所在城市和城市中点location
 
- 描述: 通过所给IP获取具体位置信息和城市名称, 可用于定位IP或用户当前位置。可选参数
- 
实时路况查询 map_road_traffic- 描述: 查询实时交通拥堵情况, 可通过指定道路名和区域形状(矩形, 多边形, 圆形)进行实时路况查询。
- 参数:
- model路况查询类型 (可选值包括- road,- bound,- polygon,- around, 默认使用- road)
- road_name道路名称和道路方向,- model=road时必传 (如:- 朝阳路南向北)
- city城市名称或城市adcode,- model=road时必传 (如:- 北京市)
- bounds区域左下角和右上角的纬经度坐标,- model=bound时必传 (如:- 39.9,116.4;39.9,116.4)
- vertexes多边形区域的顶点纬经度坐标,- model=polygon时必传 (如:- 39.9,116.4;39.9,116.4;39.9,116.4;39.9,116.4)
- center圆形区域的中心点纬经度坐标,- model=around时必传 (如:- 39.912078,116.464303)
- radius圆形区域的半径(米), 取值- [1,1000],- model=around时必传 (如:- 200)
 
- 输出: 路况信息, 包含road_name,traffic_condition等
 
- 
POI智能提取 map_poi_extract- 描述: 当所给的API_KEY带有高级权限才可使用, 根据所给文本内容提取其中的相关POI信息。
- 参数: text_content用于提取POI的文本描述信息 (完整的旅游路线,行程规划,景点推荐描述等文本内容, 例如: 新疆独库公路和塔里木湖太美了, 从独山子大峡谷到天山神秘大峡谷也是很不错的体验)
- 输出:相关的POI信息,包含name,location等
 
- 描述: 当所给的
使用百度地图MCP Server主要通过两种形式,分别是Python和Typescript,下面分别介绍。
在选择两种方法之前,你需要在百度地图开放平台的控制台中创建一个服务端AK,通过AK你才能够调用百度地图API能力。
如果你希望自定义百度地图MCP Server的能力,可以通过源码接入,方式详见Python接入文档。
在v1.1版本更新中,我们通过pypi发布了百度地图MCP Server:mcp-server-baidu-maps,你可以使用任意Python包管理工具轻松获取并快速配置使用。
使用uv时不需要特殊安装,我们将使用uvx直接运行mcp-server-baidu-maps
或者你可以通过pip来安装mcp-server-baidu-maps
pip install mcp-server-baidu-maps安装后,我们可以使用以下命令将其作为脚本运行:
python -m mcp_server_baidu_maps在任意MCP客户端(如Claude.app)中添加如下配置,部分客户端下可能需要做一些格式化调整。
其中BAIDU_MAPS_API_KEY对应的值需要替换为你自己的AK。
Using uvx
{
  "mcpServers": {
    "baidu-maps": {
      "command": "uvx",
      "args": ["mcp-server-baidu-maps"],
      "env": {
        "BAIDU_MAPS_API_KEY": "<YOUR_API_KEY>"
      }
    }
  }
}Using pip installation
{
  "mcpServers": {
    "baidu-maps": {
      "command": "python",
      "args": ["-m", "mcp_server_baidu_maps"],
      "env": {
          "BAIDU_MAPS_API_KEY": "<YOUR_API_KEY>"
      }
    }
  }
}保存配置后,重启你的MCP客户端,即可使用百度地图MCP Server。
通过Typescript接入,你只需要安装node.js。
当你在终端可以运行
node -v则说明你的node.js已经安装成功。
打开Claude for Desktop的Setting,切换到Developer,点击Edit Config,用任意的IDE打开配置文件。
将以下配置添加到配置文件中,BAIDU_MAP_API_KEY 是访问百度地图开放平台API的AK,在此页面中申请获取:
{
    "mcpServers": {
        "baidu-map": {
            "command": "npx",
            "args": [
                "-y",
                "@baidumap/mcp-server-baidu-map"
            ],
            "env": {
                "BAIDU_MAP_API_KEY": "xxx"
            }
        }
    }
}如果是window 系统, json 需要添加单独的配置:
"mcpServers": {
 "baidu-map": {
      "command": "cmd",
      "args": [
        "/c",
        "npx",
        "-y",
        "@baidumap/mcp-server-baidu-map"
      ],
      "env": {
        "BAIDU_MAP_API_KEY": "xxx"
      },
    }
}重启Claude,此时设置面板已经成功加载了百度地图MCP Server。在软件主界面对话框处可以看到有8个可用的MCP工具,点击可以查看详情。
千帆平台接入,目前支持SDK接入或是API接入,通过AppBuilder构建一个应用,每个应用拥有一个独立的app_id,在python文件中调用对应的app_id,再调用百度地图 Python MCP Tool即可。
模板代码可向下跳转,通过SDK Agent &&地图MCP Server,拿到导航路线及路线信息,并给出出行建议。
前往千帆平台,新建一个应用,并发布。
将Agent的思考轮数调到6。发布应用。
此代码可以当作模板,以SDK的形式调用千帆平台上已经构建好且已发布的App,再将MCP Server下载至本地,将文件相对路径写入代码即可。
(注意:使用实际的app_id、token、query、mcp文件)
import os
import asyncio
import appbuilder
from appbuilder.core.console.appbuilder_client.async_event_handler import (
    AsyncAppBuilderEventHandler,
)
from appbuilder.mcp_server.client import MCPClient
class MyEventHandler(AsyncAppBuilderEventHandler):
    def __init__(self, mcp_client):
        super().__init__()
        self.mcp_client = mcp_client
    def get_current_weather(self, location=None, unit="摄氏度"):
        return "{} 的温度是 {} {}".format(location, 20, unit)
    async def interrupt(self, run_context, run_response):
        thought = run_context.current_thought
        # 绿色打印
        print("\033[1;31m", "-> Agent 中间思考: ", thought, "\033[0m")
        tool_output = []
        for tool_call in run_context.current_tool_calls:
            tool_res = ""
            if tool_call.function.name == "get_current_weather":
                tool_res = self.get_current_weather(**tool_call.function.arguments)
            else:
                print(
                    "\033[1;32m",
                    "MCP工具名称: {}, MCP参数:{}\n".format(tool_call.function.name, tool_call.function.arguments),
                    "\033[0m",
                )
                mcp_server_result = await self.mcp_client.call_tool(
                    tool_call.function.name, tool_call.function.arguments
                )
                print("\033[1;33m", "MCP结果: {}\n\033[0m".format(mcp_server_result))
                for i, content in enumerate(mcp_server_result.content):
                    if content.type == "text":
                        tool_res += mcp_server_result.content[i].text
            tool_output.append(
                {
                    "tool_call_id": tool_call.id,
                    "output": tool_res,
                }
            )
        return tool_output
    async def success(self, run_context, run_response):
        print("\n\033[1;34m", "-> Agent 非流式回答: ", run_response.answer, "\033[0m")
async def agent_run(client, mcp_client, query):
    tools = mcp_client.tools
    conversation_id = await client.create_conversation()
    with await client.run_with_handler(
        conversation_id=conversation_id,
        query=query,
        tools=tools,
        event_handler=MyEventHandler(mcp_client),
    ) as run:
        await run.until_done()
### 用户Token
os.environ["APPBUILDER_TOKEN"] = (
    ""
)
async def main():
    appbuilder.logger.setLoglevel("DEBUG")
    ### 发布的应用ID
    app_id = ""
    appbuilder_client = appbuilder.AsyncAppBuilderClient(app_id)
    mcp_client = MCPClient()
    
    ### 注意这里的路径为MCP Server文件在本地的相对路径
    await mcp_client.connect_to_server("./<YOUR_FILE_PATH>/map.py")
    print(mcp_client.tools)
    await agent_run(
        appbuilder_client,
        mcp_client,
        '开车导航从北京到上海',
    )
    await appbuilder_client.http_client.session.close()
if __name__ == "__main__":
    loop = asyncio.get_event_loop()
    loop.run_until_complete(main())经过Agent自己的思考,通过调用MCPServer 地点检索、地理编码服务、路线规划服务等多个tool,拿到导航路线及路线信息,并给出出行建议。
实际用户请求:“请为我计划一次北京赏花一日游。尽量给出更舒适的出行安排,当然,也要注意天气状况。”
在百度地图MCP Server中传入的部分参数规格:
行政区划编码均采用百度adcode映射表。
经纬度坐标均采用国测局经纬度坐标gcj02ll,详见百度坐标系。
类型等中文字符串参数应符合百度POI类型标准。
MIT © baidu-maps
百度地图MCP Server中的部分高级能力需要申请高级权限才可使用。如有需要的话,请联系我们。
在使用百度地图MCP Server时遇到的任何问题,欢迎通过issue或是百度地图开放平台反馈给我们,我们也欢迎每一个积极的PR,非常感谢各位的支持与贡献❤️
团队目前主要关注Remote形式的服务供应,对于开源部分的更新会相对较少,请谅解。
| 版本 | 功能说明 | 更新日期 | 
|---|---|---|
| V1.0 | 百度地图MCP Server正式上线 | 2025-03-21 | 
| V1.1 | 补充 uvx、pip形式的快速接入 | 2025-03-28 | 
| V1.2 | 补充 千帆AppBuilder接入方式 | 2025-04-05 | 
| V2.0 | 支持MCP 1.9.0版协议 | 2025-05-16 |