whichmodel-mcp
by Which-Model
README.md
# whichmodel-mcp
> A model routing advisor for autonomous agents — get cost-optimised LLM recommendations via MCP.
**whichmodel.dev** tracks pricing and capabilities across 100+ LLM models, updated every 4 hours. This MCP server exposes that data so AI agents can pick the right model at the best price for every task.
## MCP Endpoint
```
https://whichmodel.dev/mcp
```
**Transport:** Streamable HTTP (MCP spec 2025-03-26)
## Quick Start
Add to your MCP client config:
```json
{
"mcpServers": {
"whichmodel": {
"url": "https://whichmodel.dev/mcp"
}
}
}
```
No API key required. No installation needed.
### Stdio (local clients)
For MCP clients that use stdio transport (Claude Desktop, Cursor, etc.):
```json
{
"mcpServers": {
"whichmodel": {
"command": "npx",
"args": ["-y", "whichmodel-mcp"]
}
}
}
```
This runs a thin local proxy that forwards requests to the remote server.
## Tools
### `recommend_model`
Get a cost-optimised model recommendation for a specific task type, complexity, and budget.
| Parameter | Type | Description |
|-----------|------|-------------|
| `task_type` | enum (required) | `chat`, `code_generation`, `code_review`, `summarisation`, `translation`, `data_extraction`, `tool_calling`, `creative_writing`, `research`, `classification`, `embedding`, `vision`, `reasoning` |
| `complexity` | `low` \| `medium` \| `high` | Task complexity (default: `medium`) |
| `estimated_input_tokens` | number | Expected input size in tokens |
| `estimated_output_tokens` | number | Expected output size in tokens |
| `budget_per_call` | number | Maximum spend in USD per call |
| `requirements` | object | Capability requirements: `tool_calling`, `json_output`, `streaming`, `context_window_min`, `providers_include`, `providers_exclude` |
Returns: recommended model, alternative, budget option, cost estimate, and reasoning.
---
### `compare_models`
Head-to-head comparison of 2–5 models with optional volume cost projections.
| Parameter | Type | Description |
|-----------|------|-------------|
| `models` | string[] (required) | Model IDs, e.g. `[anthropic/claude-sonnet-4, openai/gpt-4.1]` |
| `task_type` | enum | Context for comparison |
| `volume` | object | `calls_per_day`, `avg_input_tokens`, `avg_output_tokens` for daily/monthly cost projections |
Returns: pricing, capabilities, quality tiers, and projected costs per model.
---
### `get_pricing`
Raw pricing data lookup with filters by model, provider, price ceiling, and capabilities.
| Parameter | Type | Description |
|-----------|------|-------------|
| `model_id` | string | Specific model ID |
| `provider` | string | Filter by provider, e.g. `anthropic` |
| `max_input_price` | number | Max input price per million tokens (USD) |
| `capabilities` | string[] | Required capabilities: `tool_calling`, `json_output`, `streaming`, `vision` |
| `min_context_window` | number | Minimum context window in tokens |
| `limit` | number | Max results (1–100, default 20) |
---
### `check_price_changes`
See what model pricing has changed since a given date.
| Parameter | Type | Description |
|-----------|------|-------------|
| `since` | string (required) | ISO date, e.g. `2026-04-01` |
| `model_id` | string | Filter to a specific model |
| `provider` | string | Filter to a specific provider |
Returns: price increases, decreases, new models, and deprecations.
## Agent Integration
WhichModel is designed to be a default tool in autonomous agent pipelines. Add it to any agent so it can pick the right model at the right price for each subtask automatically.
### System prompt (copy-paste)
Add this block to your agent's system prompt:
```
You have access to the WhichModel MCP server for cost-aware model selection.
Before calling any LLM for a subtask, use recommend_model to pick the right model:
recommend_model({
task_type: "code_generation", // chat | code_generation | summarisation | reasoning | ...
complexity: "medium", // low | medium | high
estimated_input_tokens: 2000, // optional
estimated_output_tokens: 500, // optional
budget_per_call: 0.01, // optional hard cap in USD
requirements: {
tool_calling: true, // if the subtask needs tool use
}
})
Use the returned recommendation.model_id. The response includes cost_estimate and
reasoning so you can log why each model was chosen.
```
### Prompt templates via MCP
The server exposes built-in prompt templates you can fetch via `prompts/get`:
| Prompt name | Use case |
|---|---|
| `cost-aware-agent` | Full system prompt block for cost-aware model selection |
| `task-router-snippet` | Minimal snippet to add to an existing system prompt |
| `budget-constrained-agent` | Hard cost cap per call (pass `budget_usd` argument) |
Retrieve them programmatically:
```json
{ "method": "prompts/get", "params": { "name": "cost-aware-agent" } }
```
### Framework integrations
- **LangChain:** [`langchain-whichmodel`](https://pypi.org/project/langchain-whichmodel/) — `WhichModelRouter` chain
- **Haystack:** [`whichmodel-haystack`](https://pypi.org/project/whichmodel-haystack/) — `WhichModelRouter` component
## Data Freshness
Pricing data is refreshed every 4 hours from OpenRouter. Each response includes a `data_freshness` timestamp so you know how current the data is.
## Links
- **Website:** [whichmodel.dev](https://whichmodel.dev)
- **MCP endpoint:** [https://whichmodel.dev/mcp](https://whichmodel.dev/mcp)
- **Discovery:** [https://whichmodel.dev/.well-known/mcp.json](https://whichmodel.dev/.well-known/mcp.json)
- **nAIm registry:** [naim.janis7ewski.org](https://naim.janis7ewski.org) — AI service registry; browse the LLM category to find WhichModel as a live pricing source and deep-link to the MCP endpoint
This server cannot be deployed
Maintenance
ActivityInactive
ResponsivenessUnresponsive