跳到主要内容
极客日志极客日志
首页博客AI提示词GitHub精选代理工具
搜索
|注册
博客列表
PythonNode.jsAIjava

Python 实现 MCP 客户端调用高德地图天气查询示例

综述由AI生成Model Context Protocol (MCP) 是一种开放协议,标准化了应用程序向 LLM 提供上下文的方式。它定义了 MCP 主机、客户端、服务器及数据源的架构。以高德地图 MCP 服务为例,演示了如何搭建 Python 和 Java 客户端。通过安装 sdk 并配置 npx 命令连接本地服务器,实现了天气查询工具的调用。内容涵盖环境准备、依赖引入、客户端初始化及工具方法调用流程。

暗影行者发布于 2026/3/17更新于 2026/4/2413 浏览
Python 实现 MCP 客户端调用高德地图天气查询示例

MCP 官网

  • https://modelcontextprotocol.io/introduction

官方 MCP 服务示例

  • https://github.com/modelcontextprotocol/servers

Github

  • python-sdk:https://github.com/modelcontextprotocol/python-sdk
  • java-sdk:https://github.com/modelcontextprotocol/java-sdk
  • typescript-sdk:https://github.com/modelcontextprotocol/typescript-sdk

简介

MCP 是一种开放协议,它标准化了应用程序向 LLM 提供上下文的方式。可以将 MCP 视为 AI 应用程序的 USB-C 端口。正如 USB-C 提供了一种将设备连接到各种外围设备和配件的标准化方式一样,MCP 提供了一种将 AI 模型连接到不同数据源和工具的标准化方式。

架构

  • MCP 主机:希望通过 MCP 访问数据的程序,例如 Claude Desktop、IDE 或 AI 工具
  • MCP 客户端:与服务器保持 1:1 连接的协议客户端
  • MCP 服务器:轻量级程序,每个程序都通过标准化模型上下文协议公开特定功能
  • 本地数据源:MCP 服务器可以安全访问的您的计算机文件、数据库和服务
  • 远程服务:MCP 服务器可通过互联网(例如通过 API)连接到的外部系统

高德地图 MCP 客户端示例

  • Node 下载:https://nodejs.org/zh-cn/download

注: Node 版本 >= 18.20.4,版本太低无法执行 npx 命令。

  • 高德 MCP 服务 tools 列表

高德地图文档(申请 AMAP_MAPS_API_KEY):https://lbs.amap.com/api/mcp-server/summary

{"tools":[{"description":"根据城市名称或者标准 adcode 查询指定城市的天气","inputSchema"...
:
{
"properties"
:
{
"city"
:
{
"type"
:
"string"
,
"description"
:
"城市名称或者 adcode"
}
}
,
"required"
:
[
"city"
]
,
"type"
:
"object"
}
,
"name"
:
"maps_weather"
}
,
{
"description"
:
"查询关键词搜或者周边搜获取到的 POI ID 的详细信息"
,
"inputSchema"
:
{
"properties"
:
{
"id"
:
{
"type"
:
"string"
,
"description"
:
"关键词搜或者周边搜获取到的 POI ID"
}
}
,
"required"
:
[
"id"
]
,
"type"
:
"object"
}
,
"name"
:
"maps_search_detail"
}
,
]
}

python-sdk 客户端

pip install mcp
import asyncio
from mcp import ClientSession, StdioServerParameters, types
from mcp.client.stdio import stdio_client

server_params = StdioServerParameters(
    command="npx",
    args=["-y", "@amap/amap-maps-mcp-server"],
    env={"AMAP_MAPS_API_KEY": "xxxxx"}
)

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())

java-sdk 客户端

  • 0.7 版本迁移 0.8 版指南:https://github.com/modelcontextprotocol/java-sdk/blob/main/migration-0.8.0.md
<!-- https://mvnrepository.com/artifact/io.modelcontextprotocol.sdk/mcp -->
<dependency>
  <groupId>io.modelcontextprotocol.sdk</groupId>
  <artifactId>mcp</artifactId>
  <version>0.8.1</version>
</dependency>
// https://mvnrepository.com/artifact/io.modelcontextprotocol.sdk/mcp
implementation("io.modelcontextprotocol.sdk:mcp:0.8.1")
import io.modelcontextprotocol.client.McpClient;
import io.modelcontextprotocol.client.McpSyncClient;
import io.modelcontextprotocol.client.transport.ServerParameters;
import io.modelcontextprotocol.client.transport.StdioClientTransport;
import io.modelcontextprotocol.spec.McpSchema;
import org.junit.jupiter.api.Test;
import java.util.Map;

public class JunitTest {
    @Test
    public void test() {
        ServerParameters params = ServerParameters.builder("npx")
            .args("-y", "@amap/amap-maps-mcp-server")
            .addEnvVar("AMAP_MAPS_API_KEY", "xxxxx")
            .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());
    }
}

目录

  1. MCP 官网
  2. 官方 MCP 服务示例
  3. Github
  4. 简介
  5. 架构
  6. 高德地图 MCP 客户端示例
  7. python-sdk 客户端
  8. java-sdk 客户端
  • 💰 8折买阿里云服务器限时8折了解详情
  • 💰 8折买阿里云服务器限时8折购买
  • 🦞 5分钟部署阿里云小龙虾了解详情
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • Python Web 框架对比与实战:Django vs Flask vs FastAPI
  • 2025 机器人元年:小鹏 IRON、宇树 H2、擎天柱与 1X-Neo 硬件构造对比分析
  • DeepSeek-R1 如何用 29 万美元成本改写 AI 推理规则
  • 易语言自动化实战:办公、测试、数据抓取与游戏脚本开发
  • 二分查找算法模板详解:核心原理与边界查找
  • RMBG-2.0接入Stable Diffusion工作流实现生成抠图合成一体化
  • C++ STL list 容器常用接口与拓展用法详解
  • Midjourney 第三方 API 服务:技术原理与合规边界探讨
  • 基于FPGA的毕业设计效率提升:从串行仿真到并行硬件加速
  • 机器人第一性原理:技术演进的本构逻辑与实现路径
  • Spring Boot 实战:基于 WebSocket 的前后端实时匹配系统实现
  • JavaScript 零基础入门指南
  • LazyLLM 多 Agent 应用全流程实践:从源码部署到可视化 Web 调试的低代码方案
  • Spring Boot 前后端实时匹配系统设计与实现
  • FPGA 开发常用软件对比:Vivado、Quartus 与 ModelSim
  • 开源AI电话机器人外呼系统实战:从架构设计到生产环境部署
  • Faster Whisper 语音识别引擎性能优化与使用指南
  • 基于 AI 快速开发 MCP 服务插件及部署测试指南
  • 使用扣子平台创建 AI 智能体的五个步骤
  • C++流程控制语句详解:顺序、选择与循环结构

相关免费在线工具

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online