一,MCP是什么:Model Context Protocol
1,核心思想:
让 AI 可以标准化地访问外部工具、资源、提示词。
2,为什么会出现mcp?
以前:不同 AI 工具调用方式都不同,每家协议不一样。
而 MCP 的目标是:AI <–统一协议–> 外部能力。
mcp本质解决了AI 工具生态碎片化的问题
下面这段代码是关于怎么使用mcp的:
import { createMCPClient } from '@ai-sdk/mcp';
import { z } from 'zod';
import { ElicitationRequestSchema } from '@ai-sdk/mcp';
//第一步:创建一个mcpClient,
const mcpClient = await createMCPClient({
transport: {
type: 'http',
url: 'https://your-server.com/mcp',
headers: { Authorization: 'Bearer my-api-key' },
authProvider: myOAuthClientProvider,
redirect: 'error',
},
//如果要使用mcp Elicitation,必须先定义它的Elicitation能力
capabilities: { elicitation: {}, },
});
//第二步:把mcp转换为tool
const tools = await mcpClient.tools({
schemas: {
工具一
'get-data': {
inputSchema: z.object({
query: z.string().describe('The data query'),
format: z.enum(['json', 'text']).optional(),
}),
},
工具二
'get-weather': {
inputSchema:
z.object({ location: z.string(),
}), 保证类型输入
outputSchema:
z.object({
temperature: z.number(),
conditions: z.string(),
humidity: z.number(),
}), 保证类型输出
},
工具三
'tool-with-no-args': {
inputSchema: z.object({}),
},
},
});
//第三步:在streamText函数中使用tools
const result = await streamText({
model: __MODEL__,
tools,
prompt: 'What is the weather in Brooklyn, New York?',
//关闭mcp客户端
onFinish: async () => {
await mcpClient.close();
},
});
//可选:如果要使用mcp Elicitation,这里使用mcp的Elicitation能力
mcpClient.onElicitationRequest(ElicitationRequestSchema, async request => {
const userInput = await getInputFromUser(
request.params.message,
request.params.requestedSchema,
);
return {
action: 'accept',
content: userInput,
};
});
二,AI SDK 如何连接 MCP?
1,创建一个 MCP 客户端
核心API:createMCPClient()
2,为什么要创建一个MCP Client ?
把 MCP Tool 转换成 AI SDK Tool
eg:const tools = await mcpClient.tools();
你可以理解为:
MCP Tool
↓
AI SDK Tool
↓
LLM 可以调用
三,MCP 的三种连接方式:
方式一:HTTP(推荐生产环境,这是现在最推荐的方式)
const mcpClient = await createMCPClient({
transport: {
type: 'http',
url: 'https://your-server.com/mcp',
},
});
你可以理解成:AI 通过 HTTP 请求远程 MCP 服务
适合:
- 云部署
- Vercel
- SaaS
- 远程工具
这是未来主流。
方式二:SSE(Server-Sent Events)
本质:服务端持续推送消息给客户端
适合:
- 实时流式通信
- 长连接
但现在官方更推荐 HTTP Transport。
方式三:stdio(本地开发)
eg:new StdioClientTransport({
command: 'node',
args: ['server.js'],
})
本质:通过命令行启动本地 MCP 服务
适合:
- 本地工具
- Claude Desktop 风格
- 本地 Agent
不适合线上生产环境。
四,两种使用MCP的方式
方式一:手动定义 Schema(推荐)
eg:const tools = await mcpClient.tools({
schemas: {
'get-data': {
inputSchema: z.object({
query: z.string(),
}),
},
},
});
优势:
- TypeScript 类型安全
- 参数错了直接报错
方式二:自动发现(Schema Discovery)
eg:const tools = await mcpClient.tools();
优点:
- 简单
- 自动同步
缺点:
- 没有 TypeScript 类型安全
五,MCP 支持 structuredContent,自动校验返回值,自动生成 TypeScript 类型
1,普通 Tool 的问题:返回字符串,AI 再自己解析,
很不稳定。
MCP 支持 structuredContent
2,本质:
这意味着AI Tool 正在从“文本时代”进入“结构化数据时代”
六,MCP Resources 是什么?
Resources 是 application-driven 的数据源
tool和resource的区别:
- Tool 是 AI 主动调用
- Resource 是应用主动提供
1,AI 决定要不要调用tool,比如:搜索,查天气,调数据库等tool。
2,应用提前把Resource塞给 AI,这里有上下文,你拿去看,比如:文档,文件,知识库,当前页面内容等Resource。
七,Elicitation
这是mcp很高级的能力
1,什么是Elicitation?
他允许,Tool 执行过程中向用户继续提问
本质:在调用工具时可以继续向你提问的能力
2,场景
- AI帮你订机票调用工具
- 工具发现:缺少身份证
- 于是:MCP Server -> 请求用户输入
- 客户端弹窗:请输入身份证号
- 用户输入后:继续执行 Tool
3,Elicitation的重要性
- 传统 Function Calling:一次性输入,一次性输出
- 而 Elicitation:支持真正的多轮工具交互
八,MCP Prompt
MCP Server 可以提供Prompt



