Pydantic AI 與 Model Context Protocol (MCP)
在過去,如果要讓 AI 代理人存取外部的資料庫或使用特定的 SaaS 服務 API,我們通常需要為每一個服務手寫專屬的 Python 程式碼 (Function Tools)。當服務一多,這就變成了一項龐大且難以維護的工程。
為了解決這個問題,業界誕生了一個全新的標準:Model Context Protocol (MCP)。Pydantic AI 原生且深度地支援了這項協定。
什麼是 MCP?
Model Context Protocol (MCP) 是一個開放的標準協定,旨在標準化 AI 模型與外部資料來源、工具之間的連線方式。
你可以把 MCP 想像成是 AI 界的 USB 介面: 只要外部系統提供了一個符合 MCP 規範的伺服器 (MCP Server),任何支援 MCP 的客戶端 (MCP Client) 或 AI 代理人都可以像插上 USB 一樣,無縫地使用該系統提供的資料庫查詢功能、檔案讀取功能或 API 操作,而完全不需要手寫介接的程式碼。
Pydantic AI 作為 MCP Client
Pydantic AI 內建了強大的 MCP 客戶端功能。這意味著你的 Pydantic AI 代理人可以直接連上網路上現成的 MCP Servers(例如 GitHub 提供的 MCP、本地檔案系統的 MCP 等),自動學會伺服器上註冊的所有工具。
import asyncio
from pydantic_ai import Agent
# 匯入 MCP Client 相關模組
from pydantic_ai.mcp import MCPClient
# 建立一個基礎 Agent
agent = Agent('openai:gpt-4o')
async def main():
# 假設本機正在運行一個提供天氣與交通查詢的 MCP Server
# 我們建立一個 MCP Client 連上這個伺服器
async with MCPClient("http://localhost:8000/mcp") as mcp_client:
# 動態地將這個 MCP Server 提供的手冊與工具「掛載」到我們的 Agent 上
# Agent 就會瞬間學會如何查詢天氣與交通!
agent.load_mcp(mcp_client)
# 現在可以直接詢問 Agent 相關問題
result = await agent.run('請問台北今天會下雨嗎?如果搭捷運會塞車嗎?')
print(result.data)
asyncio.run(main())
透過這種方式,AI 開發者可以專注於代理人的邏輯與系統提示,將底層系統整合的粗活交給標準化的 MCP Servers 來處理。
建立 MCP Server (FastMCP)
不僅能作為客戶端,如果你今天開發了一個很棒的工具系統,想要分享給其他人或其他 AI 框架使用,Pydantic AI 也提供了極度便捷的方法讓你開發自己的 MCP Server。
Pydantic AI 引入了類似 FastAPI 設計理念的 FastMCP。讓你可以用極少的程式碼,將普通的 Python 函數轉變成符合 MCP 標準的網路端點。
# 一個簡單的 FastMCP Server 範例
from pydantic_ai.mcp import FastMCP
# 建立一個 FastMCP 實例
mcp = FastMCP("MyMathTools")
# 就像使用 @app.get 一樣,透過裝飾器將函數暴露成 MCP 工具
@mcp.tool
def calculate_compound_interest(principal: float, rate: float, years: int) -> float:
"""計算複利的結果"""
return principal * (1 + rate) ** years
# 啟動 MCP Server
if __name__ == "__main__":
mcp.run()
啟動之後,這支程式就變成了一個標準的 MCP Server。不管對方使用的是 Pydantic AI、LangChain、或是直接在 Claude Desktop 應用程式中,都可以連上這個 Server 並呼叫 calculate_compound_interest 函數。
Pydantic AI 透過支援 MCP 客戶端與 FastMCP 伺服器,真正打破了 AI 框架與外部系統之間的壁壘,走向了標準化、模組化整合的未來。