qq-onebot-mcp
Enables MCP hosts to bridge with QQ via NapCat/OneBot 11, allowing whitelisted private messages to reach an agent with full tool access while group mentions are answered by a sandboxed pure LLM without system access.
README
qq-onebot-mcp
轻量 MCP server:把 QQ(NapCat / OneBot 11)接入任意 MCP 宿主(DSH、Claude、Cursor…)。
零 npm 依赖,纯 Node.js ≥ 20,仅用内置 WebSocket。
- 私聊(白名单老大)→ 消息进 inbox → 宿主 agent 处理(完整工具权限)→ 回复。
- 群聊 @机器人(白名单群)→ 桥直接用 LLM API 回答,不经 agent、不碰本机。
架构
QQ 老大 ──私聊──▶ NapCat(QQ小号) ──OneBot11/WS:3001──▶ qq-mcp-server.mjs ──MCP──▶ 宿主 agent
▲
(inbox / 工具)
| 层 | 文件 | 职责 |
|---|---|---|
| 接入 | NapCat | QQ 协议 → OneBot 11(WS 3001) |
| 桥 | qq-mcp-server.mjs |
MCP server:工具、排他锁、inbox |
| 桥 | onebot.mjs |
OneBot WS 客户端(零依赖) |
| 桥 | group_llm.mjs |
群聊纯 LLM 直答 |
| 唤醒 | qq-listener.mjs |
常驻监听 + 注入宿主席位(可选闭环) |
| 控制 | qqctl.mjs |
进程生命周期(start/stop/status) |
快速开始
- NapCat:装好并有 QQ 小号登录,开启 OneBot WS(默认
ws://127.0.0.1:3001)。 - 配置:
cp .env.example .env,填QQ_BOT、QQ_ALLOWED_SENDERS(可加LLM_API_KEY开群聊)。 - 注册 MCP:宿主指向
qq-mcp-server.mjs(stdio)。DSH 用dsh-bundle/模板,见INSTALL-DSH.md。 - 上号:告诉 agent「上QQ号」→ 按
skills/qq-online/SKILL.md走 attach → 等消息 → 回复。
| 环境变量 | 必填 | 含义 |
|---|---|---|
QQ_BOT |
✅ | 机器人 QQ 号 |
QQ_ALLOWED_SENDERS |
✅ | 私聊白名单,逗号分隔 |
ONEBOT_WS_URL |
NapCat WS 地址(默认 ws://127.0.0.1:3001) |
|
QQ_ALLOWED_GROUPS |
静态群白名单(留空=动态) | |
LLM_API_KEY / LLM_BASE_URL / LLM_MODEL |
群聊直答用 |
.env已 git 忽略,绝不提交。
MCP 工具
| 工具 | 说明 |
|---|---|
qq_attach / qq_detach |
排他占用 / 释放桥(文件锁,跨宿主;崩溃残留自动抢占) |
qq_wait_inbox |
阻塞等私聊(零轮询,推荐循环用) |
qq_poll_inbox |
取 inbox(可设超时) |
qq_send |
回复当前对话者(仅白名单) |
qq_status |
桥状态 |
qq_get_agent_profile |
读 AGENTS.md 角色设定 |
待机模式:server 启动不连 NapCat,qq_attach 才连、qq_detach 断开 —— 零资源占用。
全自动闭环(可选)
想让 QQ 消息自动唤醒 agent(不用每次喊「上号」):以独立进程跑 qq-listener.mjs:
DSH_API_URL=http://127.0.0.1:3080 DSH_SESSION_ID=<session-id> \
node qq-listener.mjs <tag> <workdir> 0
QQ 消息 → 监听器(wait_inbox) → 写入 <workdir>/inbox/ + POST http://127.0.0.1:3080/api/session.prompt
│
agent 自动醒来处理 → <workdir>/outbox/ → qq_send 回复
- 监听器独立于 agent 会话常驻;
session.prompt(mode: queue)把消息注入宿主会话触发回合。 - 回复放
<workdir>/outbox/*.json({type:"send", message}),监听器发送(无 chat target 时直连 OneBot WS)。 - 优雅停止:
<workdir>里写stop.flag。
⚠️
session.prompt无鉴权且仅限回环,只在本机信任环境使用。
安全
- 私聊:仅白名单;陌生私聊丢弃。
- 群聊:纯 LLM,永不接触本机文件/命令。
qq_send只能回当前对话者(白名单内)。- 白名单用户拉机器人进群 → 自动加白并公告。
个性化
编辑 AGENTS.md(人设/职责/安全边界),桥每会话重新加载,无需重启。
本地隐私(如重要人物关系)可放
data/(git 忽略)并在AGENTS_MD里指向它 —— 不上 GitHub。
动态会话发现(闭环)
监听器不再写死 DSH_SESSION_ID:每次收到消息先调 session.list 找 running + 标题含 上号/QQ/布卡 的会话,找不到再回退 env。这样「上号」会话被替换/重开后闭环依然生效。
开发
npm test # 全部入口语法检查
文件
├── qq-mcp-server.mjs # MCP server(主入口)
├── onebot.mjs # OneBot WS 客户端
├── group_llm.mjs # 群聊 LLM 直答
├── bridge.mjs # 独立触发桥(无 MCP 宿主)
├── bridge-acp.mjs # ACP 连接器(持久 DSH 会话)
├── qq-listener.mjs # 闭环监听器
├── qqctl.mjs # 进程控制
├── dsh-bundle/ # DSH profile bundle 模板
├── skills/qq-online/ # 「上QQ号」技能
├── INSTALL-DSH.md # 新用户自装指南
└── .env.example # 配置模板
License
MIT
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。