简介
MCP(Model Context Protocol)是一种开放协议,标准化了应用程序向大语言模型提供上下文的方式。你可以把它理解为 AI 应用的 USB-C 端口:就像 USB-C 统一了设备连接标准一样,MCP 让 AI 模型能方便地接入各种数据源和工具。
在架构上,MCP 包含主机(如 IDE、AI 工具)、客户端(与服务器保持 1:1 连接)、服务器(轻量级程序,通过协议公开功能)以及本地或远程的数据源。通过这种模式,我们可以轻松地将高德地图等外部服务集成到 AI 工作流中。
环境准备
运行示例前,请确保满足以下基础条件:
- Node.js 版本:建议 >= 18.20.4,旧版本可能无法执行
npx命令。 - API Key:需申请高德地图的
AMAP_MAPS_API_KEY,获取地址参考 高德地图 MCP 服务文档。
Python SDK 实现
我们使用 Python 官方 SDK 来构建客户端。首先安装依赖:
pip install mcp
核心逻辑在于初始化 StdioServerParameters 并启动会话。这里的关键是配置环境变量传递 API Key,并通过 npx 调用高德提供的 MCP Server。
import asyncio
from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client
# 配置服务器参数
server_params = StdioServerParameters(
command="npx",
args=["-y", "@amap/amap-maps-mcp-server"],
env={"AMAP_MAPS_API_KEY": "your_api_key_here"} # 替换为实际 Key
)
async def run():
# 建立通信通道
async with stdio_client(server_params) as (read, write):
async with ClientSession(read, write) as session:
await session.initialize()
# 列出可用工具
tools = await session.list_tools()
print("工具列表:", tools)
# 调用天气查询工具
result = await session.call_tool(
"maps_weather",
arguments={"city": "福州"}
)
print("调用结果:", result)
if __name__ == "__main__":
asyncio.run(run())
注意代码中的 env 字典,这是传递敏感信息给子进程的标准方式。实际运行时,如果 API Key 无效,call_tool 会返回错误信息,调试时请留意控制台输出。
Java SDK 实现
如果你更习惯 Java 开发,MCP 也提供了对应的 SDK。目前推荐使用 0.8.x 版本,迁移指南可参考 官方文档。
依赖引入
<dependency>
<groupId>io.modelcontextprotocol.sdk</groupId>
<artifactId>mcp</artifactId>
<version>0.8.1</version>
</dependency>
代码示例
Java 端支持同步客户端调用,代码结构如下:
import io.modelcontextprotocol.client.McpClient;
import io.modelcontextprotocol.client.transport.ServerParameters;
import io.modelcontextprotocol.client.transport.StdioClientTransport;
import io.modelcontextprotocol.spec.McpSchema;
public class JunitTest {
public void test() {
// 构建传输参数
ServerParameters params = ServerParameters.builder("npx")
.args("-y", "@amap/amap-maps-mcp-server")
.addEnvVar("AMAP_MAPS_API_KEY", "your_api_key_here")
.build();
StdioClientTransport transport = new StdioClientTransport(params);
McpSyncClient client = McpClient.sync(transport).build();
client.initialize();
// 获取工具列表
McpSchema.ListToolsResult toolsList = client.listTools();
System.out.println("工具列表:" + toolsList);
// 调用天气接口
McpSchema.CallToolResult mapsWeather = client.callTool(
new McpSchema.CallToolRequest("maps_weather", Map.of("city", "福州"))
);
System.out.println("调用结果:" + mapsWeather.content());
}
}

