尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Composio MCP 示例实战:基于 Streamable HTTP 与 Vercel AI SDK 构建可调用工具的 Agent

Composio MCP 示例实战:基于 Streamable HTTP 与 Vercel AI SDK 构建可调用工具的 Agent Composio MCP 示例实战基于 Streamable HTTP 与 Vercel AI SDK 构建可调用工具的 Agent【免费下载链接】composioComposio powers 1000 toolkits, tool search, context management, authentication, and a sandboxed workbench to help you build AI agents that turn intent into action.项目地址: https://gitcode.com/GitHub_Trending/co/composio本篇技术指南以 ts/examples/mcp 中的 MCP 示例为骨架完整演示如何用 Composio TypeScript SDK 创建 MCP 配置、为指定用户生成 MCP Server 实例并通过ai-sdk/mcp的 Streamable HTTP 传输把工具接入 Vercel AI SDK 的streamText流程。读完本文你将掌握composio.mcp.create/composio.mcp.generate的完整调用链、环境变量的正确配置方式以及如何把 Composio 托管的 Gmail 等工具无缝注入任意 AI SDK Agent。示例概览一次完整的 MCP 接入闭环该示例的核心价值在于展示了「创建 MCP 配置 → 生成用户级 Server → 通过 HTTP 传输拉起工具 → 交给 Agent 执行」的全链路初始化 Composio SDK并绑定VercelProvider位于 ts/packages/providers/vercel/src/index.ts用于将 Composio 工具包装为 Vercel AI SDK 的ToolSet调用composio.mcp.create创建一个仅包含 Gmail 工具包的 MCP 配置调用composio.mcp.generate为指定用户生成带用户上下文的 MCP Server 实例用modelcontextprotocol/sdk的StreamableHTTPClientTransport建立连接并用ai-sdk/mcp的createMCPClient拉取工具最终把这些工具直接传给streamText让gpt-4o-mini自主调用「获取最新 2 封邮件并总结」的任务。完整可运行代码见 ts/examples/mcp/src/index.ts依赖与脚本声明见 ts/examples/mcp/package.json。环境准备与运行1. 安装依赖示例目录是一个独立的私有 workspace 包包名为mcp-example在ts/examples/mcp目录下执行pnpm install若从仓库根目录 ts 出发也可以一次性安装所有示例的依赖cd ts pnpm install2. 配置环境变量README 建议复制环境变量模板并编辑cp .env.example .env从示例源码可以确认实际读取的环境变量有以下三个缺失时会直接throw并提示环境变量作用是否必填COMPOSIO_API_KEYComposio API 密钥从 Composio Dashboard 获取是COMPOSIO_EXAMPLES_GMAIL_AUTH_CONFIG_ID已创建的 Gmail Auth Config ID用于声明工具包使用的认证配置是本示例COMPOSIO_EXAMPLES_USER_ID你数据库中的外部用户 ID用于生成该用户的 MCP Server 实例是本示例说明COMPOSIO_EXAMPLES_*系列变量是整个示例体系的统一约定详见 ts/examples/README.md示例会「大声失败」——缺失变量时直接报错并点名缺失项。若你的环境中没有.env.example模板文件直接手动 export 上述变量即可。3. 运行示例# 运行示例 pnpm start # 开发模式带文件监听自动重启 pnpm dev从 package.json 的 scripts 可以看到start实际执行的是bun src/index.tsdev执行的是bun --watch src/index.ts即运行环境是 Bun。若从仓库根目录运行可改用pnpm --filter mcp-example start逐步拆解核心代码第一步初始化 Composio 与 Providerimport { Composio } from composio/core; import { VercelProvider } from composio/vercel; const composio new Composio({ apiKey: process.env.COMPOSIO_API_KEY, provider: new VercelProvider(), });VercelProvider继承自BaseAgenticProvider见 ts/packages/providers/vercel/src/index.ts负责把 Composio 的工具包装成 Vercel AI SDK 可识别的ToolSet并统一处理 JSON Schema 规范化如toStrictJsonSchema、dereferenceJsonSchema、normalizeToolArguments等。第二步声明认证配置与允许的工具const authConfigId process.env.COMPOSIO_EXAMPLES_GMAIL_AUTH_CONFIG_ID; const externalUserId process.env.COMPOSIO_EXAMPLES_USER_ID; if (!authConfigId || !externalUserId) { throw new Error(Set COMPOSIO_EXAMPLES_GMAIL_AUTH_CONFIG_ID and COMPOSIO_EXAMPLES_USER_ID); } const allowedTools [GMAIL_FETCH_EMAILS];这里先做环境变量守卫再通过allowedTools白名单把 Agent 的能力收敛到单个工具最小化权限暴露。第三步创建 MCP 配置const mcpConfig await composio.mcp.create(examples-gmail-${Math.floor(Date.now() / 1000)}, { toolkits: [ { toolkit: gmail, authConfigId, }, ], allowedTools, manuallyManageConnections: false, });create的入参在 ts/packages/core/src/types/mcp.experimental.types.ts 中由MCPConfigCreationParamsSchema校验各字段含义如下参数类型默认值说明namestring必填MCP 配置唯一名称API 将名称上限限制为 30 个字符因此示例使用examples-gmail-unix秒时间戳的短标签命名法toolkitsArraystring \| { toolkit?: string; authConfigId?: string }必填可传 toolkit slug 字符串如gmail或带authConfigId的对象以便绑定指定的认证配置allowedToolsstring[]可选允许暴露给 Agent 的工具白名单manuallyManageConnectionsbooleanfalsefalse时 Composio 会向 MCP Server 注入账号管理工具由 Agent 在对话中请求并完成账号认证true则由你自行管理连接从源码看create内部见 ts/packages/core/src/models/MCP.ts会把toolkits拆分为toolkitsslug 列表、auth_config_ids、custom_tools三组并依据manuallyManageConnections设置managed_auth_via_composio布尔值后调用client.mcp.custom.create。返回的对象上还挂载了一个闭包generate(userId)可以直接基于该配置生成 Server 实例。关于命名约定注释与 scripts/examples-provision.mjs 中的清理逻辑都依赖examples-label-unix秒这一形态——examples-前缀用于标识「示例创建的资源」时间戳用于区分手工创建的同名前缀配置垃圾回收--gc只会按正则^examples-[a-z0-9-]-\d{10}$匹配并清理超过 24 小时的残留配置。第四步为用户生成 MCP Server 实例const server await composio.mcp.generate(externalUserId, mcpConfig.id);generateMCP.ts会先retrieve配置详情再调用client.mcp.generate.url携带{ mcp_server_id, user_ids: [userId], managed_auth_by_composio }换取用户专属的 Streamable HTTP URL。返回的MCPServerInstance结构见 mcp.experimental.types.ts为{ id: string; // MCP 配置 ID name: string; // 配置名称 type: streamable_http, url: string; // 该用户专属的 MCP 端点 URL userId: string; // 外部用户 ID allowedTools: string[]; authConfigs: string[]; }第五步建立 Streamable HTTP 传输并创建 MCP Clientconst serverParams new StreamableHTTPClientTransport(new URL(server.url), { requestInit: { headers: { x-api-key: process.env.COMPOSIO_API_KEY! } }, }); const mcpClient await createMCPClient({ name: composio-mcp-client, transport: serverParams, });这里有两个关键点使用modelcontextprotocol/sdk提供的StreamableHTTPClientTransport客户端流式 HTTP 传输而非旧的 SSE 传输MCP 端点通过x-api-key请求头携带 Composio API Key 完成认证x-api-key正是 Composio 平台统一使用的 API 认证头这是该托管 MCP Server 与本地 stdio MCP 的最大差异。第六至八步拉取工具、交给 Agent、关闭连接const tools await mcpClient.tools(); const stream streamText({ model: openai(gpt-4o-mini), messages: [ { role: user, content: Fetch the latest 2 emails and provide a detailed summary with sender, subject, date, and brief content overview for each email., }, ], stopWhen: stepCountIs(5), tools, }); for await (const textPart of stream.textStream) { process.stdout.write(textPart); } await mcpClient.close();streamText来自 Vercel AI SDKai包stopWhen: stepCountIs(5)限制 Agent 最多执行 5 步工具调用以避免失控tools直接传入从 MCP Client 拉取的工具集模型即可自主决定何时调用GMAIL_FETCH_EMAILS。示例最后显式close()释放连接资源。源码级原理MCP 模型层的完整能力示例只用到了create与generate但 ts/packages/core/src/models/MCP.ts 中的MCP类还封装了完整的服务端管理 API可在你的业务中按需选用list(options)分页page/limit默认 1/10、按toolkits、authConfigs、name过滤查询 MCP Server 列表get(serverId)获取单个配置详情包含commandsClaude / Cursor / Windsurf 各客户端的接入命令、MCPUrl、toolkitIcons、serverInstanceCount等update(serverId, config)增量更新名称、工具包、allowedTools与manuallyManageConnections注意工具包列表是整体替换而非合并delete(serverId)永久删除配置不可恢复删除前请确认无活跃连接。值得留意的是源码中标注的演进方向MCP类被标记为deprecated官方建议改用会话级 MCP 端点——即composio.create(userId, { mcp: true })返回的 session 会直接暴露session.mcp.url/session.mcp.headersMCP 按会话按需开启独立的composio.mcp服务端管理 API 仅为向后兼容保留。新项目建议优先走 session MCP 端点示例代码则用于演示兼容路径的完整接法。环境变量自动供给examples-provision 脚本COMPOSIO_EXAMPLES_GMAIL_AUTH_CONFIG_ID等变量不必手工去 Dashboard 逐个创建仓库提供了幂等的供给脚本 scripts/examples-provision.mjs在ts/目录下执行out$(node ../scripts/examples-provision.mjs) eval $out该脚本会检查一个专用的可丢弃的Composio 项目自动创建缺失的examples-slug命名 Auth ConfigGmail/GitHub/Slack 走use_composio_managed_authserpapi 走use_custom_auth API_KEY对尚无活跃连接的 OAuth 工具包加上--initiate-missing可发起连接并打印浏览器授权 URL用--gc [--dry-run]可清理示例运行残留未达 ACTIVE 的账号、多余的 serpapi 演示账号、examples-前缀的 MCP 配置且只清理 24 小时前创建、确属示例创建的资源。脚本只向 stdout 输出可被eval的export语句报告走 stderr注意「先捕获再 eval」不要写成eval $(...)否则会掩盖脚本失败的退出状态。自定义与扩展建议README 明确指出示例的扩展方向见 ts/examples/mcp/README.md结合源码可进一步落地替换/增加应用修改toolkits数组例如换成github、slack或传入{ toolkit: github, authConfigId: 你的配置ID }同时把allowedTools换成对应工具包的工具名如GITHUB_CREATE_ISSUE并补充对应的COMPOSIO_EXAMPLES_GITHUB_AUTH_CONFIG_ID等环境变量。实现业务逻辑把messages内容替换为真实任务或将tools接入你自己的 Agent 循环支持 Anthropic、LangChain 等框架参见下方相关示例。错误处理与日志为stream.textStream迭代加入 try/catch打印模型调用失败或工具执行异常可用stopWhen: stepCountIs(N)控制步数上限避免长任务失控。认证模式切换将manuallyManageConnections设为true时Composio 不再注入账号管理工具需要自行确保用户已建立连接可参考 connected-accounts 示例 的建连流程。相关示例OpenAI Example展示与 OpenAIResponses/Agents API的集成其中也包含 MCP 接入的变体LangChain Example展示与 LangChain 的集成更多示例浏览全部可用的集成示例Anthropic、Tool Router、Triggers 等。小结本示例用不到 70 行代码打通了「Composio 托管 MCP Server Streamable HTTP 传输 Vercel AI SDK Agent」整条链路。核心要点可归纳为通过composio.mcp.create声明工具包与认证配置、通过composio.mcp.generate换取用户级端点、以x-api-key完成 HTTP 认证、再用createMCPClient把远端工具直接注入streamText。理解这条链路后你可以把任意 Composio 支持的 1000 工具包快速接入现有 AI 应用而无需自行实现工具服务器与认证逻辑。【免费下载链接】composioComposio powers 1000 toolkits, tool search, context management, authentication, and a sandboxed workbench to help you build AI agents that turn intent into action.项目地址: https://gitcode.com/GitHub_Trending/co/composio创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表