Skip to content

Conversation

@sambhav
Copy link
Member

@sambhav sambhav commented Jan 6, 2026

Summary

This PR introduces SEP-2053: Server Variants, which proposes a server-level variant mechanism enabling MCP servers to expose multiple variants simultaneously. Each variant includes a unique identifier, human-readable description, and key-value hints that intelligent clients can use to select an appropriate variant for their context.

The primary motivation is cross-agent tool reusability - enabling the same MCP tools to serve fundamentally different agent architectures (coding assistants, research agents, task automation agents, conversational agents, etc.) or models (claude, gpt, gemini etc) with optimized surface areas tailored to each use case.

Motivation and Context

Problem: Server capabilities in MCP are currently monolithic - a single capability definition must serve all clients equally, regardless of which LLM is interpreting them, the client's use case, capabilities, or context constraints.

Solution: Server variants allow servers to expose parallel configurations (e.g., claude-optimized, gpt-optimized, compact, coding-assistant, automation-agent) that clients can intelligently select based on their context.

Why is this needed?

  • Different LLMs benefit from different tool descriptions and schemas
  • Different agent types (coding assistant vs automation agent) need different tool surface areas
  • Current one-size-fits-all approach forces suboptimal tool definitions
  • Without variants, tool authors must build separate servers for each use case, fragmenting the ecosystem

How Has This Been Tested?

This is a specification proposal (SEP) with:

  • Comprehensive examples in the SEP document
  • Detailed client and server behavior specifications
  • Backward compatibility analysis
  • Reference to established patterns (ModelPreferences from MCP sampling)

Real-world validation will come from prototype implementations once the SEP is accepted.

Breaking Changes

None - This is fully backward compatible:

  • Existing servers without variants continue to work unchanged
  • Existing clients ignore variant fields if present
  • Variant selection is optional and happens via _meta on a per-request basis
  • Default behavior (no variant specified) uses server's recommended default

Types of changes

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to change)
  • Documentation update

Checklist

  • I have read the MCP Documentation
  • My code follows the repository's style guidelines
  • New and existing tests pass locally (N/A - specification only)
  • I have added appropriate error handling
  • I have added or updated documentation as needed

Additional context

Design Principles:

  • Parallel Variants: Servers can expose multiple variants simultaneously
  • Intelligent Selection: Clients auto-select using structured metadata
  • Per-Request Flexibility: Variant selection via _meta (stateless)
  • LLM-Friendly: Descriptions and hints structured for LLM reasoning
  • Server-Wide Scope: Applies to all capabilities (tools, resources, prompts, subscriptions)
  • Graceful Deprecation: Clear mechanism with migration guidance

Packaging: Currently specified as an MCP extension to minimize core schema churn.

Related Issues:

SEP Status: Draft, seeking sponsor

@sambhav sambhav force-pushed the variant-extension branch from b555e3f to 197095a Compare January 6, 2026 00:20
@sambhav sambhav changed the title SEP-XXXX: Server Variants SEP-2053: Server Variants Jan 6, 2026
@sambhav sambhav force-pushed the variant-extension branch from 197095a to 4aaf28a Compare January 6, 2026 00:21
@sambhav sambhav force-pushed the variant-extension branch from 4aaf28a to 1b0db67 Compare January 6, 2026 00:22
@sambhav sambhav added proposal SEP proposal without a sponsor. SEP labels Jan 6, 2026
@sambhav sambhav changed the title SEP-2053: Server Variants SEP-2053: Server Variants extension Jan 6, 2026
@cliffhall
Copy link
Member

cliffhall commented Jan 6, 2026

Hi, @sambhav 👋

This looks interesting and potentially useful. One thought:

Real-world validation will come from prototype implementations once the SEP is accepted.

While the SEP guidelines do say that the reference can come after acceptance, this proposal is sufficiently complex that I think it would be worthwhile to create an implementation first. It would allow you to prove that it will work as intended, as well as discover any unforeseen issues. This would help convince a sponsor of its validity and that it is in its optimal form prior to core maintainer review.

When a complex SEP is accepted without a reference implementation, we don't have an easy / clean way to reverse it or correct it before the community gets their hands on it and discovers the problems themselves. That's just an issue with the current process, and why I'm making this suggestion to you. You can take it or leave it.

@sambhav
Copy link
Member Author

sambhav commented Jan 6, 2026

Happy to provide a reference implementation as well.

A close real world example that largely implements something similar is the Github MCP server. Let me see if I can trivially expose the same using this extension.

Additionally, this is proposed as an extension instead of a core part of the spec so that we can experiment with it easily. A big part of the reason I modeled it as an extension was to provide a sandbox to iterate on it without the baggage of b/w incompatible migrations in the core spec.

An MCP extension is an optional addition or change to the spec that provides functionality or guidance that is either experimental in nature (i.e. not yet ready for core protocol inclusion) or only applies in a limited domain (e.g. internal to a company, or only within a specific industry).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

extension proposal SEP proposal without a sponsor. SEP

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants