🚀 Vercel AI SDK 使用指南:拥抱 MCP 工具 (Model Context Protocol)

4 阅读4分钟

大家好!随着 AI Agent 的爆发式增长,如何让大模型更标准化、更安全地调用外部工具和资源,成为了开发者们关注的焦点。Model Context Protocol (MCP) 应运而生,它为 AI 应用提供了一个标准化的接口,用于发现和使用各种服务。

今天,我们将深入探讨 Vercel AI SDK 中最新支持的 MCP Tools 功能,并手把手教你如何结合智谱最新发布的 GLM-5 模型,构建一个强大的 AI 智能体!


🌟 什么是 MCP?为什么我们需要它?

Model Context Protocol (MCP) 是一个开放标准。简单来说,它就像是 AI 时代的“USB 接口”。通过连接到 MCP 服务器,你的 AI 应用程序可以无缝访问服务器提供的:

  1. 工具 (Tools) :供大模型调用的函数(如查询天气、执行代码等)。
  2. 资源 (Resources) :为模型提供上下文的数据源(如读取本地文件、数据库)。
  3. 提示词 (Prompts) :服务器端预设的用户控制模板。

Vercel AI SDK 原生支持了 MCP 客户端,只需几行代码,就能让你的 GLM-5 模型获得超能力!


🛠️ 准备工作

首先,安装必需的依赖包。由于我们要使用智谱的 GLM-5 模型,可以通过 Vercel AI SDK 的 OpenAI 兼容适配器来接入。

Bash

npm install @ai-sdk/mcp @ai-sdk/openai ai zod

🎯 核心实战:连接 MCP 并使用 GLM-5

1. 初始化 MCP 客户端

Vercel AI SDK 提供了多种连接 MCP 服务器的传输方式 (Transport)。在生产环境中,强烈推荐使用 HTTP 或 SSE 传输;而在本地开发时,可以使用 Stdio。

TypeScript

import { createMCPClient } from '@ai-sdk/mcp';

// 以 HTTP 传输为例 (推荐用于生产)
const mcpClient = await createMCPClient({
  transport: {
    type: 'http',
    url: 'https://your-mcp-server.com/mcp',
    // 可选:配置鉴权请求头
    headers: { Authorization: 'Bearer your-api-key' },
  },
});

注:如果是本地开发,可以将 type 换为 stdio 或者使用 @modelcontextprotocol/sdk/client/stdio.js

2. 结合智谱 GLM-5 模型进行工具调用

配置好 MCP 客户端后,我们可以通过 mcpClient.tools() 将服务器端的工具一键转换为 AI SDK 兼容的格式,并传递给 GLM-5 模型。

注意: 使用完毕后,务必调用 mcpClient.close() 关闭客户端以释放资源。对于非流式请求,推荐使用 try/finally 块;对于流式请求(streamText),可在 onFinish 回调中关闭。

TypeScript

import { createMCPClient } from '@ai-sdk/mcp';
import { generateText } from 'ai';
import { createOpenAI } from '@ai-sdk/openai';

// 1. 配置智谱大模型 (利用 OpenAI 兼容接口)
const zhipu = createOpenAI({
  baseURL: 'https://open.bigmodel.cn/api/paas/v4/',
  apiKey: process.env.ZHIPU_API_KEY, // 填入你的智谱 API Key
});

async function runAgent() {
  // 2. 初始化 MCP 客户端
  let mcpClient;
  
  try {
    mcpClient = await createMCPClient({
      transport: { type: 'http', url: 'https://your-mcp-server.com/mcp' }
    });

    // 3. 自动发现 MCP 服务器上的所有工具 (Schema Discovery)
    const tools = await mcpClient.tools();

    // 4. 调用智谱 GLM-5 模型
    const result = await generateText({
      model: zhipu('glm-5'), // 指定使用最新的 GLM-5 模型
      tools: tools, // 直接传入 MCP 工具集合
      prompt: '请帮我查询一下北京今天的天气,并给出穿衣建议。',
    });

    console.log('🤖 GLM-5 回复:', result.text);
    
    // 如果模型决定调用工具,这里会打印工具调用记录
    if (result.toolCalls && result.toolCalls.length > 0) {
      console.log('🛠️ 触发了工具调用:', result.toolCalls);
    }
    
  } finally {
    // 5. 养成良好习惯,完成后关闭客户端
    await mcpClient?.close();
  }
}

runAgent().catch(console.error);

🚀 进阶玩法:解锁 MCP 的完全体

1. 强类型的工具定义 (Schema Definition)

默认的 mcpClient.tools() 会拉取所有工具,但这在开发时缺乏 TypeScript 的类型提示。为了获得完整的类型安全和 IDE 自动补全,你可以结合 zod 显式定义你需要的工具和输入/输出结构:

TypeScript

import { z } from 'zod';

const tools = await mcpClient.tools({
  schemas: {
    'get-weather': {
      // 定义传入参数的结构
      inputSchema: z.object({
        location: z.string().describe('城市名称'),
      }),
      // (可选) 定义返回结果的结构,确保输出也是强类型的
      outputSchema: z.object({
        temperature: z.number(),
        conditions: z.string(),
      }),
    },
    // 如果工具不需要参数,传入空对象即可
    'ping-server': {
      inputSchema: z.object({}),
    }
  },
});

这种方式不仅能提供极致的类型安全,还能让你的应用只加载切实需要的工具,避免上下文冗余。

2. 获取 MCP 资源 (Resources)

资源是由应用程序主动控制的数据源。你可以列出或读取这些资源来作为 GLM-5 模型的背景知识:

TypeScript

// 1. 获取可用资源列表
const resources = await mcpClient.listResources();

// 2. 读取特定资源的详细内容
const documentData = await mcpClient.readResource({
  uri: 'file:///example/document.txt',
});

3. 处理 Elicitation (请求用户输入)

有时候,MCP 服务器在执行工具前需要用户的确认(比如敏感操作或表单验证)。你可以在初始化时开启这个能力,并监听请求:

TypeScript

import { ElicitationRequestSchema } from '@ai-sdk/mcp';

// 开启能力
const mcpClient = await createMCPClient({
  transport: { /* ... */ },
  capabilities: { elicitation: {} },
});

// 注册处理函数
mcpClient.onElicitationRequest(ElicitationRequestSchema, async request => {
  console.log('服务器请求输入:', request.params.message);
  
  // 假设这里通过某种方式获取了用户的确认或输入内容
  const userInput = await getCliUserInput(); 
  
  return {
    action: 'accept', // 可选 'accept', 'decline', 'cancel'
    content: userInput,
  };
});

总结

通过 Vercel AI SDK 引入 MCP Tools,极大地降低了我们整合外部系统和工具的成本。再搭配上智谱 GLM-5 强大的逻辑推理和工具调用能力,无论是开发智能客服、数据分析看板还是自动化执行助手,都变得前所未有的简单。

赶紧升级你的 @ai-sdk/mcp,动手试试看吧!如果你在接入过程中遇到任何问题,欢迎在评论区留言交流讨论~ 👇