aistupidlevel-mcp
Provides a Hermes Agent provider plugin (hermes plugins install aistupidlevel) that adds the AI Stupid Level router as a model provider for Hermes agents.
Provides an n8n community node (n8n-nodes-aistupidlevel) that lets n8n workflows send chat/LLM requests through the AI Stupid Level router, where each request is dispatched to the model measuring best for that kind of work.
Provides a Raycast extension that lets users query the AI Stupid Level router directly from the Raycast launcher, with requests automatically routed to the best-performing model.
Provides a Vercel AI SDK provider (@aistupidlevel/ai-sdk-provider) so AI SDK applications can use the router as a model backend, with requests routed to the best measured model and routing metadata returned alongside answers and streams.
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 |
| |
Python |
| |
Vercel AI SDK provider |
| |
MCP server (Claude, Cursor, VS Code, …) |
| |
n8n community node | Settings → Community Nodes → | |
Raycast extension | Raycast Store (in review) | |
Hermes Agent provider plugin |
| |
OpenClaw provider plugin |
|
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)Related MCP server: AgentLayer MCP Server
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/n8n-nodes-aistupidlevel && npm ci && npm run build && npm run lint && npm test
# Python
cd python && pip install -e . && python -m unittest discover -s testsThe 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 testsReleasing
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.
Licence
MIT
Available Tools
11 toolsask_routerAsk via Smart RouterA
Send a prompt through the AI Stupid Level Smart Router and return the answer, together with which model answered, its provider, why the router chose it and the latency. The router calls the model with the provider keys saved in the user's ASL account, so a real call is billed by that provider and counts against the router plan; set sandbox: true for a free mock answer. Needs a router key (ASL_ROUTER_KEY).
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Routing mode (default auto = the strategy saved in the account): auto-best (highest combined score), auto-coding, auto-reasoning, auto-tooling (top model on that benchmark), auto-task (reads the prompt and picks the benchmark), auto-value, auto-value-coding, auto-value-reasoning, auto-value-tooling (most points per measured dollar among models within 5 points of the best), auto-fastest-quality, auto-consistent (fastest or steadiest near-top model), auto-fastest, auto-cheapest (no quality bar). | |
| prompt | Yes | The user message to send. | |
| system | No | An optional system message. | |
| sandbox | No | Sandbox: run the real routing as if the account had a key for every provider and return a mock answer. Nothing is called, spent or counted. | |
| pin_model | No | Pin a specific model id (for example gpt-6-sol) instead of a routing mode. | |
| max_tokens | No | Upper bound on the answer length in tokens. | |
| reasoning_effort | No | Reasoning effort for models that support it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations covering only the safety profile, the description carries substantial extra burden and delivers: it names the auth requirement (ASL_ROUTER_KEY), discloses billing and quota consequences of a live call, explains the sandbox escape hatch, and enumerates the response fields (model, provider, routing reason, latency).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences, front-loaded with the action and its return value before cost and auth caveats. Slightly long but each sentence adds distinct information (output, billing, sandbox, key), so little is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter open-world execution tool with no output schema, the description covers the two things an agent most needs before calling: the auth prerequisite and the cost/mutation implications, plus the shape of the result. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the mode enum is documented in exhaustive detail inside the schema, so the schema does the heavy lifting. The description only surfaces sandbox in prose, adding little beyond structured data; baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('send a prompt through the AI Stupid Level Smart Router and return the answer') plus the return payload, so the agent knows this is the execution tool. It is distinguishable from the get_* siblings, but it never names its closest sibling, preview_route, which is the natural confusion point.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Offers real usage context: a live call is billed by the provider and counts against the router plan, while sandbox: true gives a free mock. However, it gives no explicit when-to-use-vs-alternative guidance, notably no 'use preview_route first to inspect the decision without spending' routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_drift_statusModel drift statusARead-onlyIdempotent
Whether an LLM's measured performance has shifted: AI Stupid Level's drift signature for one model, with its regime (stable, degrading, …), current score against its baseline, the change-point detector per benchmark suite, the last significant change and which axes moved. Use it to answer "has model X got worse?" or "is X being nerfed?".
| Name | Required | Description | Default |
|---|---|---|---|
| model | Yes | The model: its numeric id, its name (for example claude-opus-5-5 or gpt-6-sol) or its display name. get_leaderboard lists the tracked models with their ids. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnly, idempotent, non-destructive, openWorld), and the description goes further by disclosing what the payload actually contains: a per-model drift signature, a regime classification, per-benchmark-suite change-point detection, and axis-level attribution. With no output schema, this content disclosure is the main behavioral value-add; only return formatting/pagination is unmentioned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose, then the returned fields, then the usage questions. The middle field list is dense and slightly enumerative — several items restate the same 'what changed' idea (change point, last significant change, axes moved) — but nothing is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read with no output schema, enumerating the response contents is exactly the missing piece and it is supplied. Nothing an agent needs in order to call it correctly is absent; only edge cases (unknown model, insufficient data) are unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single 'model' parameter is fully documented in the schema, including its accepted forms (numeric id, name, display name) and a pointer to get_leaderboard. The description adds nothing parameter-level, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb+resource — measuring whether an LLM's measured performance has shifted — and enumerates the exact sub-signals returned (regime, score vs baseline, change-point detector, last significant change, moved axes). That level of detail lets an agent separate it from get_model and get_model_history without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It supplies concrete triggering questions ('has model X got worse?', 'is X being nerfed?'), which is strong positive guidance. It stops short of naming an alternative tool or stating when not to use it (e.g., versus get_model_history for raw history), so no exclusions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_global_indexGlobal AI indexARead-onlyIdempotent
AI Stupid Level's global index: one 0-100 number for the tracked models together, now and over the last 24 hours, with its trend and how many models are performing well. Use it for "are AI models worse today?".
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is fully covered elsewhere. The description usefully adds the temporal window (now + last 24 hours) and the output value semantics, but says nothing about freshness/caching, refresh cadence, or what threshold counts as 'performing well'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, both front-loaded with the payload description first and the routing hint second. Every clause carries information — the 0-100 scale, the two time horizons, trend, and model count — with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no parameters, the description is the only place return values can be conveyed, and it does state the core fields (index value, trend, healthy-model count). It is nearly complete, though it omits the exact response shape and any hint about refresh timing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is no parameter semantics to explain; per the rubric this is the baseline 4. Nothing in the description contradicts or confuses the empty schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states concretely what the tool returns: a single 0-100 aggregate score for tracked models, both current and over the last 24 hours, plus trend and a count of well-performing models. This is specific enough to distinguish it from per-model tools like get_leaderboard, but it never names or explicitly contrasts a sibling, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a concrete triggering question — 'are AI models worse today?' — which tells the agent what class of user intent should route here. There are no exclusions (e.g., when to prefer get_drift_status or get_leaderboard instead), so it lacks the when-not guidance needed for a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_incidentsRecent incidentsBRead-onlyIdempotent
Recent incidents AI Stupid Level recorded: provider-wide degradations and model-level problems, with severity, the models affected, when each was detected and whether and when it was resolved.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many incidents to show, newest first (default 10). | |
| provider | No | Only incidents for this provider: openai, anthropic, google, deepseek, kimi or glm. | |
| open_only | No | Only incidents that are not resolved yet (default false). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, openWorld, idempotent, and non-destructive behavior. The description adds useful context about what is returned (severity, affected models, detection and resolution timestamps), but it does not disclose any additional behavioral traits such as rate limits, caching, or pagination beyond the limit parameter.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, dense sentence that front-loads the resource and then lists the returned attributes. It is efficient with no wasted words, though the long list makes it slightly harder to scan than a more structured presentation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only listing tool with full schema coverage and helpful annotations, the description adequately explains what an incident record contains (severity, models, detection time, resolution status). It doesn't need to explain return values further, and the only minor gap is the absence of explicit sorting or pagination context beyond the schema's note that limit defaults to 10 newest-first.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents the limit, provider, and open_only parameters. The description does not add any parameter-level meaning beyond what the schema provides, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific resource (recent incidents) and enumerates the key fields: provider-wide degradations, model-level problems, severity, affected models, detection and resolution times. It clearly distinguishes this from general status or drift tools, though it doesn't explicitly name sibling alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use, when-not-to-use, or alternative-routing guidance is provided. The description merely describes the payload, leaving the agent to infer that this tool is for viewing incidents rather than, say, provider status or drift.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_leaderboardLLM leaderboardARead-onlyIdempotent
Ranking of the LLM APIs AI Stupid Level tracks (OpenAI, Anthropic, Google, DeepSeek, Kimi, GLM models) by benchmark score, 0-100. Use it to find the best model overall or for coding, reasoning or tool use, to compare models, and to get the model ids the other tools accept. Each row has the score, trend, status, stability and when it was last updated.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many models to show (default 10). | |
| period | No | Score window: 24h, 7d or 1m (30-day) averages, or latest (the newest run). Omit it to use the key's default: 24h on a free Data API key, latest on a paid one. latest needs a paid key. | |
| vendor | No | Only show models from this vendor: openai, anthropic, google, deepseek, kimi or glm. | |
| sort_by | No | Which ranking: combined (default, all suites), coding, reasoning, tooling (tool use / agentic tasks), or price (score per list-price dollar). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint, idempotentHint and openWorldHint, so the safety profile is covered. The description adds genuinely new context: the 0-100 score scale and the per-row contents (score, trend, status, stability, last updated), which matters because there is no output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the identity and scale of the resource before the use cases and row contents. Efficient, though the parenthetical vendor list is borderline redundant with the schema's vendor parameter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully compensates by enumerating the fields each row contains. Purpose, usage and output shape are all covered; only cross-tool routing details and pagination-like behavior are absent, which is minor for a read-only listing tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents limit, period, vendor and sort_by thoroughly, including defaults and the paid-key requirement for 'latest'. The description echoes the ranking dimensions (coding, reasoning, tool use) but adds no syntax or format detail beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a concrete resource (a ranking of tracked LLM APIs) and a concrete output (benchmark score 0-100), and it distinguishes itself from siblings by noting it supplies the model ids the other tools accept. An agent can tell this apart from get_model or get_recommendations without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit usage contexts: finding the best model overall or for coding/reasoning/tool use, comparing models, and obtaining model ids for other tools. It does not name alternatives or state when not to use it, but the routing intent is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_modelModel detailsARead-onlyIdempotent
Details AI Stupid Level holds on one tracked LLM: vendor, version, notes on how it is called and priced, tool-calling support, how long it has been tracked, and its leaderboard row when one has been fetched.
| Name | Required | Description | Default |
|---|---|---|---|
| model | Yes | The model: its numeric id, its name (for example claude-opus-5-5 or gpt-6-sol) or its display name. get_leaderboard lists the tracked models with their ids. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, openWorld), so the bar is low, and the description clears it by disclosing a real behavioral quirk: the leaderboard row is present only 'when one has been fetched', i.e. conditionally populated. That is non-obvious and useful, though permissions and error behavior go unstated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, front-loaded with purpose before the field inventory, and every listed field earns its place by telling the agent what it can rely on being returned. The enumeration is long but not padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of describing the return shape and does so by enumerating the fields, including the conditional leaderboard row. Remaining gaps (resolution when a name is ambiguous, behavior for an untracked model) are minor for a single-parameter read tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the schema already documents the single 'model' parameter including example names and the get_leaderboard pointer, so the description correctly adds nothing further. Baseline 3 when structured data does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb (retrieves details) and a tightly scoped resource: one tracked LLM, with the exact fields returned enumerated. It does not name the nearest sibling, get_model_history, so an agent could still confuse a current snapshot with a history lookup.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or when-not-to-use statement, and no alternative is named (get_model_history is the obvious ambiguity). Usage is only implied via the practical pointer to get_leaderboard for locating a model's id.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_model_historyModel score historyARead-onlyIdempotent
Score history of one LLM on AI Stupid Level: each benchmark run in the window with its score, plus the newest run's per-axis results (correctness, code quality, efficiency, …). Use it to see whether a model got better or worse over time.
| Name | Required | Description | Default |
|---|---|---|---|
| model | Yes | The model: its numeric id, its name (for example claude-opus-5-5 or gpt-6-sol) or its display name. get_leaderboard lists the tracked models with their ids. | |
| period | No | Score window: 24h, 7d or 1m (30-day) averages, or latest (the newest run). Omit it to use the key's default: 24h on a free Data API key, latest on a paid one. latest needs a paid key. | |
| max_points | No | How many runs to list, newest first (default 30). The summary always covers every run. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so safety is covered; the description goes further by disclosing the response composition (per-run scores plus per-axis breakdown for the newest run only). It does not mention the free-vs-paid key restrictions on 'latest', though that lives in the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences: the first front-loads what is returned, the second front-loads the use case. No filler, no repetition of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully carries the return-shape burden by naming the run-level scores and the per-axis breakdown. It stops short of describing ordering (newest first), listing limits, or how the summary relates to max_points, which the schema covers but the description could tie together.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter (model, period, max_points) is already fully documented in the schema, including the 24h/latest key defaults. The description adds only the loose notion of a 'window', so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — 'Score history of one LLM on AI Stupid Level' — and spells out what the payload contains (each run with its score, plus the newest run's per-axis results). It is unmistakably distinct from siblings like get_leaderboard or get_model.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use it to see whether a model got better or worse over time' gives intended usage, but there is no explicit when-not and no named alternative (e.g. use get_leaderboard to compare models rather than track one). Routing guidance is implied rather than stated, leaving the agent to infer the boundary with get_leaderboard/get_model.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_provider_statusProvider statusARead-onlyIdempotent
Current status of each LLM provider's API as AI Stupid Level's health probes see it (OpenAI, Anthropic, Google, DeepSeek, Kimi, GLM): operational or not, probe response time, the last error and when it was checked. For past outages use get_incidents.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, openWorld, non-destructive), so the description's job is to add context beyond that. It does: it discloses the data shape (operational or not, probe response time, last error, last-checked timestamp) and, importantly, that the view is probe-derived rather than authoritative. No rate limits or caching behavior is mentioned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero waste. The payload description is front-loaded, the provider list is relevant scope information, and the final sentence handles routing to the sibling tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no parameters and no output schema, the description carries the return-value burden and does so: it enumerates the fields an agent will receive and clarifies the data source. Nothing needed to call or interpret this tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so per the rubric the baseline is 4. The description correctly adds no parameter semantics, since there are none to describe, and instead spends its words on return content.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Current status of each LLM provider's API'), enumerates the covered providers, and names the perspective ('as AI Stupid Level's health probes see it'), which distinguishes it from get_incidents and get_drift_status without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the adjacent case away ('For past outages use get_incidents'), giving a clear when-to-use-this-vs-that signal. It stops short of stating any exclusions or prerequisites for this tool itself (e.g., that it is a live snapshot, not historical), so it is not a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recommendationsModel recommendationsARead-onlyIdempotent
AI Stupid Level's current picks: the best model for coding, the most reliable (steadiest score), the fastest, the best value (most points per measured dollar among near-top models), models that cost far more than an equally good alternative, and models to avoid right now. Each pick comes with the reason and the evidence it rests on. Use it for "which model should I use?".
| Name | Required | Description | Default |
|---|---|---|---|
| period | No | Score window: 24h, 7d or 1m (30-day) averages, or latest (the newest run). Omit it to use the key's default: 24h on a free Data API key, latest on a paid one. latest needs a paid key. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is fully covered. The description adds only that each pick carries its reason and evidence, which hints at response content but reveals nothing about freshness, caching, auth needs, or rate limits beyond what the schema states for 'latest'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the list of pick categories, and the parenthetical glosses (e.g. 'most points per measured dollar among near-top models') earn their space by disambiguating the picks. The trailing question is slightly awkward but functional.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of describing what comes back, and it does so well by listing the pick categories plus the attached reason and evidence. The only real gap is the absence of any pointer to or contrast with sibling tools for an agent choosing between this and get_leaderboard.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single 'period' enum is documented in detail there, including the free-vs-paid key defaults. The description says nothing about the period parameter, so it adds no meaning beyond the schema; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description enumerates exactly what the tool returns: coding pick, steadiest score, fastest, best value, overpriced models, and models to avoid, each with reason and evidence. That is far more specific than its siblings' surface (e.g. get_leaderboard), though it never states the verb explicitly, relying on 'current picks' and the trailing usage question to imply retrieval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use it for "which model should I use?"' gives a clear selection context that separates it from raw-data siblings like get_leaderboard or get_model. It offers no explicit exclusions or named alternatives, so an agent must infer that this is the curated layer rather than the underlying data.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_usageASL usage and limitsARead-onlyIdempotent
This month's Smart Router usage for the configured router key (requests used and left, prepaid credits, the key's budget), and the Data API requests left today for the configured data key. Use it when a tool reports a limit, or to check the keys work.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds meaningful context beyond that: it reads only the *configured* router and data keys (no parameterization, uses ambient credentials) and surfaces limit/quota state, which explains its diagnostic role.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the primary payload (Smart Router usage), then the secondary one (Data API requests), then a compact usage clause. The first sentence is dense with parenthetical enumerations but every element maps to returned data, so little is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of describing returns and does so adequately by listing the usage fields. It stops short of describing the response shape or what happens when a configured key is missing or invalid, which matters given the stated 'check the keys work' use case.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so the baseline of 4 applies. The description correctly implies the tool is parameterless by referring to 'the configured router key' and 'the configured data key' rather than any caller-supplied identifiers.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (get usage/limits) and enumerates exactly what is returned: this month's Smart Router requests used and left, prepaid credits, the key's budget, and Data API requests left today. This clearly distinguishes it from siblings like get_provider_status, get_leaderboard, or get_incidents.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives two concrete trigger conditions: 'when a tool reports a limit' and 'to check the keys work.' That is clear when-to-use guidance, though it names no alternative tool or a when-not condition, and no sibling overlaps enough to require explicit routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
preview_routePreview Smart Router choiceARead-onlyIdempotent
Which model the AI Stupid Level Smart Router would send a prompt to, and why: the routing strategy, the chosen model and provider with its benchmark score and estimated cost, and the fallback chain. Nothing is sent to a model and nothing is counted. Needs a router key (ASL_ROUTER_KEY).
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Routing mode (default auto = the strategy saved in the account): auto-best (highest combined score), auto-coding, auto-reasoning, auto-tooling (top model on that benchmark), auto-task (reads the prompt and picks the benchmark), auto-value, auto-value-coding, auto-value-reasoning, auto-value-tooling (most points per measured dollar among models within 5 points of the best), auto-fastest-quality, auto-consistent (fastest or steadiest near-top model), auto-fastest, auto-cheapest (no quality bar). | |
| prompt | Yes | The prompt to route (the decision can depend on it, for example with auto-task). | |
| system | No | An optional system message. | |
| sandbox | No | Sandbox: run the real routing as if the account had a key for every provider and return a mock answer. Nothing is called, spent or counted. | |
| pin_model | No | Pin a specific model id (for example gpt-6-sol) instead of a routing mode. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, and the description reinforces this by confirming no model is called and nothing is counted or billed. It also surfaces the auth requirement (ASL_ROUTER_KEY), which annotations cannot express. It doesn't elaborate on failure modes (e.g. missing key behavior) beyond the sandbox note.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the outcome (which model and why) before the safety constraint and key requirement. The opening sentence is dense but every clause maps to a distinct return field; the two short follow-up sentences are pure value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description compensates by enumerating the returned decision details, and it covers the no-side-effect guarantee and the credential prerequisite. An agent has everything needed to call this correctly and interpret the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, including a fully enumerated mode list, so the schema carries parameter meaning. The description adds no per-parameter syntax or defaults beyond what the schema already documents, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb-scope (preview the routing decision) and enumerates the exact outputs: strategy, chosen model/provider with benchmark and estimated cost, and fallback chain. This clearly separates it from ask_router, which actually dispatches the prompt.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Nothing is sent to a model and nothing is counted" clearly frames it as the safe dry-run alternative to actually asking the router, and the router-key prerequisite is stated. It stops short of naming ask_router explicitly as the contrasting sibling, so the routing choice is implied rather than spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
11 tool updates
v0.1.0- First observed
ask_router - First observed
get_drift_status - First observed
get_global_index - First observed
get_incidents - First observed
get_leaderboard - First observed
get_model - First observed
get_model_history - First observed
get_provider_status - First observed
get_recommendations - First observed
get_usage - First observed
preview_route
TDQS
Scored across 11 tools
Most tools target clearly distinct concerns, and descriptions actively disambiguate overlapping clusters (e.g. leaderboard vs recommendations vs global_index, and provider_status vs incidents vs drift_status). There is some residual overlap among the three 'model quality' tools and the three 'health' tools, but each states a specific use case that keeps selection reliable.
Nine tools follow a clean get_<noun> read-only convention (get_leaderboard, get_model, get_incidents, etc.), and the two router tools use action verbs (preview_route, ask_router) that correctly signal they perform a route/action. The mix is minor and semantically motivated rather than chaotic.
Eleven tools is well within the sweet spot for a model-intelligence service, and each maps to a distinct data surface (status, leaderboard, model detail, usage, history, drift, incidents, recommendations, index, routing preview, routing). No tool feels redundant or padded.
The surface covers the full lifecycle well: discovery (leaderboard/model), health (status/incidents/drift), trends (history/global_index), guidance (recommendations), usage/quota, and both dry-run and live routing. Minor gaps like an explicit model search-by-name or head-to-head compare tool exist but are workable via the leaderboard and get_model.
Maintenance
Related MCP Connectors
Source-backed AI model pricing, rankings, history, and benchmark data.
Live data on AI agents, APIs and models: prices, free tiers, limits, outages, real-world usage.
Live status, API pricing and rate limits for ChatGPT, Claude, Gemini, Cursor and 42+ AI tools.
Live LLM API price + status radar across 11 providers, with public per-model price HISTORY.
Related MCP Servers
- AlicenseAqualityDmaintenanceGive your AI assistant real-time LLM/VLM knowledge. Pricing, benchmarks, and recommendations — updated every hour, not every training cycle.480 npm2MIT
- FlicenseNot gradedqualityBmaintenanceProvides real-time AI infrastructure data including LLM costs, model benchmarks, API deprecations, quality scores, and agent spend tracking. Supports authentication, rate limiting, x402 micropayments, and Stripe billing.-
- AlicenseNot gradedqualityCmaintenanceProvides AI agents with honest benchmark rankings (Agentic Memory Index and Agentic Search Index) for AI tools, plus graded checks and telemetry for x402 endpoints.4 npmMIT
- AlicenseBqualityBmaintenanceal-time AI ecosystem intelligence for agents: 1,250+ classified AI security incidents, API pricing for 26 models across 7 providers, GPU cloud pricing, live provider status and cross-signal company analysis. No API key required.11MIT