资讯详情

资讯详情

一个用户一个会话:用 Composio Tool Router 做 MCP 会话级工具管控

一个用户一个会话用 Composio Tool Router 做 MCP 会话级工具管控【免费下载链接】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/composioComposio Tool Router是 Composio TypeScript SDK 里的会话管理能力它为你的每个用户创建一个用户隔离的 MCP 会话按用户维度决定能看到哪些 Toolkit 和 Tool并统一托管多个 Toolkit 的认证流程。会话产出一个 MCP 兼容 URL任何 MCP 客户端都能直接接入也可以借 provider 把工具喂给 Vercel AI SDK、LangChain 等框架。你的 Agent 应用要「每个用户一套自己的工具和账户」时它就是现成答案。三个场景正好戳中 Tool Router多用户 Agent 需要会话隔离用户 A 的 Gmail 连接不能泄漏给用户 B。Tool Router 的隔离单位就是会话——一次create(userId)得到一个独立sessionId工具范围、认证状态、虚拟文件系统全部挂在会话上。工具权限要最小化客服 Agent 只需要只读工具运维 Agent 才需要破坏性操作。Tool Router 支持 Toolkit 级 单个 Tool 级 行为标签tag三层过滤。同一套工具要复用到多个框架MCP URL 是框架无关的。你在 Vercel AI SDK 里怎么连在 LangChain、OpenAI Agents、Claude Agents SDK 里基本就是同一份连接参数url headers。一句话隔离、管控、复用各归其位。三步跑通两行代码拿到 MCP URL先装包npm install composio/core0.4.0建会话两行import { Composio } from composio/core; const composio new Composio(); const session await composio.create(user_123, { toolkits: [gmail], mcp: true, // 让返回类型暴露 session.mcp }); console.log(session.sessionId); // 存起来供 composio.use() 复用 console.log(session.mcp.url); // 任何 MCP 客户端都能连MCP 端点是显式 opt-in不传{ mcp: true }端点运行时其实存在但类型上会隐藏返回SessionWithoutMcp。传mcp: true只是打开类型不是开启功能。把 URL 交给 MCP 客户端工具就到手了以 Vercel AI SDK 为例import { experimental_createMCPClient as createMCPClient } from ai-sdk/mcp; const client await createMCPClient({ transport: { type: http, url: session.mcp.url, headers: session.mcp.headers, // 已含 x-api-key如果配置了 apiKey }, }); const tools await client.tools();走 MCP URL 路径全程不需要 provider只有调用session.tools()取框架格式化工具时才需要。会话用完可以删await session.delete()或composio.sessions.delete(id)删一个不存在的 ID 会得到后端 404。删除语义见 ToolRouter 实现。一张表讲透六个配置项create()的第二个参数控制这个会话里有什么配置项控制什么最小示例toolkits启用/禁用哪些 Toolkittoolkits: [gmail, slack]或{ enable: [gmail] }、{ disable: [calendar] }tools单个 Toolkit 内的工具级白/黑名单或覆盖标签tools: { gmail: [gmail_send_email] }tags全局按行为过滤工具可被tools内配置覆盖tags: [readOnlyHint]authConfigsToolkit → 认证配置 ID 的映射authConfigs: { gmail: ac_gmail_work }connectedAccountsToolkit → 已连接账户 ID 的映射connectedAccounts: { gmail: ca_abc123 }manageConnections是否让 meta tools 自动引导连接默认truemanageConnections: { enable: true, callbackUrl: ... }几个容易踩的细节tools里每个 Toolkit 的配置中enable/disable/tags三选一互斥多传会抛校验错误。四种 tagreadOnlyHint只读、destructiveHint改/删数据、idempotentHint可安全重试、openWorldHint开放世界上下文。connectedAccounts传字符串没问题SDK 会包成单元素数组再发后端。配置校验逻辑在 toolRouter 类型定义参数到 wire 字段的转换见 参数转换。会话方法速查表方法 / 属性一句话作用典型参数返回sessionId会话唯一标识composio.use(id)靠它复用—stringmcpMCP 端点配置—{ url, type: http \| sse, headers? }tools()拉取按你的框架格式化的工具需 provider会话级 modifiers工具集合execute()在会话内执行工具自定义工具走本地、远程工具走后端toolSlug,arguments?固定{ data, error, logId }search()按语义用例搜工具返回 schema 与使用引导{ query, toolkits? }results/toolSchemas/nextStepsGuidance等authorize()为某个 Toolkit 发起授权toolkit,{ callbackUrl? }connectionRequest含redirectUrl、waitForConnection()toolkits()查各 Toolkit 连接状态支持过滤与分页{ toolkits?, cursor?, limit? }{ items, cursor, totalPages }proxyExecute()用会话已连接账户代理一次 API 调用{ toolkit, endpoint, method, body?, parameters? }{ status, data?, headers?, binaryData? }method限定 GET/POST/PUT/DELETE/PATCHexperimental.files会话虚拟文件系统的上传/下载/列目录/删除路径、URL、File 或 buffer文件句柄 / 列表update()部分更新会话配置未传字段不动与 create 同构的子集就地同步configVersion等会话对象的方法实现集中在 ToolRouterSession。四大框架接入只差最后几行MCP 路径是共性写法——urlheaders塞进各框架的 MCP 客户端配置即可。真正有差异的只有两点是否要 provider、工具对象从哪来。框架需要 provider连接方式最小差异点Vercel AI SDKMCP 路径不需要session.tools()路径需要VercelProviderexperimental_createMCPClient http transportstreamText({ tools })直接开跑LangChain不需要MultiServerMCPClientcomposio: { transport: http, url, headers }client.getTools()后交给createAgentOpenAI Agents不需要hostedMcpTool({ serverUrl, headers })托管 MCP 工具run(agent, ...)支持stream: trueClaude Agents SDK不需要query({ options: { mcpServers: { composio: { type: http, url, headers } } } })事件流里过滤event.type result取最终回答如果你不想走 MCP也可以直接让框架认识会话工具Vercel 示例const composio new Composio({ provider: new VercelProvider() }); const session await composio.create(user_123, { toolkits: [gmail] }); const tools await session.tools(); // streamText({ model, prompt, tools, stopWhen: stepCountIs(10) })provider 只影响工具对象长什么样不影响隔离与管控本身仓库示例见 tool-router 示例工程。认证与状态authorize 与 toolkits用户没连接 Gmail 时会话照样能建但工具执行会卡在认证上。手动串起来的流程是const req await session.authorize(gmail, { callbackUrl: https://your-app.com/auth/callback, }); console.log(req.redirectUrl); // 把用户导过去 const account await req.waitForConnection(); // 等用户完成授权之后随时用toolkits()查状态支持按 slug 过滤和游标分页const { items } await session.toolkits({ toolkits: [gmail, slack] }); for (const t of items) { console.log(t.slug, connected:, t.connection?.isActive); }isActive由后端账户状态是否为ACTIVE推导。交互式应用更省事的做法是保持manageConnections: true默认让 meta tools 自动引导用户连接非交互场景再关自动管理、自己调authorize()。进阶开关modifiers、沙箱与 v0.4.0 新特性会话级 modifiersv0.4.0 引入在工具 schema 发往模型前、执行前后各插一层钩子且上下文里带sessionId方便你跨会话追踪const tools await session.tools({ beforeExecute: ({ toolSlug, sessionId, params }) { console.log([${sessionId}] - ${toolSlug}); return params; }, afterExecute: ({ toolSlug, sessionId, result }) result, });沙箱sandbox旧名workbench控制会话内代码执行环境。二者是同一配置的新旧别名同时传会直接抛ValidationError别写重复。字段默认说明enabletruefalse时彻底禁掉代码执行工具enableProxyExecutiontrue沙箱内的代理 API 执行autoOffloadThreshold自动大响应自动卸载到沙箱的字符阈值sandboxSizestandard四档standard(1vCPU/1GB) / medium(2/2) / large(4/4) / xlarge(8/8)改档会重建沙箱内存文件丢失/mnt/files/保留自定义工具用experimental_createTool/experimental_createToolkit定义的本地工具放进experimental.customTools/customToolkits会与远程工具一起参与搜索调用时在进程内执行、同批远程工具并行发后端。绑定了自定义工具的会话必须传userId否则构造器直接抛错。v0.4.0 三件新事manageConnections.waitForConnections: true——会话等待用户完成全部认证后再继续上面的会话级 modifierscomposio.tools.getRawToolRouterMetaTools(sessionId, { modifySchema })——不建完整会话对象也能直接拿底层 meta tools。类型层面的新字段定义见 toolRouter 类型。避坑与最佳实践一人一会话连接与工具严格按sessionId隔离别图省事共享会话。最小 Toolkit只启用用例必需的 Toolkit 和工具能少则少。复用会话sessionId存进 Redis下次composio.use(sessionId)拿回同一会话。标签过滤只读场景全局挂readOnlyHint个别 Toolkit 用tools覆盖。连接管理分场景交互式默认manageConnections: true让 meta tools 引导授权后台批处理关掉它、手动authorize()。MCP 与 provider 不是一回事连 MCP URL 永远不需要 provider漏掉mcp: true只会在 TS 层面看不见session.mcp不是端点不存在。sandbox/workbench 只写一个改sandboxSize前先确认能接受沙箱重建、内存文件清空。收尾Composio Tool Router 把用户隔离、工具管控、认证托管、框架接入这四件事压进一个会话对象里create()建隔离边界配置项收窄工具面MCP URL 负责跨框架分发authorize()toolkits()管住认证生命周期。剩下的只是把 URL 填进你框架的 MCP 配置里。延伸阅读仓库内Tool Router API 文档可直接运行的示例工程含各框架接入脚本源码ToolRouter、ToolRouterSession、会话类型【免费下载链接】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),仅供参考
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →