diff --git a/.changeset/default-get-task-result-schema.md b/.changeset/default-get-task-result-schema.md new file mode 100644 index 0000000000..4671b9ba8f --- /dev/null +++ b/.changeset/default-get-task-result-schema.md @@ -0,0 +1,5 @@ +--- +'@modelcontextprotocol/sdk': patch +--- + +Default `resultSchema` to `CallToolResultSchema` in `ExperimentalClientTasks.getTaskResult` diff --git a/src/experimental/tasks/client.ts b/src/experimental/tasks/client.ts index f62941dc8f..274787fa6e 100644 --- a/src/experimental/tasks/client.ts +++ b/src/experimental/tasks/client.ts @@ -178,13 +178,15 @@ export class ExperimentalClientTasks< * Retrieves the result of a completed task. * * @param taskId - The task identifier - * @param resultSchema - Zod schema for validating the result + * @param resultSchema - Zod schema for validating the result (defaults to CallToolResultSchema) * @param options - Optional request options * @returns The task result * * @experimental */ - async getTaskResult(taskId: string, resultSchema?: T, options?: RequestOptions): Promise> { + async getTaskResult< + T extends typeof CallToolResultSchema | typeof CompatibilityCallToolResultSchema | AnyObjectSchema = typeof CallToolResultSchema + >(taskId: string, resultSchema: T = CallToolResultSchema as T, options?: RequestOptions): Promise> { // Delegate to the client's underlying Protocol method return ( this._client as unknown as { diff --git a/test/client/index.test.ts b/test/client/index.test.ts index f5c6a348d1..4aa407f688 100644 --- a/test/client/index.test.ts +++ b/test/client/index.test.ts @@ -2576,9 +2576,13 @@ describe('Task-based execution', () => { expect(taskId).toBeDefined(); - // Query task result using the captured task ID - const result = await client.experimental.tasks.getTaskResult(taskId!, CallToolResultSchema); - expect(result.content).toEqual([{ type: 'text', text: 'Result data!' }]); + // Query task result using the captured task ID with default schema + const defaultResult = await client.experimental.tasks.getTaskResult(taskId!); + expect(defaultResult.content).toEqual([{ type: 'text', text: 'Result data!' }]); + + // Query task result with explicit schema + const explicitResult = await client.experimental.tasks.getTaskResult(taskId!, CallToolResultSchema); + expect(explicitResult.content).toEqual([{ type: 'text', text: 'Result data!' }]); }); test('should query task list from server using listTasks', async () => {