Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
作者提供的说明(英文原文)
Self-hosted retrieval router for AI agents: budgets, provider routing, route receipts.
这三项永远不会合并成一个分数:意见、测量和人气是不同的东西。
我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。
选择你使用的 AI 应用,然后复制设置。
FETCHMUX_BASE_URL, FETCHMUX_API_KEY标为机密的值是你账户的钥匙。千万不要分享给别人,也不要粘贴到聊天里。
你需要
你用的是哪个应用?
在上方选择你的应用。我们会记住它,下次按钮会显示“安装到 …”。
打开 Claude Desktop → Settings → Developer → Edit Config,把下面的内容粘贴到 claude_desktop_config.json
{
"mcpServers": {
"fetchmux": {
"command": "npx",
"args": [
"-y",
"@fetchmux/mcp"
],
"env": {
"FETCHMUX_BASE_URL": "your-value",
"FETCHMUX_API_KEY": "your-value"
}
}
}
}在终端中运行这条命令
claude mcp add fetchmux --env FETCHMUX_BASE_URL=your-value --env FETCHMUX_API_KEY=your-value -- npx -y @fetchmux/mcp运行前请先填写空着的值。
粘贴到项目中的 .cursor/mcp.json,或 ~/.cursor/mcp.json
{
"mcpServers": {
"fetchmux": {
"command": "npx",
"args": [
"-y",
"@fetchmux/mcp"
],
"env": {
"FETCHMUX_BASE_URL": "your-value",
"FETCHMUX_API_KEY": "your-value"
}
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
粘贴到项目中的 .vscode/mcp.json
{
"servers": {
"fetchmux": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@fetchmux/mcp"
],
"env": {
"FETCHMUX_BASE_URL": "your-value",
"FETCHMUX_API_KEY": "your-value"
}
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
这个服务器在你的电脑上运行,而 ChatGPT 只能连接互联网上的服务器。请选择其他应用。
你的选择通过 Cookie 保存在这台设备上,无需账户。
FETCHMUX_BASE_URL env这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。
它在你的电脑上运行;安装后,工具列表会显示在你的 AI 应用中。
我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月7日
注册名称已通过 GitHub 账户 krutftw 验证,该账户拥有此仓库
我们还没有从 GitHub 读取这个仓库
我们还没有从 GitHub 读取这个仓库
它在你的电脑上运行,没有互联网端点
在你的电脑上运行,改用本地设置
它在你的电脑上运行;我们只能读取互联网端点的工具列表
与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。
它在 1 项适用的基础检查中通过了 1 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。
你需要填写:FETCHMUX_API_KEY
它在你的电脑上运行。你的 AI 应用会在需要时启动它,数据不会经过作者的服务器(除非它自己调用在线服务)。
GitHub 仓库最后更新于–,最新版本(0.1.0)于4个月前进入注册中心。
支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。你的电脑上还需要有 Node.js。
同一分类中有:Spec Driven Development, Remote Desktop Commander, Microsoft Exchange Online MCP
同一分类中其他作者的服务器,按星标数排序。
如何看卡片:★ GitHub 星标i三大支柱:评价 · 检查 · 使用情况i更新 = 最新版本发布到注册中心的时间i
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Exchange Online admin for MSPs: forwarding audits, EWS posture and offboarding, no PowerShell
按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。
One search endpoint for AI agents. Put a router in front of Brave, Tavily, Exa, Firecrawl, and Crossref. Every request carries a hard cost ceiling and deadline; every response comes back with a receipt that says which provider ran, why, and what it cost.
Your agents stop hard-coding a provider into prompts and app code. They send one request shape; the gateway picks an eligible provider under a policy you control, enforces the budget and deadline before the call, retries safely on failure, and returns normalized results plus a full trace. You keep your provider keys — they never leave your gateway.
Nothing is a black box. Every /v1/search response carries the routing decision:
"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
A provider is eligible only when its credentials, task fit, circuit state, spend, and deadline all pass. Budgets and deadlines are eligibility rules, not best-effort hints. Fallback happens only on retryable failures.
No provider account needed — the public Crossref route runs out of the box:
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="you@example.com" npm run dev:gateway
From another 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 }'
To route real web search, set a provider key and use a web task instead:
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
New to Firecrawl? New accounts get 10% off the first month through this link (referral — FetchMux earns a small commission, no extra cost to you).
Point any MCP client (Claude, Cursor, and friends) at the published server:
{
"mcpServers": { "fetchmux": { "command": "npx", "args": ["-y", "@fetchmux/mcp"], "env": { "FETCHMUX_BASE_URL": "http://127.0.0.1:8787/", "FETCHMUX_API_KEY": "your-gateway-key" } } } }
Two read-only tools: search_web and preview_search_route.
Or use the typed 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, });
Bring your own key for each. Set the matching *_API_KEY, plus an optional *_COST_PER_REQUEST_USD if you want dollar budgets enforced.
| Provider | Use | Key |
|---|---|---|
| Brave | web search | BRAVE_API_KEY |
| Tavily | web search, research | TAVILY_API_KEY |
| Exa | web search, docs | EXA_API_KEY |
| Firecrawl | page content | FIRECRAWL_API_KEY |
| Crossref | scholarly metadata | none (CROSSREF_ENABLED=true) |
| Method | Path | Auth | Behavior |
|---|---|---|---|
GET | /health | public | Process health and version |
GET | /ready | public | Provider readiness |
GET | /v1/providers | bearer | Provider configuration status |
POST | /v1/route/preview | bearer | Ranked candidates, no provider call |
POST | /v1/search | bearer | Routed retrieval and route receipt |
Full contract: docs/openapi.yaml.
All configuration variables
The process does not auto-load .env in local Node development; set variables in the shell or a process manager. Docker Compose reads the ignored .env file.
| Variable | Default | Purpose |
|---|---|---|
FETCHMUX_API_KEY | none | Protected-route bearer key |
FETCHMUX_API_KEYS | none | Comma-separated keys for rotation |
FETCHMUX_AUTH_DISABLED | false | Exact true bypasses auth (trusted local use only) |
FETCHMUX_ALLOWED_ORIGINS | none | Comma-separated browser origins; no CORS when empty |
FETCHMUX_HOST | 127.0.0.1 | Bind address |
FETCHMUX_PORT | 8787 | TCP port |
BRAVE_API_KEY / TAVILY_API_KEY / EXA_API_KEY / FIRECRAWL_API_KEY | none | Provider credentials |
CROSSREF_ENABLED | false | Exact true enables the credential-free scholarly route |
CROSSREF_CONTACT_EMAIL | none | Monitored contact for Crossref's polite pool |
*_COST_PER_REQUEST_USD | none | Per-provider cost estimates used by dollar budgets |
See provider configuration before enabling maxCostUsd.
cp .env.example .env # add your keys, never commit it
docker compose up --build -d curl http://127.0.0.1:8787/health
Non-root Distroless image: Linux capabilities dropped, read-only root filesystem, provider credentials passed only at container start.
Validate every case and provider pairing with no network calls or credits:
npm run benchmark -- --workload benchmarks/workloads/founding-v1.json --mode dry-run
Live mode needs provider keys and an explicit --confirm-live. Check each provider's terms before publishing results — see the benchmark methodology.
Open source, self-hosted, single-tenant, BYOK. Route events go to stdout as JSON and exclude your query text, keys, and result content by default. No database, no telemetry.
It is not a hosted service, a pooled-credit reseller, or a claim that these providers are interchangeable. Provider names are the adapters it ships with, not partnerships. A hosted version is on the roadmap — star the repo to follow.
npm test # 232 tests
npm run typecheck npm run lint npm run build npm run dev:gateway npm run dev:site
More docs: product design · local development · deployment · provider configuration · data handling · incident response
Security issues: security@fetchmux.com.
Apache-2.0. Free to self-host, modify, and redistribute.