前言
作为一个重度 Claude Code 用户,最头疼的莫过于用第三方中转 API 时发现官方搜索工具失灵 。要么直接报错,要么静默失败,总之就是没法用。折腾了一下午,终于找到了一个比较完美的方案:MCP 服务器 + 用户级提示词注入,成功绕过了这个坑。
这篇文章会完整复盘整个过程,包括踩过的坑、犯过的错,希望能帮你少走点弯路。
一、问题背景:为什么第三方 API 搜索会失灵?
Claude Code 的官方搜索工具(web_search / web_fetch)依赖于 Anthropic API 的一些新协议特性,比如 tool_reference 模块。问题是,很多第三方 API 网关(中转站)还没来得及适配这些新协议,导致请求发过去直接返回 400 或者静默什么也不返回。
官方在 v2.1.70 更新日志里也提到了这个问题:
"修复了使用 ANTHROPIC_BASE_URL 指向第三方网关时的 API 400 错误------现在工具搜索能正确检测代理端点并禁用 tool_reference 模块。"
但即便更新到最新版,有些中转站依然不支持,毕竟适配进度全看服务商心情。
我遇到的具体现象:
-
让 Claude Code 联网搜索,工具调用后模型直接停止输出(空响应)
-
或者工具搜了但返回的内容是空的
-
没有任何错误提示,就是静默失败
二、可选方案对比
在动手之前,我梳理了四种可行的解决方案:
| 方案 | 原理 | 优缺点 |
|---|---|---|
| 换支持的中转站 | 直接换一个适配了协议的服务商 | 省心,但未必想换 |
| 换兼容性更好的工具 | 改用支持 OpenAI 协议的 Codex CLI / OpenCode | 治标不治本,习惯 Claude Code |
| 协议转换代理 | 自建中间层翻译请求格式 | 门槛高,维护麻烦 |
| MCP + 提示词注入 | 用 MCP 搜索服务器替代内置搜索 | ✅ 彻底绕过问题,灵活可控 |
我选择了方案四,核心思路就一句话:让 Claude Code 需要搜索时,强制走 MCP 通道,永远不碰内置搜索工具。
三、什么是 MCP?为什么用它?
MCP(Model Context Protocol) 是 Anthropic 推出的开放协议,允许 Claude Code 连接各种外部工具和数据源。你可以把它理解成"AI 的 USB 接口"。
MCP 搜索工具的优点:
-
不依赖官方搜索协议,直接 HTTP 调用第三方搜索 API
-
支持多种搜索引擎:Brave Search、Tavily、DuckDuckGo、SerpAPI 等
-
自定义程度高,API Key 用自己的,不走中转站
四、为什么选择 Tavily?
在众多搜索工具中,我选择了 Tavily,它有几个特别打动我的点:
4.1 专为 AI 设计
Tavily 不是传统意义上的搜索引擎,它是一个专为 AI Agent 和 LLM 优化的搜索 API。它返回的不是一堆网页链接,而是已经提取好、结构化好的内容摘要,直接喂给模型就能用。
4.2 开箱即用
注册就送每月 1000 次免费搜索额度,对于个人开发者完全够用。API 设计简洁,一个 POST 请求就能拿到高质量结果。
4.3 支持多种接入方式
-
原生 REST API
-
Python / JavaScript SDK
-
MCP 服务器(这正是我们需要的)
-
还有社区维护的各种中转代理
4.4 搜索结果质量高
它会自动做网页抓取、内容提取和相关性排序,返回的信息准确度和时效性都不错,特别适合"搜了就要用"的 AI 场景。
怎么获取 :直接去 tavily.com 注册账号,在 Dashboard 里就能拿到 API Key。如果你有朋友搭了 Tavily MCP 代理,也可以直接用人家的地址,省去自己部署的麻烦。
五、实战步骤:Tavily MCP + 提示词重定向
5.1 准备好 MCP 服务器地址
你需要一个 Tavily MCP 服务器的连接地址,通常长这样:
text
https://your-tavily-proxy.com/mcp
拿到地址和对应的 API Key 后,就可以开始配置了。
5.2 添加 MCP 服务器到 Claude Code(第一次踩坑)
我最开始直接改 ~/.claude.json 文件,把配置写成了这样:
json
"tavily-proxy": {
"url": "https://your-tavily-proxy.com/mcp",
"headers": {
"Authorization": "tvly-xxxxxxxxxxxxx",
"type": "http"
}
}
然后 /mcp 一查,报错:
text
[Error] [tavily-proxy] command: expected string, received undefined
根本原因 :对于 HTTP 类型的远程 MCP,必须显式声明 "type": "http"(官方别名是 "type": "streamable-http"),而且不能把 type 塞到 headers 里面。另外 Authorization 的值前面通常需要加 Bearer 前缀,具体格式看你用的代理服务要求。
正确的配置结构:
json
"tavily-proxy": {
"type": "http",
"url": "https://your-tavily-proxy.com/mcp",
"headers": {
"Authorization": "Bearer tvly-xxxxxxxxxxxxx"
}
}
5.3 又一个坑:项目级 vs 用户级作用域
我用命令行添加 MCP 时:
bash
claude mcp add --transport http tavily-proxy https://your-tavily-proxy.com/mcp --header "Authorization: Bearer tvly-xxx"
忘记加 --scope user,结果它被写到了 projects > C:/Users/xxx > mcpServers 下面(本地作用域,只在当前项目生效)。
更尴尬的是,我用 CC Switch 管理配置,它读的是顶层 mcpServers,项目级的它根本接管不到。
解决:
bash
# 先删掉
claude mcp remove tavily-proxy
# 重新加到用户全局作用域
claude mcp add --transport http --scope user tavily-proxy https://your-tavily-proxy.com/mcp --header "Authorization: Bearer tvly-xxx"
加上 --scope user 后,配置才会写到顶层 mcpServers,CC Switch 就能正常接管了,切换不同配置也能同步。
划重点:Claude Code 的 MCP 有三个作用域:
local(默认):只对当前项目生效,存在~/.claude.json的projects下
project:共享到项目.mcp.json,团队可见
user:全局生效,存在~/.claude.json顶层
5.4 注入用户级提示词规则
MCP 配置好了,但 Claude Code 默认还是会优先尝试内置搜索。我们需要一条规则告诉它:永远别用内置搜索,走 MCP。
编辑 ~/.claude/CLAUDE.md,写入:
markdown
# WebSearch 重定向规则
## 核心规则
当需要联网搜索或获取网页内容时,**禁止使用内置的 `web_search` 和 `web_fetch`**,必须改用 `tavily-proxy` MCP 服务器。
## 工具映射
- `web_search` → `mcp__tavily-proxy__tavily_search`
- `web_fetch` → `mcp__tavily-proxy__tavily_extract`
## 执行要求
1. 联网搜索、查实时信息、获取网页内容,一律走 `tavily-proxy`
2. 禁止以任何理由回退到内置 `web_search` 或 `web_fetch`
3. 若 `tavily-proxy` 不可用,告知用户后停止,不要尝试内置工具
## 搜索规范
- 英文关键词搜,中文结果回答
- 提取关键信息后自行组织语言
- 引用来源时注明 URL
为什么放
~/.claude/CLAUDE.md?这个文件是用户级别 的全局规则,所有项目每次对话都会自动加载。项目级则放在项目根目录
CLAUDE.md,只对当前项目生效。
六、验证效果
配置完成后,重启 Claude Code,让它搜一条最新的新闻。
正常情况下,工具调用记录里会显示类似:
text
mcp__tavily-proxy__tavily_search
而不是内置的 web_search。如果看到这个,说明重定向成功。
七、我踩过的坑总结
| 问题 | 原因 | 解决 |
|---|---|---|
command: expected string |
HTTP 类型没加 "type": "http" |
显式声明 type,放在 url 同级 |
| type 写错位置 | type 塞到了 headers 里面 | 提到和 url 同一层级 |
| 配置写到项目级 | 命令行没加 --scope user |
加 --scope user |
| CC Switch 接管不到 | 配置在 projects 下不在顶层 |
移到顶层 mcpServers |
| 401 Unauthorized | Key 过期或地址不对 | 联系服务提供方 |
八、完整操作速查
bash
# 1. 添加 MCP 搜索服务器(用户全局)
claude mcp add --transport http --scope user tavily-proxy https://你的MCP地址 --header "Authorization: Bearer 你的Key"
# 2. 编辑用户级提示词
# 打开 ~/.claude/CLAUDE.md,粘贴上面的重定向规则
# 3. 验证
/mcp # 看 tavily-proxy 是否在线
让 Claude 搜点东西 # 看是否调用了 mcp__tavily-proxy
总结
整个过程其实就三步:
-
搞到一个搜索 MCP 服务器(推荐 Tavily,专为 AI 设计,注册就送免费额度)
-
用
claude mcp add --scope user正确添加 (别忘--scope user) -
在
~/.claude/CLAUDE.md里写重定向规则(强制走 MCP)
这个方案的好处是不依赖中转站是否更新协议,完全自主可控,而且 MCP 搜索工具可以自由选择,灵活性很高。
Tavily 作为专为 AI 打造的搜索引擎,搜索质量真的不错,强烈建议注册一个试试。如果你也被第三方 API 搜索失灵的问题困扰,不妨试试这个方案,折腾一下午换来的经验,希望对你有帮助。