🚀 百度地图 MCP Server
百度地図APIは現在、MCPプロトコルと完全に互換性があり、国内初のMCPプロトコルに対応した地図サービスプロバイダーです。
百度地図が提供するMCP Serverには、MCPプロトコル標準に準拠した10個のAPIインターフェースが含まれており、逆地理コーディング、地点検索、ルート計画などの機能を網羅しています。
MCP Python SDKとMCP Typescript SDKに依存して開発されており、MCPプロトコルをサポートする任意のエージェントアシスタント(Claude、Cursor、千帆AppBuilderなど)がすばやく接続できます。
✨ 主な機能
ツール
-
地理コーディング 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の使用は主にPythonとTypescriptの2つの形式で行われます。以下にそれぞれ説明します。
AKの取得
2つの方法を選択する前に、百度地図オープンプラットフォームのコンソールでサーバー用の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に置き換える必要があります。
uvxを使用する場合
{
"mcpServers": {
"baidu-maps": {
"command": "uvx",
"args": ["mcp-server-baidu-maps"],
"env": {
"BAIDU_MAPS_API_KEY": "<YOUR_API_KEY>"
}
}
}
}
pipでインストールした場合
{
"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.jsのインストールは成功しています。
node -v
設定
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"
}
}
}
}
Windowsシステムの場合は、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ツールを呼び出すことができます。
テンプレートコードは下にスクロールするとあります。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の地点検索、地理コーディングサービス、ルート計画サービスなどの複数のツールを呼び出し、ナビゲーションルートとルート情報を取得し、移動の提案を行います。
実際のユーザーのリクエスト: “北京での一日の花見旅行を計画してください。できるだけ快適な移動計画を提示してください。もちろん、天気状況にも注意してください。”
思考プロセス
Agentの結果
📚 ドキュメント
百度地図MCP Serverに渡す一部のパラメータの仕様:
行政区画コードはすべて百度adcodeマッピング表を使用します。
経度緯度座標はすべて国測局の経度緯度座標gcj02llを使用します。詳細は百度座標系を参照してください。
タイプなどの中文字の文字列パラメータは、百度POIタイプの標準に準拠する必要があります。
📄 ライセンス
MIT © baidu-maps
🔑 権限
百度地図MCP Serverの一部の高度な機能は、高度な権限を申請して取得する必要があります。必要な場合は、こちらからお問い合わせください。
💬 フィードバック
百度地図MCP Serverの使用中に問題が発生した場合は、issueまたは百度地図オープンプラットフォームを通じてお知らせいただけると幸いです。また、積極的なPRも歓迎しています。皆様のサポートと貢献に感謝いたします❤️
📈 更新履歴
| バージョン |
機能説明 |
更新日付 |
| V1.0 |
百度地図MCP Server正式リリース |
2025-03-21 |
| V1.1 |
uvx、pip形式の快速接続を追加 |
2025-03-28 |