欢迎光临
我们一直在努力

MCP和AI SDK

一,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

 

赞(0)
未经允许不得转载:171主机测评 » MCP和AI SDK
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址