mcpField
F
fetchmux

fetchmux

本地服务
fetchmux.com搜索与检索014 周前更新

关于 fetchmux

fetchmux 是面向 AI Agent 的可自托管检索路由器,可按成本和延迟限制将请求发送给适用的服务商,并返回标准化结果及说明路由选择、尝试和预估成本的回执。

主要功能

  1. 01在五个检索服务商间路由请求
  2. 02执行成本上限和截止时间
  3. 03在符合条件的失败后重试
  4. 04返回标准化结果和路由回执
  5. 05预览排名后的服务商候选项

适用场景

  1. 01通过单一端点路由 Agent 网页搜索
  2. 02将服务商费用控制在请求预算内
  3. 03查看路由决策和服务商调用记录

MCP 相关

配套 MCP 服务向 MCP 客户端提供只读工具 `search_web` 和 `preview_search_route`,并通过网关地址和 API 密钥连接 FetchMux。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"krutftw-fetchmux": {
"command": "npx",
"args": [
"-y",
"@fetchmux/mcp"
],
"env": {
"FETCHMUX_BASE_URL": "<FETCHMUX_BASE_URL>",
"FETCHMUX_API_KEY": "<FETCHMUX_API_KEY>"
}
}
}
}
启动命令npx -y @fetchmux/mcp
需要配置的环境变量
FETCHMUX_BASE_URLBase URL of the self-hosted FetchMux gateway.
FETCHMUX_API_KEY密钥Bearer key for the gateway's protected routes.

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npm@fetchmux/mcp0.1.0

工具

2

收录的工具列表 · 更新于 2 周前

参数类型必填说明
taskenum否balanced | fresh_facts | deep_research | page_content | scholarly
limitinteger否
querystring是
countrystring否
languagestring否
priorityenum否balanced | quality | cost | latency
freshnessenum否24h | 7d | 30d | 1y
maxCostUsdnumber否
fetchContentboolean否
maxLatencyMsinteger否
excludeDomainsarray否
includeDomainsarray否
providerAllowlistarray否

详细介绍

FetchMux

npm License Node MCP

为 AI Agent 提供一个搜索端点。 在 Brave、Tavily、Exa、Firecrawl 和 Crossref 前面放置一个路由器。每个请求都带有严格的费用上限和截止时间;每个响应都会附带一份回执,说明使用了哪个提供商、原因以及费用。

你的 Agent 不必再在提示词和应用代码中硬编码提供商。它们只需发送一种请求格式;网关便会根据你控制的策略,选择符合条件的提供商,在调用前执行预算和截止时间限制,在失败时安全重试,并返回规范化结果和完整追踪记录。提供商密钥由你保管——它们永远不会离开你的网关。

回执

一切都清晰可见。每个 /v1/search 响应都会附带路由决策:

"route": {
  "selectedProvider": "brave",
  "attemptedProviders": ["brave"],
  "reasonCodes": ["TASK_MATCH", "WITHIN_BUDGET", "RELIABILITY_WEIGHT"],
  "attempts": [
    { "provider": "brave", "outcome": "success", "latencyMs": 640, "estimatedCostUsd": 0.005 }
  ],
  "estimatedCostUsd": 0.005,
  "latencyMs": 640,
  "fallbackUsed": false,
  "traceId": "rt_b400e7c8"
}

路由方式

  agent  ──▶  { query · task · maxCostUsd · maxLatencyMs }
                             │
                             ▼
                      ┌──────────────┐        your keys
                      │   FetchMux    │ ─────▶ Brave · Tavily · Exa
                      │    policy     │        Firecrawl · Crossref
                      └──────────────┘ ◀─────  (bring your own)
                             │
                             ▼
  agent  ◀──  evidence[]  +  route receipt

只有在凭据、任务匹配度、电路状态、支出和截止时间均符合要求时,提供商才符合条件。预算和截止时间是资格规则,而非尽力而为的提示。只有发生可重试的故障时才会回退。

快速开始

无需提供商账号——公共 Crossref 路由开箱即用:

git clone https://github.com/krutftw/fetchmux
cd fetchmux
npm install
npm run build

export FETCHMUX_API_KEY="a-long-random-key"
export CROSSREF_ENABLED=true
export CROSSREF_CONTACT_EMAIL="[email protected]"
npm run dev:gateway

在另一个 Shell 中:

curl http://127.0.0.1:8787/v1/search \
  -H "Authorization: Bearer a-long-random-key" \
  -H "Content-Type: application/json" \
  -d '{ "query": "retrieval augmented generation", "task": "scholarly", "maxLatencyMs": 8000 }'

要进行实际的网页搜索,请设置提供商密钥,并改用网页搜索任务:

export FETCHMUX_API_KEY="a-long-random-key"
export BRAVE_API_KEY="your-brave-key"
export BRAVE_COST_PER_REQUEST_USD="0.005"   # from your provider plan
npm run dev:gateway

刚开始使用 Firecrawl?新账号通过此链接可在首月享受 10% 折扣(推荐链接——FetchMux 会获得少量佣金,你无需支付额外费用)。

在 Agent 中使用

将任意 MCP 客户端(Claude、Cursor 等)指向已发布的服务:

{
  "mcpServers": {
    "fetchmux": {
      "command": "npx",
      "args": ["-y", "@fetchmux/mcp"],
      "env": {
        "FETCHMUX_BASE_URL": "http://127.0.0.1:8787/",
        "FETCHMUX_API_KEY": "your-gateway-key"
      }
    }
  }
}

提供两个只读工具:search_web 和 preview_search_route。

或者使用类型化 SDK @fetchmux/sdk:

import { FetchMux } from "@fetchmux/sdk";

const client = new FetchMux({
  baseUrl: "http://127.0.0.1:8787/",
  apiKey: process.env.FETCHMUX_API_KEY,
  fetch: globalThis.fetch.bind(globalThis),
});

const res = await client.search({
  query: "latest stable Node.js release",
  task: "fresh_facts",
  maxCostUsd: 0.02,
});

提供商

每个提供商都需要使用你自己的密钥。设置对应的 *_API_KEY;如果希望强制执行美元预算,还可选择设置 *_COST_PER_REQUEST_USD。

提供商用途密钥
Brave网页搜索BRAVE_API_KEY
Tavily网页搜索、研究TAVILY_API_KEY
Exa网页搜索、文档EXA_API_KEY
Firecrawl页面内容FIRECRAWL_API_KEY
Crossref学术元数据无(CROSSREF_ENABLED=true)

REST 端点

方法路径认证行为
GET/health公开进程健康状态和版本
GET/ready公开提供商就绪状态
GET/v1/providersbearer提供商配置状态
POST/v1/route/previewbearer排序后的候选项,不调用提供商
POST/v1/searchbearer路由检索和路由回执

完整规范:docs/openapi.yaml。

所有配置变量

本地 Node 开发时,进程不会自动加载 .env;请在 shell 或进程管理器中设置变量。Docker Compose 会读取被忽略的 .env 文件。

变量默认值用途
FETCHMUX_API_KEY无受保护路由的 bearer 密钥
FETCHMUX_API_KEYS无以逗号分隔的轮换密钥
FETCHMUX_AUTH_DISABLEDfalse精确设为 true 时绕过认证(仅限可信的本地使用)
FETCHMUX_ALLOWED_ORIGINS无以逗号分隔的浏览器来源;为空时不启用 CORS
FETCHMUX_HOST127.0.0.1绑定地址
FETCHMUX_PORT8787TCP 端口
BRAVE_API_KEY / TAVILY_API_KEY / EXA_API_KEY / FIRECRAWL_API_KEY无提供商凭据
CROSSREF_ENABLEDfalse精确设为 true 时启用无需凭据的学术路由
CROSSREF_CONTACT_EMAIL无Crossref 礼貌池使用的受监控联系邮箱
*_COST_PER_REQUEST_USD无用于美元预算的各提供商单次请求成本估算

启用 maxCostUsd 前,请参阅提供商配置。

在 Docker 中运行

cp .env.example .env    # add your keys, never commit it
docker compose up --build -d
curl http://127.0.0.1:8787/health

非 root Distroless 镜像:已移除 Linux 功能、根文件系统为只读,提供商凭据仅在容器启动时传入。

基准测试

无需网络调用或消耗额度,即可验证每种情况和提供商组合:

npm run benchmark -- --workload benchmarks/workloads/founding-v1.json --mode dry-run

实时模式需要提供商密钥,并且必须显式指定 --confirm-live。发布结果前,请检查各提供商的条款——参阅基准测试方法。

它是什么(以及不是什么)

开源、可自托管、单租户、BYOK。路由事件以 JSON 格式输出到 stdout,默认不包含你的查询文本、密钥和结果内容。无数据库、无遥测。

它不是托管服务、共享额度转售商,也不声称这些提供商可以互换。提供商名称指的是它内置的适配器,而非合作关系。托管版本已列入路线图——为仓库加星以获取进展。

开发

npm test          # 232 tests
npm run typecheck
npm run lint
npm run build
npm run dev:gateway
npm run dev:site

更多文档:产品设计 · 本地开发 · 部署 · 提供商配置 · 数据处理 · 事件响应

安全问题:[email protected]。

许可证

Apache-2.0。可免费自托管、修改和再分发。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。