- Go 98.6%
- Python 0.6%
- TypeScript 0.6%
- JavaScript 0.2%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
## Summary - Switched variant dispatch from `ClientSession` RPC calls to direct inner server handler invocation via a new `backendSession` type, preserving `context.Context` values (e.g. `RequestContext`) that were previously lost crossing the in-memory transport boundary - Added `backendSession` abstraction in `session.go` that mirrors the `mcp.ClientSession` API but calls the inner server's handler chain directly, forwarding `RequestExtra` (token info, HTTP headers, etc.) - Captured the inner server's handler chain via receiving middleware (`captureMCPMethodHandler`) in `backend.go`, reused across all connections - Simplified `innerConnection` to hold `*backendSession` + cleanup; in-memory transport/client kept alive only for notification forwarding (progress, logging) - Refactored `getSession` → `getConnection` returning `*innerConnection` to reduce indirection in dispatch code - Moved `injectVariantMeta` calls to after type assertion and nil checks in all dispatch handlers for consistency and nil-safety ## Test plan - [x] Existing variant dispatch tests pass (`go test ./variants/...`) - [x] Verify context values (e.g. `RequestContext`) are available in tool handlers when invoked through variant dispatch - [x] Verify `RequestExtra` fields (token info, HTTP headers) are forwarded to inner server handlers |
||
| .github/workflows | ||
| conformance | ||
| go/sdk | ||
| python/sdk | ||
| typescript/sdk | ||
| .gitignore | ||
| LICENSE | ||
| README.md | ||
MCP Variants (Experimental Extension)
Status: Experimental. This work is for prototyping and feedback only, and is not an accepted or official MCP extension.
This repository provides a multi-language reference implementation of the variants proposal for the Model Context Protocol (MCP), as described in SEP-2053.
Implementations
| Language | Directory | Package | Status |
|---|---|---|---|
| Go | go/sdk/ |
github.com/modelcontextprotocol/experimental-ext-variants/go/sdk |
Planned |
| Python | python/sdk/ |
mcp-ext-variants |
Planned |
| TypeScript | typescript/sdk/ |
@ext-modelcontextprotocol/variants |
Planned |
Examples (Go)
The Go implementation includes runnable example servers under go/sdk/examples/server/:
model-optimized/
Same tools, different descriptions per LLM family.
https://github.com/user-attachments/assets/5bb60cd2-291f-4940-abfe-f53852d35470
github/
Different tool sets per variant with custom ranking.
https://github.com/user-attachments/assets/d770ac55-e988-4d89-bdf8-bcb3cf1e2e53
research/
Context budget management via description verbosity.
trading/
API versioning, lifecycle statuses, and deprecation info.
variants-stdio/
Minimal single-variant setup.
CI/CD
This monorepo uses path-based CI workflows to efficiently test only what changes:
How It Works
-
Language-specific workflows (
python.yml,go.yml,typescript.yml)- Only trigger when their language directory or workflow file changes
- Run all tests, linting, and checks for that language
-
Status check workflow (
status-check.yml)- Runs on every PR to verify required checks passed
- Determines what needs to pass based on which files changed
- This is the only required check in branch protection
Examples
- Change
python/sdk/file.py→ Only Python CI runs → PR requires Python checks to pass - Change both Go and TypeScript files → Both CIs run → PR requires both to pass
- Change only
README.md→ No language CIs run → PR can merge immediately
Forcing All Checks
To run all language checks regardless of changed files:
- In a PR: Comment
/test all(only works for repo owners/members/collaborators) - Manually: Use GitHub Actions UI or CLI to trigger individual workflows
Adding New Required Checks
-
Add your check to the appropriate language workflow (e.g.,
python.yml):python-security-scan: name: "Security Scan" runs-on: ubuntu-latest steps: - name: Run security checks run: # your commands here -
Update the status check in
.github/workflows/status-check.yml:const requiredChecks = { python: [ 'Python CI / Linting', 'Python CI / Unit Tests (3.10)', // ... existing checks ... 'Python CI / Security Scan' // ← Add your new check ], -
Submit PR - Your new check is now required for all relevant changes!
License
Apache License 2.0 - See LICENSE file for details
Resources
- Variants Proposal Specification (SEP-2053) - Full specification and design details
- Model Context Protocol