当前位置: 首页 > news >正文

Python实现 MCP 客户端调用(高德地图 MCP 服务)查询天气工具示例

文章目录

  • MCP 官网
  • Github
  • MCP 仓库
  • 简介
  • 架构
  • 高德地图 MCP 客户端示例
    • python-sdk 客户端
    • java-sdk 客户端

MCP 官网

  • https://modelcontextprotocol.io/introduction

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 仓库

  • https://mcp.so/zh
    在这里插入图片描述

  • https://supermachine.ai/public-mcp-servers
    在这里插入图片描述

简介

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 命令。

  • 高德地图文档(申请 AMAP_MAPS_API_KEY):https://lbs.amap.com/api/mcp-server/summary
    在这里插入图片描述

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

}

在这里插入图片描述

http://www.dtcms.com/a/106465.html

相关文章:

  • Linux系统
  • Oracle 23ai Vector Search 系列之3 集成嵌入生成模型(Embedding Model)到数据库示例,以及常见错误
  • 16变量命名风格
  • windows部署docker
  • electron-update + nginx热更新
  • 【深度学习:进阶篇】--2.1.多分类与TensorFlow
  • 2025 年山东危化品经营单位考试攻略分享​
  • 二分查找与二叉树中序遍历——面试算法
  • OpenCV单窗口显示多图片
  • MySQL分组的时候遇到ONLY_FULL_GROUP_BY报错和解决
  • html+css+javaScript实现一个扫雷游戏
  • MATLAB 代码学习
  • Spring Boot 3.0 + JDK 17整合SpringDoc实战指南
  • 清明假期在即
  • 5G网络中SIB System Information Blocks系统信息块
  • 安美数字酒店宽带运营系统存在SQL注入漏洞
  • 云端商标管理系统如何确保用户数据安全?
  • 《永动之城的舞者》
  • Spring Boot 集成 Redis 连续操作键值对示例
  • MySQL性能:存储过程+触发器基础实战攻略
  • Mysql中,利用窗口函数来优化掉子查询或者group by
  • IPD推进中关键角色与岗位(二)系统工程师SE确保产品开发过程的高效协同,减少项目失败的风险
  • mysql数据库通过命令行导入sql文件
  • Rust 中的高效视频处理:利用硬件加速应对高分辨率视频
  • 【2025】实操成功-使用Python连接谷歌邮箱发送邮件
  • PostgreSQL:高级SQL特性
  • 【接口重复请求】axios通过AbortController解决页面切换过快,接口重复请求问题
  • windosw11中的.msi文件打不开该怎么办?
  • [python] python四大数据结构(列表 元组 集合 字典)剖析
  • firefox 136.0.4版本离线安装MarkDown插件