🚀 百度地圖 MCP Server
百度地圖 MCP Server 全面兼容 MCP 協議,是國內首家支持該協議的地圖服務方案。它提供 10 個標準 API 接口,涵蓋逆地理編碼、地點檢索等功能。藉助 MCP Python SDK 和 MCP Typescript SDK,各類支持 MCP 協議的智能體助手可快速接入使用。
🚀 快速開始
使用百度地圖 MCP Server 主要通過 Python 和 Typescript 兩種形式,下面分別介紹。
獲取 AK
在選擇兩種方法之前,你需要在百度地圖開放平臺的控制檯中創建一個服務端 AK,通過 AK 你才能夠調用百度地圖 API 能力。
Python 接入
如果你希望自定義百度地圖 MCP Server 的能力,可以通過源碼接入,方式詳見Python 接入文檔。
在 v1.1 版本更新中,我們通過 pypi 發佈了百度地圖 MCP Server:mcp-server-baidu-maps,你可以使用任意 Python 包管理工具輕鬆獲取並快速配置使用。
安裝
使用 uv(推薦)
使用uv時不需要特殊安裝,我們將使用uvx直接運行mcp-server-baidu-maps。
使用 pip
或者你可以通過 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 接入
nodejs 安裝
通過 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 工具,點擊可以查看詳情。
效果
接下來就可以進行提問,驗證出行規劃小助手的能力了。
通過千帆 AppBuilder 平臺接入
千帆平臺接入,目前支持 SDK 接入或是 API 接入,通過 AppBuilder 構建一個應用,每個應用擁有一個獨立的 app_id,在 python 文件中調用對應的 app_id,再調用百度地圖 Python MCP Tool 即可。
模板代碼可向下跳轉,通過 SDK Agent && 地圖 MCP Server,拿到導航路線及路線信息,並給出出行建議。
Agent 配置
前往千帆平臺,新建一個應用,併發布。
將 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()
os.environ["APPBUILDER_TOKEN"] = (
""
)
async def main():
appbuilder.logger.setLoglevel("DEBUG")
app_id = ""
appbuilder_client = appbuilder.AsyncAppBuilderClient(app_id)
mcp_client = MCPClient()
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,拿到導航路線及路線信息,並給出出行建議。
實際用戶請求:“請為我計劃一次北京賞花一日遊。儘量給出更舒適的出行安排,當然,也要注意天氣狀況。”
思考過程
Agent 結果
✨ 主要特性
- 百度地圖 API 全面兼容 MCP 協議,是國內首家兼容該協議的地圖服務商。
- 提供 10 個符合 MCP 協議標準的 API 接口,功能豐富,涵蓋逆地理編碼、地點檢索、路線規劃等。
- 依賴
MCP Python SDK 和 MCP Typescript SDK 開發,支持多種智能體助手快速接入。
📚 詳細文檔
工具
-
地理編碼 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 對應不同類別詳情數據)。
- 參數:
uid POI 的唯一標識
- 輸出:POI 詳情,包含
name, location, address, brand, price 等
-
批量算路 map_distance_matrix
- 描述:根據起點和終點座標計算路線規劃距離和行駛時間,批量算路目前支持駕車、騎行、步行。
- 參數:
origins 起點緯經度列表,格式為 origins=lat,lng,多個起點使用 | 分隔
destinations 終點緯經度列表,格式為 destinations=lat,lng,多個終點使用 | 分隔
mode 算路類型,可選取值包括 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 天天氣預報(通過
location 經緯度座標查詢天氣需用戶擁有高級權限)。
- 參數:
district_id 行政區劃編碼
location 經緯度座標,格式為 location=lng, lat
- 輸出:天氣信息,包含
temperature, weather, wind 等
-
IP 定位 map_ip_location
- 描述:根據請求的 IP 獲取當前請求的位置(定位到城市),如果請求參數 ip 為 IPv6 則需要高級權限。
- 參數:
ip 請求的 IP 地址
- 輸出:當前所在城市和城市中點
location
-
即時路況查詢 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 中傳入的部分參數規格:
📄 許可證
MIT © baidu - maps
🔧 技術細節
授權
百度地圖 MCP Server 中的部分高級能力需要申請高級權限才可使用。如有需要的話,請聯繫我們。
反饋
在使用百度地圖 MCP Server 時遇到的任何問題,歡迎通過 issue 或是百度地圖開放平臺反饋給我們,我們也歡迎每一個積極的 PR,非常感謝各位的支持與貢獻❤️
更新
| 版本 |
功能說明 |
更新日期 |
| V1.0 |
百度地圖 MCP Server 正式上線 |
2025-03-21 |
| V1.1 |
補充 uvx、pip 形式的快速接入 |
2025-03-28 |