项目/AI
AI · 运行中

博查 MCP 搜索插件(DSH)

给 DeepSeek Harness 写一个博查搜索 MCP 插件,替换掉内置的 SearXNG。

MCPDSHBoChaNode.js

它是什么

给 DSH(运行在 .223 上的 agent 程序,Web UI 在 127.0.0.1:19387)增加一个联网搜索工具 mcp__bocha__search。agent 可以直接调用博查搜索 API,得到中文长摘要,单次耗时 0.3–0.5s。

为什么这么做

最初想直接写一个 DSH 原生 search provider 插件来替换内置的 SearXNG,写完才发现走不通:DSH 的模块解析表在启动时就固定了,运行中安装的 host 插件 import 不到 @deepseek-ai/* 依赖,必须重启整个进程才生效,而这会中断当前对话、旧 GUI token 也失效。

所以改走 MCP 配置型 bundle:只往配置里 insert 一条 DSH 自带的 @deepseek-ai/dsh-mcp-client,再配一个独立的 Node stdio MCP server 调博查,安装即热生效,不用重启。原生 provider 代码留在 /root/plugins-src/dsh-bocha,将来重启 DSH 想切回原生 web_search 随时可以。

目前状态

运行中。MCP 协议单测(initialize + tools/list + tools/call)505ms 通过,实测问天气、查财报都能出结果。默认策略省钱优先:DSH 日常 web_search 仍走免费 SearXNG,博查只在要更准结果时手动调;余额已接进监控台,低于阈值手机提醒。

功能

  • 零依赖 Node 写的 stdio MCP server,单文件 server.mjs 走 JSON-RPC
  • 以 MCP 配置型 bundle 方式安装,不重启 DSH 即可热生效
  • 工具参数支持 query、count(1–10,默认 8)、freshness(noLimit/oneDay/oneWeek/oneMonth/oneYear)
  • API Key 存放在 /root/.dsh/secrets/bocha.key(600 权限),配置里只写路径
  • 保留原生 search provider 代码,将来重启后可切回 web_search
  • 博查余额接入监控台,每 15 分钟采样,低于 ¥5 / ¥2 手机提醒

技术栈

MCPNode.jsstdio JSON-RPCDSHBoCha APIYAML 配置

使用 / 部署教程

部署步骤

1. 准备 API Key 把博查 Key 写入 /root/.dsh/secrets/bocha.key,chmod 600。配置文件里只引用路径,不写明文 Key。

2. 放 MCP server 在 /root/plugins-src/bocha-mcp/server.mjs 写一个零依赖的 Node stdio MCP server,实现 initialize、tools/list、tools/call 三个方法,tools/call 里请求博查搜索 API 并返回结果。

3. 写 bundle 定义 同目录下放 package.json、cordis.patch.yml、locale、icon。cordis.patch.yml 里 insert 一条 @deepseek-ai/dsh-mcp-client(DSH 自带包,可原生解析),指向上面这个 stdio server。这是能热生效的关键:不新增需要 @deepseek-ai/* 解析的 host 插件。

4. 安装到 profile 在 profile /root/.dsh/profiles/web 里把它装成 @local/bocha-mcp,实际指向 link:/root/plugins-src/bocha-mcp。用 plugin_manager 安装,确认结果是 application: applied 且无 warning。

5. 验证

  • Tool.listTools 能看到 mcp__bocha__search,系统提示里出现 MCP server: bocha。
  • 跑一遍协议单测:initialize + tools/list + tools/call。
  • 实际问一句“上海今天天气”看返回。

6. 日常使用 agent 直接调 mcp__bocha__search,参数 query、count、freshness。默认只在对准确性有要求时手动用,平时搜索仍走免费的 SearXNG。

维护

  • 改完 server.mjs:在 plugin_manager 里禁用再启用 @local/bocha-mcp(或重启 DSH),否则改动不生效。
  • 查余额:curl -H "Authorization: Bearer <key>" https://api.bochaai.com/v1/fund/remaining。
  • 备份:/opt/homelab-git/sync.sh 的 .223 清单已包含 /root/plugins-src,每日 01:00 自动同步。

注意

  • Key 只存本机 secrets 目录,不进 homelab-git 备份;备份清单里只加了 /root/plugins-src。
  • 博查按次计费,一次联网提问约 2 次调用 ≈ ¥0.07,注意余额,低于阈值有 ntfy 提醒。
  • 改 server.mjs 后必须禁用/启用 bundle 让 MCP server 重启,否则跑的还是旧代码。