AI Stupid Level
LLM benchmark rankings, drift status, incidents and Smart Router previews from AI Stupid Level.
Install
Add this to your client's MCP configuration (Claude Desktop: claude_desktop_config.json; Cursor: .cursor/mcp.json; VS Code and others use the same "mcpServers" shape).
@aistupidlevel/mcpclaude mcp add ai-stupid-level -e 'ASL_DATA_KEY=<your asl_data_key>' -e 'ASL_ROUTER_KEY=<your asl_router_key>' -e 'ASL_SANDBOX=false' -- npx -y @aistupidlevel/mcp@0.1.1
{
"mcpServers": {
"ai-stupid-level": {
"command": "npx",
"args": [
"-y",
"@aistupidlevel/mcp@0.1.1"
],
"env": {
"ASL_DATA_KEY": "<your asl_data_key>",
"ASL_ROUTER_KEY": "<your asl_router_key>",
"ASL_SANDBOX": "false"
}
}
}
}
Environment variables
ASL_DATA_KEYsecret Data API key (asl_live_...) for rankings, history, drift, incidents and provider status. Free key: https://aistupidlevel.info/account/data-keys (10 requests a day, 1 a minute).ASL_ROUTER_KEYsecret Smart Router key (aism_...) for preview_route, ask_router and usage. Create one at https://aistupidlevel.info/router/keys.ASL_SANDBOXtrue: every Smart Router call returns a mock answer from real routing, so nothing is spent or counted.
Documentation
From the project's README on GitHub, refreshed weekly. Links open on GitHub.
Contents
AI Stupid Level SDKs
Official clients for the AI Stupid Level Smart Router, an OpenAI-compatible endpoint. Each request goes to the model measuring best for that kind of work, based on benchmarks that are re-run continuously. You call it with your own provider keys.
| Package | Install | Source |
|---|---|---|
| TypeScript / JavaScript | npm install @aistupidlevel/router | packages/router |
| Python | pip install aistupidlevel | python |
| Vercel AI SDK provider | npm install @aistupidlevel/ai-sdk-provider | packages/ai-sdk-provider |
| MCP server (Claude, Cursor, VS Code, …) | npx -y @aistupidlevel/mcp | packages/mcp |
| n8n community node | Settings → Community Nodes → n8n-nodes-aistupidlevel | packages/n8n-nodes-aistupidlevel |
| Raycast extension | Raycast Store (in review) | integrations/raycast/aistupidlevel |
LangChain chat model (ChatAISL) | pip install langchain-aistupidlevel | langchain-python |
| Hermes Agent provider plugin | hermes plugins install aistupidlevel | integrations/hermes/aistupidlevel |
| DeepSeek Harness plugin bundle | dsh plugin --profile web add @aistupidlevel/dsh-provider | packages/dsh-provider |
| OpenClaw provider plugin | openclaw plugins install clawhub:@aistupidlevel/openclaw-provider | packages/openclaw-provider |
| Pi provider extension | pi install npm:@aistupidlevel/pi-provider | packages/pi-provider |
| Langflow model provider + component | pip install lfx-aistupidlevel, then restart Langflow | langflow-python |
| Open WebUI Function (manifold pipe) | Admin Panel → Functions → Import from URL | integrations/open-webui |
openapi/router-v1.json describes the API in OpenAPI 3.1, for generating a
client in any other language. The live copy is at https://aistupidlevel.info/v1/openapi.json.
Quick start
import { ASLRouter } from '@aistupidlevel/router';
const router = new ASLRouter(); // ASL_ROUTER_KEY
const r = await router.chat.completions.create({ model: 'auto-coding', messages: [{ role: 'user', content: 'Fix this bug: ...' }] });
console.log(r.choices[0].message.content, r.routing.model, r.routing.reasoning);
from aistupidlevel import ASLRouter
router = ASLRouter() # ASL_ROUTER_KEY
r = router.chat.completions.create(model="auto-coding", messages=[{"role": "user", "content": "Fix this bug: ..."}])
print(r.choices[0].message.content, r.routing.model, r.routing.reasoning)
Why use an SDK instead of an OpenAI client
Any OpenAI client works against https://aistupidlevel.info/v1. The SDKs add:
- Routing info on every answer and stream: the model and provider that answered, why they were chosen, and whether a fallback answered.
- Safe retries. An automatic
Idempotency-Keymeans a request is answered once, even if it is retried. - Typed errors with
partyandretryable. An app can tell its user to top up, to fix a provider key, or simply to try again. runTools/run_tools, a tool-calling loop that stays on one model.- Sandbox mode (mock answers through real routing, at no cost), route previews, and usage.
See the API documentation.
Development
# TypeScript (the router package runs on Node 18+; the AI SDK provider needs Node 22+)
cd packages/router && npm ci && npm run build && npm test
cd packages/ai-sdk-provider && npm ci && npm run build && npm test
cd packages/mcp && npm ci && npm run build && npm test
cd packages/openclaw-provider && npm ci && npm test # Node 24.16+, like OpenClaw
cd packages/pi-provider && npm ci && npm test # Node 22.19+, like Pi
cd packages/n8n-nodes-aistupidlevel && npm ci && npm run build && npm run lint && npm test
# Python
cd python && pip install -e . && python -m unittest discover -s tests
cd langflow-python && pip install -e . pytest && pytest tests # in a venv with Langflow 1.12+
The live tests run against the real router in sandbox mode, so nothing is spent. They need a router key and are skipped without one:
ASL_ROUTER_KEY=aism_... npm test
ASL_ROUTER_KEY=aism_... python -m unittest discover -s tests
Releasing
- Bump the version in every place it appears:
packages/router/package.jsonandpackages/router/src/core.ts;packages/ai-sdk-provider/package.jsonandpackages/ai-sdk-provider/src/index.ts;packages/mcp/package.json,packages/mcp/src/config.tsand both versions inpackages/mcp/server.json;python/src/aistupidlevel/_version.py.
- npm:
npm publish --access publicin each package directory.prepublishOnlybuilds the package and runs its tests first. - PyPI:
cd python && python -m build && twine upload dist/*. - MCP Registry, after the npm release of
@aistupidlevel/mcp:cd packages/mcp && mcp-publisher login github && mcp-publisher publish. - n8n node: n8n accepts only npm releases with provenance, so it is published by
.github/workflows/n8n-publish.yml. Bumppackages/n8n-nodes-aistupidlevel/package.jsonand itsCHANGELOG.md, then push a tagn8n-v<version>. - Raycast: from
integrations/raycast/aistupidlevel,npm run publishopens a pull request to raycast/extensions. - Pi:
cd packages/pi-provider && npm publish(Node 22.19+). Push first: the pi.dev gallery image is read frommain. Thepi-packagekeyword lists it on pi.dev/packages; there is nothing to submit. - Langflow: bump
langflow-python/pyproject.toml,src/lfx_aistupidlevel/__init__.pyandsrc/lfx_aistupidlevel/extension.json(a test checks they match), thencd langflow-python && uv build && twine upload dist/*with twine 7 or later.
Licence
MIT
Frequently asked questions
What is AI Stupid Level?
LLM benchmark rankings, drift status, incidents and Smart Router previews from AI Stupid Level.
How do I install AI Stupid Level?
It runs on your machine. In Claude Code: claude mcp add ai-stupid-level -e 'ASL_DATA_KEY=<your asl_data_key>' -e 'ASL_ROUTER_KEY=<your asl_router_key>' -e 'ASL_SANDBOX=false' -- npx -y @aistupidlevel/mcp@0.1.1. For other clients, paste the JSON configuration from this page into their MCP settings.
Does AI Stupid Level need an API key?
Yes. It expects ASL_DATA_KEY, ASL_ROUTER_KEY, which you set in its configuration.
Is AI Stupid Level open source?
Yes. Its code is on GitHub under the MIT license.
Who maintains AI Stupid Level?
It is published by StudioPlatforms. AI.tn lists it but does not maintain or endorse it.
From the official MCP Registry. Listing is not an endorsement: review a server's code and permissions before giving it access to your data.