没有它,你的 AI 代理毫无用处
为什么 MCP 是人工智能的 USB‑C。
你已经构建了一个 AI 代理。也许它已经相当不错。提示词写得紧凑,模型响应快速,回答听起来很自然。
但随后有人让它去 Salesforce 查询客户记录,或者拉取最新的 Jira 工单,或者搜索内部文档。
你的漂亮代理却……无能为力。
这就是每个 AI 平台最终都会碰到的集成难题。你的代理需要“手”。需要能够看到你实际业务系统的“眼”。没有这些,你不过是在运行一个昂贵的聊天机器人。
传统的解决方案?为每一个想要连接的服务编写自定义 API 包装器。阅读文档,处理认证,应对速率限制,祈祷它们下个月不会更改端点。然后对下一个服务再来一次。再下一个也是如此。
模型上下文协议(Model Context Protocol,MCP)彻底改变了这种计算方式。
MCP 实际解决了什么
想想 USB 在 USB‑C 出现之前的情况。你会有 Mini‑USB、Micro‑USB、专有的 Apple 接口,以及一抽屉只适配特定设备的线缆。USB‑C 不仅仅是新增一种接口——它确立了一个标准,使得任何线缆都能与任何设备配合使用。
MCP 对 AI 工具集成做的,就是同样的事。
不必为把代理连接到 Salesforce、HubSpot、GitHub 或其他任何服务而编写自定义代码,你只需实现一次协议(或下载一个预构建的服务器),任何兼容 MCP 的代理即可立即与之通信。
协议负责通信层,你只需要定义工具的功能以及它们需要的输入数据。
设置多个集成
Mastra 通过其 MCPClient 原生支持 MCP。你可以同时连接本地工具(作为子进程运行)和远程服务(在其独立基础设施上运行)。
下面是一个面向生产环境的示例,连接 Google Maps 用于路径规划、天气服务以及本地 Wikipedia 搜索:
import { MCPClient } from '@mastra/mcp';
export const mcpClient = new MCPClient({ servers: { // 本地工具(Stdio) wikipedia: { command: 'npx', args: ['-y', 'wikipedia-mcp'], }, // 地图与导航(远程/HTTP) googleMaps: { url: new URL(process.env.GOOGLE_MAPS_MCP_URL!), requestInit: { headers: { Authorization: `Bearer ${process.env.GOOGLE_MAPS_API_KEY}`, }, }, }, // 天气服务集成 weather: { url: new URL('https://mcp.weatherapi.dev/v1'), requestInit: { headers: { 'X-API-Key': process.env.WEATHER_API_KEY!, }, }, }, },});客户端负责管理连接生命周期,处理本地工具的进程启动,并维护远程服务器的 HTTP 连接。你无需直接操作套接字或 stdio。
将工具连接到代理
一旦配置好 MCP 客户端,将这些工具交给代理就非常直接:
import { Agent } from '@mastra/core/agent';import { openai } from '@ai-sdk/openai';import { mcpClient } from '../mcp';
export const navigationDirectionsAgent = new Agent({ id: 'navigation-directions-agent', name: 'Navigation & Directions Assistant', instructions: `You are a helpful navigation assistant that provides route planning and travel advice. - Always confirm the start and destination locations - Use Google Maps tools to find optimal routes - Check weather conditions along the route - Provide estimated travel times and suggest alternatives if weather is poor - Include relevant details like traffic, road conditions, and points of interest - Keep responses clear and actionable`, model: openai('gpt-5'), tools: await mcpClient.getTools(), // <--- This is the magic line});当用户询问:“从旧金山到塔霍湖的最佳路线是什么,天气会不会有问题?” 时,代理会读取可用的工具定义,发现自己可以使用 Google Maps 路线规划和天气预报工具,使用正确的参数调用它们,并返回一条最优路线以及沿途的实时天气情况。
你根本不需要写一行 Google Maps API 代码或天气服务的集成代码。
每用户认证
这里有一个常见的安全误区:硬编码凭证。
如果你把一个 Google Maps API 密钥写进环境变量,然后就此完事,所有用户都会共享同一配额和速率限制。更关键的是,如果你使用的服务会存储用户偏好(比如保存的地点或常用路线),所有人都会看到相同的数据。这在演示环境还能接受,但在生产环境就是隐患。
Mastra 通过让你为每个用户动态创建带有用户专属凭证的 MCP 客户端来解决这个问题:
async function handleUserRequest(userPrompt: string, userCredentials: UserCreds) { // 为 THIS 特定用户创建客户端 const userMcp = new MCPClient({ servers: { googleMaps: { url: new URL(process.env.GOOGLE_MAPS_MCP_URL!), requestInit: { headers: { // 用户专属的 API key 或 token Authorization: `Bearer ${userCredentials.mapsApiKey}`, 'X-User-ID': userCredentials.userId, }, }, }, }, });
const agent = mastra.getAgent('navigationDirectionsAgent');
// 在运行时注入工具 const response = await agent.generate(userPrompt, { toolsets: await userMcp.getToolsets(), });
return response;}每个用户都会得到自己隔离的工具集,拥有独立的 API 配额和偏好。用户 A 的保存地点保持私密,用户 B 的路线历史也互不干扰。这正是多租户 SaaS 代理在实际中的工作方式。
构建复合工具
有时你需要把多个 MCP 工具组合成一次操作。比如,你想规划一条同时考虑实时交通和沿途天气的路线。
可以在自定义工具定义中包装 MCP 工具:
export const smartRouteTool = createTool({ id: 'smart-route-planner', description: 'Plans optimal route considering traffic and weather conditions', execute: async ({ context, mastra }) => { // 获取原始工具 const tools = await mcpClient.getTools();
// 1. 从 Google Maps 获取基础路线 const routeData = await tools.googleMaps_getDirections.execute({ context: { origin: context.origin, destination: context.destination } });
// 2. 检查路线上的天气 const weatherData = await tools.weather_getForecast.execute({ context: { coordinates: routeData.waypoints } });
// 3. 返回带有天气警报的增强路线 return { ...routeData, weatherAlerts: weatherData.alerts, recommendation: weatherData.severe ? 'Consider delaying trip' : 'Safe to travel' }; },});这样你就可以对工具交互方式进行细粒度控制,同时仍然利用 MCP 协议完成繁重的底层工作。
这一步的意义
编写每个服务的自定义 API 客户端从来都不可持续。它的可扩展性差,容易出错,并且会把平台锁定在特定实现上。
MCP 并不能解决所有集成难题——身份验证仍然复杂,速率限制仍然重要,而且并非所有服务都已有 MCP 服务器。但它提供了一个基础,使得构建代理平台的痛点大幅降低。
如果你正在设计需要与外部服务交互的 AI 系统,了解 MCP 很可能值得投入时间。