Claude Code 搜索工具失灵,用 MCP + 提示词注入绕过 tavily

前言

作为一个重度 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 后,配置才会写到顶层 mcpServersCC Switch 就能正常接管了,切换不同配置也能同步。

划重点:Claude Code 的 MCP 有三个作用域:

  • local(默认):只对当前项目生效,存在 ~/.claude.jsonprojects

  • 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

总结

整个过程其实就三步:

  1. 搞到一个搜索 MCP 服务器(推荐 Tavily,专为 AI 设计,注册就送免费额度)

  2. claude mcp add --scope user 正确添加 (别忘 --scope user

  3. ~/.claude/CLAUDE.md 里写重定向规则(强制走 MCP)

这个方案的好处是不依赖中转站是否更新协议,完全自主可控,而且 MCP 搜索工具可以自由选择,灵活性很高。

Tavily 作为专为 AI 打造的搜索引擎,搜索质量真的不错,强烈建议注册一个试试。如果你也被第三方 API 搜索失灵的问题困扰,不妨试试这个方案,折腾一下午换来的经验,希望对你有帮助。

相关推荐
夜雪闻竹5 小时前
Ollama vs OpenAI vs Claude 做摘要,质量差距有多大
网络·microsoft
石山代码5 小时前
基于现有日志系统的功能扩展方案
网络
哼?~5 小时前
多路复用I/O之Epoll
网络
开开心心就好5 小时前
免费无广告的批量卸载与系统清理工具
linux·服务器·网络·智能手机·rabbitmq·excel·memcached
wanhengidc5 小时前
高防服务器中的数据安全
运维·服务器·网络
艾莉丝努力练剑5 小时前
【Linux网络】Linux 网络编程:HTTP(五)HTTP收尾,从Cookie会话保持、抓包问题到 HTTPS 初识
linux·运维·服务器·网络·c++
时夜_Ryan5 小时前
JumpServer堡垒机:一键部署运维安全审计
linux·运维·服务器·网络·安全·centos
IT飞牛5 小时前
Elasticsearch 技术调研与实践
大数据·elasticsearch·搜索引擎
车软派开发学长6 小时前
零基础学习车软嵌入式AUTOSAR,以一帧CAN报文实战讲解AUTOSAR的学习
网络·stm32·车载系统·autosar·嵌入式实时数据库