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

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

使用 Python SDK 连接 MCP 协议并调用高德地图天气服务的完整流程。通过配置 StdioServerParameters 启动本地服务器,利用异步会话初始化并调用 maps_weather 工具获取指定城市天气数据。同时提供 Java 版本同步客户端实现作为参考,展示如何在不同语言环境下集成 MCP 标准协议以扩展 AI 应用能力。

橘子海发布于 2026/3/16更新于 2026/5/57 浏览
Python 调用高德地图 MCP 服务查询天气示例

MCP 简介与架构

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

在架构上,主要包含以下角色:

  • MCP 主机:希望访问数据的程序,如 Claude Desktop、IDE 或 AI 工具。
  • MCP 客户端:与服务器保持 1:1 连接的协议客户端。
  • MCP 服务器:轻量级程序,通过标准化协议公开特定功能。
  • 数据源:包括本地文件、数据库以及可通过互联网连接的外部系统。

环境准备

运行 MCP 服务通常依赖 Node.js 环境。请确保你的 Node 版本不低于 18.20.4,旧版本可能无法执行 npx 命令。

关于高德地图 MCP 服务,你需要先申请 AMAP_MAPS_API_KEY。服务支持的工具列表可以通过官方文档查看,其中核心功能包括根据城市名称或 adcode 查询天气、获取 POI 详情等。

Python SDK 实现

Python 生态中,我们可以使用官方的 mcp 库来快速构建客户端。首先安装依赖:

pip install mcp

接下来是核心代码。这里我们配置 StdioServerParameters 来启动高德地图的 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())

这段代码的关键在于 stdio_client 上下文管理器,它负责建立与服务器的标准输入输出通道。初始化后,我们可以列出可用工具并调用具体的 call_tool。注意替换环境变量中的 API Key 为真实值。

Java SDK 实现

如果你更习惯 Java 开发,MCP 也提供了同步客户端支持。在 Maven 项目中引入依赖:

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

或者在 Gradle 中使用:

implementation("io.modelcontextprotocol.sdk:mcp:0.8.1")

以下是基于 JUnit 测试框架的实现示例,展示了如何构建同步客户端并调用工具:

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

Java 版本采用了同步阻塞模式,逻辑上比 Python 异步版本更直观一些,适合传统后端集成场景。无论选择哪种语言,核心流程都是:配置参数 -> 建立传输 -> 初始化 -> 调用工具。

参考资料

  • Model Context Protocol 官网
  • GitHub - Python SDK
  • GitHub - Java SDK

目录

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

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

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

更多推荐文章

查看全部
  • ARM 架构下 TTS 服务性能优化实战:从算法选型到工程部署
  • uv 虚拟环境管理:venv 创建、激活与 Python 版本指定
  • PyPy 生成器优化深度解析:JIT 加速下的 Python 性能提升
  • DeerFlow 2.0:字节开源的超级 Agent 框架深度解析
  • Qt Creator 配置 GitHub Copilot 插件实战指南
  • Linux 线程控制详解:POSIX 线程库与多线程编程实践
  • 将第三方 OpenAI 兼容模型接入 GitHub Copilot 的两种方案
  • Google A2UI 前端可操作性技术入门
  • HDFS 核心组件深度解析:分布式文件系统架构
  • 机器学习模型评估:8 种算法对比实战
  • 贪心算法实战:摆动序列与最长递增子序列
  • Stable Diffusion v1.5 部署指南:GPU 加速与 Web 服务启动
  • Python 2026 发展局势:AI 时代的通用基础设施语言
  • 前端国际化实战:i18next 与 react-intl 配置指南
  • WebGIS 视角下基孔肯雅热流行风险地区分类实战
  • 基于 Kaggle 免费环境体验 Stable Diffusion AI 绘画入门
  • GitHub 发布 MCP Server 项目最佳实践:架构、安全与自动化部署
  • Stable Diffusion WebUI 部署与核心功能实战
  • 开源 AI 短剧工具教程:多 Agent 协作生成视频流程
  • 前端大文件上传实战:分片、断点续传与拖拽优化

相关免费在线工具

  • 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