FinalStandards Track
Abstract
This SEP recommends adding support for default values to all primitive types in the MCP elicitation schema (StringSchema, NumberSchema, and EnumSchema), extending the existing support that only covers BooleanSchema.Motivation
Elicitations in MCP offer a way to mitigate complex API designs: tools can request information on-demand rather than resorting to convoluted parameter handling. The challenge however is that users must manually enter obvious information that could be pre-populated for more natural interactions. Currently, onlyBooleanSchema supports default values in elicitation requests. This limitation prevents servers from providing sensible defaults for text inputs, numbers, and enum selections leading to more user overhead.
Real-World Example
Consider implementing an email reply function. Without elicitation, the tool becomes unwieldy:Implementation
A working implementation demonstrating clients require minimal changes to display defaults (~10 lines of code):- Implementation PR: https://github.com/chughtapan/fast-agent/pull/2
- A demo with the above email reply workflow: https://asciinema.org/a/X7aQZjT2B5jVwn9dJ9sqQVkOM
Specification
Schema Changes
Extend the elicitation primitive schemas to include optional default values:Behavior
- The
defaultfield is optional, maintaining full backward compatibility - Default values must match the schema type
- For EnumSchema, the default must be one of the valid enum values
- Clients that support defaults SHOULD pre-populate form fields. Clients that don’t support defaults MAY ignore the field entirely.
Rationale
- The high-level rationale is to follow the precedent set by BooleanSchema rather than creating new mechanisms.
- Making defaults optional ensures backward compatibility.
- This maintains the high-level intuition of keeping the client implementation simple.
Alternatives Considered
- Server-side Templates: Servers could maintain templates separately, but this adds complexity
- New Request Type: A separate request type for forms with defaults would fragment the API
- Required Defaults: Making defaults required would break existing implementations
Backwards Compatibility
This change is fully backward compatible with no breaking changes. Clients that don’t understand defaults will ignore them, and existing elicitation requests continue to work unchanged. Clients can adopt default support at their own paceSecurity Implications
No new security concerns:- No Sensitive Data: The existing guidance against requesting sensitive information still applies
- Client Control: Clients retain full control over what data is sent to servers
- User Visibility: Default values are visible to users who can modify them before submission