MicroHEROX/dsh-exa-mcp:在 DeepSeek Harness 中挂载 Exa Search

前言

在 DeepSeek Harness(DSH)中做智能体开发时,联网搜索和网页抓取是常见需求。MicroHEROX/dsh-exa-mcp 是一个面向 DSH 的第三方插件,它通过 DSH CLI 自带的 @deepseek-ai/dsh-mcp-client 桥接器,把 Exa 的远程 MCP endpoint https://mcp.exa.ai/mcp 挂载进来,并将 Exa 提供的工具注册为 exa 命名空间下的本地 agent 工具。

下面介绍它做了什么、如何安装、如何配置 API key,以及需要注意的限制。

插件定位

  • 仓库:MicroHEROX/dsh-exa-mcp
  • 许可证:MIT
  • 版本:0.1.0
  • 形态:纯配置补丁层,无构建步骤,不引入额外的运行时 API
  • 安装影响:安装后仅向 composed cordis.yml 添加一行
  • 上游:连接 Exa 托管的 MCP endpoint https://mcp.exa.ai/mcp,传输方式为 Streamable HTTP

核心能力

工具注册

插件通过 @deepseek-ai/dsh-mcp-client 连接 Exa MCP endpoint,并把 Exa 提供的工具注册为 mcp__exa__* 形式的本地工具。

常见工具包括:

mcp__exa__web_search_exa
mcp__exa__web_fetch_exa
mcp__exa__web_search_advanced_exa
mcp__exa__agent_run

其中 mcp__exa__agent_run 需要 Exa API key。

匿名与 API key

  • 未设置 EXA_API_KEY 时,插件以匿名方式使用 Exa 免费额度,通常是限流且仅提供基础工具。
  • 设置 EXA_API_KEY 后,插件会在加载时自动附加 x-api-key,用于解锁高级搜索和 Exa Agent 等能力。
  • 如果 EXA_API_KEY 不存在,插件会回退到匿名模式,不会发送 undefined 这类异常 header。

API key 只应放在环境变量中,禁止写入 patch 文件。

自动重同步

当 Exa 侧发出 tools/list_changed 通知后,插件会重新同步工具列表。

搜索任务超时

插件会配置:

toolCallTimeoutMs: 180000

用于支持较长的搜索和研究任务。

URL 参数配置

可以通过覆盖 mcp-exa 行的 url,使用 URL 参数配置工具白名单或默认搜索类型,例如:

?tools=web_search_exa,web_fetch_exa,agent_run
?defaultSearchType=fast

这类配置适合在 patch 层中修改 mcp-exa 行后生效,修改后可通过 HMR 重连,而不需要重启整个 dsh 进程。

安装与启用

作为插件 bundle 安装

仓库提供的安装命令如下:

npm install -g pnpm
dsh plugin --profile web add github:MicroHEROX/dsh-exa-mcp
dsh web

这里的 pnpm 用于安装 git 依赖。安装时通过 files 字段处理依赖,docs/ 不会安装到运行时,实际安装的核心文件是 cordis.patch.yml

安装后可以先检查 bundle 层是否出现:

dsh --profile web --dump-config | grep -A2 '== dsh-exa-mcp'

如果通过 github: 安装时网络不稳定,可能出现静默失败,或 dsh.profile.bundles 未同步的情况。此时需要按 README 检查并修复 profile 中的 bundle 配置。

使用 patch 覆盖

如果不想安装 bundle,也可以临时使用 patch 覆盖:

dsh web --patch /path/to/dsh-exa-mcp/cordis.patch.yml

注意:bundle 安装和 --patch 覆盖不要同时使用,否则会触发:

duplicate loader entry id: mcp-exa

两种启用方式选择其中一种即可。

配置 Exa API key

匿名方式可以用于基础搜索和抓取,但限流且工具受限。需要更高限额或高级能力时,创建 Exa API key,并设置环境变量。

macOS / Linux:

export EXA_API_KEY="your-key"

Windows PowerShell:

$env:EXA_API_KEY = "your-key"

插件在加载时会自动检测:

  • EXA_API_KEY 已设置:发送 x-api-key
  • EXA_API_KEY 未设置:匿名回退

不要把 API key 写入 patch 文件。key 应只保存在环境变量中。

典型用法

安装或 patch 生效后,启动:

dsh web

然后向 agent 发送类似请求:

Use Exa to find the latest release notes of the DeepSeek Harness project on GitHub and summarize them.

执行时,可以确认模型是否调用了 Exa 相关工具,例如:

mcp__exa__web_search_exa
mcp__exa__web_fetch_exa

如果任务需要高级搜索或 Exa Agent,需要先设置 EXA_API_KEY

适用场景与注意

适合谁使用

适合在 DSH 中希望给 agent 增加 Exa 搜索和网页抓取能力的开发者。尤其是已有 dsh profile、想通过配置层快速接入远程 MCP endpoint 的场景。

运行权限

插件加载后会以当前 dsh 进程权限运行。安装前建议先检查源码、配置补丁内容和 MIT 许可证。

不支持的能力

  • 不支持 OAuth 登录流。DSH 的 MCP bridge 没有 OAuth 流程,需要使用 Exa API key。
  • 只桥接 MCP tools,不桥接 Exa 的 MCP resources 或 prompts。
  • 不支持每次请求切换认证方式。EXA_API_KEY 的判断发生在配置加载或 HMR 重连阶段,而不是每次调用阶段。

常见失败点

  1. github: 安装可能因网络不稳定而静默失败,或 dsh.profile.bundles 未同步。
  2. bundle 安装和 --patch 同时使用会报 duplicate loader entry id: mcp-exa
  3. API key 误写入 patch 文件,会导致 key 泄露风险。
  4. 卸载后异常残留 dsh-exa-mcp,可能需要清理 profile 的 bundle 配置。

卸载

如果通过 bundle 方式安装,使用:

dsh plugin --profile <name> remove dsh-exa-mcp

如果之前使用 --patch,只需移除启动命令中的 --patch 参数,不会留下持久化配置。

如果异常残留 dsh-exa-mcp,可以从 profile package.jsondsh.profile.bundles 中移除对应条目。

链接

  • GitHub:https://github.com/MicroHEROX/dsh-exa-mcp
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜