The Model Parameters Schema (MPS) convention is the JSON/YAML shape used by modelparams.dev to describe the request parameters available for a specific provider, auth type, and model.
This catalog is metadata. It describes knobs a consumer can put into an outbound
model request, such as temperature, top_p, max_tokens,
thinking.type, or generationConfig.topK. It does not describe API transport
capabilities, proxy behavior, authentication flows, endpoint compatibility,
pricing, or UI control types.
The public runtime sources are:
https://modelparams.dev/api/v1/models.jsonhttps://modelparams.dev/api/v1/schema.json
Each entry describes exactly one provider/auth/model tuple and its available parameters.
{
"provider": "anthropic",
"authType": "api_key",
"model": "claude-haiku-4-5",
"params": [
{
"path": "top_p",
"type": "number",
"label": "Top P",
"description": "Controls nucleus sampling by limiting generation to tokens whose cumulative probability reaches this value.",
"default": 1,
"range": { "min": 0, "max": 1, "step": 0.01 },
"group": "sampling",
"applicability": {
"except": [{ "thinking.type": ["adaptive", "enabled"] }, { "temperature": { "not": 1 } }]
}
}
]
}Conventions:
provider,authType, andmodelidentify exactly one model route.provideris a kebab-case slug.modelis the provider-native model id without path separators. It may contain dots or colons when the upstream model id does.authTypeisapi_keyorsubscription.paramsis the non-empty list of parameters for that exact route.pathis the exact provider API request parameter path in dot notation. Use the provider's documented field casing, such astop_p,thinking.budget_tokens, orgenerationConfig.topK.streamis reserved for API-level streaming capability metadata and is not a valid MPS parameter path.typeis the semantic data type, not a UI control kind.labelis user-facing copy.descriptionexplains the raw provider parameter.defaultis the provider default to display when known.valuesis required forenumand is allowed only for finite choices.rangedescribes numeric bounds and optional step.groupis a semantic grouping for ordering and display.applicabilityis optional. Omitted means always available.
MPS entries should describe only parameters the user or consumer can configure for the selected provider/auth/model tuple.
For authType: api_key, list parameters from the official provider API
reference. Do not invent request fields the upstream API does not accept.
For authType: subscription, list user-facing toggles and presets the consumer
can actually set. Skip implementation details needed only by the subscription
adapter.
Do not model transport or platform capabilities as parameters. Examples that do
not belong in params:
- streaming support
- proxy or passthrough behavior
- OAuth or API key setup details
- fallback behavior
- pricing and rate limits
- UI-only control metadata
applicability controls whether a parameter is available for the current draft
or request params.
The convention uses two top-level keys:
only: the parameter is available only when the rule matches.except: the parameter is unavailable when the rule matches.
Use at least one of only or except.
A rule is either:
- one non-empty match object
- a non-empty array of match objects
Array rules use OR semantics. A single match object uses AND semantics.
{
"except": [{ "thinking.type": ["adaptive", "enabled"] }, { "temperature": { "not": 1 } }]
}This means: disable the parameter when thinking.type is adaptive or
enabled, or when temperature exists and is not 1.
Each match key is a provider API request parameter path. Each match value uses one of:
- JSON primitive: string, number, boolean, or null
- non-empty array of JSON primitives
{ "not": <primitive or non-empty primitive array> }
Examples:
{ "thinking.type": "enabled" }{ "thinking.type": ["adaptive", "enabled"] }{ "temperature": { "not": 1 } }Consumers evaluate rules against the current params object after dot-path expansion.
For a normal match:
- primitive value matches by JSON equality
- array value matches if any primitive item equals the actual value
- missing paths do not match
For { "not": value }:
- missing paths do not match
- present paths match when the actual value is not equal to
value
For a parameter spec:
- If
onlyis present and does not match, the parameter is unavailable. - If
exceptis present and matches, the parameter is unavailable. - Otherwise the parameter is available.
Prefer expressing provider behavior with the existing applicability syntax.
Introduce new convention syntax only when a provider rule cannot be represented with:
- exact match
- one-of match
- negated match
- OR of match objects
- AND within one match object
When extending the language, update this document and the generated catalog format together.