models-mcp
Models MCP
AI 모델을 가격, 컨텍스트 창, 기능에 따라 검색, 비교, 조사합니다. models.dev 카탈로그(models.dev/api.json)를 기반으로 하는 MCP 서버로, 목록을 수동으로 유지하지 않아도 에이전트가 항상 최신 모델 데이터를 사용할 수 있습니다.
models.dev 자체는 MCP 서버를 제공하지 않고 JSON API와 이를 읽기 위한 TypeScript SDK만 제공합니다. 이 프로젝트가 그 공백을 메웁니다.
동일한 도구 코드로 두 가지 방식으로 실행됩니다:
stdio(
src/index.ts): 로컬 MCP 클라이언트용Cloudflare Worker(
src/worker.ts):/mcp에서 원격 Streamable HTTP 엔드포인트로 제공
도구
도구 | 기능 |
| 모든 제공업체(anthropic, openai, google 등)를 모델 수와 함께 나열 |
| 이름, 제공업체, 최소 컨텍스트 창, 최대 입력 비용 또는 기능 플래그(reasoning, tool_call, attachment)로 모델 필터링 |
|
|
| 2~6개 모델의 가격, 컨텍스트, 기능을 나란히 비교 |
| 1시간 캐시를 우회하고 강제로 다시 가져오기 |
Related MCP server: model-version-mcp
설치
npm install
npm run buildstdio로 단독 실행 (테스트용)
npm startstdio를 통해 MCP를 사용하므로 직접 출력이 거의 보이지 않습니다. MCP Inspector로 살펴보세요:
npx @modelcontextprotocol/inspector node dist/index.jsCloudflare Workers에 호스팅
Worker 진입점(src/worker.ts)은 /mcp에서 Streamable HTTP로 동일한 도구를 제공하며, 다음과 같은 기능을 포함합니다:
카탈로그 캐싱: Workers Cache API(
caches.default)에 1시간 TTL로 캐시되며 요청과 격리(isolate) 간에 공유됩니다.IP별 속도 제한: Workers rate limiting 바인딩을 통해 IP당 분당 60회 요청으로 제한되고, Cloudflare 위치별로 적용됩니다. 초과 요청은
Retry-After: 60과 함께429응답을 받습니다.
# local dev at http://localhost:8787/mcp
npm run dev:worker
# deploy
npm run deploy배포 후 엔드포인트는 https://models-mcp.<your-subdomain>.workers.dev/mcp입니다.
MCP 클라이언트를 이 주소로 지정하세요:
Claude Code:
claude mcp add --transport http models-mcp https://models-mcp.<your-subdomain>.workers.dev/mcp일반 클라이언트 구성(Streamable HTTP를 지원하는 모든 것):
{
"mcpServers": {
"models-mcp": {
"url": "https://models-mcp.<your-subdomain>.workers.dev/mcp"
}
}
}stdio 전용 클라이언트(Claude Desktop)의 경우 mcp-remote로 브리지하세요:
{
"mcpServers": {
"models-mcp": {
"command": "npx",
"args": ["mcp-remote", "https://models-mcp.<your-subdomain>.workers.dev/mcp"]
}
}
}어디서든 API 키가 필요 없습니다. 모든 데이터는 공개된 models.dev/api.json 엔드포인트에서 가져옵니다.
테스트
npm test카탈로그 클라이언트(평탄화, TTL 캐싱, 강제 새로고침, 실패 시 오래된 데이터 폴백, id 해석)와 다섯 가지 도구 전체를 인메모리 전송을 통한 실제 MCP 클라이언트 세션으로 종단 간(end-to-end) 테스트합니다.
데이터 참고 사항
카탈로그는 1시간 동안 캐시됩니다: 호스팅 시 Workers Cache API에, stdio에서는 프로세스 메모리에 캐시됩니다.
refresh_catalog를 호출해 강제로 업데이트할 수 있습니다. 다시 가져오기가 실패하면 마지막으로 성공한 카탈로그를 계속 제공합니다.models.dev는 소비자용 버전 관리 스키마를 공개하지 않으므로
src/types.ts의 타입은 의도적으로 느슨합니다(인덱스 시그니처가 명시적으로 타입되지 않은 필드를 보존).모델 id는 AI SDK와 OpenCode에서 사용하는
provider/model규칙을 따릅니다(예:anthropic/claude-sonnet-4-5).get_model과compare_models는 제공업체 간에 모호하지 않으면 모델 id만으로도 허용합니다.
가능한 확장
다른 모델 카탈로그 MCP가 제공하는 것과 유사한
list_facets도구(모달리티, 토크나이저).구성한 제공업체 키를 통해 실시간 호출을 수행하여 지연 및 비용 타당성 검사를 하는
test_model도구.비공개로 유지하려면 Worker 앞에 OAuth 또는 Cloudflare Access를 추가.
Available Tools
8 toolscompare_modelsCompare modelsA
Diff 2-6 models side by side on pricing, context window, and capabilities. Accepts 'provider/model' ids, or bare model ids when unambiguous across providers. Ids resolving to the same model are compared once.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | Yes | 2-6 model ids in 'provider/model' form, e.g. ['anthropic/claude-sonnet-4-5', 'openai/gpt-5.2']. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden, and it adds meaningful details: id resolution rules ('bare model ids when unambiguous') and deduplication behavior ('Ids resolving to the same model are compared once'). It does not describe the output format or explicitly state that this is a read-only operation, but the comparison semantics are clear enough for a tool of this simplicity.
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 with no filler. The core purpose is front-loaded, and the second sentence efficiently handles edge cases around id formatting and deduplication. Every clause earns its place.
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 one-parameter tool with no output schema, the description covers the essential usage details: accepted inputs, count limits, and duplicate handling. The main gap is the lack of a brief mention of what the returned comparison looks like, but 'diff side by side' already strongly implies a comparative output.
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%, so the schema already documents the array shape and requirement. The description adds value beyond the schema by explaining two resolution behaviors: bare ids are accepted when unambiguous, and duplicate model ids are compared only once. This makes the semantics of the ids parameter materially clearer.
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 opens with a specific verb, 'Diff', and a precise resource scope: '2-6 models side by side' on defined dimensions like pricing, context window, and capabilities. This clearly differentiates compare_models from single-model tools like get_model and broad catalog tools like top_models.
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?
The description gives clear context for when to use the tool: whenever an agent needs to compare multiple models side by side. It also provides important input-usage guidance about provider-prefixed ids and bare ids. However, it does not explicitly name alternatives or state when not to use it versus find_models or get_model.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
estimate_costEstimate costA
Estimate the USD cost of a request to one model from its published per-million-token rates. Use get_model first if you need to pick an id.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Model id, e.g. 'anthropic/claude-sonnet-4-5' or 'gpt-5.2'. | |
| inputTokens | No | Number of prompt/input tokens. | |
| outputTokens | No | Number of completion/output tokens. | |
| cacheReadTokens | No | Number of cached-input tokens read at the cache-read rate. | |
| cacheWriteTokens | No | Number of tokens written to cache at the cache-write rate. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It discloses that the calculation is an estimate based on published rates, implying a deterministic read-only computation. However, it doesn't mention caveats like rate staleness, unsupported model IDs, or whether the operation requires network access. This is a baseline level of transparency, not a rich one.
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 with zero waste. The main action is front-loaded, and the sibling pointer is a short, necessary clause. Every sentence earns its place.
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 low-complexity estimator with a fully documented schema, the description covers the core purpose and the one key prerequisite (use get_model). It lacks an explicit return-value description, but 'estimate the USD cost' implies the result is a monetary value. The 'get_model first' note is a valuable cross-reference that completes the context.
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% with clear descriptions for all five parameters, so the description doesn't need to repeat them. It does add the useful context that rates are per-million-token, which clarifies why the default inputTokens is 1,000,000. This is a small addition beyond the schema, keeping the score at the baseline.
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 ('Estimate'), a precise object ('USD cost of a request to one model'), and the calculation basis ('published per-million-token rates'). It clearly distinguishes this from the sibling catalog tools like get_model and compare_models by focusing on cost estimation for a single 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?
The description explicitly tells the agent to 'Use get_model first if you need to pick an id', which is a clear prerequisite and routes the agent to the correct sibling. It doesn't discuss when to avoid compare_models, but the single-model scope makes the intended usage context clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_modelsFind modelsA
Search and filter models across all providers by name, provider, capability, context window, or price. Returns a compact summary per model; use get_model for full details on one.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max number of results to return. | |
| query | No | Case-insensitive substring match against model name or id, e.g. 'sonnet' or 'gpt-5'. | |
| provider | No | Restrict to one provider id, e.g. 'anthropic'. | |
| minContext | No | Minimum context window size in tokens. | |
| maxInputCost | No | Maximum input cost per million tokens (USD). | |
| requireToolCall | No | Only models with tool/function calling support. | |
| requireReasoning | No | Only models with extended reasoning support. | |
| requireAttachment | No | Only models that accept file/image attachments. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden for behavioral disclosure. It accurately discloses that the result is a compact summary per model and points to get_model for more detail, but it does not mention ordering, defaults, pagination, or rate limits. These are not misleading gaps, so a 3 is appropriate.
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 compact sentences with no filler. The main action and scope are front-loaded, and the pointer to get_model is placed efficiently at the end.
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 search tool with 8 optional and well-documented parameters, the description gives enough orientation to call it correctly. It could describe the shape of the compact summary or default ordering, but those are optional refinements rather than invocation blockers.
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 input schema covers 100% of parameters with meaningful descriptions, so the baseline is 3. The description's list of filter dimensions loosely maps to the schema parameters but adds no new semantic detail beyond what the schema already provides.
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 uses a specific verb ('Search and filter') and names the resource ('models across all providers'), then lists the key filtering dimensions. It also distinguishes itself from get_model by stating it returns a compact summary rather than full details.
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?
The description clearly communicates this is the tool for broad searching/filtering and directly points to get_model for full individual details. It does not explicitly contrast with compare_models or list_providers, but the core use case is well established.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_modelGet modelA
Fetch full metadata for one model. Accepts 'provider/model' (preferred, e.g. 'anthropic/claude-sonnet-4-5') or a bare model id if unambiguous across providers.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Model id, e.g. 'anthropic/claude-sonnet-4-5' or 'gpt-5.2'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry behavioral context. It usefully discloses accepted id formats and the ambiguity caveat for bare model ids, but it does not describe error behavior, return structure, or any prerequisites such as authentication.
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 with no wasted words. The core action is front-loaded, and the parameter guidance is compact and directly useful.
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 simple one-parameter fetch tool, the description is largely complete: it states the operation, the parameter format, and the ambiguity rule. Since there is no output schema, a slightly richer statement about what 'full metadata' contains or what happens on ambiguous ids would make it fully complete.
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 schema already fully documents the 'id' parameter, so the baseline is 3. The description adds meaningful value by marking 'provider/model' as preferred and explaining when a bare id may be accepted, which helps the agent construct valid inputs.
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 uses a specific verb and resource: 'Fetch full metadata for one model.' It clearly distinguishes from siblings like list_providers, find_models, and compare_models by emphasizing a single model 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?
The description provides clear context for when to use this tool: when detailed metadata for one specific model is needed. It does not explicitly name alternatives or state when not to use it, but the 'one model' scope and id-format guidance imply the correct selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_providerGet providerA
Fetch metadata for one provider: display name, AI SDK package name, API base URL, docs link, and a compact list of its models. Accepts the provider id ('anthropic') or display name ('Anthropic'). Use get_model for full per-model detail.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Provider id or display name, e.g. 'anthropic' or 'OpenAI'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It communicates a read-only operation through 'Fetch' and describes the return contents, but it does not disclose behavior for invalid ids, ambiguous display names, or whether the call can fail. For a simple metadata lookup this is acceptable but not richly transparent.
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 deliver the purpose, return contents, accepted input, and the key sibling alternative with no filler. The primary behavior is front-loaded, and the alternative routing is placed at the end without wasting words.
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 lookup tool with no output schema, the description adequately covers what the tool returns and how to route to get_model for deeper detail. It could mention what happens when the provider is not found, but overall it is complete enough for correct invocation.
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 schema already documents the parameter with examples, and description coverage is 100%, so the baseline is 3. The description adds an additional example ('Anthropic') and clarifies the accepted forms, but this mostly echoes the schema rather than adding substantial new meaning.
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 opens with a specific verb and resource: 'Fetch metadata for one provider', then enumerates exactly what is returned (display name, package name, base URL, docs link, model list). It also distinguishes itself from get_model by noting that get_model provides full per-model detail, so an agent can tell them apart.
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?
The description clearly says to use get_model when full per-model detail is needed, providing an explicit alternative and condition. It does not explicitly mention list_providers for enumerating all providers, but the singular framing and sibling name make the distinction inferable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_providersList providersA
List every provider in the models.dev catalog (e.g. anthropic, openai, google) with its model count. Use this to see what's available before narrowing with find_models.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It accurately conveys a read-only, comprehensive listing operation and states that each provider is returned with its model count. However, it does not disclose output format details, ordering, or any potential pagination, though the simple no-param nature keeps this a mild gap.
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, no filler. The core behavior and examples come first, and the usage guidance follows immediately. Every sentence adds 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?
For a no-parameter listing tool, the description explains what is listed, what data is included, and when to use it. It could explain the exact return shape or ordering, but the tools's simplicity means this is nearly complete.
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 has zero parameters, so the schema already fully documents everything and there is no ambiguity. The description adds no parameter-level detail, but none is needed; baseline 4 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 uses a specific verb and resource: it lists every provider in the models.dev catalog and mentions the included model count. The examples (anthropic, openai, google) and the contrast with narrowing via find_models make it clearly distinct from siblings like get_provider and find_models.
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 clearly states when to use the tool: to see what's available before narrowing with find_models. It does not explicitly say when not to use it or name alternative tools, but the context is clear enough for an agent to route correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
refresh_catalogRefresh catalogA
Force a fresh fetch of the models.dev catalog, bypassing the in-memory cache. Use if you suspect the data is stale. If the refetch fails, the last good catalog keeps being served and servedStale is reported as true.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the behavioral burden. It does so by explaining cache bypass behavior, failure fallback ('the last good catalog keeps being served'), and the reported state ('servedStale is reported as true'). This is strong but not exhaustive; it omits any potential side effects beyond cache behavior.
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 concise sentences, each earning its place: what it does, when to use it, and what happens on failure. The most important action is front-loaded, and there is no redundancy.
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 no-parameter cache refresh helper, the description covers the essential context: purpose, trigger condition, and failure behavior. It does not specify the full success return shape, but the servedStale reference gives the agent a useful signal about the report format.
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 has zero parameters, so the input schema leaves nothing to document. Per baseline guidance, a 4 is appropriate since there is no parameter semantics gap for the description to fill.
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 uses a specific verb ('refresh') and resource ('models.dev catalog'), and states the exact mechanism ('bypassing the in-memory cache'). This clearly distinguishes it from the sibling query-oriented tools like list_providers and find_models.
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 if you suspect the data is stale' provides an explicit condition for invoking the tool. It does not discuss when not to use it or name alternatives, but given the tool's unique refresh role among siblings, the guidance is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
top_modelsTop modelsA
Rank models by one criterion: cheapest input/output price per million tokens, largest context window, most context per input dollar, or newest release. Supports the same filters as find_models.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max rows to return. | |
| query | No | Case-insensitive substring match against model name or id, e.g. 'sonnet' or 'gpt-5'. | |
| sortBy | Yes | Ranking criterion: 'cheapest_input'/'cheapest_output' (USD per million tokens), 'largest_context' (tokens), 'context_per_dollar' (tokens per USD of input), or 'newest' (release date). Models missing that data are excluded. | |
| provider | No | Restrict to one provider id, e.g. 'anthropic'. | |
| minContext | No | Minimum context window size in tokens. | |
| maxInputCost | No | Maximum input cost per million tokens (USD). | |
| requireToolCall | No | Only models with tool/function calling support. | |
| requireReasoning | No | Only models with extended reasoning support. | |
| requireAttachment | No | Only models that accept file/image attachments. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It states the ranking criteria and filter compatibility, but does not disclose result ordering direction, tie-breaking, pagination, or return-value shape. The schema documents limit and data-exclusion, but the description itself adds only the ranking concept and cross-reference to find_models.
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 tightly constructed sentence states the core operation, enumerates criteria, and references filter compatibility. Every phrase earns its place and the most important information is front-loaded.
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 9-parameter tool with no output schema or annotations, the description is minimal. It covers the ranking concept and filter compatibility but omits details about the returned model fields, sort direction/deduplication behavior, and any interaction with limit/ranking, leaving the agent to infer these from the schema and sibling tools.
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 baseline is 3. The description adds no parameter-level detail beyond naming the ranking criteria, which the sortBy enum already documents in more detail. The 'same filters as find_models' reference is useful but not a substitute for the schema's complete parameter documentation.
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 uses a specific verb ('Rank') with a clear resource ('models') and enumerates the ranking criteria, making the tool's function unambiguous. It also distinguishes itself from find_models by stating it ranks by a single criterion rather than merely listing or filtering.
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 clearly signals the use case: obtain top models ranked by a selected criterion. The phrase 'Supports the same filters as find_models' gives context about filter behavior and indirectly points to find_models as the filter/search sibling, but it does not explicitly state when not to use this tool or name the alternative for mere listing.
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.
8 tool updates
v0.2.0- First observed
compare_models - First observed
estimate_cost - First observed
find_models - First observed
get_model - First observed
get_provider - First observed
list_providers - First observed
refresh_catalog - First observed
top_models
TDQS
Scored across 8 tools
Each tool targets a distinct operation: listing providers, searching models, fetching details, comparing, refreshing, estimating cost, ranking, and provider metadata. Even where two tools support similar filters, their purposes are clearly differentiated by descriptions.
Tool names mostly follow a clear verb_noun pattern such as list_providers, find_models, get_model, and estimate_cost. The exception is top_models, which reads more like a noun phrase than an imperative verb action, a minor deviation from the otherwise consistent convention.
Eight tools is a well-scoped size for a model catalog server. Each tool covers a meaningful workflow without redundancy or bloat, from discovery and search to comparison and cost estimation.
The surface covers the full read-only lifecycle of interacting with the models.dev catalog: list, search, detail, compare, rank, and cost estimation, plus provider-level metadata and cache refresh. No obvious dead ends or missing core operations are present.
Maintenance
Related MCP Connectors
Compare LLM API prices, search models and providers, and access reviewed benchmark results.
Find AI model pricing, estimate token costs and compare offers. No API key required.
Sourced AI-model pricing and capability data — compare and route to the cheapest capable model.
Related MCP Servers
- AlicenseAqualityFmaintenanceProvides AI assistants with real-time access to 1000+ AI models including their latest pricing, context windows, capabilities, and specifications. Supports model search, comparison, recommendations, and live testing.369 npm1MIT
- FlicenseAqualityDmaintenanceProvides up-to-date AI model names and pricing from models.dev, solving model hallucination by fetching recently released models.1-
- -licenseNot gradedqualityNot gradedmaintenanceEnables discovery of public AI models with pricing, documentation context, and OpenAI-compatible integration examples. Supports both read-only queries and paid async media generation tasks.-
- AlicenseNot gradedqualityBmaintenanceEnables browsing TokenLab models, comparing pricing, and generating cURL examples for various AI endpoints.MIT