Skip to main content
Glama
KB-521

aliyun-k-search-mcp

by KB-521

aliyun-k-search-mcp

部署在阿里云函数计算(Function Compute,FC)中国大陆地域的远程网页搜索 MCP。手机 AI 通过阿里云公网 HTTPS 触发器访问,不依赖在中国大陆可能无法打开的 workers.dev 域名。

搜索优先级

服务按以下固定顺序搜索:

Exa → Tavily → 豆包搜索 Custom → Bocha Web Search

只有配置了 API Key 的供应商才会参与搜索。当前供应商出现网络错误、超时、HTTP 错误、业务错误、响应格式异常或空结果时,会自动切换下一家。供应商不会并行请求,因此优先级严格、额外费用更可控。

Related MCP server: websearch-skill

特性

  • MCP Streamable HTTP,入口为 /mcp

  • MCP 工具名保持为 web_search

  • Bearer Token 鉴权,手机端不会接触搜索供应商的 API Key

  • Exa 按官方 Coding Agent 建议使用 type: auto 和 highlights

  • Tavily 保留默认 80 RPM 排队限速与 429 重试

  • 豆包搜索优先使用官方推荐给大模型的 Summary

  • Bocha 请求文本摘要并兼容其 Bing 风格响应

  • 进程内 15 分钟缓存

  • 相同并发查询合并,只执行一条完整供应商调用链

  • 单次客户端搜索只计算一次月度软配额,内部 fallback 不重复计数

  • /health 仅显示配置状态,不显示密钥

架构

手机 AI / MCP 客户端
        │ HTTPS + Bearer Token
        ▼
阿里云 FC HTTP 触发器(默认杭州)
        │
        ▼
Node.js MCP 服务
  ├─ 鉴权、Origin 校验和月度软配额
  ├─ 缓存与相同查询合并
  └─ 搜索供应商链
       ├─ Exa
       ├─ Tavily(80 RPM 队列与 429 重试)
       ├─ 豆包搜索 Custom
       └─ Bocha Web Search

准备条件

  • 已实名认证的阿里云账号

  • Node.js 20 或更高版本

  • 至少一个搜索 API Key:Exa、Tavily、豆包搜索或 Bocha

  • 手机 AI 支持 MCP Streamable HTTP 和自定义请求头

1. 安装依赖

cd ~/Desktop/aliyun-k-search-mcp
npm install
cp .env.example .env

用文本编辑器打开 .env。至少填写一个搜索供应商的 Key,并设置 MCP Token:

EXA_API_KEY=
TAVILY_API_KEY=你的_Tavily_API_Key
DOUBAO_API_KEY=
BOCHA_API_KEY=
MCP_API_TOKEN=你自己生成的长随机访问令牌

空白供应商会被自动跳过。可以生成 MCP 访问令牌:

openssl rand -hex 32

.env 已加入 .gitignore,不会被提交。不要把真实密钥发到聊天或粘贴到公开日志中。

豆包使用“豆包搜索 Custom 版”控制台生成的 API Key,不是火山引擎 AccessKey/Secret。调用地址为 https://open.feedcoopapi.com/search_api/web_search

2. 配置阿里云登录凭据

运行:

npx s config add

配置名称填写 default。建议在阿里云 RAM 控制台创建专用 RAM 用户,不要使用主账号 AccessKey,并给该用户添加系统策略 AliyunFCFullAccess

3. 本地测试

npm run build
npm start

另开终端检查:

curl http://127.0.0.1:9000/health

正常结果类似:

{
  "status": "ok",
  "service": "aliyun-k-search-mcp",
  "version": "1.2.0",
  "exaConfigured": false,
  "tavilyConfigured": true,
  "doubaoConfigured": false,
  "bochaConfigured": false,
  "searchConfigured": true,
  "authConfigured": true,
  "providerPriority": ["exa", "tavily", "doubao", "bocha"]
}

4. 部署到阿里云函数计算

npm run deploy

部署命令会捕获并过滤 Serverless Devs 输出,对四个搜索 API Key 和 MCP Token 进行打码。成功时只显示部署状态和公网 URL。也可以安全查询公网触发器 URL:

npm run fc:info

不要直接运行并公开粘贴未经处理的 s deploys info 完整输出,因为其中可能包含函数环境变量。

5. 手机 AI 配置

把部署结果的公网 URL 加上 /mcp

{
  "url": "https://你的阿里云HTTP触发器地址/mcp",
  "headers": {
    "Authorization": "Bearer 你在.env中设置的MCP_API_TOKEN"
  }
}

手机端无需配置任何搜索供应商 Key。先在手机浏览器打开触发器地址的 /health;能快速显示 JSON,说明中国大陆入口正常。

配置项

名称

默认值

说明

EXA_API_KEY

可选;配置后为第一优先级

TAVILY_API_KEY

可选;配置后为第二优先级

DOUBAO_API_KEY

可选;豆包搜索 Custom API Key

BOCHA_API_KEY

可选;Bocha API Key

MCP_API_TOKEN

必填,至少 16 字符,推荐 64 位十六进制

ALIYUN_REGION

cn-hangzhou

FC 地域

ALLOWED_ORIGINS

浏览器 Origin 白名单;原生手机客户端通常留空

MAX_RESULTS

5

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

CACHE_TTL_SECONDS

900

内存缓存秒数,0 表示禁用

MAX_MONTHLY_SEARCHES

900

实例内月度软上限,0 表示无限制

EXA_TIMEOUT_MS

12000

单次 Exa 请求超时

TAVILY_TIMEOUT_MS

15000

单次 Tavily 请求超时

DOUBAO_TIMEOUT_MS

15000

单次豆包搜索请求超时

BOCHA_TIMEOUT_MS

12000

单次 Bocha 请求超时

TAVILY_RPM

80

Tavily 出站请求上限,最大允许配置为 100

TAVILY_MAX_QUEUE_MS

30000

Tavily 最大预计排队时间

四个搜索 API Key 至少配置一个。缓存、月度软上限和相同查询合并状态保存在函数实例内存中,冷启动或重新部署后会清空;各供应商账户仍负责最终额度限制。

并发和限流说明

s.yaml 将函数总并发与单实例并发均设置为 100,使正常允许的并发可由一个实例承载。Tavily 免费 Key 的队列限流保存在 Node 进程内;如果提高函数总并发并触发多个实例,每个实例都会拥有独立队列,可能合计超过 Tavily 的账户 RPM。

Exa、豆包和 Bocha 当前不使用 Tavily 的 80 RPM 队列;它们收到限流或额度错误时会切换下一家。需要对这些供应商做跨实例精确限流时,应使用 Redis、Tablestore 等共享原子存储。

常见问题

  • /health 显示 misconfigured:确认 MCP_API_TOKEN 已设置,并且四个搜索 Key 至少填写一个。

  • MCP 返回 401:手机里的 Bearer Token 与 MCP_API_TOKEN 不一致。

  • 高优先级供应商 Key 错误:服务会记录安全错误并自动切换下一家;/health 只检查是否配置,不会在线验证 Key。

  • 搜索全部失败:检查函数日志、供应商余额和 API Key 权限;客户端只会看到统一安全错误。

  • Tavily 返回排队已满:服务会继续尝试豆包和 Bocha;如果没有后续供应商,则返回统一失败提示。

  • 旧客户端使用 /sse:需要改用 /mcp Streamable HTTP。

开发验证

npm test
npm run typecheck
npm run build

项目结构

src/app.ts             MCP HTTP 路由和供应商组装
src/server.ts          web_search MCP 工具
src/providers.ts       固定优先级与自动 fallback
src/provider-utils.ts  搜索供应商通用请求与安全错误
src/exa.ts             Exa Search API 适配器
src/tavily.ts          Tavily Search API 适配器
src/doubao.ts          豆包搜索 Custom API 适配器
src/bocha.ts           Bocha Web Search API 适配器
src/coordinator.ts     整条链并发合并与 Tavily 限流重试
src/cache.ts           进程内 TTL 缓存
src/quota.ts           进程内月度软上限
src/fc.ts              阿里云 FC 内置运行时事件适配器
s.yaml                 阿里云 FC 部署配置

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/aliyun-k-search-mcp'

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