fix(types): restore task wire types removed with the task feature (#2248)

This commit is contained in:
Felix Weinberger 2026-06-02 16:08:53 +01:00 • committed by GitHub
commit db28156a23
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
13 changed files with 556 additions and 71 deletions

View file

@ -0,0 +1,7 @@
---
'@modelcontextprotocol/core': minor
'@modelcontextprotocol/server': minor
'@modelcontextprotocol/client': minor
---
Restore the 2025-11-25 task wire types that were removed together with the task feature: the task schemas and inferred types, task members of the request/result/notification unions, the `task` request-params augmentation, the `tasks` capability key, the `isTaskAugmentedRequestParams` guard, and `RELATED_TASK_META_KEY`. The task feature itself remains removed — servers do not advertise the `tasks` capability and inbound `tasks/*` requests receive `-32601` — but the wire surface stays so SDKs interoperate cleanly with peers on the 2025-11-25 revision.

View file

@ -499,7 +499,9 @@ The 2025-11 task side-channel through `Protocol` is removed (was always `@experi
| `TaskMessageQueue`, `InMemoryTaskMessageQueue`, `BaseQueuedMessage`, `Queued*`, `CreateTaskServerContext`, `TaskServerContext`, `TaskToolExecution` | removed |
| `ResponseMessage`, `BaseResponseMessage`, `ErrorMessage`, `AsyncGeneratorValue`, `TaskStatusMessage`, `TaskCreatedMessage`, `ResultMessage`, `takeResult`, `toArrayAsync` | removed |
`TaskStore` / `InMemoryTaskStore` / `CreateTaskOptions` / `isTerminal` (storage layer) and `TaskCreationParams` are also removed; they will return with the SEP-2663 server-directed plugin.
`TaskStore` / `InMemoryTaskStore` / `CreateTaskOptions` / `isTerminal` (storage layer) are also removed; they will return with the SEP-2663 server-directed plugin.
NOT removed (wire surface, kept for 2025-11-25 interop): task Zod schemas + inferred types (`Task`, `TaskStatus`, `TaskMetadata`, `RelatedTaskMetadata`, `CreateTaskResult`, `GetTask*`, `ListTasks*`, `CancelTask*`, `TaskStatusNotification*`, `TaskAugmentedRequestParams`), task members of the request/result/notification unions, the `tasks` capability key, `isTaskAugmentedRequestParams`, `RELATED_TASK_META_KEY`. Inbound `tasks/*` requests → `-32601`.
## 13. Client Behavioral Changes

View file

@ -892,7 +892,9 @@ The 2025-11 experimental tasks side-channel woven through `Protocol` has been re
- `TaskMessageQueue`, `InMemoryTaskMessageQueue`, `BaseQueuedMessage` and the `Queued*` message types, `CreateTaskServerContext`, `TaskServerContext`, `TaskToolExecution`
- `examples/{client,server}/src/simpleTaskInteractive*.ts`
**Also removed:** the storage layer (`TaskStore`, `InMemoryTaskStore`, `CreateTaskOptions`, `isTerminal`) and `TaskCreationParams`. They will return as part of the SEP-2663 server-directed plugin in a follow-up.
**Also removed:** the storage layer (`TaskStore`, `InMemoryTaskStore`, `CreateTaskOptions`, `isTerminal`). It will return as part of the SEP-2663 server-directed plugin in a follow-up.
**Wire types remain.** The task wire surface defined by the 2025-11-25 protocol revision is still exported, for interoperability with peers on that revision: the task Zod schemas and their inferred types (`Task`, `TaskStatus`, `TaskMetadata`, `RelatedTaskMetadata`, `CreateTaskResult`, `GetTask*`, `GetTaskPayload*`, `ListTasks*`, `CancelTask*`, `TaskStatusNotification*`, `TaskAugmentedRequestParams`), the task members of the request/result/notification unions, the `tasks` capability key, the `isTaskAugmentedRequestParams` guard, and `RELATED_TASK_META_KEY`. Only the behavior is gone: servers built on this SDK do not advertise the `tasks` capability, and inbound `tasks/*` requests receive a standard `-32601` (method not found) error.
There is no migration path for the removed surface; it was always `@experimental`. Task support is planned to return as an opt-in extension plugin per SEP-2663.

View file

@ -8,6 +8,8 @@ export const SPEC_SCHEMA_NAMES: ReadonlySet<string> = new Set([
'CallToolRequestParamsSchema',
'CallToolRequestSchema',
'CallToolResultSchema',
'CancelTaskRequestSchema',
'CancelTaskResultSchema',
'CancelledNotificationParamsSchema',
'CancelledNotificationSchema',
'ClientCapabilitiesSchema',
@ -23,6 +25,7 @@ export const SPEC_SCHEMA_NAMES: ReadonlySet<string> = new Set([
'CreateMessageRequestSchema',
'CreateMessageResultSchema',
'CreateMessageResultWithToolsSchema',
'CreateTaskResultSchema',
'CursorSchema',
'ElicitRequestFormParamsSchema',
'ElicitRequestParamsSchema',
@ -37,6 +40,10 @@ export const SPEC_SCHEMA_NAMES: ReadonlySet<string> = new Set([
'GetPromptRequestParamsSchema',
'GetPromptRequestSchema',
'GetPromptResultSchema',
'GetTaskPayloadRequestSchema',
'GetTaskPayloadResultSchema',
'GetTaskRequestSchema',
'GetTaskResultSchema',
'IconSchema',
'IconsSchema',
'ImageContentSchema',
@ -63,6 +70,8 @@ export const SPEC_SCHEMA_NAMES: ReadonlySet<string> = new Set([
'ListResourcesResultSchema',
'ListRootsRequestSchema',
'ListRootsResultSchema',
'ListTasksRequestSchema',
'ListTasksResultSchema',
'ListToolsRequestSchema',
'ListToolsResultSchema',
'LoggingLevelSchema',
@ -101,6 +110,7 @@ export const SPEC_SCHEMA_NAMES: ReadonlySet<string> = new Set([
'ReadResourceRequestParamsSchema',
'ReadResourceRequestSchema',
'ReadResourceResultSchema',
'RelatedTaskMetadataSchema',
'RequestIdSchema',
'RequestMetaSchema',
'RequestSchema',
@ -130,6 +140,13 @@ export const SPEC_SCHEMA_NAMES: ReadonlySet<string> = new Set([
'StringSchemaSchema',
'SubscribeRequestParamsSchema',
'SubscribeRequestSchema',
'TaskAugmentedRequestParamsSchema',
'TaskCreationParamsSchema',
'TaskMetadataSchema',
'TaskSchema',
'TaskStatusNotificationParamsSchema',
'TaskStatusNotificationSchema',
'TaskStatusSchema',
'TextContentSchema',
'TextResourceContentsSchema',
'TitledMultiSelectEnumSchemaSchema',

View file

@ -79,6 +79,7 @@ export {
LATEST_PROTOCOL_VERSION,
METHOD_NOT_FOUND,
PARSE_ERROR,
RELATED_TASK_META_KEY,
SUPPORTED_PROTOCOL_VERSIONS
} from '../../types/constants.js';
@ -100,6 +101,7 @@ export {
isJSONRPCRequest,
isJSONRPCResponse,
isJSONRPCResultResponse,
isTaskAugmentedRequestParams,
parseJSONRPCMessage
} from '../../types/guards.js';

View file

@ -2,6 +2,8 @@ export const LATEST_PROTOCOL_VERSION = '2025-11-25';
export const DEFAULT_NEGOTIATED_PROTOCOL_VERSION = '2025-03-26';
export const SUPPORTED_PROTOCOL_VERSIONS = [LATEST_PROTOCOL_VERSION, '2025-06-18', '2025-03-26', '2024-11-05', '2024-10-07'];
export const RELATED_TASK_META_KEY = 'io.modelcontextprotocol/related-task';
/* JSON-RPC types */
export const JSONRPC_VERSION = '2.0';

View file

@ -7,7 +7,8 @@ import {
JSONRPCNotificationSchema,
JSONRPCRequestSchema,
JSONRPCResponseSchema,
JSONRPCResultResponseSchema
JSONRPCResultResponseSchema,
TaskAugmentedRequestParamsSchema
} from './schemas.js';
import type {
CallToolResult,
@ -21,7 +22,8 @@ import type {
JSONRPCNotification,
JSONRPCRequest,
JSONRPCResponse,
JSONRPCResultResponse
JSONRPCResultResponse,
TaskAugmentedRequestParams
} from './types.js';
/**
@ -79,6 +81,15 @@ export const isCallToolResult = (value: unknown): value is CallToolResult => {
return CallToolResultSchema.safeParse(value).success;
};
/**
* Checks if a value is a valid {@linkcode TaskAugmentedRequestParams}.
* @param value - The value to check.
*
* @returns True if the value is a valid {@linkcode TaskAugmentedRequestParams}, false otherwise.
*/
export const isTaskAugmentedRequestParams = (value: unknown): value is TaskAugmentedRequestParams =>
TaskAugmentedRequestParamsSchema.safeParse(value).success;
export const isInitializeRequest = (value: unknown): value is InitializeRequest => InitializeRequestSchema.safeParse(value).success;
export const isInitializedNotification = (value: unknown): value is InitializedNotification =>

View file

@ -1,6 +1,6 @@
import * as z from 'zod/v4';
import { JSONRPC_VERSION } from './constants.js';
import { JSONRPC_VERSION, RELATED_TASK_META_KEY } from './constants.js';
import type {
JSONArray,
JSONObject,
@ -27,11 +27,42 @@ export const ProgressTokenSchema = z.union([z.string(), z.number().int()]);
*/
export const CursorSchema = z.string();
/**
* Task creation parameters, used to ask that the server create a task to represent a request.
*/
export const TaskCreationParamsSchema = z.looseObject({
/**
* Requested duration in milliseconds to retain task from creation.
*/
ttl: z.number().optional(),
/**
* Time in milliseconds to wait between task status requests.
*/
pollInterval: z.number().optional()
});
export const TaskMetadataSchema = z.object({
ttl: z.number().optional()
});
/**
* Metadata for associating messages with a task.
* Include this in the `_meta` field under the key `io.modelcontextprotocol/related-task`.
*/
export const RelatedTaskMetadataSchema = z.object({
taskId: z.string()
});
export const RequestMetaSchema = z.looseObject({
/**
* If specified, the caller is requesting out-of-band progress notifications for this request (as represented by notifications/progress). The value of this parameter is an opaque token that will be attached to any subsequent notifications. The receiver is not obligated to provide these notifications.
*/
progressToken: ProgressTokenSchema.optional()
progressToken: ProgressTokenSchema.optional(),
/**
* If specified, this request is related to the provided task.
*/
[RELATED_TASK_META_KEY]: RelatedTaskMetadataSchema.optional()
});
/**
@ -44,6 +75,21 @@ export const BaseRequestParamsSchema = z.object({
_meta: RequestMetaSchema.optional()
});
/**
* Common params for any task-augmented request.
*/
export const TaskAugmentedRequestParamsSchema = BaseRequestParamsSchema.extend({
/**
* If specified, the caller is requesting task-augmented execution for this request.
* The request will return a `CreateTaskResult` immediately, and the actual result can be
* retrieved later via `tasks/result`.
*
* Task augmentation is subject to capability negotiation - receivers MUST declare support
* for task augmentation of specific request types in their capabilities.
*/
task: TaskMetadataSchema.optional()
});
export const RequestSchema = z.object({
method: z.string(),
params: BaseRequestParamsSchema.loose().optional()
@ -285,6 +331,72 @@ const ElicitationCapabilitySchema = z.preprocess(
)
);
/**
* Task capabilities for clients, indicating which request types support task creation.
*/
export const ClientTasksCapabilitySchema = z.looseObject({
/**
* Present if the client supports listing tasks.
*/
list: JSONObjectSchema.optional(),
/**
* Present if the client supports cancelling tasks.
*/
cancel: JSONObjectSchema.optional(),
/**
* Capabilities for task creation on specific request types.
*/
requests: z
.looseObject({
/**
* Task support for sampling requests.
*/
sampling: z
.looseObject({
createMessage: JSONObjectSchema.optional()
})
.optional(),
/**
* Task support for elicitation requests.
*/
elicitation: z
.looseObject({
create: JSONObjectSchema.optional()
})
.optional()
})
.optional()
});
/**
* Task capabilities for servers, indicating which request types support task creation.
*/
export const ServerTasksCapabilitySchema = z.looseObject({
/**
* Present if the server supports listing tasks.
*/
list: JSONObjectSchema.optional(),
/**
* Present if the server supports cancelling tasks.
*/
cancel: JSONObjectSchema.optional(),
/**
* Capabilities for task creation on specific request types.
*/
requests: z
.looseObject({
/**
* Task support for tool requests.
*/
tools: z
.looseObject({
call: JSONObjectSchema.optional()
})
.optional()
})
.optional()
});
/**
* Capabilities a client may support. Known capabilities are defined here, in this schema, but this is not a closed set: any client can define its own, additional capabilities.
*/
@ -324,6 +436,10 @@ export const ClientCapabilitiesSchema = z.object({
listChanged: z.boolean().optional()
})
.optional(),
/**
* Present if the client supports task creation.
*/
tasks: ClientTasksCapabilitySchema.optional(),
/**
* Extensions that the client supports. Keys are extension identifiers (vendor-prefix/extension-name).
*/
@ -400,6 +516,10 @@ export const ServerCapabilitiesSchema = z.object({
listChanged: z.boolean().optional()
})
.optional(),
/**
* Present if the server supports task creation.
*/
tasks: ServerTasksCapabilitySchema.optional(),
/**
* Extensions that the server supports. Keys are extension identifiers (vendor-prefix/extension-name).
*/
@ -496,6 +616,120 @@ export const PaginatedResultSchema = ResultSchema.extend({
nextCursor: CursorSchema.optional()
});
/**
* The status of a task.
* */
export const TaskStatusSchema = z.enum(['working', 'input_required', 'completed', 'failed', 'cancelled']);
/* Tasks */
/**
* A pollable state object associated with a request.
*/
export const TaskSchema = z.object({
taskId: z.string(),
status: TaskStatusSchema,
/**
* Time in milliseconds to keep task results available after completion.
* If `null`, the task has unlimited lifetime until manually cleaned up.
*/
ttl: z.union([z.number(), z.null()]),
/**
* ISO 8601 timestamp when the task was created.
*/
createdAt: z.string(),
/**
* ISO 8601 timestamp when the task was last updated.
*/
lastUpdatedAt: z.string(),
pollInterval: z.optional(z.number()),
/**
* Optional diagnostic message for failed tasks or other status information.
*/
statusMessage: z.optional(z.string())
});
/**
* Result returned when a task is created, containing the task data wrapped in a `task` field.
*/
export const CreateTaskResultSchema = ResultSchema.extend({
task: TaskSchema
});
/**
* Parameters for task status notification.
*/
export const TaskStatusNotificationParamsSchema = NotificationsParamsSchema.merge(TaskSchema);
/**
* A notification sent when a task's status changes.
*/
export const TaskStatusNotificationSchema = NotificationSchema.extend({
method: z.literal('notifications/tasks/status'),
params: TaskStatusNotificationParamsSchema
});
/**
* A request to get the state of a specific task.
*/
export const GetTaskRequestSchema = RequestSchema.extend({
method: z.literal('tasks/get'),
params: BaseRequestParamsSchema.extend({
taskId: z.string()
})
});
/**
* The response to a {@linkcode GetTaskRequest | tasks/get} request.
*/
export const GetTaskResultSchema = ResultSchema.merge(TaskSchema);
/**
* A request to get the result of a specific task.
*/
export const GetTaskPayloadRequestSchema = RequestSchema.extend({
method: z.literal('tasks/result'),
params: BaseRequestParamsSchema.extend({
taskId: z.string()
})
});
/**
* The response to a `tasks/result` request.
* The structure matches the result type of the original request.
* For example, a {@linkcode CallToolRequest | tools/call} task would return the `CallToolResult` structure.
*
*/
export const GetTaskPayloadResultSchema = ResultSchema.loose();
/**
* A request to list tasks.
*/
export const ListTasksRequestSchema = PaginatedRequestSchema.extend({
method: z.literal('tasks/list')
});
/**
* The response to a {@linkcode ListTasksRequest | tasks/list} request.
*/
export const ListTasksResultSchema = PaginatedResultSchema.extend({
tasks: z.array(TaskSchema)
});
/**
* A request to cancel a specific task.
*/
export const CancelTaskRequestSchema = RequestSchema.extend({
method: z.literal('tasks/cancel'),
params: BaseRequestParamsSchema.extend({
taskId: z.string()
})
});
/**
* The response to a {@linkcode CancelTaskRequest | tasks/cancel} request.
*/
export const CancelTaskResultSchema = ResultSchema.merge(TaskSchema);
/* Resources */
/**
* The contents of a specific resource or sub-resource.
@ -1053,12 +1287,12 @@ export const ToolAnnotationsSchema = z.object({
*/
export const ToolExecutionSchema = z.object({
/**
* Indicates the tool's preference for task-augmented execution
* (`"required"`, `"optional"`, or `"forbidden"`; defaults to `"forbidden"`).
* Indicates the tool's preference for task-augmented execution.
* - `"required"`: Clients MUST invoke the tool as a task
* - `"optional"`: Clients MAY invoke the tool as a task or normal request
* - `"forbidden"`: Clients MUST NOT attempt to invoke the tool as a task
*
* The SDK no longer implements task-augmented execution (SEP-2663). The field is
* kept for parity with the spec schema's `ToolExecution` type and will be removed
* when the generated spec types next sync.
* If not present, defaults to `"forbidden"`.
*/
taskSupport: z.enum(['required', 'optional', 'forbidden']).optional()
});
@ -1175,7 +1409,7 @@ export const CompatibilityCallToolResultSchema = CallToolResultSchema.or(
/**
* Parameters for a `tools/call` request.
*/
export const CallToolRequestParamsSchema = BaseRequestParamsSchema.extend({
export const CallToolRequestParamsSchema = TaskAugmentedRequestParamsSchema.extend({
/**
* The name of the tool to call.
*/
@ -1373,7 +1607,7 @@ export const SamplingMessageSchema = z.object({
/**
* Parameters for a `sampling/createMessage` request.
*/
export const CreateMessageRequestParamsSchema = BaseRequestParamsSchema.extend({
export const CreateMessageRequestParamsSchema = TaskAugmentedRequestParamsSchema.extend({
messages: z.array(SamplingMessageSchema),
/**
* The server's preferences for which model to select. The client MAY modify or omit this request.
@ -1612,7 +1846,7 @@ export const PrimitiveSchemaDefinitionSchema = z.union([EnumSchemaSchema, Boolea
/**
* Parameters for an `elicitation/create` request for form-based elicitation.
*/
export const ElicitRequestFormParamsSchema = BaseRequestParamsSchema.extend({
export const ElicitRequestFormParamsSchema = TaskAugmentedRequestParamsSchema.extend({
/**
* The elicitation mode.
*
@ -1639,7 +1873,7 @@ export const ElicitRequestFormParamsSchema = BaseRequestParamsSchema.extend({
/**
* Parameters for an {@linkcode ElicitRequest | elicitation/create} request for URL-based elicitation.
*/
export const ElicitRequestURLParamsSchema = BaseRequestParamsSchema.extend({
export const ElicitRequestURLParamsSchema = TaskAugmentedRequestParamsSchema.extend({
/**
* The elicitation mode.
*/
@ -1855,14 +2089,19 @@ export const ClientRequestSchema = z.union([
SubscribeRequestSchema,
UnsubscribeRequestSchema,
CallToolRequestSchema,
ListToolsRequestSchema
ListToolsRequestSchema,
GetTaskRequestSchema,
GetTaskPayloadRequestSchema,
ListTasksRequestSchema,
CancelTaskRequestSchema
]);
export const ClientNotificationSchema = z.union([
CancelledNotificationSchema,
ProgressNotificationSchema,
InitializedNotificationSchema,
RootsListChangedNotificationSchema
RootsListChangedNotificationSchema,
TaskStatusNotificationSchema
]);
export const ClientResultSchema = z.union([
@ -1870,11 +2109,23 @@ export const ClientResultSchema = z.union([
CreateMessageResultSchema,
CreateMessageResultWithToolsSchema,
ElicitResultSchema,
ListRootsResultSchema
ListRootsResultSchema,
GetTaskResultSchema,
ListTasksResultSchema,
CreateTaskResultSchema
]);
/* Server messages */
export const ServerRequestSchema = z.union([PingRequestSchema, CreateMessageRequestSchema, ElicitRequestSchema, ListRootsRequestSchema]);
export const ServerRequestSchema = z.union([
PingRequestSchema,
CreateMessageRequestSchema,
ElicitRequestSchema,
ListRootsRequestSchema,
GetTaskRequestSchema,
GetTaskPayloadRequestSchema,
ListTasksRequestSchema,
CancelTaskRequestSchema
]);
export const ServerNotificationSchema = z.union([
CancelledNotificationSchema,
@ -1884,6 +2135,7 @@ export const ServerNotificationSchema = z.union([
ResourceListChangedNotificationSchema,
ToolListChangedNotificationSchema,
PromptListChangedNotificationSchema,
TaskStatusNotificationSchema,
ElicitationCompleteNotificationSchema
]);
@ -1897,7 +2149,10 @@ export const ServerResultSchema = z.union([
ListResourceTemplatesResultSchema,
ReadResourceResultSchema,
CallToolResultSchema,
ListToolsResultSchema
ListToolsResultSchema,
GetTaskResultSchema,
ListTasksResultSchema,
CreateTaskResultSchema
]);
/* Runtime schema lookup — result schemas by method */
@ -1913,11 +2168,15 @@ const resultSchemas: Record<string, z.core.$ZodType> = {
'resources/read': ReadResourceResultSchema,
'resources/subscribe': EmptyResultSchema,
'resources/unsubscribe': EmptyResultSchema,
'tools/call': CallToolResultSchema,
'tools/call': z.union([CallToolResultSchema, CreateTaskResultSchema]),
'tools/list': ListToolsResultSchema,
'sampling/createMessage': CreateMessageResultWithToolsSchema,
'elicitation/create': ElicitResultSchema,
'roots/list': ListRootsResultSchema
'sampling/createMessage': z.union([CreateMessageResultWithToolsSchema, CreateTaskResultSchema]),
'elicitation/create': z.union([ElicitResultSchema, CreateTaskResultSchema]),
'roots/list': ListRootsResultSchema,
'tasks/get': GetTaskResultSchema,
'tasks/result': ResultSchema,
'tasks/list': ListTasksResultSchema,
'tasks/cancel': CancelTaskResultSchema
};
/**

View file

@ -21,7 +21,7 @@ import * as schemas from './schemas.js';
*
* This intentionally excludes internal helper schemas exported from `schemas.ts` that have no
* matching public type (e.g. `ListChangedOptionsBaseSchema`, `BaseRequestParamsSchema`,
* `NotificationsParamsSchema`).
* `NotificationsParamsSchema`, `ClientTasksCapabilitySchema`, `ServerTasksCapabilitySchema`).
* Keeping the list explicit means new public spec types must be added here deliberately, and
* internals never leak into `SpecTypeName`.
*
@ -41,6 +41,8 @@ const SPEC_SCHEMA_KEYS = [
'CallToolResultSchema',
'CancelledNotificationSchema',
'CancelledNotificationParamsSchema',
'CancelTaskRequestSchema',
'CancelTaskResultSchema',
'ClientCapabilitiesSchema',
'ClientNotificationSchema',
'ClientRequestSchema',
@ -54,6 +56,7 @@ const SPEC_SCHEMA_KEYS = [
'CreateMessageRequestParamsSchema',
'CreateMessageResultSchema',
'CreateMessageResultWithToolsSchema',
'CreateTaskResultSchema',
'CursorSchema',
'ElicitationCompleteNotificationSchema',
'ElicitationCompleteNotificationParamsSchema',
@ -68,6 +71,10 @@ const SPEC_SCHEMA_KEYS = [
'GetPromptRequestSchema',
'GetPromptRequestParamsSchema',
'GetPromptResultSchema',
'GetTaskPayloadRequestSchema',
'GetTaskPayloadResultSchema',
'GetTaskRequestSchema',
'GetTaskResultSchema',
'IconSchema',
'IconsSchema',
'ImageContentSchema',
@ -94,6 +101,8 @@ const SPEC_SCHEMA_KEYS = [
'ListResourceTemplatesResultSchema',
'ListRootsRequestSchema',
'ListRootsResultSchema',
'ListTasksRequestSchema',
'ListTasksResultSchema',
'ListToolsRequestSchema',
'ListToolsResultSchema',
'LoggingLevelSchema',
@ -121,6 +130,7 @@ const SPEC_SCHEMA_KEYS = [
'ReadResourceRequestSchema',
'ReadResourceRequestParamsSchema',
'ReadResourceResultSchema',
'RelatedTaskMetadataSchema',
'RequestSchema',
'RequestIdSchema',
'RequestMetaSchema',
@ -150,6 +160,13 @@ const SPEC_SCHEMA_KEYS = [
'StringSchemaSchema',
'SubscribeRequestSchema',
'SubscribeRequestParamsSchema',
'TaskSchema',
'TaskAugmentedRequestParamsSchema',
'TaskCreationParamsSchema',
'TaskMetadataSchema',
'TaskStatusSchema',
'TaskStatusNotificationSchema',
'TaskStatusNotificationParamsSchema',
'TextContentSchema',
'TextResourceContentsSchema',
'TitledMultiSelectEnumSchemaSchema',

View file

@ -17,6 +17,8 @@ import type {
CallToolResultSchema,
CancelledNotificationParamsSchema,
CancelledNotificationSchema,
CancelTaskRequestSchema,
CancelTaskResultSchema,
ClientCapabilitiesSchema,
ClientNotificationSchema,
ClientRequestSchema,
@ -30,6 +32,7 @@ import type {
CreateMessageRequestSchema,
CreateMessageResultSchema,
CreateMessageResultWithToolsSchema,
CreateTaskResultSchema,
CursorSchema,
ElicitationCompleteNotificationParamsSchema,
ElicitationCompleteNotificationSchema,
@ -44,6 +47,10 @@ import type {
GetPromptRequestParamsSchema,
GetPromptRequestSchema,
GetPromptResultSchema,
GetTaskPayloadRequestSchema,
GetTaskPayloadResultSchema,
GetTaskRequestSchema,
GetTaskResultSchema,
IconSchema,
IconsSchema,
ImageContentSchema,
@ -67,6 +74,8 @@ import type {
ListResourceTemplatesResultSchema,
ListRootsRequestSchema,
ListRootsResultSchema,
ListTasksRequestSchema,
ListTasksResultSchema,
ListToolsRequestSchema,
ListToolsResultSchema,
LoggingLevelSchema,
@ -95,6 +104,7 @@ import type {
ReadResourceRequestParamsSchema,
ReadResourceRequestSchema,
ReadResourceResultSchema,
RelatedTaskMetadataSchema,
RequestIdSchema,
RequestMetaSchema,
RequestSchema,
@ -124,6 +134,13 @@ import type {
StringSchemaSchema,
SubscribeRequestParamsSchema,
SubscribeRequestSchema,
TaskAugmentedRequestParamsSchema,
TaskCreationParamsSchema,
TaskMetadataSchema,
TaskSchema,
TaskStatusNotificationParamsSchema,
TaskStatusNotificationSchema,
TaskStatusSchema,
TextContentSchema,
TextResourceContentsSchema,
TitledMultiSelectEnumSchemaSchema,
@ -170,6 +187,7 @@ type Infer<Schema extends z.ZodTypeAny> = Flatten<z.infer<Schema>>;
export type ProgressToken = Infer<typeof ProgressTokenSchema>;
export type Cursor = Infer<typeof CursorSchema>;
export type Request = Infer<typeof RequestSchema>;
export type TaskAugmentedRequestParams = Infer<typeof TaskAugmentedRequestParamsSchema>;
export type RequestMeta = Infer<typeof RequestMetaSchema>;
export type Notification = Infer<typeof NotificationSchema>;
export type Result = Infer<typeof ResultSchema>;
@ -214,6 +232,24 @@ export type Progress = Infer<typeof ProgressSchema>;
export type ProgressNotificationParams = Infer<typeof ProgressNotificationParamsSchema>;
export type ProgressNotification = Infer<typeof ProgressNotificationSchema>;
/* Tasks */
export type Task = Infer<typeof TaskSchema>;
export type TaskStatus = Infer<typeof TaskStatusSchema>;
export type TaskCreationParams = Infer<typeof TaskCreationParamsSchema>;
export type TaskMetadata = Infer<typeof TaskMetadataSchema>;
export type RelatedTaskMetadata = Infer<typeof RelatedTaskMetadataSchema>;
export type CreateTaskResult = Infer<typeof CreateTaskResultSchema>;
export type TaskStatusNotificationParams = Infer<typeof TaskStatusNotificationParamsSchema>;
export type TaskStatusNotification = Infer<typeof TaskStatusNotificationSchema>;
export type GetTaskRequest = Infer<typeof GetTaskRequestSchema>;
export type GetTaskResult = Infer<typeof GetTaskResultSchema>;
export type GetTaskPayloadRequest = Infer<typeof GetTaskPayloadRequestSchema>;
export type ListTasksRequest = Infer<typeof ListTasksRequestSchema>;
export type ListTasksResult = Infer<typeof ListTasksResultSchema>;
export type CancelTaskRequest = Infer<typeof CancelTaskRequestSchema>;
export type CancelTaskResult = Infer<typeof CancelTaskResultSchema>;
export type GetTaskPayloadResult = Infer<typeof GetTaskPayloadResultSchema>;
/* Pagination */
export type PaginatedRequestParams = Infer<typeof PaginatedRequestParamsSchema>;
export type PaginatedRequest = Infer<typeof PaginatedRequestSchema>;
@ -356,11 +392,15 @@ export type ResultTypeMap = {
'resources/read': ReadResourceResult;
'resources/subscribe': EmptyResult;
'resources/unsubscribe': EmptyResult;
'tools/call': CallToolResult;
'tools/call': CallToolResult | CreateTaskResult;
'tools/list': ListToolsResult;
'sampling/createMessage': CreateMessageResult | CreateMessageResultWithTools;
'elicitation/create': ElicitResult;
'sampling/createMessage': CreateMessageResult | CreateMessageResultWithTools | CreateTaskResult;
'elicitation/create': ElicitResult | CreateTaskResult;
'roots/list': ListRootsResult;
'tasks/get': GetTaskResult;
'tasks/result': Result;
'tasks/list': ListTasksResult;
'tasks/cancel': CancelTaskResult;
};
/**

View file

@ -225,7 +225,6 @@ const sdkTypeChecks = {
spec = sdk;
},
ClientNotification: (sdk: WithJSONRPC<SDKTypes.ClientNotification>, spec: SpecTypes.ClientNotification) => {
// @ts-expect-error SEP-2663: spec union includes task variants the SDK does not implement
sdk = spec;
spec = sdk;
},
@ -494,12 +493,10 @@ const sdkTypeChecks = {
spec = sdk;
},
ClientRequest: (sdk: WithJSONRPCRequest<SDKTypes.ClientRequest>, spec: SpecTypes.ClientRequest) => {
// @ts-expect-error SEP-2663: spec union includes task variants the SDK does not implement
sdk = spec;
spec = sdk;
},
ServerRequest: (sdk: WithJSONRPCRequest<SDKTypes.ServerRequest>, spec: SpecTypes.ServerRequest) => {
// @ts-expect-error SEP-2663: spec union includes task variants the SDK does not implement
sdk = spec;
spec = sdk;
},
@ -508,7 +505,6 @@ const sdkTypeChecks = {
spec = sdk;
},
ServerNotification: (sdk: WithJSONRPC<SDKTypes.ServerNotification>, spec: SpecTypes.ServerNotification) => {
// @ts-expect-error SEP-2663: spec union includes task variants the SDK does not implement
sdk = spec;
spec = sdk;
},
@ -556,10 +552,74 @@ const sdkTypeChecks = {
sdk = spec;
spec = sdk;
},
TaskAugmentedRequestParams: (sdk: SDKTypes.TaskAugmentedRequestParams, spec: SpecTypes.TaskAugmentedRequestParams) => {
sdk = spec;
spec = sdk;
},
ToolExecution: (sdk: SDKTypes.ToolExecution, spec: SpecTypes.ToolExecution) => {
sdk = spec;
spec = sdk;
},
TaskStatus: (sdk: SDKTypes.TaskStatus, spec: SpecTypes.TaskStatus) => {
sdk = spec;
spec = sdk;
},
TaskMetadata: (sdk: SDKTypes.TaskMetadata, spec: SpecTypes.TaskMetadata) => {
sdk = spec;
spec = sdk;
},
RelatedTaskMetadata: (sdk: SDKTypes.RelatedTaskMetadata, spec: SpecTypes.RelatedTaskMetadata) => {
sdk = spec;
spec = sdk;
},
Task: (sdk: SDKTypes.Task, spec: SpecTypes.Task) => {
sdk = spec;
spec = sdk;
},
CreateTaskResult: (sdk: SDKTypes.CreateTaskResult, spec: SpecTypes.CreateTaskResult) => {
sdk = spec;
spec = sdk;
},
GetTaskResult: (sdk: SDKTypes.GetTaskResult, spec: SpecTypes.GetTaskResult) => {
sdk = spec;
spec = sdk;
},
GetTaskPayloadRequest: (sdk: WithJSONRPCRequest<SDKTypes.GetTaskPayloadRequest>, spec: SpecTypes.GetTaskPayloadRequest) => {
sdk = spec;
spec = sdk;
},
ListTasksRequest: (sdk: WithJSONRPCRequest<SDKTypes.ListTasksRequest>, spec: SpecTypes.ListTasksRequest) => {
sdk = spec;
spec = sdk;
},
ListTasksResult: (sdk: SDKTypes.ListTasksResult, spec: SpecTypes.ListTasksResult) => {
sdk = spec;
spec = sdk;
},
CancelTaskRequest: (sdk: WithJSONRPCRequest<SDKTypes.CancelTaskRequest>, spec: SpecTypes.CancelTaskRequest) => {
sdk = spec;
spec = sdk;
},
CancelTaskResult: (sdk: SDKTypes.CancelTaskResult, spec: SpecTypes.CancelTaskResult) => {
sdk = spec;
spec = sdk;
},
GetTaskRequest: (sdk: WithJSONRPCRequest<SDKTypes.GetTaskRequest>, spec: SpecTypes.GetTaskRequest) => {
sdk = spec;
spec = sdk;
},
GetTaskPayloadResult: (sdk: SDKTypes.GetTaskPayloadResult, spec: SpecTypes.GetTaskPayloadResult) => {
sdk = spec;
spec = sdk;
},
TaskStatusNotificationParams: (sdk: SDKTypes.TaskStatusNotificationParams, spec: SpecTypes.TaskStatusNotificationParams) => {
sdk = spec;
spec = sdk;
},
TaskStatusNotification: (sdk: WithJSONRPC<SDKTypes.TaskStatusNotification>, spec: SpecTypes.TaskStatusNotification) => {
sdk = spec;
spec = sdk;
},
/* JSON primitives */
JSONValue: (sdk: SDKTypes.JSONValue, spec: SpecTypes.JSONValue) => {
@ -655,6 +715,29 @@ const sdkTypeChecks = {
sdk = spec;
spec = sdk;
},
CreateTaskResultResponse: (sdk: TypedResultResponse<SDKTypes.CreateTaskResult>, spec: SpecTypes.CreateTaskResultResponse) => {
sdk = spec;
spec = sdk;
},
GetTaskResultResponse: (sdk: TypedResultResponse<SDKTypes.GetTaskResult>, spec: SpecTypes.GetTaskResultResponse) => {
sdk = spec;
spec = sdk;
},
GetTaskPayloadResultResponse: (
sdk: TypedResultResponse<SDKTypes.GetTaskPayloadResult>,
spec: SpecTypes.GetTaskPayloadResultResponse
) => {
sdk = spec;
spec = sdk;
},
CancelTaskResultResponse: (sdk: TypedResultResponse<SDKTypes.CancelTaskResult>, spec: SpecTypes.CancelTaskResultResponse) => {
sdk = spec;
spec = sdk;
},
ListTasksResultResponse: (sdk: TypedResultResponse<SDKTypes.ListTasksResult>, spec: SpecTypes.ListTasksResultResponse) => {
sdk = spec;
spec = sdk;
},
SetLevelResultResponse: (sdk: TypedResultResponse<SDKTypes.EmptyResult>, spec: SpecTypes.SetLevelResultResponse) => {
sdk = spec;
spec = sdk;
@ -708,7 +791,7 @@ type AssertExactKeys<
type Assert<T extends true> = T;
/*
* Excluded from key-level assertions (22 entries):
* Excluded from key-level assertions (23 entries):
*
* Union types — KnownKeys cannot meaningfully enumerate their members (15):
* ClientRequest, ServerRequest, ClientNotification, ServerNotification,
@ -716,12 +799,12 @@ type Assert<T extends true> = T;
* SamplingMessageContentBlock, ElicitRequestParams, PrimitiveSchemaDefinition,
* SingleSelectEnumSchema, MultiSelectEnumSchema, EnumSchema
*
* Primitive type aliases — no object keys to compare (7):
* Primitive type aliases — no object keys to compare (8):
* JSONValue, JSONArray, Role, LoggingLevel, ProgressToken, RequestId,
* Cursor
* Cursor, TaskStatus
*/
// -- Simple types (86) --
// -- Simple types (96) --
type _K_RequestParams = Assert<AssertExactKeys<SDKTypes.RequestParams, SpecTypes.RequestParams>>;
type _K_NotificationParams = Assert<AssertExactKeys<SDKTypes.NotificationParams, SpecTypes.NotificationParams>>;
@ -736,18 +819,14 @@ type _K_ResourceUpdatedNotificationParams = Assert<
AssertExactKeys<SDKTypes.ResourceUpdatedNotificationParams, SpecTypes.ResourceUpdatedNotificationParams>
>;
type _K_GetPromptRequestParams = Assert<AssertExactKeys<SDKTypes.GetPromptRequestParams, SpecTypes.GetPromptRequestParams>>;
// @ts-expect-error SEP-2663: spec has optional `task` field; SDK removes task augmentation
type _K_CallToolRequestParams = Assert<AssertExactKeys<SDKTypes.CallToolRequestParams, SpecTypes.CallToolRequestParams>>;
type _K_SetLevelRequestParams = Assert<AssertExactKeys<SDKTypes.SetLevelRequestParams, SpecTypes.SetLevelRequestParams>>;
type _K_LoggingMessageNotificationParams = Assert<
AssertExactKeys<SDKTypes.LoggingMessageNotificationParams, SpecTypes.LoggingMessageNotificationParams>
>;
// @ts-expect-error SEP-2663: spec has optional `task` field; SDK removes task augmentation
type _K_CreateMessageRequestParams = Assert<AssertExactKeys<SDKTypes.CreateMessageRequestParams, SpecTypes.CreateMessageRequestParams>>;
type _K_CompleteRequestParams = Assert<AssertExactKeys<SDKTypes.CompleteRequestParams, SpecTypes.CompleteRequestParams>>;
// @ts-expect-error SEP-2663: spec has optional `task` field; SDK removes task augmentation
type _K_ElicitRequestFormParams = Assert<AssertExactKeys<SDKTypes.ElicitRequestFormParams, SpecTypes.ElicitRequestFormParams>>;
// @ts-expect-error SEP-2663: spec has optional `task` field; SDK removes task augmentation
type _K_ElicitRequestURLParams = Assert<AssertExactKeys<SDKTypes.ElicitRequestURLParams, SpecTypes.ElicitRequestURLParams>>;
type _K_PaginatedRequestParams = Assert<AssertExactKeys<SDKTypes.PaginatedRequestParams, SpecTypes.PaginatedRequestParams>>;
type _K_BaseMetadata = Assert<AssertExactKeys<SDKTypes.BaseMetadata, SpecTypes.BaseMetadata>>;
@ -805,9 +884,7 @@ type _K_LegacyTitledEnumSchema = Assert<AssertExactKeys<SDKTypes.LegacyTitledEnu
type _K_JSONRPCErrorResponse = Assert<AssertExactKeys<SDKTypes.JSONRPCErrorResponse, SpecTypes.JSONRPCErrorResponse>>;
type _K_JSONRPCResultResponse = Assert<AssertExactKeys<SDKTypes.JSONRPCResultResponse, SpecTypes.JSONRPCResultResponse>>;
type _K_InitializeResult = Assert<AssertExactKeys<SDKTypes.InitializeResult, SpecTypes.InitializeResult>>;
// @ts-expect-error SEP-2663: spec has `tasks` capability; SDK removes it
type _K_ClientCapabilities = Assert<AssertExactKeys<SDKTypes.ClientCapabilities, SpecTypes.ClientCapabilities>>;
// @ts-expect-error SEP-2663: spec has `tasks` capability; SDK removes it
type _K_ServerCapabilities = Assert<AssertExactKeys<SDKTypes.ServerCapabilities, SpecTypes.ServerCapabilities>>;
type _K_SamplingMessage = Assert<AssertExactKeys<SDKTypes.SamplingMessage, SpecTypes.SamplingMessage>>;
type _K_Icon = Assert<AssertExactKeys<SDKTypes.Icon, SpecTypes.Icon>>;
@ -818,9 +895,22 @@ type _K_ToolChoice = Assert<AssertExactKeys<SDKTypes.ToolChoice, SpecTypes.ToolC
type _K_ToolUseContent = Assert<AssertExactKeys<SDKTypes.ToolUseContent, SpecTypes.ToolUseContent>>;
type _K_ToolResultContent = Assert<AssertExactKeys<SDKTypes.ToolResultContent, SpecTypes.ToolResultContent>>;
type _K_Annotations = Assert<AssertExactKeys<SDKTypes.Annotations, SpecTypes.Annotations>>;
type _K_TaskAugmentedRequestParams = Assert<AssertExactKeys<SDKTypes.TaskAugmentedRequestParams, SpecTypes.TaskAugmentedRequestParams>>;
type _K_ToolExecution = Assert<AssertExactKeys<SDKTypes.ToolExecution, SpecTypes.ToolExecution>>;
type _K_TaskMetadata = Assert<AssertExactKeys<SDKTypes.TaskMetadata, SpecTypes.TaskMetadata>>;
type _K_RelatedTaskMetadata = Assert<AssertExactKeys<SDKTypes.RelatedTaskMetadata, SpecTypes.RelatedTaskMetadata>>;
type _K_Task = Assert<AssertExactKeys<SDKTypes.Task, SpecTypes.Task>>;
type _K_CreateTaskResult = Assert<AssertExactKeys<SDKTypes.CreateTaskResult, SpecTypes.CreateTaskResult>>;
type _K_GetTaskResult = Assert<AssertExactKeys<SDKTypes.GetTaskResult, SpecTypes.GetTaskResult>>;
type _K_ListTasksResult = Assert<AssertExactKeys<SDKTypes.ListTasksResult, SpecTypes.ListTasksResult>>;
type _K_CancelTaskResult = Assert<AssertExactKeys<SDKTypes.CancelTaskResult, SpecTypes.CancelTaskResult>>;
type _K_GetTaskPayloadResult = Assert<AssertExactKeys<SDKTypes.GetTaskPayloadResult, SpecTypes.GetTaskPayloadResult>>;
type _K_TaskStatusNotificationParams = Assert<
AssertExactKeys<SDKTypes.TaskStatusNotificationParams, SpecTypes.TaskStatusNotificationParams>
>;
type _K_JSONObject = Assert<AssertExactKeys<SDKTypes.JSONObject, SpecTypes.JSONObject>>;
type _K_MetaObject = Assert<AssertExactKeys<SDKTypes.MetaObject, SpecTypes.MetaObject>>;
// @ts-expect-error Genuine mismatch: SDK RequestMetaObject has extra 'io.modelcontextprotocol/related-task' not in spec
type _K_RequestMetaObject = Assert<AssertExactKeys<SDKTypes.RequestMetaObject, SpecTypes.RequestMetaObject>>;
type _K_ParseError = Assert<AssertExactKeys<SDKTypes.ParseError, SpecTypes.ParseError>>;
type _K_InvalidRequestError = Assert<AssertExactKeys<SDKTypes.InvalidRequestError, SpecTypes.InvalidRequestError>>;
@ -828,7 +918,7 @@ type _K_MethodNotFoundError = Assert<AssertExactKeys<SDKTypes.MethodNotFoundErro
type _K_InvalidParamsError = Assert<AssertExactKeys<SDKTypes.InvalidParamsError, SpecTypes.InvalidParamsError>>;
type _K_InternalError = Assert<AssertExactKeys<SDKTypes.InternalError, SpecTypes.InternalError>>;
// -- WithJSONRPC-wrapped notification types (10) --
// -- WithJSONRPC-wrapped notification types (11) --
// SDK notification types do not include `jsonrpc` — the spec types do. We wrap
// with WithJSONRPC<> to add the missing field before comparing keys.
@ -856,8 +946,9 @@ type _K_LoggingMessageNotification = Assert<
AssertExactKeys<WithJSONRPC<SDKTypes.LoggingMessageNotification>, SpecTypes.LoggingMessageNotification>
>;
type _K_InitializedNotification = Assert<AssertExactKeys<WithJSONRPC<SDKTypes.InitializedNotification>, SpecTypes.InitializedNotification>>;
type _K_TaskStatusNotification = Assert<AssertExactKeys<WithJSONRPC<SDKTypes.TaskStatusNotification>, SpecTypes.TaskStatusNotification>>;
// -- WithJSONRPCRequest-wrapped request types (17) --
// -- WithJSONRPCRequest-wrapped request types (21) --
// SDK request types do not include `jsonrpc` or `id` — the spec types do. We
// wrap with WithJSONRPCRequest<> to add the missing fields before comparing keys.
@ -880,8 +971,14 @@ type _K_ListPromptsRequest = Assert<AssertExactKeys<WithJSONRPCRequest<SDKTypes.
type _K_GetPromptRequest = Assert<AssertExactKeys<WithJSONRPCRequest<SDKTypes.GetPromptRequest>, SpecTypes.GetPromptRequest>>;
type _K_CreateMessageRequest = Assert<AssertExactKeys<WithJSONRPCRequest<SDKTypes.CreateMessageRequest>, SpecTypes.CreateMessageRequest>>;
type _K_InitializeRequest = Assert<AssertExactKeys<WithJSONRPCRequest<SDKTypes.InitializeRequest>, SpecTypes.InitializeRequest>>;
type _K_GetTaskPayloadRequest = Assert<
AssertExactKeys<WithJSONRPCRequest<SDKTypes.GetTaskPayloadRequest>, SpecTypes.GetTaskPayloadRequest>
>;
type _K_ListTasksRequest = Assert<AssertExactKeys<WithJSONRPCRequest<SDKTypes.ListTasksRequest>, SpecTypes.ListTasksRequest>>;
type _K_CancelTaskRequest = Assert<AssertExactKeys<WithJSONRPCRequest<SDKTypes.CancelTaskRequest>, SpecTypes.CancelTaskRequest>>;
type _K_GetTaskRequest = Assert<AssertExactKeys<WithJSONRPCRequest<SDKTypes.GetTaskRequest>, SpecTypes.GetTaskRequest>>;
// -- TypedResultResponse-wrapped types (16) --
// -- TypedResultResponse-wrapped types (21) --
// The spec defines typed *ResultResponse interfaces that pair JSONRPCResultResponse
// with a specific result. We compare TypedResultResponse<SDKInnerType> against the
// spec's combined type.
@ -907,6 +1004,17 @@ type _K_ListPromptsResultResponse = Assert<
type _K_GetPromptResultResponse = Assert<AssertExactKeys<TypedResultResponse<SDKTypes.GetPromptResult>, SpecTypes.GetPromptResultResponse>>;
type _K_ListToolsResultResponse = Assert<AssertExactKeys<TypedResultResponse<SDKTypes.ListToolsResult>, SpecTypes.ListToolsResultResponse>>;
type _K_CallToolResultResponse = Assert<AssertExactKeys<TypedResultResponse<SDKTypes.CallToolResult>, SpecTypes.CallToolResultResponse>>;
type _K_CreateTaskResultResponse = Assert<
AssertExactKeys<TypedResultResponse<SDKTypes.CreateTaskResult>, SpecTypes.CreateTaskResultResponse>
>;
type _K_GetTaskResultResponse = Assert<AssertExactKeys<TypedResultResponse<SDKTypes.GetTaskResult>, SpecTypes.GetTaskResultResponse>>;
type _K_GetTaskPayloadResultResponse = Assert<
AssertExactKeys<TypedResultResponse<SDKTypes.GetTaskPayloadResult>, SpecTypes.GetTaskPayloadResultResponse>
>;
type _K_CancelTaskResultResponse = Assert<
AssertExactKeys<TypedResultResponse<SDKTypes.CancelTaskResult>, SpecTypes.CancelTaskResultResponse>
>;
type _K_ListTasksResultResponse = Assert<AssertExactKeys<TypedResultResponse<SDKTypes.ListTasksResult>, SpecTypes.ListTasksResultResponse>>;
type _K_SetLevelResultResponse = Assert<AssertExactKeys<TypedResultResponse<SDKTypes.EmptyResult>, SpecTypes.SetLevelResultResponse>>;
type _K_CreateMessageResultResponse = Assert<
AssertExactKeys<TypedResultResponse<SDKTypes.CreateMessageResultWithTools>, SpecTypes.CreateMessageResultResponse>
@ -940,14 +1048,15 @@ const KEY_PARITY_EXCLUDED = [
'SingleSelectEnumSchema',
'MultiSelectEnumSchema',
'EnumSchema',
// Primitive aliases (7)
// Primitive aliases (8)
'JSONValue',
'JSONArray',
'Role',
'LoggingLevel',
'ProgressToken',
'RequestId',
'Cursor'
'Cursor',
'TaskStatus'
];
// This file is .gitignore'd, and fetched by `npm run fetch:spec-types` (called by `npm run test`)
@ -957,29 +1066,7 @@ const SDK_TYPES_FILE = path.resolve(__dirname, '../src/types/types.ts');
const MISSING_SDK_TYPES = [
// These are inlined in the SDK:
'Error', // The inner error object of a JSONRPCError
'URLElicitationRequiredError', // In the SDK, but with a custom definition
// SEP-2663: 2025-11 experimental tasks removed from the SDK; spec still defines them.
'Task',
'TaskStatus',
'TaskMetadata',
'TaskAugmentedRequestParams',
'RelatedTaskMetadata',
'CreateTaskResult',
'CreateTaskResultResponse',
'GetTaskRequest',
'GetTaskResult',
'GetTaskResultResponse',
'GetTaskPayloadRequest',
'GetTaskPayloadResult',
'GetTaskPayloadResultResponse',
'ListTasksRequest',
'ListTasksResult',
'ListTasksResultResponse',
'CancelTaskRequest',
'CancelTaskResult',
'CancelTaskResultResponse',
'TaskStatusNotification',
'TaskStatusNotificationParams'
'URLElicitationRequiredError' // In the SDK, but with a custom definition
];
function extractExportedTypes(source: string): string[] {

View file

@ -1,6 +1,8 @@
import {
CallToolRequestSchema,
CallToolResultSchema,
ClientCapabilitiesSchema,
ClientRequestSchema,
CompleteRequestSchema,
ContentBlockSchema,
CreateMessageRequestSchema,
@ -1012,3 +1014,38 @@ describe('Types', () => {
});
});
});
describe('2025-11-25 task wire interop (task feature removed; wire types remain)', () => {
test('tasks/get parses through the client request union', () => {
const result = ClientRequestSchema.safeParse({ method: 'tasks/get', params: { taskId: 'task-123' } });
expect(result.success).toBe(true);
});
test('task-augmented tools/call params parse and retain the task field', () => {
const result = CallToolRequestSchema.safeParse({
method: 'tools/call',
params: { name: 'echo', arguments: {}, task: { ttl: 60000 } }
});
expect(result.success).toBe(true);
if (result.success) {
expect(result.data.params.task).toEqual({ ttl: 60000 });
}
});
test('tool execution.taskSupport is accepted', () => {
const result = ToolSchema.safeParse({
name: 'echo',
inputSchema: { type: 'object' },
execution: { taskSupport: 'optional' }
});
expect(result.success).toBe(true);
});
test('capabilities.tasks is retained, not stripped', () => {
const result = ClientCapabilitiesSchema.safeParse({ tasks: { list: {}, cancel: {} } });
expect(result.success).toBe(true);
if (result.success) {
expect(result.data.tasks).toEqual({ list: {}, cancel: {} });
}
});
});

View file

@ -154,7 +154,9 @@ describe('SPEC_SCHEMA_KEYS allowlist', () => {
const INTERNAL_HELPER_SCHEMAS: readonly string[] = [
'ListChangedOptionsBaseSchema',
'BaseRequestParamsSchema',
'NotificationsParamsSchema'
'NotificationsParamsSchema',
'ClientTasksCapabilitySchema',
'ServerTasksCapabilitySchema'
];
it('covers every public protocol schema in schemas.ts (drift guard)', () => {