蓝的唤醒桥
README.md
# 蓝的唤醒桥
一个不调用 OpenAI API 的 MCP App 消息桥。它把定时或外部事件保存到自己的队列;ChatGPT 对话里的监听卡片发现事件后,用 MCP Apps 的 `ui/message` 开启一个正式新回合。
## 现在能做什么
- 在对话里用 `schedule_wake` 安排未来主动联系。
- 用 `/admin` 网页手动制造测试事件。
- 用持久 JSON 队列保存事件,重启不丢失。
- 监听卡片按“预留 → 注入上下文 → 发送消息 → 确认送达”处理,失败会释放重试。
- 不需要 `OPENAI_API_KEY`,也不包含任何 OpenAI API SDK。
## 本机启动
需要 Node.js 20 或更新版本。
```bash
npm install
cp .env.example .env
# 编辑 .env,至少设置两个不同的长随机密码
npm run build
npm start
```
检查:打开 `http://localhost:8787/health`,应看到 `{"ok":true}`。测试管理页在 `http://localhost:8787/admin`。
## 接入 ChatGPT
ChatGPT 无法访问 `localhost`,需要把 8787 端口暴露为公网 HTTPS 地址。可以先使用 Secure MCP Tunnel 或你已有的隧道,之后再决定是否部署服务器。
在 ChatGPT 的开发者模式中新建 MCP 插件,服务器地址填写:
```text
https://你的公网地址/mcp?token=你的BRIDGE_TOKEN
```
连接后:
1. 让 ChatGPT 调用“打开蓝的唤醒桥”。
2. 在卡片中点击“开始监听”。
3. 让 ChatGPT 安排一分钟后主动联系,或从 `/admin` 建立测试事件。
4. 保持对话和卡片打开,等待事件进入对话。
升级到 0.1.3 后请在 ChatGPT 里**删除并重新添加**这个连接器,再开新对话。UI 资源 MIME 为 MCP Apps 标准 `text/html;profile=mcp-app`(不再使用 `text/html+skybridge`)。模板 URI 仍是 `ui://widget/listener-v3.html`。
## 诊断 Failed to fetch template
服务会把每一条 MCP HTTP / JSON-RPC 请求写到控制台和 `data/mcp-http.log`。
重点看有没有 `resources/read`:
- **有 `resources/read` 且 status 200**:模板已从本机返回,若 ChatGPT 仍报错,就是它前端 `ecosystem/widget` 快照的问题,需要重连连接器。
- **完全没有 `resources/read`**:ChatGPT 没有向你的服务器要模板,只打了 `tools/call`。这时请确认连接器已重连,且日志里 `bridge_listener_open` 的 `_meta.openai/outputTemplate` 为 `ui://widget/listener-v3.html`。
- **`resources/read` 401 / 406**:token 没带上,或 Accept 头被拒绝;0.1.2 会补全 Accept 并记录 `acceptPatchedFrom`。
## 安全与限制
- `BRIDGE_TOKEN` 保护 MCP;`ADMIN_TOKEN` 保护测试事件接口,不要使用相同密码,也不要提交 `.env`。
- HTTP 诊断日志只记录 `hasQueryToken`,不会写入 query 参数或 token 原文。
- 监听卡片在手机后台可能被系统暂停;恢复页面后会继续读取尚未送达的事件。
- 这不是系统推送。卡片完全关闭时事件只会在后台排队,直到监听恢复。
- 当前为单人、单队列版本。不要把地址或 token 分享给别人。
## 无 API 费用说明
模型回合发生在用户已有的 ChatGPT 会话和订阅中。这个服务只保存事件、提供 MCP 工具和监听卡片,不向 OpenAI API 发请求。
This server cannot be deployed
Maintenance
ActivityMaintained
ResponsivenessNo issues