Skip to content

MCP 配置

MCP (Model Context Protocol) 是标准化的工具调用协议,本文对照 config 默认配置(config/config.jsgetDefaultConfig(),对应提交 5351e7d7)的 mcp 段与 builtinTools 段编写。

mcp 基础配置

yaml
mcp:
  enabled: true   # 启用 MCP
  timeouts:       # MCP 超时配置(毫秒),单个服务器配置中的 timeouts 字段可覆盖全局值
    connect: 30000      # 连接超时
    request: 1800000    # 请求超时:30 分钟(image_create 等长耗时工具)
    sseConnect: 15000   # SSE 连接超时
    sseEndpoint: 2000   # SSE endpoint 等待超时
    startup: 5000       # 进程启动超时
    ping: 5000          # ping 超时
    heartbeat: 30000    # 心跳间隔
    terminate: 3000     # 进程强制终止超时
字段类型默认值说明
mcp.enabledbooleantrue启用 MCP
mcp.timeouts.connectnumber30000连接超时(毫秒)
mcp.timeouts.requestnumber1800000请求超时(毫秒,默认 30 分钟)
mcp.timeouts.sseConnectnumber15000SSE 连接超时(毫秒)
mcp.timeouts.sseEndpointnumber2000SSE endpoint 等待超时(毫秒)
mcp.timeouts.startupnumber5000进程启动超时(毫秒)
mcp.timeouts.pingnumber5000ping 超时(毫秒)
mcp.timeouts.heartbeatnumber30000心跳间隔(毫秒)
mcp.timeouts.terminatenumber3000进程强制终止超时(毫秒)

历史页面更正

本页旧版书写的 mcp.parallelExecution / mcp.timeout / mcp.security / mcp.permissions / mcp.logging / mcp.cache 在默认配置中均不存在,已删除。并行工具执行的真实配置是 tools.parallelExecution(见 功能配置)。外部 MCP 服务器列表不是 config.yaml 内容,而是 data/mcp-servers.json 文件(src/mcp/McpManager.jsMCP_SERVERS_FILE 常量指向该路径)。

外部 MCP 服务器

配置文件:data/mcp-servers.jsonMcpManager 加载源)。该文件结构由管理器读写,页面示例以实际文件为准,此处不再贴出虚构的 servers 键结构。接入方式建议通过管理面板的「MCP 服务」页操作。

MCP 服务端暴露模式

除了作为 MCP 客户端接入外部服务器,本插件还可作为 MCP 服务端,将内置工具以标准 MCP 协议通过 HTTP 暴露给外部 MCP 客户端(如 Claude Desktop、Cline 等),由 src/services/routes/mcpServerRoutes.js 实现。默认配置:

yaml
mcp:
  server:
    enabled: false   # 是否启用 MCP Server 暴露(默认关闭)
    apiKey: ''       # Bearer Token 鉴权密钥,留空则无法访问

配置参数

参数类型默认值说明
mcp.server.enabledbooleanfalse是否对外暴露内置工具,需显式设为 true 才可访问
mcp.server.apiKeystring''Bearer Token 鉴权密钥,用于校验客户端请求

API Key 自动生成

在管理面板中开启 MCP Server,或调用后端接口生成密钥时,系统会自动生成形如 mcp-<48位十六进制> 的密钥并同时启用服务端。

访问端点

服务端路由挂载于插件 Web 服务的 <mountPath>/mcp(默认 mountPath/chatai,即端点为 /chatai/mcp),支持两种传输模式:

传输模式方法与路径说明
Streamable HTTP(推荐)POST /(即 /chatai/mcp单端点直接收发 JSON-RPC,initialize 响应返回 Mcp-Session-Id
SSEGET /sse + POST /message?sessionId=xxxGET /sse 建立事件流并下发 message endpoint,客户端经 POST /message 发送请求

此外 GET /(即 /chatai/mcp)返回服务端状态信息(工具数量、活跃会话数、支持的传输列表等)。所有端点均需通过鉴权中间件。

鉴权方式

所有请求必须在 HTTP 头中携带 Bearer Token:

Authorization: Bearer mcp-xxxxxxxxxxxxxxxxxxxxxxxx

鉴权中间件的校验顺序(源码 mcpAuthMiddleware):

  1. mcp.server.enabled 不为 true → 返回 403MCP Server 未启用)。
  2. 若未配置 apiKey → 返回 500未配置 API Key)。
  3. 若 Token 缺失或与 apiKey 不匹配 → 返回 401鉴权失败)。

使用场景与安全注意事项

  • 使用场景:将插件的 QQ 操作、群管理、搜索、文件等内置工具复用给外部 Agent/IDE,实现跨客户端的统一工具能力。
  • 安全建议
    • apiKey 等同于访问凭证,请妥善保管,避免提交到公开仓库或日志。
    • 内置工具中包含群管理、文件读写等高权限操作,对外暴露前请评估调用方可信度。
    • 非必要时保持 mcp.server.enabled: false,仅在需要对外集成时临时开启。
    • 建议仅在内网或经反向代理加鉴权的环境下暴露该端点。

内置工具配置 builtinTools

builtinTools 是独立的顶层段(不在 mcp 下),默认配置:

yaml
builtinTools:
  enabled: true            # 启用内置工具
  allowedTools: []         # 允许的工具列表,空数组表示允许所有
  disabledTools: []        # 禁用的工具列表
  dangerousTools:          # 危险工具需要确认
    - kick_member
    - mute_member
    - recall_message
    - mute_all
    - set_group_admin
    - set_group_card
    - set_group_title
    - set_group_name
    - send_group_notice
    - delete_group_notice
    - write_file
    - delete_file
    - move_file
    - copy_file
    - create_directory
    - execute_command
  dangerousToolsExcluded: []   # 用户显式豁免的工具
  allowDangerous: false        # 是否允许危险操作
  approvalMode: 'auto'         # 审批模式
  approvalTimeoutMs: 60000
  approvalLowRiskTools: []
  approvalMediumRiskTools: []
  approvalHighRiskTools: []
  approvalBypassTools: []
  approvalAllowSessionBypass: true
  approvalSessionBypassMaxRisk: 'medium'
字段类型默认值说明
enabledbooleantrue启用内置工具
allowedToolsarray[]允许的工具列表,空数组表示允许所有
disabledToolsarray[]禁用的工具列表
dangerousToolsarray见上方 16 项危险工具需要确认
dangerousToolsExcludedarray[]用户显式豁免:最终生效名单 = (内置默认 ∪ dangerousTools)− dangerousToolsExcluded
allowDangerousbooleanfalse是否允许危险操作
approvalModestring'auto'审批模式;ToolApprovalService 合法值为 'ask' / 'auto' / 'confirm_all' / 'yolo',非法值归一为 'auto'
approvalTimeoutMsnumber60000审批超时(毫秒)
approvalLowRiskToolsarray[]低风险审批工具列表
approvalMediumRiskToolsarray[]中风险审批工具列表
approvalHighRiskToolsarray[]高风险审批工具列表
approvalBypassToolsarray[]绕过审批的工具列表
approvalAllowSessionBypassbooleantrue允许会话级豁免(!== false 判断)
approvalSessionBypassMaxRiskstring'medium'会话豁免允许的最高风险级('low' / 'medium' / 'high',非法值归一为 'medium'

关于 enabledCategories

config.yaml 实例中出现过 builtinTools.enabledCategories 列表,该项不在默认配置中。工具类别启用逻辑现由 data/skills.yamlskills.sources.builtin.categories / getEnabledCategories() 承载(src/services/skills/SkillsConfig.jsSkillsLoader.js),类别管理请在面板的「内置工具」页操作。

完整示例

yaml
mcp:
  enabled: true
  timeouts:
    connect: 30000
    request: 1800000
    sseConnect: 15000
    sseEndpoint: 2000
    startup: 5000
    ping: 5000
    heartbeat: 30000
    terminate: 3000
  server:
    enabled: false
    apiKey: ""

builtinTools:
  enabled: true
  allowedTools: []
  disabledTools: []
  dangerousToolsExcluded: []
  allowDangerous: false
  approvalMode: auto
  approvalTimeoutMs: 60000

下一步

基于 MIT 许可发布