Skip to content

feat(sep): add SEP-3221 Secure Parameters Extension - #3221

Open
anubhav756 wants to merge 1 commit into
modelcontextprotocol:mainfrom
anubhav756:anubhav-secure-params
Open

feat(sep): add SEP-3221 Secure Parameters Extension#3221
anubhav756 wants to merge 1 commit into
modelcontextprotocol:mainfrom
anubhav756:anubhav-secure-params

Conversation

@anubhav756

@anubhav756 anubhav756 commented Aug 10, 2026

Copy link
Copy Markdown

This pull request introduces a new Extensions Track Specification Enhancement Proposal: Secure Parameters Extension (io.modelcontextprotocol/secure-params) under seps/3221-secure-parameters.md.

Motivation and Context

In centralized MCP servers with broad ambient credentials (such as fleet-wide database access), exposing infrastructure coordinates (project_id, instance, tenant_id) in inputSchema forces them into model prompts. An attacker using prompt injection can trick the LLM into redirecting tool calls to unauthorized instances (the "Confused Deputy" problem).

This SEP defines a standard protocol mechanism to isolate application/infrastructure parameters from model context by introducing:

  1. tools/list: A sibling secureInputSchema field alongside standard inputSchema.
  2. tools/call: A top-level secureArguments field for host-injected values, separate from model-generated arguments.
  3. Stateless Capability Negotiation: Per-request _meta["io.modelcontextprotocol/clientCapabilities"].extensions (2026-07-28+) and server/discover.
  4. Deterministic Precedence: Strict server-side discarding of colliding keys in arguments.
  5. Standard Error Codes: Standard -32021 (MISSING_REQUIRED_CLIENT_CAPABILITY) and -32602 (INVALID_PARAMS).

How Has This Been Tested?

  • Prototyped and validated in Google Cloud MCP Toolbox (mcp-toolbox Go server and mcp-toolbox-sdk-python).
  • Traceability mapping created for automated testing in modelcontextprotocol/conformance (src/seps/sep-3221.yaml).
  • Wire format tested against stateless 2026-07-28 JSON-RPC schemas.

Breaking Changes

None. This is an opt-in, non-breaking extension under the Extensions Track. Un-negotiated clients and servers continue operating under standard MCP semantics.

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
  • I have added appropriate error handling
  • I have added or updated documentation as needed

Additional context

@anubhav756
anubhav756 force-pushed the anubhav-secure-params branch from 9c05366 to 2bcec19 Compare August 10, 2026 13:24
@anubhav756 anubhav756 changed the title feat(sep): add SEP-0000 Secure Parameters Extension feat(sep): add SEP-3221 Secure Parameters Extension Aug 10, 2026
@anubhav756
anubhav756 force-pushed the anubhav-secure-params branch 2 times, most recently from 34a3b51 to f7080ed Compare August 10, 2026 13:46
@anubhav756
anubhav756 requested review from a team as code owners August 10, 2026 13:46
@anubhav756
anubhav756 force-pushed the anubhav-secure-params branch from f7080ed to d4c06e2 Compare August 10, 2026 13:53
@anubhav756
anubhav756 force-pushed the anubhav-secure-params branch from d4c06e2 to 0375037 Compare August 10, 2026 16:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant