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.pswp.cn/news/900212.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/900212.shtml
英文地址,請注明出處:http://en.pswp.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項目中誕生…