MCP服务器:AI与外部工具交互的桥梁——Python和代理AI工具集成指南

🧠 向所有学习者致敬!

“学习不是装满一桶水,而是点燃一把火。” —— 叶芝


我的博客主页: https://lizheng.blog.csdn.net

🌐 欢迎点击加入AI人工智能社区!

🚀 让我们一起努力,共创AI未来! 🚀


引言

随着AI技术的快速发展,大型语言模型(LLM)的应用场景不断扩大。然而,单一的AI模型往往难以直接访问和操作外部数据源和工具,这限制了其应用场景。Model Context Protocol(MCP)作为一种开放协议,为解决这一问题提供了标准化的解决方案。本报告将深入探讨MCP服务器的原理、实现方式,以及如何利用Python和代理AI工具实现MCP服务器的集成。

MCP是什么?

在这里插入图片描述

MCP(Model Context Protocol,模型上下文协议)是由Anthropic在2024年底推出的一种开放协议,旨在通过提供标准化的接口,实现AI模型与外部数据源和工具之间的无缝集成[4]。无论你是构建AI驱动的IDE、改善chat交互,还是构建自定义的AI应用,MCP都能提供统一的标准,使AI模型能够充分发挥其潜力。
MCP的出现解决了AI系统与数据源集成分散的问题。之前,每个工具和数据源都需要特定的集成方式,而现在MCP提供了一个统一的标准,使得AI模型可以通过"即插即用"的方式连接多种工具与数据源[42]。

MCP服务器的核心概念

MCP服务器是实现MCP协议的服务器端组件,它为MCP客户端提供上下文、工具和prompt信息。MCP服务器的主要职责是暴露特定的数据源或工具功能,并通过标准化协议与客户端交互[1]。
根据MCP协议的规范,MCP服务器具有以下特点:

  1. 轻量级:MCP服务器设计为轻量级程序,旨在高效地与客户端交互
  2. JSON-RPC 2.0:采用JSON-RPC 2.0作为通信格式,支持请求、响应和通知三种交互方式[1]
  3. 安全访问:允许MCP客户端安全地访问本地资源,如文件、数据库等[0]在这里插入图片描述

MCP服务器的主要组件

一个完整的MCP生态系统通常包括以下组件:

  • MCP服务器:实现MCP协议,暴露特定的数据源或工具功能
  • MCP客户端:与MCP服务器交互,获取上下文、工具和prompt信息
  • 本地资源:可供MCP服务器安全访问的本地资源,如文件、数据库等[0]

MCP服务器的实现方式

使用官方Python SDK实现MCP服务器

官方提供了MCP Python SDK,这是MCP的Python实现,为LLM提供了客户端和服务器功能,以标准化方式将上下文提供给LLM,并分离工具功能[15]。

安装和初始化

要使用MCP Python SDK开发MCP服务器,首先需要安装该库:

pip install mcp

然后,可以按照以下步骤创建一个简单的MCP服务器:

from mcp.server import Server
from mcp.resources import FileResource
# 创建服务器实例
server = Server()
# 注册资源
server.register_resource(FileResource())
# 启动服务器
server.start()

这个示例创建了一个简单的MCP服务器,并注册了一个文件资源,允许AI模型通过MCP协议访问文件系统[6]。

实现自定义资源

MCP服务器的核心是资源(Resource)的概念。资源代表了可以被AI模型访问的外部数据源或工具。你可以通过实现自定义资源来扩展MCP服务器的功能。
以下是一个简单的自定义资源示例:

from mcp.resources import Resource
from mcp.types import ResourceAction, ResourceActionInput, ResourceActionResult
class MyCustomResource(Resource):def __init__(self):super().__init__()async def handle_action(self, action: ResourceAction, input: ResourceActionInput) -> ResourceActionResult:if action == "my_action":# 处理自定义动作result = f"Processed input: {input}"return ResourceActionResult(success=True, result=result)else:return ResourceActionResult(success=False, error="Unknown action")

这个示例实现了一个自定义资源,它支持一个名为"my_action"的动作。当AI模型调用这个动作时,服务器会返回处理结果[14]。

使用现有MCP服务器实现

除了从头开始实现MCP服务器,你还可以使用现有的MCP服务器实现。在GitHub上有一个比较活跃的开源MCP服务器实现仓库,这些实现都是基于官方的MCP SDK开发的(TypeScript或Python)[9]。
例如,Gitee MCP服务器是一个用于Gitee的模型上下文协议服务器实现,它提供了一系列与Gitee API交互的工具,使AI助手能够管理仓库、问题、拉取请求等[3]。

使用Python与代理AI工具集成MCP服务器

OpenAI Agents SDK与MCP集成

OpenAI最近宣布其Agents SDK支持MCP协议,这是一个重大更新。MCP类似AI的"USB接口",是统一标准,可让智能体连接多种工具与数据源,实现"即插即用"[42]。
使用OpenAI Agents SDK将MCP服务器与代理AI工具集成的主要步骤如下:

  1. 安装OpenAI Agents SDK
pip install openai-agents
  1. 注册MCP服务器为工具
from openai_agents import Agent
from openai_agents.tools import FunctionTool
# 创建MCP客户端
mcp_client = ...  # 初始化MCP客户端的代码
# 将MCP客户端注册为工具
mcp_tool = FunctionTool(name="mcp",description="通过MCP协议与外部工具和数据源交互",func=lambda x: mcp_client.execute(x)
)
# 创建代理并添加工具
agent = Agent(name="my_agent",tools=[mcp_tool]
)
  1. 使用代理与MCP服务器交互
# 执行代理
result = agent.run("查询最新的新闻")
print(result)

这种方法允许代理通过MCP协议访问各种外部工具和数据源,从而显著增强其功能[39]。

PydanticAI与MCP集成

PydanticAI是另一个使用Python构建生产级AI应用的框架,它也支持与MCP服务器的集成。PydanticAI旨在让生成式AI的应用开发更加轻松愉快,比笨重的替代品如LangChain更简单[21]。
使用PydanticAI与MCP服务器集成的主要步骤如下:

  1. 安装PydanticAI
pip install pydantic-ai
  1. 初始化MCP客户端和代理工具
from mcp import MCPClient
from pydantic_ai import AIAssistant
# 连接到MCP服务器
mcp_client = MCPClient("http://localhost:8080")
# 创建AI助手
assistant = AIAssistant(name="my_assistant",tools={"mcp": {"description": "通过MCP协议与外部工具和数据源交互","func": lambda x: mcp_client.execute(x)}}
)
  1. 使用AI助手与MCP服务器交互
# 执行AI助手
result = assistant.run("查询最新的新闻")
print(result)

这种方法允许AI助手通过MCP协议访问各种外部工具和数据源,从而增强其功能[24]。

MCP服务器的实际应用场景

智能代码搜索和分析

你可以构建一个MCP服务器,用于智能搜索你的代码库并执行自定义代码分析。这样的服务器可以具有以下功能:

  1. 智能搜索代码库
  2. 执行自定义代码分析
  3. 提供代码改进建议
    以下是一个简单的实现示例:
from mcp.server import Server
from mcp.resources import CodeSearchResource, CodeAnalysisResource
# 创建服务器实例
server = Server()
# 注册资源
server.register_resource(CodeSearchResource())
server.register_resource(CodeAnalysisResource())
# 启动服务器
server.start()

这个示例创建了一个MCP服务器,它支持代码搜索和代码分析功能[12]。

多智能体工作流

MCP服务器支持主机通过客户端连接多个MCP服务器,每个服务器都提供独立的功能,实现模块化、灵活的集成。MCP服务器主要提供以下三种类型的公开接口:

  1. 资源接口
  2. 工具接口
  3. 数据源接口
    这种方法允许你构建复杂的多智能体工作流,每个智能体可以连接到不同的MCP服务器,访问不同的工具和数据源[39]。

处理客诉的AI系统

你可以使用Agents SDK接入Stripe(支付平台)的API,处理客诉。这也是众多商户常见的场景。以下是实现这一功能的示例:

from openai_agents import Agent
from openai_agents.tools import FunctionTool
# 创建Stripe API客户端
stripe_client = StripeAPIClient("your_api_key")
# 创建处理退款的工具
refund_tool = FunctionTool(name="process_refund",description="处理退款请求",func=lambda x: stripe_client.process_refund(x)
)
# 创建处理纠纷的工具
dispute_tool = FunctionTool(name="handle_dispute",description="处理支付纠纷",func=lambda x: stripe_client.handle_dispute(x)
)
# 创建代理
agent = Agent(name="customer_complaint_handler",tools=[refund_tool, dispute_tool]
)
# 处理客诉
result = agent.run("用户声称他们没有收到他们订购的产品,并要求退款")
print(result)

这个示例展示了如何使用Agents SDK和MCP协议构建一个能够处理客诉的AI系统[47]。

MCP服务器的未来发展趋势

随着AI技术的不断发展,MCP服务器也在不断演进。未来,我们可以期待以下发展趋势:

  1. 更广泛的支持:更多的AI框架和平台将支持MCP协议,使AI模型能够更方便地访问外部工具和数据源
  2. 更丰富的资源库:将有更多现成的MCP服务器实现可供使用,涵盖更多的应用场景
  3. 更好的安全性和隐私保护:MCP协议将提供更强大的安全机制,确保AI模型访问外部数据源时的数据安全和隐私保护
  4. 更高效的通信协议:MCP协议将不断优化其通信机制,提高AI模型与外部工具和数据源交互的效率

结论

MCP服务器作为一种标准化的接口,为AI模型与外部工具和数据源之间的交互提供了统一的标准。通过使用Python和代理AI工具集成MCP服务器,你可以显著增强AI应用的功能,使其能够访问和操作各种外部数据源和工具。
无论是使用官方的MCP Python SDK,还是通过OpenAI Agents SDK或PydanticAI等框架,将MCP服务器与代理AI工具集成都是一个相对简单的过程。随着MCP协议的不断发展和完善,我们可以期待它在AI领域的应用将越来越广泛。

参考文献

[0] 一文看懂:MCP(大模型上下文协议) - 知乎专栏. https://zhuanlan.zhihu.com/p/27327515233.
[1] 一文搞懂MCP Servers - 虫师- 博客园. https://www.cnblogs.com/fnng/p/18744210.
[3] 开源中国/mcp-gitee. https://gitee.com/oschina/mcp-gitee.
[4] MCP 是什么,现状和未来 - onevcat. https://onevcat.com/2025/02/mcp/.
[6] MCP (Model Context Protocol),一篇就够了。 - 知乎专栏. https://zhuanlan.zhihu.com/p/29001189476.
[9] 大模型上下文协议——MCP详解 - 知乎专栏. https://zhuanlan.zhihu.com/p/19707405738.
[12] 构建您自己的MCP服务器:连接Cursor的终极指南 - 知乎专栏. https://zhuanlan.zhihu.com/p/30079943120.
[14] Python的MCP Server开发实战原创 - CSDN博客. https://blog.csdn.net/crisschan/article/details/145985521.
[15] modelcontextprotocol-python-sdk - OSCHINA - 中文开源技术交流社区. https://www.oschina.net/p/modelcontextprotocol-python-sdk.
[21] PydanticAI代理利用MCP服务器- 汇智网. http://www.hubwiz.com/blog/use-mcp-servers-with-pydanticai-agents/.
[24] Agentic RAG与MCP集成指南 - 汇智网. http://www.hubwiz.com/blog/agentic-rag-and-mcp-integration-guide/.
[39] 如何使用OpenAI Agents SDK 构建MCP - 哥不是小萝莉- 博客园. https://www.cnblogs.com/smartloli/p/18801374.
[42] OpenAI 智能体重大更新:Agent SDK 接入MCP 服务解锁无限工具扩展. https://finance.sina.com.cn/tech/roll/2025-03-27/doc-inerachu0880805.shtml.
[47] 【OpenAI中文文档】使用Agents SDK自动处理客诉 - 知乎专栏. https://zhuanlan.zhihu.com/p/31453918175.


这篇文章就来自于用mcp打造的ai应用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/900212.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AIGC8——大模型生态与开源协作:技术竞逐与普惠化浪潮

引言:大模型发展的分水岭时刻 2024年成为AI大模型发展的关键转折点:OpenAI的GPT-4o实现多模态实时交互,中国DeepSeek-MoE-16b模型以1/8成本达到同类90%性能,而开源社区如Mistral、LLama 3持续降低技术门槛。这场"闭源商业巨…

Muduo网络库实现 [十五] - HttpContext模块

目录 设计思路 类的设计 解码过程 模块的实现 私有接口 请求函数 解析函数 公有接口 疑惑点 设计思路 记录每一次请求处理的进度,便于下一次处理。 上下文模块是Http协议模块中最重要的一个模块,他需要记录每一次请求处理的进度,需…

解决GraalVM Native Maven Plugin错误:JAVA_HOME未指向GraalVM Distribution

目录 问题描述解决方案为什么需要这样配置? 问题描述 在你的项目中,如果你遇到了以下错误信息: [ERROR] Failed to execute goal org.graalvm.buildtools:native-maven-plugin:0.10.5:test (native-test) on project DIctSystemInJavaUsing…

java 代码错误分析

错误代码 class Test {private static String name; // 声明一个私有静态变量 namename "World"; // 静态初始化块,给 name 赋值为 "World"System.out.print(name); // 打印 name 的值public static void main(String[] args) {System.out.p…

企业供应链管理

企业供应链管理 企业供应链管理 企业供应链管理企业信息化信息化的作用信息化的发展阶段信息化建设的挑战 SRM(供应商关系管理)SRM架构参考图企业内部系统协作: ERP (企业资源计划)OA (办公自动化)业务功能模块:企业日常办公 EMS …

Pascal语言的系统监控

Pascal语言的系统监控 引言 在现代计算机系统中,系统监控是确保计算机平稳运行的重要组成部分。无论是个人计算机还是大型服务器,监控系统的性能、资源使用及状态,都是提高系统效率、及时发现问题的关键。Pascal语言作为一种结构化编程语言…

出现次数超过一半的数(信息学奥赛一本通-1186)

【题目描述】 给出一个含有n&#xff08;0 < n < 1000&#xff09;个整数的数组&#xff0c;请找出其中出现次数超过一半的数。数组中的数大于-50且小于50。 【输入】 第一行包含一个整数n&#xff0c;表示数组大小&#xff1b; 第二行包含n个整数&#xff0c;分别是数组…

解决 CANoe 多测试用例下固定 IP 地址冲突问题的分析与方案

问题描述&#xff1a; CANoe的测试环境如下&#xff1a; 在Ethernet1总线上&#xff0c;通过VN5620连接了PCU&#xff08;实物&#xff09;&#xff1b; 使用VtestStudio&#xff08;VTS&#xff09;开发&#xff0c;并且生成了三个测试脚本(vtt文件)&#xff0c;分别为&#…

React 项目使用 pdf.js 及 Elasticpdf 教程

摘要&#xff1a;本文章介绍如何在 React 中使用 pdf.js 及基于 pdf.js 的批注开发包 Elasticpdf。简单 5 步可完成集成部署&#xff0c;包括数据的云端同步&#xff0c;示例代码完善且简单&#xff0c;文末有集成代码分享。 1. 工具库介绍与 Demo 1.1 代码包结构 ElasticP…

python爬虫:小程序逆向(需要的工具前期准备)

前置知识点 1. wxapkg文件 如何查看小程序包文件 打开wechat的设置&#xff1a; .wxapkg概述 .wxapkg是小程序的包文件格式&#xff0c;且其具有独特的结构和加密方式。它不仅包含了小程序的源代码&#xff0c;还包括了图像和其他资源文件&#xff0c;这些内容在普通的文件…

Prolog语言的强化学习

Prolog语言的强化学习 引言 强化学习&#xff08;Reinforcement Learning, RL&#xff09;是机器学习的一个重要分支&#xff0c;它通过与环境交互来学习最优策略&#xff0c;以最大化累积奖励。在强化学习中&#xff0c;智能体&#xff08;Agent&#xff09;通过试错方式与环…

开源且完全没有审核限制的大型语言模型的概述

开源且完全没有审核限制的大型语言模型的概述 关键要点 研究表明&#xff0c;存在多个开源的大型语言模型&#xff08;LLM&#xff09;完全没有审核限制&#xff0c;适合开放对话。包括基于 Llama、Mixtral、Phi-2 和 StableLM 的模型&#xff0c;参数范围从 2.78 亿到 4050 亿…

思二勋:未来所有的业务都将生于AI、长于AI、成于AI

每个时代都有其标志性的技术&#xff0c;每个技术的产生或极大地解放了个体的劳动力&#xff0c;提高了个体与组织之间的协作效率&#xff0c;或极大地促进了生产效率或使用体验&#xff0c;或将极大地优化了资源配置和供需匹配效率&#xff0c;从而提高人们的生活水平。从青铜…

玛卡巴卡的k8s知识点问答题(六)

21. 什么是 ReplicaSet&#xff0c;说明它的主要用途。 ReplicaSet是k8s中的一个控制器&#xff0c;他用于保证任何时候&#xff0c;都有指定数量的Pod副本在运行&#xff0c;他是RC的升级版&#xff0c;支持更灵活的Pod选择器&#xff08;基于集合的标签选择&#xff09; 主…

P7453 [THUSC 2017] 大魔法师 Solution

Description 给定序列 a ( a 1 , a 2 , ⋯ , a n ) a(a_1,a_2,\cdots,a_n) a(a1​,a2​,⋯,an​)&#xff0c; b ( b 1 , b 2 , ⋯ , b n ) b(b_1,b_2,\cdots,b_n) b(b1​,b2​,⋯,bn​) 和 c ( c 1 , c 2 , ⋯ , c n ) c(c_1,c_2,\cdots,c_n) c(c1​,c2​,⋯,cn​)&…

免费送源码:Java+ssm+MySQL SpringBoot社区配送服务系统小程序 计算机毕业设计原创定制

摘要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;社区当然也不例外。社区配送服务系统小程序是以实际运用为开发背景&#xff0c;运用软件工程原理和开发方法&#xff0c;…

SQL语句(一)—— DDL

目录 一、SQL 基础知识 &#xff08;一&#xff09;SQL 通用语法 &#xff08;二&#xff09;SQL 分类 二、DDL —— 数据库操作 1、查询所有数据库 2、查询当前数据库 3、创建数据库 4、删除数据库 5、切换数据库 三、DDL —— 表操作 &#xff08;一&#xff09;查…

【Android】界面布局-线性布局LinearLayout-例子

线性布局&#xff08;LinearLayout&#xff09;是一种重要的界面布局中&#xff0c;也是经常使用到的一种界面布局 • 在线性布局中&#xff0c;所有的子元素都按照垂直或水平的顺序在界面上排列 ➢如果垂直排列&#xff0c;则每行仅包含一个界面元素 ➢如果水平排列&…

leetcode数组-长度最小的子数组

题目 题目链接&#xff1a;https://leetcode.cn/problems/minimum-size-subarray-sum/ 给定一个含有 n个正整数的数组和一个正整数 target** 。** 找出该数组中满足其总和大于等于target的长度最小的 子数组 [numsl, numsl1, ..., numsr-1, numsr] &#xff0c;并返回其长度**…

一周学会Pandas2 Python数据处理与分析-Jupyter Notebook安装

锋哥原创的Pandas2 Python数据处理与分析 视频教程&#xff1a; 2025版 Pandas2 Python数据处理与分析 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili Jupyter (Project Jupyter | Home&#xff09;项目是一个非营利性开源项目&#xff0c;于2014年由IPython项目中诞生…