首页/文档/MCP 进阶配置
使用文档

MCP 进阶配置

短答、关键词、斜杠命令、工具说明与使用成本的详细设计。

适用 核心 / WebUI 0.8.6核对 2026-10-29来源 MoeBot · da740d6

这套设计适合目前的 Pages 无服务器运行方式:保持异步预约,新增纯程序直接触发;每个消息事件最多一次模型请求,每次任务只尝试一个外部工具,不新建表、不启动常驻进程。关键词模式把一次工具请求和一次模型请求放在同一个事件里,因此工具超时仍可能用尽总时间预算。

五项改动

问题 实现
工具回答过长,进入历史后反复复述 输出默认限制 256 tokens,提示只说一句;发送前提取第一句,再限制为 120 个 Unicode 字符。未遵守提示也无法发长篇。
不想把工具回答带入后续聊天 默认开启忽略工具回答上下文;在已有历史查询结果中过滤 source=mcp,包含旧记录,不增加一次查询、不删除原记录。
模型说正在查,实际上没有调用 等待提示由模型根据问题和人格生成,只在任务保存成功后发送;程序追加 【使用了工具 - 服务名/工具名】,清除模型伪造的新旧格式标记。未选择工具时无论开关是否开启都不显示标记,常见虚假等待承诺仍会被拦截。
服务商说明诱导频繁调用 每个工具可开启自定义说明,完整替换原 description;同时删除输入结构中 description/title/examples 等说明性注释,保留真实参数约束。留空表示移除说明。
希望手动或关键词直接调用 每工具设置一个斜杠命令、JSON 参数模板及最多 4 条规则。直接执行时不让模型先判断,只调用一次模型生成短答。

0.7.1 的标记只标识本次选用的工具,不表示执行成功:异步等待阶段仍是预约;0.8.5 起自动续办,失败时保留用户消息触发路径,失败会在正文中说明;它也不证明网页内容或模型结论一定真实。模型仍可能编造事实或选择不合适的工具。要求可控调用时应选关键词模式或使用明确的斜杠命令。

忽略上下文开启后,模型将不能依靠上次工具回答来回答“上面那个呢”。原始工具资料始终只用于当前整理回合,不写入聊天历史或任务表。短答仍保留用于聊天记录和原有主动发言统计;通知不落库。用户把资料复制进聊天,仍按用户消息处理。

消息流程

flowchart TD
  A[收到 QQ 消息] --> B{清空或取消命令?}
  B -->|是| C[取消会话任务并处理命令]
  B -->|否| D{已配置的工具斜杠命令?}
  D -->|是| H[参数模板展开与 JSON Schema 校验]
  D -->|否| E{工具触发模式}
  E -->|关键词| F{规则命中且无歧义?}
  F -->|是| H
  F -->|未命中| G[原来的核心/插件/普通聊天/主动发言流程]
  F -->|多个匹配| X[提示指定斜杠命令,不调用工具]
  E -->|异步| I{原子领取到上一条消息的待办?}
  I -->|是| K[执行一个 MCP 工具]
  I -->|否| J[原有 AI 回合:至多一次模型调用]
  J --> L{本轮模型提交有效工具决策?}
  L -->|是| M[保存一个待办,发送模型等待提示和工具名标记]
  L -->|否| N[普通回复或保持沉默,不创建任务]
  H --> O{会话任务槽可用且冷却结束?}
  O -->|否| P[提示忙碌或冷却,不调用工具和模型]
  O -->|是| K
  K -->|工具成功| Q[只将有界工具结果加入当前回合]
  Q --> R[至多一次模型调用生成一句话]
  R --> S[限制长度,添加工具名标记,保存简短正文]
  K -->|失败| T[短错误通知,不调用模型]
  S --> U[任务标记 done,清空参数]
  T --> U

核心/插件命令优先权保留,工具斜杠命令不能占用它们的名字。在异步模式中,普通核心/插件命令仍可同时触发已有待办;/clear、/mcp-cancel 优先取消。手动工具命令遇到已有待办会提示占用,不覆盖或追加任务。

模型预约指令明确标出当前消息,要求只为当前消息新建任务,不能补办历史中的旧搜索。普通消息不通过关键词时,关键词模式不向模型提供 MCP 路由字段,也不访问 MCP 任务槽。

WebUI 配置

进入「MCP服务」。服务设置和每工具设置默认折叠,启停使用开关。变更仍通过「保存并部署」应用。

配置 默认 范围或作用
工具触发模式 异步 deferred 可切换 keyword;切换部署产生新配置 generation,旧任务不再执行
忽略工具回答上下文 开 同时过滤旧 source=mcp 记录
显示程序生成的工具状态 开 只在选用工具时显示,标记不写入模型历史
工具回答 Token 上限 256 64~512,包含模型结构化回答开销
工具回答字符上限 120 40~240,只取第一句,不输出长 URL/列表
直接调用冷却 60 秒 1~600 秒,按会话、从任务启动时间起算;跨工具共用

Token 太小可能截断模型 JSON;此时用一句简短资料节选兜底并注明未经核验,不追加模型请求。AI 总开关关闭时,明确的直接工具调用可执行并返回资料节选,不调用模型。

Exa 搜索示例

工具:web_search_exa。具体必填参数以检测到的参数结构为准;当前服务要求 query 和 objective,因此不能只填写 query。

斜杠命令:/search

自定义说明建议:

查询公开网页中的实时信息。仅在用户明确要求联网,或需要核实最新事实且上下文没有答案时使用;闲聊、已有答案追问不用。numResults 填 3,objective 简短描述要核实的事实。一次查询足够,不因工具说明要求而继续调用。

参数模板:

{
  "query": "{{input}}",
  "objective": "查询与用户问题直接有关的最新可靠信息,优先原始来源;只提取足以写一句简短回答的事实。",
  "numResults": 3
}

任何模式下,/search 冰雪奇缘最新官方消息 都直接调用。群聊是否能收到不带 @ 的命令,仍取决于 QQ 全量消息订阅。

关键词模式示例:规则类型选「整条正则」,开启「必须 @ 机器人」:

^(?:帮我搜索|帮我查一下|搜索)\s+(.+)$

它会命中 搜索 冰雪奇缘最新官方消息,把捕获的文本填到 query;不会命中 我刚才说搜索什么来着。普通前缀规则 帮我搜索 要求后面是空格、冒号或结束,防止误匹配 帮我搜索功能怎么用。请先用「本地触发预览」查看命中和展开参数,预览不会调用远程服务;线上还会校验范围、完整参数类型和任务状态。

正则使用 RE2 而非原生回溯引擎,不支持环视和回溯引用。每条最长 160 字符、最多 9 个捕获组;单项计数重复不超过 64、保守总展开量不超过 256;启用规则总数最多 24,正则最多 8;只匹配最多 512 字符的消息。前缀或正则匹配前会忽略引用、引号、代码、否定开头的消息。规则不能理解所有复杂语义;避免 .* 之类宽泛规则,开启必须 @ 可进一步降低误触发。

其他工具

JSON 模板按结构替换字符串,不拼接 JSON 源码、不执行 JavaScript:

变量 含义
{{input}} 斜杠命令后面的文字;前缀后文字;正则第 1 个捕获组(无组则整条)
{{message}} / {{match}} 整条消息 / 匹配内容
{{1}}~{{9}} 正则捕获组,替换为字符串
"{{number:input}}" / "{{number:1}}" 输入文字 / 第 1 组转换成数字,必须作为整个模板值
"{{boolean:input}}" / "{{boolean:1}}" 输入文字 / 第 1 组转换成 true/false,必须作为整个模板值

数值工具示例:命令 /calc,正则 ^计算 (\d+)$,参数 {"value":"{{number:input}}"};/calc 21 和 计算 21 均传入数字 21。直接使用 {{1}} 的模板依赖捕获组,只适用于正则;希望与斜杠命令共用时优先采用 {{input}}。缺失参数、类型错误、多个不同匹配都不会发出工具请求。单个必填字符串字段的工具会自动提供 {{input}} 默认模板,复杂工具需要明确配置。

状态、成本和故障边界

  • 复用 mcp_tasks 现有行:直接模式通过一个条件 UPSERT 原子占槽,再检查取消状态、执行、完成。活动任务互斥,冷却和最近来源消息 ID 防止短时间重复调用;进程中断不自动重试。它不是无限期的消息去重日志。
  • 未命中关键词不查询这个表;普通聊天的原有上下文读写、主动发言判断仍然存在。异步模式的条件领取查询保持原样。不能把“没有增加上下文查询”理解为零 D1 消耗。
  • 忽略上下文在原有最近 N 条消息的结果中过滤,不另查一批补满 N 条。没有数据库迁移或新表。直接任务的真实读写要按 D1 rows_read / rows_written 计量,不能简单按 SQL 次数算行数。
  • 同一事件总预算 25 秒。MCP 默认 8 秒、可设到 12 秒;请求初始化和调用共用工具预算,随后一次模型请求和 QQ 发送共用剩余时间。慢服务可能超时;不会靠增加第二次模型请求来补救。
  • 免费层 CPU 为纯计算时间,网络等待与它不同;RE2 和输入边界降低风险,但校验、JSON、签名、冷启动仍有成本。本地通过测试不能证明所有线上请求都低于 10ms,参见 官方限额与本项目说明。
  • 【使用了工具 - …】 是工具名标记,具体执行结果见正文;模型失败时仍可能是未经核验的节选。事实幻觉和外部错误信息无法仅靠短答或状态标记根除。

兼容与参考

核心能力新增 mcpControls: 1;新面板按后端能力显示,新配置嵌入可恢复的部署包。前端发送 mcpPlan.version: 2,后端拒绝会丢弃已有自定义配置的旧客户端保存;带高级工具配置时也拒绝部署到不支持它们的旧核心。重新检测工具保留自定义说明、命令、模板、规则;参数结构变化时停用该工具供检查。

参考 AstrBot 的 tool_loop_agent_runner.py::_materialize_large_tool_result 对工具原文设上限的思路;它会把超限结果转存文件供之后读取,本项目没有移植文件存储或追加读取工具。MaiBot 的 host_llm_bridge.py::_build_tool_result_item 将工具内容作为独立的工具结果项,其“汇总”主要是拼接内容,并不自动保证短答。本项目使用本回合临时资料、显式 source 标识和历史过滤,适应无服务器单次请求与现有 D1 结构。

文档来源

正文由 AnnaofArendelle/MoeBot/docs/mcp-controls.md 的 Markdown 快照构建,来源提交 da740d62042c。原仓库为私有,这里展示经审阅的文档内容。

搜索文档

在这里查找使用方法和开发指南。