指南

接入 MCP 服务器

用 mcp-client 扩展把外部工具与资源带进对话

MCP(Model Context Protocol)服务器是标准化的外部工具来源:抓网页、操作桌面、读写记忆等。koishi-plugin-ishiki-mcp-client 扩展把一组 MCP 服务器的工具接入 Ishiki,并以 mcp:// 协议暴露其资源。

开始接入

启用扩展

扩展是独立 Koishi 插件。在 Koishi 插件市场搜索并安装 koishi-plugin-ishiki-mcp-client,再到「插件配置」启用:

plugins:
  ishiki-mcp-client: {}

然后在目标 profile 中声明依赖它:

extends:
  mcp-client: {}     # 只写包名即启用,无需 config

extends 的键是扩展名称

profile 缺少某个已声明的扩展服务时会停在等待态并报 missing required service;插件装好、Koishi 重载后自动装配。

写 mcp.json

配置文件有两个位置:

  • profile 基线:<dataPath>/.mcp.json,对所有 profile 生效的默认配置。
  • profile 覆盖:<profile 目录>/mcp.json,该 profile 存在此文件时整体替换基线(不是合并)。

最小示例(stdio 方式,本地拉起子进程):

{
  "$schema": "../../node_modules/koishi-plugin-ishiki-mcp-client/resources/mcp.schema.json",
  "mcpServers": {
    "fetch": {
      "command": "uvx",
      "args": ["mcp-server-fetch"]
    }
  }
}

$schema 指向包内 schema,编辑器可获得补全;路径按你的 Koishi 应用实际目录调整。

三种连接方式

type字段适用
stdio(默认,可省略 type)command(必填)、args、env、cwd本地命令行服务器,最常见
httpurl(必填)、headers远程 Streamable HTTP 服务
sseurl(必填)、headers旧版 SSE 服务

完整字段说明见参考:mcp.json。几个容易踩的点:

  • env 只覆盖列出的键,不继承父进程的其余环境变量。
  • timeout 是单次工具调用的毫秒上限,0 表示不限,不写用 SDK 默认。
  • instructions: true(默认)时,服务器声明的使用说明会注入系统提示词;只想拿工具不要说明文,设为 false。

控制哪些服务器生效

三个层面的优先级,从高到低:

  1. enabledServers(全局白名单):列出的服务器强行启用,压过一切禁用设置。
  2. disabledServers(全局黑名单):列出的服务器一律不连。
  3. 单服务器 enabled: false:单独停用。
{
  "mcpServers": { "fetch": { "…": "…" }, "danger": { "…": "…", "enabled": false } },
  "disabledServers": ["fetch"],
  "enabledServers": []
}

上例中 fetch 因进黑名单而不连;danger 虽自身 enabled: false,但只要把名字加进 enabledServers 就会被强行启用。排障时可利用这个机制不改动服务器定义临时启停。

工具如何出现在模型面前

  • 命名:默认 <服务器名>_<工具名>,如服务器 windows-mcp 的工具 Screenshot 暴露为 windows-mcp_Screenshot。服务器配置里的 prefix 可以改写:false 直接使用原始工具名,字符串则替换服务器名("prefix": "win" → win_Screenshot)。
  • 排除:服务器配置里的 deny 按原始工具名排除,如 "deny": ["Screenshot"];匹配发生在加前缀之前。
  • 发现:连接成功后立即拉取工具列表;服务器运行中变更工具列表(如动态开关能力)会自动刷新。
  • 冲突:工具名与内置工具、其它扩展或另一台服务器重名会让回合失败(ToolConflictError);去掉前缀或共用自定义前缀时要确认各服务器的原始工具名不重复。
  • 每个工具的输出经统一的输出包装器处理:媒体归档为 artifact,超长文本截断,规则见参考:模型工具。

验证与排错

启动后日志逐台报告:

mcp server "fetch" connected
mcp pool for <profile 目录>: 2/3 servers connected
现象原因处理
connection failed: …命令不存在、依赖未装、URL 不通手动执行 command + args 验证;检查 env 是否漏了必要变量
2/3 connected 但少的那台无报错详情服务器自身启动失败用日志级别 3(DEBUG)重跑看子进程输出
工具在对话里不存在profile 没写 extends;或进了 disabledServers;或该 profile 用了自己的 mcp.json 覆盖了基线逐项核对
stdio 服务器反复崩溃子进程即起即崩单独跑该命令确认能常驻

On this page