Skip to main content
Glama
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