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

Python 调用高德地图 MCP 服务查询天气示例

综述由AI生成MCP 协议标准化了 AI 模型与外部工具的连接方式。本文通过高德地图 MCP 服务演示如何在 Python 中构建客户端,实现天气查询功能。涵盖环境配置、SDK 安装及核心代码解析,同时提供 Java 版本参考,帮助开发者快速集成第三方能力到 AI 应用中。

NodeJser发布于 2026/3/16更新于 2026/4/305 浏览
Python 调用高德地图 MCP 服务查询天气示例

MCP 协议简介与架构

MCP(Model Context Protocol)是一种开放协议,旨在标准化应用程序向大语言模型提供上下文的方式。你可以把它理解为 AI 应用的 USB-C 端口:就像 USB-C 统一了设备连接外设的标准一样,MCP 让 AI 模型能够以统一的方式接入不同的数据源和工具。

在典型的 MCP 架构中,主要包含以下几个角色:

  • MCP 主机:希望访问数据的程序,比如 IDE、Claude Desktop 或其他 AI 工具。
  • MCP 客户端:负责与服务器建立 1:1 连接的协议客户端。
  • MCP 服务器:轻量级程序,通过标准协议公开特定功能(如高德地图的天气查询)。
  • 数据源:包括本地文件、数据库或远程 API 服务。

环境准备

要运行高德地图的 MCP 服务,首先需要确保你的开发环境满足以下要求。

Node.js 版本

服务端通常通过 npx 命令启动,因此需要 Node.js 环境。建议版本不低于 18.20.4,旧版本可能无法正确执行相关命令。

获取 API Key

你需要申请高德地图的 AMAP_MAPS_API_KEY。具体文档可参考高德官方说明,确保拥有调用天气接口所需的权限。

Python SDK 实现

既然我们要用 Python 来构建客户端,第一步是安装官方 SDK。

pip install mcp

安装完成后,核心逻辑在于配置 StdioServerParameters 并建立会话。下面是一个完整的异步调用示例,我们通过它来查询福州的天气。

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

async def run():
    # 配置服务端参数
    # 这里使用 npx 启动高德地图的 MCP 服务容器
    server_params = StdioServerParameters(
        command="npx",
        args=["-y", "@amap/amap-maps-mcp-server"],
        env={"AMAP_MAPS_API_KEY": "your_api_key_here"}  # 替换为你的实际 Key
    )

    # 建立stdio通信通道
    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())

代码关键点解析

  1. 异步编程:MCP 客户端基于异步 IO,所以必须使用 async/await 模式。asyncio.run() 用于启动事件循环。
  2. 环境变量传递:API Key 敏感信息不应硬编码在代码里,而是通过 env 字典传递给子进程,这样更安全。
  3. 工具调用:call_tool 方法接收工具名称和参数字典。高德地图提供了 maps_weather 等工具,参数需符合其 Schema 定义。

Java SDK 参考

如果你更习惯使用 Java,官方也提供了对应的 SDK。虽然本文重点在 Python,但 Java 的实现思路类似,都是基于 McpClient 进行同步或异步调用。

引入依赖(Maven):

<dependency>
    <groupId>io.modelcontextprotocol.sdk</groupId>
    <artifactId>mcp</artifactId>
    <version>0.8.1</version>
</dependency>

核心调用逻辑如下:

import io.modelcontextprotocol.client.McpSyncClient;
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());
    }
}

在实际集成时,注意处理异常情况和网络超时问题。MCP 的设计初衷就是让 AI 应用能像调用普通函数一样调用外部服务,理解这一层抽象后,扩展其他服务也会变得简单。

目录

  1. MCP 协议简介与架构
  2. 环境准备
  3. Node.js 版本
  4. 获取 API Key
  5. Python SDK 实现
  6. 代码关键点解析
  7. Java SDK 参考
  • 💰 8折买阿里云服务器限时8折了解详情
  • GPT-5.5 超高智商模型1元抵1刀ChatGPT中转购买
  • 代充Chatgpt Plus/pro 帐号了解详情
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

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

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

更多推荐文章

查看全部
  • IPIDEA 网页抓取 API 实战:eBay 商品数据采集与 Python 接入
  • AgentScope Java 智能体开发指南
  • CATE 条件平均处理效应估计:五大方法原理详解与 Python 实战
  • 前端内存泄漏排查与实战指南
  • VS Code 配置 Claude Code 时 Git Bash 路径报错解决
  • OpenClaw 接入自定义模型并通过 WebUI 实现智能操作
  • LeetCode Hot100:除自身以外数组的乘积
  • Python 核心应用指南:Web 开发、数据科学与自动化实战
  • Llama-3.2-3B 参数详解与 Ollama 部署:3B 小模型高效推理方案
  • 大模型推理技术详解:从基础概念到 vLLM
  • 机器人运动学解算与逆解算法详解
  • Kotlin Lambda 编程:序列、Java 函数式接口与 with/apply 函数
  • 解决 WebView2 中 HostObject 调用窗体关闭时的 InvalidCastException 与线程问题
  • DeepSeek 使用指南:提示词技巧与本地知识库搭建
  • 基于 Docker Compose 在 Ubuntu 本地部署 Whisper 语音识别服务
  • Z-Image i2L 本地 AI 绘画工具快速入门与参数调优
  • 双指针算法专题:有效三角形与多数之和
  • Java 二维数组基础语法与内存解析
  • 清华大学发布仿生多模态触觉传感器 SuperTac,结合大模型实现类人感知
  • 企业级大模型技术落地场景全解析

相关免费在线工具

  • 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