Agent Skills: Model Context Protocol Compatibility Guidance

Model Context Protocol (MCP)

UncategorizedID: nevaberry/nevaberry-plugins/model-context-protocol-knowledge-patch

Install this agent skill to your local

pnpm dlx add-skill https://github.com/Nevaberry/nevaberry-plugins/tree/HEAD/plugins/knowledge-patch/patches-codex/model-context-protocol-knowledge-patch

Skill Files

Browse the full folder contents for model-context-protocol-knowledge-patch.

Download Skill

Loading file tree…

plugins/knowledge-patch/patches-codex/model-context-protocol-knowledge-patch/SKILL.md

Skill Metadata

Name
model-context-protocol-knowledge-patch
Description
Model Context Protocol (MCP)

Model Context Protocol Compatibility Guidance

Use this skill when implementing or reviewing MCP authorization, transports, schemas, tools, elicitation, sampling, or tasks. Match behavior to the negotiated protocol revision; requirements that changed between revisions are called out explicitly.

Reference index

| Reference | Topics | | --- | --- | | Authorization | OAuth profile, discovery, registration, token binding, scopes, and step-up authorization | | Interactive operations | Tools, content, progress, completion, elicitation, sampling, tasks, and presentation metadata | | Protocol revisions and schemas | Batching, lifecycle requirements, metadata, schema dialect, parameter schemas, and revision status | | Transport, sessions, and subscriptions | Streamable HTTP, SSE, framing, sessions, cancellation, security, and legacy fallback |

Breaking changes and required behavior

JSON-RPC batching is revision-sensitive

The 2025-03-26 revision added top-level JSON-RPC batches, but the 2025-06-18 revision removed them. For 2025-06-18, send each request, notification, or response as a separate JSON-RPC message rather than a top-level array.

Streamable HTTP framing for 2025-06-18 likewise requires each POST body to contain one JSON-RPC request, notification, or response.

The lifecycle operation is mandatory

For 2025-06-18, the lifecycle operation requirement is MUST, strengthened from SHOULD. Treat the operation as required for implementations targeting that revision.

Separate tool execution errors from protocol errors

For 2025-11-25, return tool-call input validation failures as Tool Execution Errors rather than Protocol Errors so the failure can be inspected and the tool input corrected.

Use the current schema organization

JSON Schema 2020-12 is the default dialect for 2025-11-25 MCP schemas unless another dialect is selected explicitly. Request payload schemas are standalone parameter schemas rather than being coupled to RPC method definitions.

Stable revision status

The 2026-07-28 protocol revision is stable. Behavior previously published in its release candidate is no longer prerelease guidance.

Authorization quick reference

Choose credentials by transport

Authorization is optional. HTTP transports that implement it should use OAuth 2.1, while stdio implementations should obtain credentials from the environment. PKCE is required for every client.

Servers may use authorization-code grants for users or client-credentials grants for applications. Authorization-required or invalid-token responses use HTTP 401.

Authenticate every HTTP request

Send Authorization: Bearer <access-token> on every HTTP request, including requests made within an established MCP session. Never place the token in the query string.

Invalid or expired tokens receive HTTP 401; insufficient scope receives HTTP 403. A server delegating authorization must issue its own token bound to the upstream session and synchronize both tokens' validity and lifecycle.

Bind tokens to the MCP resource

For the 2025-06-18 authorization profile, every authorization and token request must include the RFC 8707 resource parameter, even when the authorization server does not support it. Use the most specific canonical absolute MCP URI, including a distinguishing path when needed and no fragment.

The MCP server must reject tokens not issued for that resource and must not pass the inbound token through to an upstream API.

Discover authorization metadata

For 2025-06-18, an authorized MCP server must publish RFC 9728 metadata with at least one authorization_servers entry and advertise that metadata in a 401 WWW-Authenticate header. The client chooses an advertised authorization server and uses its RFC 8414 metadata.

For 2025-11-25, support both the challenge's resource_metadata value and protected-resource well-known discovery. Follow the MCP-path and origin-root fallback order, then the documented OAuth and OIDC issuer-path order in the authorization reference.

Register clients and handle scope escalation

For 2025-11-25 clients and authorization servers without a prior relationship, Client ID Metadata Documents are the preferred registration path when client_id_metadata_document_supported is true. Dynamic registration and user-entered credentials are fallbacks.

For initial authorization, use the scope from the 401 challenge; otherwise request all scopes_supported values or omit scope when that metadata field is absent. On an insufficient-scope challenge, user-facing clients should reauthorize with the increased scope set and retry with a small retry limit.

Streamable HTTP quick reference

POST and GET roles

Streamable HTTP replaces HTTP+SSE with one MCP endpoint supporting POST and GET. Each client message uses a fresh POST with Accept listing application/json, text/event-stream.

Accepted notification- or response-only input returns an empty HTTP 202. A request returns either one JSON response or an SSE stream; clients must support both forms.

A client may separately GET with Accept: text/event-stream for server-initiated traffic. A server without that stream returns HTTP 405. The GET stream must not carry ordinary JSON-RPC responses except while replaying a previous request's stream.

Carry session and revision headers

When initialization returns Mcp-Session-Id, repeat it on every later HTTP request. A required missing ID should produce HTTP 400; a terminated or expired ID produces HTTP 404 and requires new initialization without an ID.

After initialization, send MCP-Protocol-Version on every subsequent HTTP request. Without other version information, a missing header means 2025-03-26; an invalid or unsupported value produces HTTP 400.

Resume and cancel explicitly

Reconnect SSE with GET plus Last-Event-ID. Replay is confined to the disconnected stream. Dropping the stream does not cancel its request; send an explicit CancelledNotification to cancel.

For pollable SSE, honor the server's retry delay before reconnecting, whether the original stream came from POST or GET.

Enforce HTTP security

Validate Origin on every incoming connection. Return HTTP 403 when rejecting an invalid Origin. Local servers should bind to 127.0.0.1, authenticate connections, serve authorization endpoints over HTTPS, and accept only localhost or HTTPS redirect URIs.

Interactive operations quick reference

Advertise capabilities before use

Use completions to advertise argument-completion support, and check it before relying on completion requests. Later completion requests can use context for previously resolved variables.

A client advertises capabilities.elicitation before a server sends nested elicitation/create. For 2025-11-25, negotiate form and URL modes explicitly; the legacy empty capability object is form-only and an omitted request mode defaults to "form".

Clients advertise sampling: {tools: {}} before servers include sampling tools or toolChoice. Tasks are experimental in 2025-11-25 and require capability negotiation by request category.

Return structured and linked tool results

A tool may declare outputSchema and return a matching JSON object in structuredContent. Servers must conform to the schema, clients should validate it, and servers should also serialize the JSON into a text content item for older clients.

A tool result may contain a resource_link with a fetchable or subscribable URI and resource annotations. The linked resource is not guaranteed to appear in resources/list.

Preserve sampling tool-message order

A sampling tool use must be followed, before any other message, by exactly one matching tool result. A tool-result message must contain only tool results; violations use -32602.

Poll task results

An accepted augmented request returns result.task immediately. Poll tasks/get while respecting pollInterval; optional status notifications do not replace polling. tasks/result blocks until a terminal state and then returns exactly the underlying result or JSON-RPC error.

Read interactive operations for task capability shapes, status transitions, related-task metadata, URL elicitation, form schemas, sampling content, and the remaining presentation fields.