LLM RouterBLOCK
Universal LLM router for AI coding tools. Works with Claude Code, Cursor, Codex, Gemini CLI, Copilot and more. Free-first fallback chain cuts costs 35-80%.
Overview
From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.
llm-router
Stop spending your Claude Pro/Max quota on questions a free model can answer.
llm-router hooks into your coding tool's own lifecycle, reads each prompt before the model does, and drafts an answer on a free or local model first. No API keys needed on a Claude subscription — routing runs through MCP tools and local models.
One caveat: routed answers are advisory by default — Claude still takes the turn unless LLMROUTERZEROCLAUDE=1. By default some tool calls wait until a prompt is routed; LLMROUTER_ENFORCE=off turns that off. Draft-rate and acceptance figures live in docs/MEASUREMENT.md, with their n, window and conditions.
13493fe7e4c4OBSERVED · 2026-10-07Connect
Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.
claude mcp add llm-routing --env ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY} --env DEEPSEEK_API_KEY=${DEEPSEEK_API_KEY} --env GEMINI_API_KEY=${GEMINI_API_KEY} --env GOOGLE_API_KEY=${GOOGLE_API_KEY} -- npx -y [email protected]{
"mcpServers": {
"llm-routing": {
"command": "npx",
"args": [
"-y",
"[email protected]"
],
"env": {
"ANTHROPIC_API_KEY": "${ANTHROPIC_API_KEY}",
"DEEPSEEK_API_KEY": "${DEEPSEEK_API_KEY}",
"GEMINI_API_KEY": "${GEMINI_API_KEY}",
"GOOGLE_API_KEY": "${GOOGLE_API_KEY}"
}
}
}
}Exposed tools (6)
5 read · 1 write · 0 destructive.
| Tool | Risk | Description |
|---|---|---|
agoragentic_browse | read | Browse available services on the Agoragentic marketplace. |
agoragentic_status | read | Get llm-router agent status on Agoragentic. |
agoragentic_task | write | Execute a task on the Agoragentic capability marketplace. |
agoragentic_wallet | read | Check Agoragentic wallet balance and status. |
bash | read | y |
router | read | llm-router: the last 10 routing decisions (time, model, why, outcome) |
Trust audit
BLOCKgrade F · trust 38/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.
| Layer | What it checks | Result |
|---|---|---|
| L0 | Provenance & inventory | PASS |
| L1 | Static analysis of the code | FAIL |
| L2 | Instruction surface (what it tells the agent) | PASS |
| L3 | Class-specific surface | PASS |
| L4 | Behavioural (sandbox) | SKIPPED |
What the source does
- Filesystem
- declared (12 observation(s))
- Network
- declared (16 observation(s))
- Shell
- declared (7 observation(s))
- Dependencies
- pinned
- Secrets in source
- found
Findings (25)
"id_rsa", "id_ed25519", ".npmrc", ".pypirc", ".netrc",
".env" ... urllib.request
".env" ... urlopen
".env" ... urlopen
dict(os.environ) ... urllib.request
"169.254.169.254", "metadata.google.internal", "metadata",
if host.startswith("169.254.") or host.startswith("fe80:") or "169.254.169.254" in host:a value can (`{"postgresql://u:pw@h/db": "unreachable"}` is a real shapemod = __import__(f"llm_router.invoice_reconciliation.{provider}", fromlist=["pull_monthly_invoice"])fn = getattr(importlib.import_module(mod), attr, None)
importlib.import_module(name)
evidence: float # Σw / (Σw + κ): neighbour share of the score, 0-1
("anthropic_key", "token sk-ant-abcdefghij1234567890abcdefg"),out = force_local_for_pii(chain, "my key is sk-ant-abcdefghij1234567890abcdefg")
"Bearer sk-ant-oat01-Gx7Gx7Gx7Gx7Gx7Gx7Gx7Gx7Gx7Gx7Gx7Gx7Gx7Gx7Gx7Gx7Gx7Gx7Gx7Gx7"
"Bearer sk-ant-oat01-Gx7Gx7Gx7Gx7Gx7Gx7Gx7Gx7Gx7Gx7Gx7Gx7Gx7Gx7Gx7Gx7Gx7Gx7Gx7Gx7"
"Bearer sk-ant-oat01-Gx7Gx7Gx7Gx7Gx7Gx7Gx7Gx7Gx7Gx7Gx7Gx7Gx7Gx7Gx7Gx7Gx7Gx7Gx7Gx7"
"aws_key_id": "AKIAAUDITCANARY00000",
"aws": "AKIA1234567890ABCDEF",
| external webhook (`LLM_ROUTER_ALERT_WEBHOOK`) | n/a (leaves the machine) | Postgres DSN with password | `detail.error` | HTTP POST body captured: `{"event":"budget_postgres_fallback",...,"detail":{""DATABASE_URL": "postgres://u:p@h/db",
DSN = "postgresql://svcuser:[email protected]:5432/prod"
"postgresql://u:pw@h:5432/d",
secret = "sk-proj-MUSTNOTAPPEAR1234567890abcdef"
secret = "sk-ant-DONOTLEAKabcdefghijklmnopqrst"
Gates applied: no_behavioural_pass.
13493fe7e4c4full audit observations/trust-audit/mcp-server/ypollak2__llm-router-2.json · Report an issue / request a re-scanAudit history
Every audit this server has had. A grade with a past is a grade somebody is still checking.
| Date | Source | Verdict | Grade | Score | Change |
|---|---|---|---|---|---|
| 2026-10-07 | 13493fe7e4c4 | BLOCK | F | 38 | first audit |
Questions
What is the LLM Router MCP server?
Universal LLM router for AI coding tools. Works with Claude Code, Cursor, Codex, Gemini CLI, Copilot and more. Free-first fallback chain cuts costs 35-80%.
What tools does LLM Router expose?
6 in total: 5 read-only, 1 that write, and 0 that can delete or overwrite. Every one is listed on this page with its risk.
Is LLM Router safe to connect to an agent?
No — not without reading the findings first. The audit graded it F (38/100) and found 8 critical or high issues in the source. Each one is listed on this page with the file and line it is on.
What credentials does LLM Router need?
It reads ANTHROPIC_API_KEY, DEEPSEEK_API_KEY, GEMINI_API_KEY, GOOGLE_API_KEY, HELICONE_API_KEY, LLM_ROUTER_BROKER_SECRET_FILE, LLM_ROUTER_CP_ED25519_PRIVATE_KEY, LLM_ROUTER_CP_SIDECAR_TOKEN, LLM_ROUTER_DISABLE_CONTINUATION_BYPASS, LLM_ROUTER_ESCALATE_MIN_PROMPT_TOKENS, LLM_ROUTER_GATEWAY_TOKEN and LLM_ROUTER_HF_TOKENIZERS from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.
How current is this page?
The grade is for one exact copy of the source (13493fe7e4c4), read on 2026-10-07. The repository is watched and re-audited when it changes.