About Index9
Index9 is an MCP server for discovering and evaluating AI models from an editor. It is aimed at developers who need to shortlist, compare, and test models, with coverage of more than 300 models and comparisons across pricing, context, and capabilities.
Key features
- 01Search models semantically or with filters
- 02Browse providers and capability facets
- 03Retrieve model metadata
- 04Compare pricing, context, and capabilities
- 05Run inference or estimate costs
Use cases
- 01Shortlist models for a task
- 02Compare pricing and context across models
- 03Estimate model call costs
- 04Test models with live inference
MCP support
It gives MCP clients tools for model discovery, metadata lookup, comparison, and testing. Live tests require an OpenRouter API key; cost estimates can use dryRun.
Configuration
Local server config is the same for every client. Copy it into your client’s MCP config file.
npx -y @index9/mcpOPENROUTER_API_KEYSecretRequired for live test_model calls. dryRun=true works without it.Local servers need a runtime on your machine (e.g. Node.js 18+). Config file locations differ by client; see your client’s docs.
Tools
5Saved tool list · updated 3w ago
| Parameter | Type | Required | Description |
|---|---|---|---|
| q | string | No | Natural language search query describing desired model characteristics (e.g., 'fast cheap coding model'). Uses semantic search with fuzzy matching. Must be at least 2 characters when provided. Optional — omit (along with sortBy=created or sortBy=price) to use filters only. |
| limit | integer | No | Page size (1-100, default 20). |
| cursor | string | No | Opaque pagination cursor from a previous response's `nextCursor` field. IMPORTANT: cursors are bound to the exact query text, filters, and sort order that produced them. Reuse the same query+filters+sort when paginating. `limit` may change between pages. To start a new search, omit the cursor. |
| sortBy | enum | No | Sort order for results. Options: 'relevance' (best semantic match, default), 'created' (newest models), 'price' (cheapest/most expensive, with sortOrder). Defaults to 'relevance'.relevance | created | price |
| maxPrice | number | No | Maximum effective prompt price in USD per million tokens. Matches the basis exposed in `pricing.effectivePromptPerMillion` and `pageInfo.priceSortBasis` — token price plus per-request fees scaled to per-million, so a model with $0.30/M tokens and a $0.30 per-request fee evaluates as $0.60/M effective and is excluded by `maxPrice: 0.55`. Models with no resolvable price (zero-token, no per-request fee, non-`:free` id) are excluded when this bound is set. |
| minPrice | number | No | Minimum effective prompt price in USD per million tokens. Matches the basis exposed in `pricing.effectivePromptPerMillion` and `pageInfo.priceSortBasis` — token price plus per-request fees scaled to per-million, so a model with $0.30/M tokens and a $0.30 per-request fee evaluates as $0.60/M effective. Models with no resolvable price (zero-token, no per-request fee, non-`:free` id) are excluded when this bound is set. |
| modality | enum | No | Required output modality. Filters on the model's output modalities, not input capabilities. For example, "image" finds image-generation models, while capabilitiesAll=["vision"] finds models that accept image input. Valid values: text, image, audio.text | image | audio |
| provider | array | No | Provider prefix filter. Array of provider slugs — a model matches if its ID starts with any of them (e.g., ['openai'] matches 'openai/gpt-4o'; ['openai','anthropic'] matches both). Pass a single-element array for one provider. Common providers: openai, anthropic, google, meta-llama, mistralai, deepseek, cohere. |
| sortOrder | enum | No | Sort order. Defaults by sortBy.asc | desc |
| minContext | integer | No | Minimum context window in tokens. |
| excludeFree | boolean | No | When true, exclude models with id ending in ':free'. Useful for sortBy=price (which would otherwise be dominated by free-tier preview models) and when you want a paid SLA. Default false. |
| createdAfter | string | No | Lower bound for model created timestamp. |
| createdBefore | string | No | Upper bound for model created timestamp. |
| capabilitiesAll | array | No | Array of capabilities that must ALL be present on the model (AND logic). Valid values: function_calling, structured_output, reasoning, web_search, vision, audio_input, file_input, image_generation, audio_output. Example: ["function_calling","vision"]. |
| capabilitiesAny | array | No | Array of capabilities where at least ONE must be present (OR logic). Valid values: function_calling, structured_output, reasoning, web_search, vision, audio_input, file_input, image_generation, audio_output. Example: ["vision","audio_input"]. |
| requireKeywordMatch | boolean | No | When true, suppress weak vector-only results from semantic queries. If no candidate has a BM25 keyword hit, returns an empty page with meta.confidence='low' and meta.lowConfidenceReason — instead of returning misleading nearest-neighbor matches. Filter-only queries (sortBy=created or sortBy=price without q) ignore this flag. Default false. |
Details
From the project README@index9/mcp
Discover, shortlist, compare, cost-model, and live-test 300+ AI models from your editor
Per-editor install configs (Cursor, VS Code, Claude Code, Codex): https://index9.dev/#install
Install
npx -y @index9/mcp@latest
Generic MCP client config:
{
"mcpServers": {
"index9": {
"command": "npx",
"args": ["-y", "@index9/mcp@latest"],
"env": {
"OPENROUTER_API_KEY": "sk-or-..."
}
}
}
}
Claude Code one-liner: claude mcp add --transport stdio index9 -- npx -y @index9/mcp.
OpenRouter API key
Required for live test_model calls. Set OPENROUTER_API_KEY in your MCP client config. dryRun=true works without it.
Tools
- list_facets: List available providers, capabilities, modalities, and tokenizers
- find_models: Search AI models by semantic query or filters
- get_models: Fetch full model metadata for up to 100 IDs or aliases
- compare_models: Diff 2-10 models across pricing, context, capabilities, and tokenizer
- test_model: Run live inference or dry-run cost estimates on 1-10 models (requires OpenRouter API key)
Response metadata
All tool responses include an _index9 object with:
apiBaseUrl: API base URL used for the request
Error responses also include:
status: upstream HTTP status code_index9.retryAfterSeconds: present whenRetry-Afteris returned_index9.rateLimit: present when rate-limit headers are returned (x-ratelimit-limit,x-ratelimit-remaining,x-ratelimit-reset)
Comments
New to MCP?
From what the protocol is to installing your first server, these answers cover most first questions.
An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.