借助 @corsair-dev/mcp 将 200+ 集成以统一工具面接入任意 Agent 框架:核心机制、适配器矩阵与源码解析 借助 corsair-dev/mcp 将 200 集成以统一工具面接入任意 Agent 框架核心机制、适配器矩阵与源码解析【免费下载链接】corsairConnect your users to their apps项目地址: https://gitcode.com/GitHub_Trending/corsa/corsair本文围绕 Corsair 开源仓库中的corsair-dev/mcp包展开讲解如何用一次适配器调用把 Corsair 管理的 200 第三方集成OAuth、令牌刷新、Webhook 校验、限流均已内置以工具tool形式暴露给 Mastra、OpenAI、Anthropic、Vercel AI SDK、LangChain、LlamaIndex 等任意 Agent 框架。读完本文你将掌握包的安装方式、三个核心工具的调用协议、各框架适配器的使用姿势、stdio 与 HTTP 两种 MCP Server 部署形态以及run_script的安全边界与只读模式并能对照源码理解其底层实现。包定位把集成翻译成工具Corsair 是面向 AI Agent 的开源集成层负责维护那些开发者通常不愿自行维护的部分OAuth 授权流程、token 刷新、webhook 验签与限流凭据加密存储在你自己的数据库中见 packages/corsair。而corsair-dev/mcp做的事情是把这些能力全部封装到你的 Agent 框架已经听得懂的工具接口背后——即 Model Context ProtocolMCP。从 package.json 的描述可以看到其定位Expose 200 integrations to any agent framework (Mastra, LangChain, LlamaIndex, OpenAI, Vercel AI, Claude) as tools. 包同时提供两类能力MCP Server 构建件createBaseMcpServer、createMcpRouter、runStdioMcpServer可编程方式搭建标准 MCP Server框架适配器Adapters把 Corsair 的三个工具分别包装成目标框架期望的工具形状省去手工编写 schema 映射的麻烦。安装npm install corsair-dev/mcp根据 package.json 的声明mastra/core、anthropic-ai/sdk、anthropic-ai/claude-agent-sdk、langchain/core、llamaindex/core、openai/agents、openai等框架 SDK 均为可选 peer 依赖按需安装即可。例如 Mastra 快速开始还需要npm install mastra/core ai-sdk/anthropic包采用 ESM 模块格式type: module对外暴露主入口.以及./mastra、./langchain、./llamaindex三个子路径导出exports 配置。子路径单独导出是为了避免不同适配器之间同名导出如corsairTools冲突同时保证使用某个框架的消费者不会意外加载其他框架的可选依赖。此外包还通过bin字段注册了corsair-mcp可执行命令用于直接以npx corsair-dev/mcp方式启动一个由环境变量配置的 stdio MCP Server见 bin 声明。快速开始把工具交给 Mastra Agent从一个已配置好的corsair实例构建工具然后交给 Mastra AgentREADME 中的完整示例import { Agent } from mastra/core/agent; import { anthropic } from ai-sdk/anthropic; import { MastraProvider } from corsair-dev/mcp; import { corsair } from ./corsair; const provider new MastraProvider(); const tools await provider.build({ corsair }); const agent new Agent({ name: corsair-agent, model: anthropic(claude-sonnet-4-6), instructions: You have Corsair tools. Use list_operations to discover APIs, get_schema to read arguments, and run_script to execute., tools: Object.fromEntries(tools.map((t) [t.id, t])), }); const response await agent.generate(List all Slack channels.); console.log(response.text);corsair实例的创建方式在 demo/mcp/corsair.ts 中有可直接参考的模板通过createCorsair传入数据库句柄、kek凭据加密密钥、Hub 项目的projectApiKey与signingSecret再挂载插件如slack()、linear()、github({ authType: managed })。完整配置步骤见仓库文档 docs/hub/setup.mdx。从源码看MastraProvider.build()内部通过动态import(mastra/core/tools)的createTool把每个 Corsair 工具定义包装成 Mastra 工具并将 MCP 文本结果尝试JSON.parse、失败则原样返回adapters/mastra.ts。这也是为什么 README 强调每个适配器都把框架当作可选 peer 依赖——只有真正使用 Mastra 的消费者才需要安装mastra/core。同样的动态导入策略也用于 Claude Agent SDKadapters/claude.ts。统一工具面list_operations / get_schema / run_script所有适配器暴露的是同一套三个工具而不是一份平铺的、包含每个端点的大列表。这样 Agent 就能以一致的方式操作 200 集成工具作用list_operations发现可用的 API 端点get_schema查看某个端点的参数 schemarun_script以corsair为作用域变量执行一次调用典型工作流是Agent 先调用list_operations弄清自己能做什么再调用get_schema学习参数最后用run_script真正执行。新增一个插件后它的端点会自动出现在list_operations结果中无需任何代码改动。三个工具的精确定义位于 core/tools.tslist_operations接受可选参数plugin如slack、github与typeapi | webhooks | db默认api底层调用 Corsair 的listOperations实现见 packages/corsair/inspect.ts返回按行分隔的端点路径列表例如slack.api.channels.list。get_schema接受一个完整的点分路径参数path可传 API 路径slack.api.channels.list、Webhook 路径slack.webhooks.messages.message或 DB 路径slack.db.messages.search底层调用getSchemapackages/corsair/inspect.ts返回 TypeScript 风格的纯文本类型声明若路径不存在会返回可用操作列表帮助模型自我纠正。run_script接受一个code字符串参数在模型生成的 JS 代码中把corsair作为唯一作用域变量注入返回值即工具输出。工具描述中内置了示例const result await corsair.slack.api.channels.list({}); const channel result.channels?.find(c c.name general); return channel?.id;buildCorsairToolDefs返回统一的CorsairToolDef结构工具名、描述、Zod shape、handler随后由各 Provider 包装成目标框架的工具对象BaseProvider只做一件事——build()时对每个定义调用wrapToolcore/provider.ts。框架适配器矩阵README 中给出的适配器清单如下适配器适用场景Anthropic SDK配合 Claude 模型使用原生 tool useClaude Agent SDK进程内 MCP配合 Claude Agent SDK 使用OpenAI AgentsOpenAI Agents SDK 工具OpenAIOpenAI function callingVercel AI SDK供useChat与streamText使用的工具MastraMastra Agent 工具各适配器均从 packages/mcp/src/index.ts 导出。仓库中还有未在 README 表格中单列的OllamaProvideradapters/ollama.ts它生成符合 Ollama OpenAI 风格 API 的type: function工具定义并附带execute便捷执行方法。各适配器的实现要点均可对照源码Anthropic SDKadapters/anthropic-api.ts在 SDKTool类型基础上扩展run执行并返回纯文本与parse按 Zod schema 校验模型原始输入两个辅助方法方便在手动 agent loop 中使用输入 schema 由 Zod shape 转 JSON Schema转换见 core/json-schema.ts目标为 draft-7。OpenAI Agentsadapters/openai-agents.ts额外处理模型把嵌套参数拍平到顶层的常见情况——当工具 shape 含args键而模型传入的raw.args不是对象时把未知键合并进args再校验。Vercel AI SDKadapters/vercel-ai.ts与上述进程内包装不同它通过ai-sdk/mcp的createMCPClient以 HTTP transport 连接一个 MCP Server 地址url必填可选headers即把远端 MCP Server 作为客户端接入 Vercel AI SDK。LangChain / LlamaIndex / Mastracorsair-dev/mcp的./langchain、./llamaindex、./mastra子路径直接转发自工作区内的 corsair-dev/langchain、corsair-dev/llamaindex、corsair-dev/mastra 三个适配器包见 src/langchain.ts、src/llamaindex.ts、src/mastra.ts保证单一事实来源。Mastra 子路径还额外导出CorsairToolProviderBaseToolProvider 实现在 demo/mcp/scripts/test-mastra.ts 中可以看到其listTools({ toolkit: slack })resolveTools(slugs)的用法。编程式 MCP Serverstdio 与 HTTP 两种形态除了把工具交给框架 Agent包还提供了两个真正的 MCP Server构建件供你以编程方式搭建服务。stdio 形态runStdioMcpServer(options)内部调用createBaseMcpServer创建名为corsair的 MCP Server描述为 Use this to interact with the Corsair API...再通过StdioServerTransport连接core/stdio.ts。该形态面向本地进程内使用。HTTP 形态createMcpRouter(createServer)返回一个 Express 路由器基于StreamableHTTPServerTransport实现会话管理每个POST /携带mcp-session-id头以复用会话未携带则新建会话并把McpServer与 transport 存入内存 MapGET /要求有效会话DELETE /清理会话连接关闭后延迟 60 秒清理避免早期关闭导致的竞态core/http.ts。在 demo/mcp/server.ts 中可以看到如何把它与corsair的 HTTP 处理器共同挂载到一个 Express 应用上。此外包自带的可执行入口corsair-mcpsrc/bin.ts是一个零配置的 stdio MCP Server完全由环境变量驱动因此可以被 mcp.so、Glama、Smithery 等 MCP 注册表直接以npx corsair-dev/mcp收录。它会自动完成读取必需环境变量 → 校验并创建 SQLite 数据库better-sqlite3为可选依赖缺失时给出明确安装提示→ 执行建表 DDL含corsair_integrations、corsair_accounts、corsair_entities、corsair_events、corsair_permissions五张表→ 校验旧库 schema 兼容性 → 按插件名解析并安装插件支持slack简写与corsair-dev/slack全名两种写法→ 以authType: managed挂载插件 → 启动 stdio server。环境变量配置参考corsair-mcp以下为corsair-mcp可执行入口的环境变量契约来源src/bin.ts环境变量必填说明CORSAIR_KEK是存储凭据的密钥加密密钥key-encryption keyCORSAIR_API_KEY是Corsair Hub 项目 API KeyCORSAIR_PLUGINS是逗号分隔的插件列表如slack,github或corsair-dev/slack,corsair-dev/githubCORSAIR_SIGNING_SECRET是Hub 签名密钥Hub 要求两个 Key 同时提供因此不可省略CORSAIR_DB_PATH否SQLite 文件路径默认./corsair.dbCORSAIR_MULTITENANCY否设为true启用多租户存储CORSAIR_READONLY否设为true仅暴露只读操作注意stdout 是 stdio MCP 的 JSON-RPC 通道因此入口在配置 Hub 时显式关闭了 dev tunneltunnel: false避免隧道日志污染协议流所有日志都走 stderr。安全模型run_script 的执行边界与只读模式README 明确提醒run_script会在你的进程内、以corsair为作用域变量执行模型生成的 JavaScript它不是沙箱。因此必须保证调用方可信这与你的 Agent 会执行任意代码的前提一致是使用本包时最重要的安全前提。构建工具时可传入runOptions: { readonly: true }以阻止写操作和破坏性端点。从实现看buildCorsairToolDefs会读取该选项并在run_script的 handler 中生效core/tools.ts它用new Function(corsair, ...)包装代码当readonly为真时整个脚本会包在runReadonly(invoke)中执行。runReadonly使用AsyncLocalStorage建立只读作用域packages/corsair/core/permissions/index.ts端点绑定层在执行前调用assertReadonlyAllowed校验若当前处于只读作用域且端点风险级别不是read则抛出ReadonlyForbiddenError并中止脚本同文件 L69-L76。需要强调的是readonly 模式只约束 Corsair 端点的调用脚本内其他副作用例如直接发起网络请求或写文件并不在拦截范围内——README 对此有明确说明。错误与结果处理同样值得关注core/tool-result.ts当脚本抛错时formatRunScriptError会区分Agent 可见的 action 错误如[auth-missing:...]、Approval required. Visit ...、权限被拒、审批超时等通过isAgentFacingActionMessage识别L4-L18与普通运行时错误对前者只透出用户可操作的提示避免把内部错误细节暴露给模型。延伸阅读适配器完整列表与选项docs/mcp-adapters/mcp-adapters.mdx各框架接入指南Mastra docs/mcp-adapters/mastra.mdx、Anthropic SDK docs/mcp-adapters/anthropic-sdk.mdx、Claude Agent SDK docs/mcp-adapters/claude-sdk.mdx、OpenAI docs/mcp-adapters/openai.mdx、Vercel AI SDK docs/mcp-adapters/vercel-ai.mdx、LangChain docs/mcp-adapters/langchain.mdx、LlamaIndex docs/mcp-adapters/llamaindex.mdx面向 Claude Code / Cursor / Codex 等编码 Agent 的 stdio 用法docs/mcp-adapters/coding-agents.mdx 与 docs/mcp-adapters/claude-code.mdxHub 连接与配置docs/hub/setup.mdx、docs/hub/overview.mdx端到端示例demo/mcp含 Express 服务、Mastra/Claude 测试脚本底层工具实现packages/corsair/inspect.ts、packages/corsair/core/permissions/index.ts许可证Apache-2.0见仓库根目录 LICENSE。【免费下载链接】corsairConnect your users to their apps项目地址: https://gitcode.com/GitHub_Trending/corsa/corsair创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考