fix: update the draft wire version to 2026-07-28 (#331)

* chore: sync spec-types to modelcontextprotocol@0168c57f

Refreshes the vendored schema copies via npm run sync-schema. The draft
schema now declares LATEST_PROTOCOL_VERSION = "2026-07-28" (previously
the DRAFT-2026-v1 placeholder) and picks up the latest draft doc-comment
and type updates. The dated schemas are unchanged.

* fix: update the draft wire version to 2026-07-28

The spec repo's draft schema now declares
LATEST_PROTOCOL_VERSION = "2026-07-28", but the harness still asserted
the old DRAFT-2026-v1 placeholder, so an SDK that sends the version the
draft spec actually declares cannot pass the draft suite.

- bump DRAFT_PROTOCOL_VERSION in src/types.ts to 2026-07-28
- update the hard-coded literals in tests, example servers, and README
- add src/types.test.ts pinning DRAFT_PROTOCOL_VERSION to the vendored
  draft schema's LATEST_PROTOCOL_VERSION so the two cannot drift, and
  asserting the draft identifier stays distinct from the dated versions
This commit is contained in:
Felix Weinberger 2026-06-08 16:47:17 +01:00 • committed by GitHub
commit 6f83abf786
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
14 changed files with 167 additions and 43 deletions

View file

@ -64,13 +64,13 @@ npx @modelcontextprotocol/conformance client --command "<client-command>" --scen
- `--command` - The command to run your MCP client (can include flags)
- `--scenario` - The test scenario to run (e.g., "initialize")
- `--suite` - Run a suite of tests in parallel: `all`, `core`, `extensions`, `backcompat`, `auth`, `metadata`, `draft` (scenarios targeting the in-progress draft spec), or `sep-835`
- `--spec-version <version>` - Filter scenarios by spec version (e.g., `2025-11-25`, `DRAFT-2026-v1`; `draft` is accepted as an alias for the current draft identifier). The draft version selects the latest dated release plus any draft-only scenarios. When omitted, the version is inferred from the scenario's spec applicability (draft-only scenarios run at the draft version, everything else at the latest dated release); an explicitly requested version outside a scenario's applicability window skips the scenario (exit 0) unless `--force` is passed
- `--spec-version <version>` - Filter scenarios by spec version (e.g., `2025-11-25`, `2026-07-28`; `draft` is accepted as an alias for the current draft identifier). The draft version selects the latest dated release plus any draft-only scenarios. When omitted, the version is inferred from the scenario's spec applicability (draft-only scenarios run at the draft version, everything else at the latest dated release); an explicitly requested version outside a scenario's applicability window skips the scenario (exit 0) unless `--force` is passed
- `--force` - Run a scenario even if it is not applicable at the requested `--spec-version`
- `--expected-failures <path>` - Path to YAML baseline file of known failures (see [Expected Failures](#expected-failures))
- `--timeout` - Timeout in milliseconds (default: 30000)
- `--verbose` - Show verbose output
The framework appends `<server-url>` as an argument to your command and sets the `MCP_CONFORMANCE_SCENARIO` environment variable to the scenario name. For scenarios that require additional context (e.g., client credentials), the `MCP_CONFORMANCE_CONTEXT` environment variable contains a JSON object with scenario-specific data. When `--spec-version` is passed, its resolved value is forwarded to the client process as `MCP_CONFORMANCE_PROTOCOL_VERSION`; example clients can use this value directly as their `protocolVersion`. SDKs that hard-code their protocol version can ignore it. Clients under test must derive the lifecycle from the protocol version they are asked to run: dated versions through `2025-11-25` use the stateful lifecycle (initialize handshake), while the 2026 draft (`DRAFT-2026-v1`) uses the stateless lifecycle (per-request `_meta`).
The framework appends `<server-url>` as an argument to your command and sets the `MCP_CONFORMANCE_SCENARIO` environment variable to the scenario name. For scenarios that require additional context (e.g., client credentials), the `MCP_CONFORMANCE_CONTEXT` environment variable contains a JSON object with scenario-specific data. When `--spec-version` is passed, its resolved value is forwarded to the client process as `MCP_CONFORMANCE_PROTOCOL_VERSION`; example clients can use this value directly as their `protocolVersion`. SDKs that hard-code their protocol version can ignore it. Clients under test must derive the lifecycle from the protocol version they are asked to run: dated versions through `2025-11-25` use the stateful lifecycle (initialize handshake), while the 2026 draft (`2026-07-28`) uses the stateless lifecycle (per-request `_meta`).
### Server Testing

View file

@ -1276,7 +1276,7 @@ app.post('/mcp', async (req, res) => {
}
// Protocol Version Negotiation Matrix (-32004, HTTP 400)
if (metaVersion !== 'DRAFT-2026-v1') {
if (metaVersion !== '2026-07-28') {
return res.status(400).json({
jsonrpc: '2.0',
id,
@ -1284,7 +1284,7 @@ app.post('/mcp', async (req, res) => {
code: -32004,
message: 'UnsupportedProtocolVersionError',
data: {
supported: ['DRAFT-2026-v1'],
supported: ['2026-07-28'],
requested: String(metaVersion)
}
}
@ -1344,7 +1344,7 @@ app.post('/mcp', async (req, res) => {
jsonrpc: '2.0',
id,
result: {
supportedVersions: ['DRAFT-2026-v1'],
supportedVersions: ['2026-07-28'],
capabilities: {
tools: { listChanged: true }, // Explicitly announce dynamic capabilities matching Section 7 expectations
prompts: { listChanged: true },

View file

@ -25,7 +25,7 @@ app.post('/mcp', (req, res) => {
jsonrpc: '2.0',
id,
result: {
supportedVersions: ['DRAFT-2026-v1'],
supportedVersions: ['2026-07-28'],
capabilities: { resources: {} },
serverInfo: { name: 'sep-2164-empty-contents', version: '1.0.0' }
}

View file

@ -23,7 +23,7 @@ type Handler = (params: Record<string, unknown>) => unknown;
const handlers: Record<string, Handler> = {};
handlers['server/discover'] = () => ({
supportedVersions: ['DRAFT-2026-v1'],
supportedVersions: ['2026-07-28'],
capabilities: {
tools: {},
prompts: {},

View file

@ -26,7 +26,7 @@ app.post('/mcp', (req, res) => {
jsonrpc: '2.0',
id,
result: {
supportedVersions: ['DRAFT-2026-v1'],
supportedVersions: ['2026-07-28'],
capabilities: { tools: {}, resources: {}, prompts: {} },
serverInfo: { name: 'sep-2549-no-caching-hints', version: '1.0.0' }
}

View file

@ -20,8 +20,8 @@ describe('connectFor', () => {
// version through), so identity with connectStateless no longer holds;
// assert it did not select the stateful implementation. The wire-level
// behaviour of the wrapper is covered in stateless.test.ts.
expect(connectFor('DRAFT-2026-v1')).not.toBe(connectStateful);
expect(connectFor('DRAFT-2026-v1')).not.toBe(connectStateless);
expect(connectFor('2026-07-28')).not.toBe(connectStateful);
expect(connectFor('2026-07-28')).not.toBe(connectStateless);
});
});
@ -64,10 +64,10 @@ describe('connectStateless', () => {
await conn.request('tools/list');
const [, init] = mockFetch.mock.calls[0];
expect(init.headers['MCP-Protocol-Version']).toBe('DRAFT-2026-v1');
expect(init.headers['MCP-Protocol-Version']).toBe('2026-07-28');
const sent = JSON.parse(init.body);
expect(sent.params._meta['io.modelcontextprotocol/protocolVersion']).toBe(
'DRAFT-2026-v1'
'2026-07-28'
);
expect(
sent.params._meta['io.modelcontextprotocol/clientInfo']

View file

@ -24,7 +24,7 @@ describe('HttpStandardHeadersScenario (SEP-2243) — negative', () => {
id: 1,
method: 'initialize',
params: {
protocolVersion: 'DRAFT-2026-v1',
protocolVersion: '2026-07-28',
clientInfo: { name: 'neg-test', version: '0' },
capabilities: {}
}

View file

@ -26,7 +26,7 @@ async function badClient(serverUrl: string) {
}
const goodMeta = {
'io.modelcontextprotocol/protocolVersion': 'DRAFT-2026-v1',
'io.modelcontextprotocol/protocolVersion': '2026-07-28',
'io.modelcontextprotocol/clientInfo': { name: 'test', version: '1.0' },
'io.modelcontextprotocol/clientCapabilities': {}
};
@ -70,7 +70,7 @@ async function nonRetryingClient(serverUrl: string) {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'MCP-Protocol-Version': 'DRAFT-2026-v1'
'MCP-Protocol-Version': '2026-07-28'
},
body: JSON.stringify({
jsonrpc: '2.0',
@ -118,7 +118,7 @@ async function malformedCapabilitiesClient(serverUrl: string) {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'MCP-Protocol-Version': 'DRAFT-2026-v1'
'MCP-Protocol-Version': '2026-07-28'
},
body: JSON.stringify({
jsonrpc: '2.0',

View file

@ -99,7 +99,7 @@ Servers MUST include \`ttlMs\` (integer >= 0) and \`cacheScope\` ("public" or "p
// SEP-2549 only exists in the draft spec, so each cacheable endpoint is
// queried over the version-appropriate connection. Under --spec-version
// draft that resolves to the stateless impl (SEP-2575): protocolVersion
// DRAFT-2026-v1 plus the cross-cutting _meta and standard headers
// 2026-07-28 plus the cross-cutting _meta and standard headers
// (issue #315).
let conn: Connection;
try {

View file

@ -101,7 +101,7 @@ describe('Stateless Server Scenario Negative Tests', () => {
jsonrpc: '2.0',
id: reqBody.id,
result: {
supportedVersions: ['DRAFT-2026-v1'],
supportedVersions: ['2026-07-28'],
capabilities: {},
serverInfo: { name: 'bad-meta-server', version: '1.0.0' }
}
@ -341,7 +341,7 @@ describe('Stateless Server Scenario Negative Tests', () => {
jsonrpc: '2.0',
id: reqBody.id,
result: {
supportedVersions: ['DRAFT-2026-v1'],
supportedVersions: ['2026-07-28'],
capabilities: {
tools: { listChanged: true },
prompts: { listChanged: true }

View file

@ -1 +1 @@
modelcontextprotocol@33c3724972e6a87a8ad153e3f8a0d4714b0b9536
modelcontextprotocol@0168c57fc74aba6e6dcf8f0b7191db3caaa5ad65

View file

@ -34,7 +34,7 @@ export type JSONRPCMessage =
| JSONRPCResponse;
/** @internal */
export const LATEST_PROTOCOL_VERSION = "DRAFT-2026-v1";
export const LATEST_PROTOCOL_VERSION = "2026-07-28";
/** @internal */
export const JSONRPC_VERSION = "2.0";
@ -102,6 +102,10 @@ export interface RequestMetaObject extends MetaObject {
* If absent, the server MUST NOT send any {@link LoggingMessageNotification | notifications/message}
* notifications for this request. The client opts in to log messages by
* explicitly setting a level. Replaces the former `logging/setLevel` RPC.
*
* @deprecated Deprecated as of protocol version 2026-07-28 (SEP-2577).
* Remains in the specification for at least twelve months; see the
* deprecated features registry.
*/
"io.modelcontextprotocol/logLevel"?: LoggingLevel;
}
@ -162,7 +166,7 @@ export interface Notification {
* input_required - the request requires additional input and the result contains an {@link InputRequiredResult} object with instructions for the client to provide additional input before retrying the original request.
* @category Common Types
*/
export type ResultType = "complete" | "input_required";
export type ResultType = "complete" | "input_required" | string;
/**
* Common result fields.
@ -292,15 +296,14 @@ export interface InvalidRequestError extends Error {
/**
* A JSON-RPC error indicating that the requested method does not exist or is not available.
*
* In MCP, this error is returned when a request is made for a method that requires a capability that has not been declared. This can occur in either direction:
* In MCP, a server returns this error when a client invokes a method the server does not implement — either a genuinely unknown method, or one gated behind a server capability the server did not advertise (e.g., calling `prompts/list` when the `prompts` capability was not advertised).
*
* - A server returning this error when the client requests a capability it doesn't support (e.g., requesting completions when the `completions` capability was not advertised)
* - A client returning this error when the server requests a capability it doesn't support (e.g., requesting roots when the client did not declare the `roots` capability)
* A request that requires a client capability the client did not declare is signalled instead by {@link MissingRequiredClientCapabilityError} (`-32003`).
*
* @see {@link https://www.jsonrpc.org/specification#error_object | JSON-RPC 2.0 Error Object}
*
* @example Roots not supported
* {@includeCode ./examples/MethodNotFoundError/roots-not-supported.json}
* @example Prompts not supported
* {@includeCode ./examples/MethodNotFoundError/prompts-not-supported.json}
*
* @category Errors
*/
@ -578,7 +581,7 @@ export interface DiscoverRequest extends JSONRPCRequest {
*
* @category `server/discover`
*/
export interface DiscoverResult extends Result {
export interface DiscoverResult extends CacheableResult {
/**
* MCP Protocol Versions this server supports. The client should choose a
* version from this list for use in subsequent requests.
@ -628,6 +631,10 @@ export interface ClientCapabilities {
/**
* Present if the client supports listing roots.
*
* @deprecated Deprecated as of protocol version 2026-07-28 (SEP-2577).
* Remains in the specification for at least twelve months; see the
* deprecated features registry.
*
* @example Roots — minimum baseline support
* {@includeCode ./examples/ClientCapabilities/roots-minimum-baseline-support.json}
*/
@ -636,14 +643,18 @@ export interface ClientCapabilities {
/**
* Present if the client supports sampling from an LLM.
*
* @deprecated Deprecated as of protocol version 2026-07-28 (SEP-2577).
* Remains in the specification for at least twelve months; see the
* deprecated features registry.
*
* @example Sampling — minimum baseline support
* {@includeCode ./examples/ClientCapabilities/sampling-minimum-baseline-support.json}
*
* @example Sampling — tool use support
* {@includeCode ./examples/ClientCapabilities/sampling-tool-use-support.json}
*
* @example Sampling — context inclusion support (soft-deprecated)
* {@includeCode ./examples/ClientCapabilities/sampling-context-inclusion-support-soft-deprecated.json}
* @example Sampling — context inclusion support (deprecated)
* {@includeCode ./examples/ClientCapabilities/sampling-context-inclusion-support-deprecated.json}
*/
sampling?: {
/**
@ -675,7 +686,10 @@ export interface ClientCapabilities {
* (e.g., "io.modelcontextprotocol/oauth-client-credentials"), and values are
* per-extension settings objects. An empty object indicates support with no settings.
*
* @example Extensions — UI extension with MIME type support
* Keys MUST follow the {@link MetaObject | `_meta` key naming rules}, with a
* mandatory prefix.
*
* @example Extensions — MCP Apps (UI) extension with MIME type support
* {@includeCode ./examples/ClientCapabilities/extensions-ui-mime-types.json}
*/
extensions?: { [key: string]: JSONObject };
@ -694,6 +708,10 @@ export interface ServerCapabilities {
/**
* Present if the server supports sending log messages to the client.
*
* @deprecated Deprecated as of protocol version 2026-07-28 (SEP-2577).
* Remains in the specification for at least twelve months; see the
* deprecated features registry.
*
* @example Logging — minimum baseline support
* {@includeCode ./examples/ServerCapabilities/logging-minimum-baseline-support.json}
*/
@ -762,11 +780,14 @@ export interface ServerCapabilities {
};
/**
* Optional MCP extensions that the server supports. Keys are extension identifiers
* (e.g., "io.modelcontextprotocol/apps"), and values are per-extension settings
* (e.g., "io.modelcontextprotocol/tasks"), and values are per-extension settings
* objects. An empty object indicates support with no settings.
*
* @example Extensions — UI extension support
* {@includeCode ./examples/ServerCapabilities/extensions-ui.json}
* Keys MUST follow the {@link MetaObject | `_meta` key naming rules}, with a
* mandatory prefix.
*
* @example Extensions — Tasks extension support
* {@includeCode ./examples/ServerCapabilities/extensions-tasks.json}
*/
extensions?: { [key: string]: JSONObject };
}
@ -1848,6 +1869,10 @@ export interface Tool extends BaseMetadata, Icons {
/**
* Parameters for a `notifications/message` notification.
*
* @deprecated Deprecated as of protocol version 2026-07-28 (SEP-2577).
* Remains in the specification for at least twelve months; see the
* deprecated features registry.
*
* @example Log database connection failed
* {@includeCode ./examples/LoggingMessageNotificationParams/log-database-connection-failed.json}
*
@ -1871,6 +1896,10 @@ export interface LoggingMessageNotificationParams extends NotificationParams {
/**
* JSONRPCNotification of a log message passed from server to client. The client opts in by setting `"io.modelcontextprotocol/logLevel"` in a request's `_meta`.
*
* @deprecated Deprecated as of protocol version 2026-07-28 (SEP-2577).
* Remains in the specification for at least twelve months; see the
* deprecated features registry.
*
* @example Log database connection failed
* {@includeCode ./examples/LoggingMessageNotification/log-database-connection-failed.json}
*
@ -1887,6 +1916,10 @@ export interface LoggingMessageNotification extends JSONRPCNotification {
* These map to syslog message severities, as specified in RFC-5424:
* https://datatracker.ietf.org/doc/html/rfc5424#section-6.2.1
*
* @deprecated Deprecated as of protocol version 2026-07-28 (SEP-2577).
* Remains in the specification for at least twelve months; see the
* deprecated features registry.
*
* @category Common Types
*/
export type LoggingLevel =
@ -1912,6 +1945,10 @@ export type LoggingLevel =
* @example Follow-up request with tool results
* {@includeCode ./examples/CreateMessageRequestParams/follow-up-with-tool-results.json}
*
* @deprecated Deprecated as of protocol version 2026-07-28 (SEP-2577).
* Remains in the specification for at least twelve months; see the
* deprecated features registry.
*
* @category `sampling/createMessage`
*/
export interface CreateMessageRequestParams {
@ -1928,8 +1965,12 @@ export interface CreateMessageRequestParams {
* A request to include context from one or more MCP servers (including the caller), to be attached to the prompt.
* The client MAY ignore this request.
*
* Default is `"none"`. Values `"thisServer"` and `"allServers"` are soft-deprecated. Servers SHOULD only use these values if the client
* declares {@link ClientCapabilities.sampling.context}. These values may be removed in future spec releases.
* Default is `"none"`. The values `"thisServer"` and `"allServers"` are deprecated (SEP-2596): servers SHOULD
* omit this field or use `"none"`, and SHOULD only use the deprecated values if the client declares
* {@link ClientCapabilities.sampling.context}.
*
* @deprecated The `"thisServer"` and `"allServers"` values are deprecated as of protocol version 2025-11-25
* (SEP-2596) and will be removed no later than the Sampling feature itself (SEP-2577). Omit this field or use `"none"`.
*/
includeContext?: "none" | "thisServer" | "allServers";
/**
@ -1963,6 +2004,10 @@ export interface CreateMessageRequestParams {
/**
* Controls tool selection behavior for sampling requests.
*
* @deprecated Deprecated as of protocol version 2026-07-28 (SEP-2577).
* Remains in the specification for at least twelve months; see the
* deprecated features registry.
*
* @category `sampling/createMessage`
*/
export interface ToolChoice {
@ -1981,6 +2026,10 @@ export interface ToolChoice {
* @example Sampling request
* {@includeCode ./examples/CreateMessageRequest/sampling-request.json}
*
* @deprecated Deprecated as of protocol version 2026-07-28 (SEP-2577).
* Remains in the specification for at least twelve months; see the
* deprecated features registry.
*
* @category `sampling/createMessage`
*/
export interface CreateMessageRequest {
@ -2002,6 +2051,10 @@ export interface CreateMessageRequest {
* @example Final response after tool use
* {@includeCode ./examples/CreateMessageResult/final-response.json}
*
* @deprecated Deprecated as of protocol version 2026-07-28 (SEP-2577).
* Remains in the specification for at least twelve months; see the
* deprecated features registry.
*
* @category `sampling/createMessage`
*/
export interface CreateMessageResult extends SamplingMessage {
@ -2033,6 +2086,10 @@ export interface CreateMessageResult extends SamplingMessage {
* @example Multiple content blocks
* {@includeCode ./examples/SamplingMessage/multiple-content-blocks.json}
*
* @deprecated Deprecated as of protocol version 2026-07-28 (SEP-2577).
* Remains in the specification for at least twelve months; see the
* deprecated features registry.
*
* @category `sampling/createMessage`
*/
export interface SamplingMessage {
@ -2042,6 +2099,10 @@ export interface SamplingMessage {
}
/**
* @deprecated Deprecated as of protocol version 2026-07-28 (SEP-2577).
* Remains in the specification for at least twelve months; see the
* deprecated features registry.
*
* @category `sampling/createMessage`
*/
export type SamplingMessageContentBlock =
@ -2190,6 +2251,10 @@ export interface AudioContent {
* @example `get_weather` tool use
* {@includeCode ./examples/ToolUseContent/get-weather-tool-use.json}
*
* @deprecated Deprecated as of protocol version 2026-07-28 (SEP-2577).
* Remains in the specification for at least twelve months; see the
* deprecated features registry.
*
* @category `sampling/createMessage`
*/
export interface ToolUseContent {
@ -2225,6 +2290,10 @@ export interface ToolUseContent {
* @example `get_weather` tool result
* {@includeCode ./examples/ToolResultContent/get-weather-tool-result.json}
*
* @deprecated Deprecated as of protocol version 2026-07-28 (SEP-2577).
* Remains in the specification for at least twelve months; see the
* deprecated features registry.
*
* @category `sampling/createMessage`
*/
export interface ToolResultContent {
@ -2284,6 +2353,10 @@ export interface ToolResultContent {
* @example With hints and priorities
* {@includeCode ./examples/ModelPreferences/with-hints-and-priorities.json}
*
* @deprecated Deprecated as of protocol version 2026-07-28 (SEP-2577).
* Remains in the specification for at least twelve months; see the
* deprecated features registry.
*
* @category `sampling/createMessage`
*/
export interface ModelPreferences {
@ -2338,6 +2411,10 @@ export interface ModelPreferences {
* Keys not declared here are currently left unspecified by the spec and are up
* to the client to interpret.
*
* @deprecated Deprecated as of protocol version 2026-07-28 (SEP-2577).
* Remains in the specification for at least twelve months; see the
* deprecated features registry.
*
* @category `sampling/createMessage`
*/
export interface ModelHint {
@ -2486,6 +2563,10 @@ export interface PromptReference extends BaseMetadata {
* @example List roots request
* {@includeCode ./examples/ListRootsRequest/list-roots-request.json}
*
* @deprecated Deprecated as of protocol version 2026-07-28 (SEP-2577).
* Remains in the specification for at least twelve months; see the
* deprecated features registry.
*
* @category `roots/list`
*/
export interface ListRootsRequest {
@ -2504,6 +2585,10 @@ export interface ListRootsRequest {
* @example Multiple root directories
* {@includeCode ./examples/ListRootsResult/multiple-root-directories.json}
*
* @deprecated Deprecated as of protocol version 2026-07-28 (SEP-2577).
* Remains in the specification for at least twelve months; see the
* deprecated features registry.
*
* @category `roots/list`
*/
export interface ListRootsResult {
@ -2516,6 +2601,10 @@ export interface ListRootsResult {
* @example Project directory root
* {@includeCode ./examples/Root/project-directory.json}
*
* @deprecated Deprecated as of protocol version 2026-07-28 (SEP-2577).
* Remains in the specification for at least twelve months; see the
* deprecated features registry.
*
* @category `roots/list`
*/
export interface Root {
@ -2666,8 +2755,17 @@ export interface NumberSchema {
type: "number" | "integer";
title?: string;
description?: string;
/**
* @TJS-type number
*/
minimum?: number;
/**
* @TJS-type number
*/
maximum?: number;
/**
* @TJS-type number
*/
default?: number;
}
@ -2916,6 +3014,18 @@ export interface ElicitResult {
content?: { [key: string]: string | number | boolean | string[] };
}
/**
* Parameters for a {@link ElicitationCompleteNotification | notifications/elicitation/complete} notification.
*
* @category `notifications/elicitation/complete`
*/
export interface ElicitationCompleteNotificationParams extends NotificationParams {
/**
* The ID of the elicitation that completed.
*/
elicitationId: string;
}
/**
* An optional notification from the server to the client, informing it of a completion of a out-of-band elicitation request.
*
@ -2926,12 +3036,7 @@ export interface ElicitResult {
*/
export interface ElicitationCompleteNotification extends JSONRPCNotification {
method: "notifications/elicitation/complete";
params: {
/**
* The ID of the elicitation that completed.
*/
elicitationId: string;
};
params: ElicitationCompleteNotificationParams;
}
/* Client messages */

19
src/types.test.ts Normal file
View file

@ -0,0 +1,19 @@
import { describe, it, expect } from 'vitest';
import { LATEST_PROTOCOL_VERSION } from './spec-types/draft';
import { DATED_SPEC_VERSIONS, DRAFT_PROTOCOL_VERSION } from './types';
describe('DRAFT_PROTOCOL_VERSION', () => {
it('mirrors LATEST_PROTOCOL_VERSION from the vendored draft schema', () => {
// DRAFT_PROTOCOL_VERSION is the wire protocolVersion the harness asserts
// for draft-spec scenarios. It must match what the spec's draft schema
// declares, or SDKs implementing the draft cannot pass the draft suite.
expect(DRAFT_PROTOCOL_VERSION).toBe(LATEST_PROTOCOL_VERSION);
});
it('is distinct from every dated spec version', () => {
// Scenario applicability (introducedIn/removedIn) and --spec-version
// resolution rely on the draft identifier not colliding with a released
// version.
expect(DATED_SPEC_VERSIONS).not.toContain(DRAFT_PROTOCOL_VERSION);
});
});

View file

@ -41,7 +41,7 @@ export const LATEST_SPEC_VERSION: DatedSpecVersion = '2025-11-25';
* `LATEST_PROTOCOL_VERSION` in the spec repo's `schema/draft/schema.ts`;
* bump when that constant changes.
*/
export const DRAFT_PROTOCOL_VERSION = 'DRAFT-2026-v1';
export const DRAFT_PROTOCOL_VERSION = '2026-07-28';
// Wire protocolVersion strings the mock server will negotiate on initialize.
export const NEGOTIABLE_PROTOCOL_VERSIONS: readonly string[] = [