@bpos/mcp-bridge (1.0.0)
Installation
@bpos:registry=https://gitea.akhr-ai.com/api/packages/ChaiHao/npm/npm install @bpos/mcp-bridge@1.0.0"@bpos/mcp-bridge": "1.0.0"About this package
@bpos/mcp-bridge —— stdio ⇄ HTTP 的薄桥
只会起本地进程的 MCP host 用它连 BPOS 的 MCP 面。(系统设计 §10.8 最后一条)
多数 host 直接配「一个 URL + 一枚 Bearer」就能连,用不着这个包。有的 host 只会起一个 本地 stdio 进程——给它这一条命令:
BPOS_MCP_TOKEN=<接入令牌> npx @bpos/mcp-bridge --url https://<系统基址>/mcp/v1/desk
地址在「系统 › MCP 服务」的服务卡上复制;令牌由管理者造好当面交给你。
它做什么
host 那一侧是 stdio,系统那一侧是 Streamable HTTP,中间纯转发:
host ──stdio── 桥 ──HTTP(Bearer)── BPOS /mcp/v1/<服务>
连上来的那一刻现问一趟远端的 tools/list 与 resources/templates/list,逐件挂一个转发;
serverInfo 与 instructions 也用远端那一份——桥是一根线,不是一台服务器,host 的界面上
摆的该是「bpos」。
它不做什么
- 不含业务逻辑,也不引
@bpos/mcp-contract。工具表从远端现问,不从契约包里读: 桥装在别人的机器上、升级节奏与系统不同步,照包里那一份注册的话,系统加了一件工具而桥没升版, 那一件在 host 里就是「不存在」——而不存在与「调用被拒」完全不同:前者根本没人会去调它, 也没有任何东西说得出少了什么。 - 不收
--token。命令行会被复制进聊天记录、贴进工单、截图发出去,进程表上也看得见它。 地址可以公开,令牌不行——所以它只走BPOS_MCP_TOKEN。 - 一个字都不写 stdout。那是协议本身的管子;报错走 stderr。
| 读的是 | 哪儿来 |
|---|---|
--url <地址> 或 BPOS_MCP_URL |
服务卡上「连接地址」那一格(命令行压过环境变量) |
BPOS_MCP_TOKEN |
管理者造好当面交给你的明文 |
两样缺哪一样都逐条报并说清怎么给,然后退 1。
包里发的是 TS 源
与另外两个包同一条理由(见 contract/README.md),加一条自己的:bin/mcp-bridge.mjs 是一行
JS,把 src/bridge.ts import 进来,由 Node 24 的类型擦除直接跑。所以 src/ 里
不许出现不可擦除的语法——参数属性、enum、namespace。tsc --noEmit 与 tsx 跑的用例
对这几样一律全绿,而 host 那一侧 npx 起它时 Node 当场 ERR_UNSUPPORTED_TYPESCRIPT_SYNTAX,
症状是「桥起不来」,离原因很远。tests/bridge.test.ts 最后一条真的起一趟那个入口,就为了钉住它。
跑
npm install
npm run typecheck && npm test
用例里有一趟真的:起一台 node:http 的假「系统」,让桥连上去,再让一个 Client 从桥的
stdio 那一侧进来,工具表、一次调用、一份资源各走一遍,并核每一条请求都带上了令牌。
Dependencies
Dependencies
| ID | Version |
|---|---|
| @modelcontextprotocol/client | 2.0.0 |
| @modelcontextprotocol/server | 2.0.0 |
Development Dependencies
| ID | Version |
|---|---|
| @modelcontextprotocol/node | 2.0.0 |
| @types/node | ^24.0.0 |
| tsx | ^4.19.0 |
| typescript | ^5.6.0 |
| zod | 4.4.3 |