Skip to main content
Glama
KB-521

Cloudflare Tavily Search MCP

by KB-521

Cloudflare Tavily Search MCP

一个部署在 Cloudflare Workers 上的远程网页搜索 MCP 服务。它把 Tavily 的低成本搜索包装成 web_search 工具,适合手机 AI 客户端、桌面 AI 客户端或其他支持远程 MCP 的应用。

项目默认面向个人使用:Cloudflare Workers 固定成本可以为 0,Tavily 免费方案每月提供 1,000 credits,基础搜索每次消耗 1 credit。

特性

  • 使用当前 MCP TypeScript SDK v2 和 Streamable HTTP

  • 自动兼容 SDK 提供的 2025-era stateless 客户端

  • Tavily 搜索深度强制为 basic,避免意外使用双倍额度

  • Bearer Token 鉴权,Tavily API Key 不会暴露给手机客户端

  • 严格 Origin 校验和 MCP CORS 响应头

  • Cloudflare Cache API 缓存重复查询

  • 可选 Workers KV 月度搜索上限

  • Tavily 超时、密钥错误、额度限制和服务异常的安全提示

  • 完整单元测试与真实 MCP 客户端集成测试

Related MCP server: Tavily Web Search MCP Server

架构

手机 AI / MCP 客户端
        │ HTTPS + Bearer Token
        ▼
Cloudflare Worker /mcp
        ├─ Origin 与鉴权
        ├─ Cache API
        ├─ 可选 KV 月度额度
        └─ Tavily Search API (basic)

服务是无状态的,不使用 Durable Objects。每个 MCP HTTP 请求创建一个临时 server 实例,因此可以直接在 Workers 上横向扩展。

环境要求

  • Node.js 22 或更高版本

  • npm

  • Cloudflare 免费账号

  • Tavily API Key:Tavily 控制台

本地运行

cd ~/Desktop/cloudflare-tavily-search-mcp
npm install
cp .dev.vars.example .dev.vars

编辑 .dev.vars

TAVILY_API_KEY="tvly-your-api-key"
MCP_API_TOKEN="replace-with-a-long-random-token"

可以用下面的命令生成访问令牌:

openssl rand -hex 32

启动本地 Worker:

npm run dev

检查健康状态:

curl http://127.0.0.1:8787/health

部署到 Cloudflare

首次使用 Wrangler 时登录:

npx wrangler login

保存两个生产 secrets:

npx wrangler secret put TAVILY_API_KEY
npx wrangler secret put MCP_API_TOKEN

部署:

npm run deploy

部署完成后 MCP 地址类似:

https://tavily-search-mcp.<你的子域>.workers.dev/mcp

手机 AI 客户端配置

客户端需要支持 MCP Streamable HTTP,并且能够设置请求头。

通用配置示例:

{
  "url": "https://tavily-search-mcp.example.workers.dev/mcp",
  "headers": {
    "Authorization": "Bearer 你设置的 MCP_API_TOKEN"
  }
}

如果客户端只支持旧版 HTTP+SSE /sse,当前项目不会伪装成兼容:该端点会返回 HTTP 410,并提示改用 /mcp。这类客户端需要升级,或额外增加基于 Durable Objects 的旧版适配层。

MCP 工具

参数:

参数

类型

必填

说明

query

string

搜索词,2~500 字符

max_results

number

返回数量,最终不超过服务器的 MAX_RESULTS

topic

general / news / finance

默认 general

time_range

day / week / month / year

时间范围

include_domains

string[]

优先搜索的域名,最多 10 个

exclude_domains

string[]

排除的域名,最多 10 个

服务器固定发送:

{
  "search_depth": "basic",
  "include_answer": false,
  "include_raw_content": false,
  "include_images": false
}

这样每次缓存未命中的正常搜索只消耗 1 Tavily credit。

配置项

名称

默认值

说明

TAVILY_API_KEY

必填,使用 Worker secret

MCP_API_TOKEN

必填,至少 16 字符,使用 Worker secret

ALLOWED_ORIGINS

逗号分隔的浏览器 Origin;原生客户端不发送 Origin 时可以留空

MAX_RESULTS

5

每次最多结果数,范围 1~10

CACHE_TTL_SECONDS

900

搜索缓存秒数,设为 0 禁用

MAX_MONTHLY_SEARCHES

900

KV 月度上限;设为 0 表示无限制

TAVILY_TIMEOUT_MS

15000

Tavily 请求超时,范围 1000~30000

生产环境普通变量可以直接修改 wrangler.jsonc。密钥不要写进该文件或提交到 Git。

浏览器客户端的 Origin

原生手机应用和服务端 MCP 客户端通常不发送 Origin,默认即可使用。浏览器或 WebView 客户端发送 Origin 时,必须精确加入:

"ALLOWED_ORIGINS": "https://your-client.example,https://another.example"

只有明确知道风险时才配置 *

可选:启用 KV 月度额度保护

没有 USAGE_KV 绑定时,服务仍能正常搜索,但 MAX_MONTHLY_SEARCHES 不会在 Worker 内执行。Tavily 免费账户通常会在免费额度耗尽后停止请求;如果启用了按量付费,建议同时启用 KV。

创建命名空间:

npx wrangler kv namespace create USAGE_KV

把返回的 ID 添加到 wrangler.jsonc

"kv_namespaces": [
  {
    "binding": "USAGE_KV",
    "id": "你的 KV namespace ID"
  }
]

也可以参考 wrangler.kv.example.jsonc。默认上限是每月 900 次缓存未命中的请求,给 Tavily 免费额度留出余量。重复搜索命中缓存时不消耗本地月度额度。

KV 的读后写不是强事务计数;对个人单令牌使用足够可靠,但不适合作为多人高并发的精确计费系统。

验证与测试

npm run typecheck
npm test
npm run deploy:dry

使用官方 MCP Inspector 手动测试:

npx @modelcontextprotocol/inspector

在 Inspector 中填写 /mcp URL,并添加 Authorization: Bearer ... 请求头。

HTTP 端点

端点

鉴权

用途

GET /

服务信息

GET /health

配置状态,不泄露密钥

POST /mcp

MCP Streamable HTTP 主入口

GET/DELETE /mcp

由 MCP SDK 按协议处理

/sse

返回 410,提示迁移到 /mcp

常见问题

  • 401 unauthorized:客户端 Bearer Token 与 MCP_API_TOKEN 不一致。

  • 403 origin_not_allowed:把客户端的完整 Origin 加入 ALLOWED_ORIGINS

  • 410 legacy_sse_not_supported:客户端使用了旧 /sse 协议,应选择 Streamable HTTP。

  • Tavily 401:重新设置 TAVILY_API_KEY secret。

  • Tavily 429:免费额度已用完或请求过快,等待额度重置。

  • Worker 503 misconfigured:至少有一个必填 secret 没有配置。

  • 中国大陆网络不稳定:可以为 Worker 绑定自定义域名,或改为部署到可稳定访问的香港服务器。

安全说明

  • 不要把 Tavily Key 直接填进手机客户端。

  • MCP_API_TOKEN 使用至少 32 字节随机值。

  • 不要公开分享 Worker URL 和访问令牌。

  • 如果令牌泄露,运行 npx wrangler secret put MCP_API_TOKEN 立即轮换。

  • 项目只提供搜索,不包含任意 URL 抓取工具,因此避免了常见 SSRF 风险。

项目结构

src/
  index.ts       Worker 路由、鉴权和 MCP HTTP 入口
  server.ts      web_search MCP 工具
  tavily.ts      Tavily API 客户端
  cache.ts       Cache API 封装
  quota.ts       可选 KV 月度上限
  config.ts      环境配置解析
  security.ts    Bearer、Origin 与 CORS
tests/           单元测试和 MCP 集成测试
docs/plans/      设计与实施计划

License

MIT

A
license - permissive license
-
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/KB-521/cloudflare-tavily-search-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server