大模型智能体开发绕不开工具调用,而工具接口长期各自为政:每个框架一套写法,接入新工具要改代码。MCP(Model Context Protocol)把工具、资源和提示词统一成一套标准协议,正在成为大模型工具调用的通用中间层。这篇文章从协议结构、服务端实现到生产治理,说明如何把一套工具接入多个Agent框架。
MCP协议:大模型工具调用的统一标准体系
MCP定义了客户端-服务端的JSON-RPC 2.0通信模型。客户端(Agent、IDE、聊天应用)通过stdio或HTTP/SSE与服务端(工具提供方)连接,服务端暴露三类原语:Tools(可执行操作)、Resources(可读数据)、Prompts(可复用提示模板)。与函数调用(Function Calling)的区别在于:Function Calling是模型侧的能力,MCP是工具侧的服务化封装。同一套MCP服务端,可以让不同模型和本地Agent框架共用,这是MCP最大的价值。
MCP服务端接入:用Python写一个工具服务
以FastMCP为例,几十行代码即可把一个普通Python函数暴露为MCP工具。服务端通过装饰器注册工具,参数使用Pydantic模型声明,客户端调用时按schema传参。
from fastmcp import FastMCP
from pydantic import BaseModel, Field
mcp = FastMCP("weather-server")
class WeatherQuery(BaseModel):
city: str = Field(description="城市名称,如北京")
days: int = Field(default=1, ge=1, le=7, description="预报天数")
@mcp.tool()
def get_weather(query: WeatherQuery) -> dict:
# 查询指定城市天气预报
# 实际项目中在此调用气象API
return {"city": query.city, "days": query.days, "data": "..."}
if __name__ == "__main__":
mcp.run(transport="stdio")
启动方式上,stdio适合本地Agent进程直接拉起;部署到远程则用HTTP传输。FastMCP的HTTP传输支持Server-Sent Events,便于多个客户端共享一个工具网关。
MCP客户端接入:与智能体框架联调
客户端侧只需要指定服务端连接方式。以SDK的MCP客户端为例,工具列表从服务端拉取后统一交给模型决策,调用结果回传后,模型在多轮对话中决定是否继续调用。
async def run_agent(query: str):
async with ClientSession(transport=stdio_client) as session:
await session.initialize()
tools = await session.list_tools()
# 把tools合并进消息,模型按需发起tool_call
resp = await llm.chat(query=query, tools=[t.to_schema() for t in tools.tools])
for call in resp.tool_calls:
result = await session.call_tool(call.name, call.arguments)
# 将result追加到对话,继续下一轮推理
接入时要注意工具名冲突:不同服务端可能暴露同名工具,推荐在网关层做前缀隔离,例如github_前缀与search_前缀。
生产环境的MCP治理:鉴权、幂等与超时
工具接入生产要处理四个问题。鉴权:HTTP模式下用OAuth2 Bearer Token,请求头透传或由网关统一注入。幂等:对写操作定义idempotency-key,防止Agent重试造成重复下单。超时与限流:工具调用默认超时设置在30秒以内,高频工具用令牌桶限流,避免Agent循环调用打爆上游。审计:每次工具调用记录入参、出参、耗时与上下文id,方便复现异常。
另一个常见问题是工具描述质量。MCP要求description用自然语言写清楚触发条件、参数单位、失败语义,模型才会在正确时机调用。描述含糊的接口,Agent会乱调或者反复追问,这属于Prompt工程在工具层的延伸。
把工具标准化成MCP后,新Agent接入成本从数天降到小时级。长期看,工具网关会成为企业内部模型服务层的标准组件,统一协议、统一鉴权、统一审计。
原创文章,作者:小编,如若转载,请注明出处:https://www.yunthe.com/mcp-xie-yi-shi-zhan-da-mo-xing-gong-ju-diao-yong-yu-agent/