MCPorter:把 MCP 工具从服务器带进脚本、CLI 与 Agent
通过 TypeScript 调用 MCP,伪装成简单的 TypeScript API。或者将它们打包为 cli。
秒懂
- 它是什么?
- MCPorter 是 TypeScript runtime 与命令行工具,用于发现和调用 MCP server,并生成 CLI、类型客户端及可复现会话。
- 适合谁用?
- 它适合需要从终端、脚本或 agent 重复调用 MCP 工具的开发者,尤其适合把一次性 server 接入转成 typed client、专用 CLI 或可回放测试;不适合不审查远程工具权限就直接接入生产凭证的人。先用 `npx mcporter list` 查看工具签名,再对无敏感 server 执行一次 `call`,检查 JSON 输出、配置优先级、OAuth 存储和 `runtime.close()` 后的进程清理。
- 能商用吗?
- 可以。MIT 是宽松许可证:你可以使用、修改并销售基于它的软件,只需保留版权和许可证声明。
- 还在维护吗?
- 在维护。仓库最近一次提交在 1 天前。
- 用什么语言写的?
- 主要是 TypeScript(依据 GitHub 的语言统计)。
以上回答依据项目的 GitHub 数据(最近同步于 2026年9月15日)和我们的分析,不构成法律意见。
开源项目深度解析
发现与调用是两条主线
MCPorter 的 README 将它定义为 TypeScript runtime 和 CLI,用来发现、调用 Model Context Protocol servers,目标用户是开发者和 coding agents。无需先写一套专用客户端,用户可以从终端检查 server 暴露的工具,再按工具签名发起调用。
快速示例是 `npx mcporter list https://mcp.context7.com/mcp --brief`,随后用 `npx mcporter call` 调用 `resolve-library-id`。第一条命令输出 TypeScript 风格的工具签名,第二条返回匹配的 library ID。先做 list 再 call,有助于避免猜错参数。
CLI 覆盖从临时调用到生成客户端
核心工作流包括 `mcporter list` 发现 server 和 tools,`mcporter call`、`mcporter resource` 读取工具与资源,`--http-url` 和 `--stdio` 连接一次性 server,`mcporter auth` 与 `mcporter vault` 处理 OAuth,`generate-cli` 生成专用 CLI,`emit-ts` 生成 TypeScript 类型或客户端。`record` 与 `replay` 则用于捕获和重放 MCP 会话。
人类可读输出默认写到 stdout,其他程序或 agent 可以选择 JSON 输出。自动化脚本应固定命令、参数和输出格式,并对错误退出码做测试,不能把终端展示文本当成稳定 API。
配置发现覆盖多个客户端
MCPorter 会读取项目和用户配置,并从 Cursor、Claude Code、Desktop、Codex、Windsurf、OpenCode 和 VS Code 导入 MCP servers。最小的 `config/mcporter.json` 以 `mcpServers` 映射 server 名称和 URL。配置文件支持 JSONC、`${VAR}`、`${VAR:-fallback}`、`$env:VAR`、HTTP 和 stdio、OAuth、工具过滤与生命周期策略。
README 特别说明不支持某些客户端使用的 `${env:VAR}` 形式,会拒绝它而不是原样发送。接入前应验证配置优先级、环境变量展开、导入来源和凭证位置,避免把开发机上的 server 意外带进自动化环境。
Runtime API 适合长流程
需要显式定义 server、复用连接或连续调用时,可以使用 `createRuntime()`。README 示例创建名为 context7 的 HTTP server,调用 `runtime.listTools('context7')`,最后在 `finally` 中执行 `runtime.close()`。单次调用可以使用 `callOnce()`,`createServerProxy()` 则把工具名映射为 camelCase 属性,并提供 text、Markdown、JSON、image 和 raw-content helpers。
openclaw项目中,这里的验收点是生命周期。连续调用时观察连接是否复用,异常时确认 close 仍被执行,代理生成的方法名与原始 MCP tool 名称是否对应。对图像和 raw content 还要验证消费者是否能正确处理返回类型。
三种协议与交互请求
MCPorter 支持 stdio、Streamable HTTP 和 legacy SSE server,并会按 server 协商当前 `2026-07-28` 协议或 legacy revision。legacy 连接会声明 client elicitation capabilities;交互式 CLI 可以回答表单和 URL 请求,无头或 daemon 管理的调用则会拒绝,并给出行动提示。
仓库 fixture 覆盖现代与 legacy server,CI 会通过 stdio 和 Streamable HTTP 做端到端路径测试。接入具体 server 时仍需观察协议协商、表单请求、断连重连和 daemon 生命周期,不能因为 fixture 通过就推导出每个外部服务都相同。
Chrome relay 与凭证边界
README 还描述了带 `--autoConnect` 的 Chrome DevTools 定义,以及 OpenClaw extension relay。MCPorter 会发现活动 relay endpoint,同时保留 `MCPORTER_CHROME_DEVTOOLS_RELAY_URL` 覆盖和旧的 `127.0.0.1:18799` fallback。Browser Relay Authentication v2 使用保留的 loopback socket,主机密钥不进入网络和子进程,并通过受操作系统保护的 preload handoff 提供临时授权。
路由默认是 `prefer`,`require` 会在 relay 不可用时 fail closed,`off` 保持原始 auto-connect。浏览器控制属于高权限能力,测试应使用专用浏览器配置,检查 relay 地址、子进程环境、认证失败和旧认证不会被重试。
安装、测试与 MIT 许可
可以用 `npx mcporter --version` 试运行,也可以 `brew install steipete/tap/mcporter` 或 `npm install -g mcporter`。README 要求 npm 安装使用 Node 24 或更新版本;源码开发命令是 `pnpm install --frozen-lockfile`、`pnpm check`、`pnpm test` 和 `pnpm docs:site`。
项目采用 MIT。许可不替代对远程 MCP server、OAuth provider、浏览器扩展和被调用工具的审查。正式接入前先固定 Node、pnpm 和 mcporter 版本,执行一个无敏感数据的 list、call、record、replay 流程,再检查配置、日志和凭证是否符合团队政策。
MCPorter 接入验收
MCPorter 接入团队工具时,应先建立无凭证的 fixture server,再加入 OAuth、远程 URL 和 stdio 子进程。执行 `list --brief` 保存签名,调用只读工具并请求 JSON,核对参数、返回类型和退出码。用 `createRuntime()` 连续调用后显式关闭,查看子进程、socket 和日志是否清理。配置测试覆盖 JSONC、环境变量 fallback、项目与用户优先级以及错误的 `${env:VAR}` 写法。用 record 与 replay 固定协议交互,升级后比较结果;Chrome relay 只在专用 profile 中验证 `prefer`、`require` 与 `off`。
该项目的验收记录应固定版本、配置和输入,分别观察启动、主流程、异常恢复与日志输出,只有结果可重复时才进入下一阶段。
openclaw项目中,部署记录还应包含具体输入、运行版本、硬件或系统、配置文件和观察结果。对成功路径与失败路径分别保存日志,检查异常后是否能回到可用状态。升级前后使用同一组测试数据和同一组命令,比较输出、耗时、资源和权限变化;若某项能力来自外部服务、模型、内核或插件,也要把该组件版本单独标出。这样的记录能让团队判断问题属于安装、配置、依赖还是项目本身,避免用一次顺利启动替代长期运行证据。
openclaw项目中,在实际记录中,还应把一次任务拆成准备、启动、主流程、异常和清理五个阶段。准备阶段核对依赖、权限、输入和目标;启动阶段确认版本、端口、设备或进程状态;主流程阶段保存关键输出和资源数据;异常阶段主动制造超时、断网、错误输入或组件重启,检查系统给出的错误是否可定位;清理阶段删除临时凭证、测试数据和缓存,并确认网络、设备或服务回到预期状态。对比不同版本时保持输入、配置和硬件不变,只有这样,结果才足以支持项目选型和升级判断。
这一步还要核对实际产物是否与记录一致:安装包、镜像、固件、模型或生成客户端都应有明确版本。失败时先保留错误原文和环境信息,再改变一个变量重试。若任务涉及外部网络,记录请求目标、认证方式和返回状态;若任务涉及本地数据,确认临时文件、日志和缓存没有留下不必要内容。 将结果与项目 README 的具体接口逐项对照,并把差异写入版本记录。将结果与项目 README 的具体接口逐项对照,并把差异写入版本记录。将结果与项目 README 的具体接口逐项对照,并把差异写入版本记录。
编辑结论
它适合需要从终端、脚本或 agent 重复调用 MCP 工具的开发者,尤其适合把一次性 server 接入转成 typed client、专用 CLI 或可回放测试;不适合不审查远程工具权限就直接接入生产凭证的人。先用 `npx mcporter list` 查看工具签名,再对无敏感 server 执行一次 `call`,检查 JSON 输出、配置优先级、OAuth 存储和 `runtime.close()` 后的进程清理。
社区笔记