From 7dc46ba5cbfaaa6925ba2ebec7cdcbd74486cb31 Mon Sep 17 00:00:00 2001 From: Niels Kaspers Date: Thu, 12 Mar 2026 09:07:06 +0200 Subject: [PATCH] fix(sequential-thinking): use z.coerce for number and boolean params LLM clients (Claude Code, Augment.AI, etc.) intermittently send thoughtNumber, totalThoughts, and nextThoughtNeeded as strings instead of native JSON types. Using z.coerce gracefully handles both string and native inputs without breaking existing behavior. Fixes #3428 --- src/sequentialthinking/index.ts | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/sequentialthinking/index.ts b/src/sequentialthinking/index.ts index 809086a94c..3c4415c667 100644 --- a/src/sequentialthinking/index.ts +++ b/src/sequentialthinking/index.ts @@ -72,14 +72,14 @@ You should: 11. Only set nextThoughtNeeded to false when truly done and a satisfactory answer is reached`, inputSchema: { thought: z.string().describe("Your current thinking step"), - nextThoughtNeeded: z.boolean().describe("Whether another thought step is needed"), - thoughtNumber: z.number().int().min(1).describe("Current thought number (numeric value, e.g., 1, 2, 3)"), - totalThoughts: z.number().int().min(1).describe("Estimated total thoughts needed (numeric value, e.g., 5, 10)"), - isRevision: z.boolean().optional().describe("Whether this revises previous thinking"), - revisesThought: z.number().int().min(1).optional().describe("Which thought is being reconsidered"), - branchFromThought: z.number().int().min(1).optional().describe("Branching point thought number"), + nextThoughtNeeded: z.coerce.boolean().describe("Whether another thought step is needed"), + thoughtNumber: z.coerce.number().int().min(1).describe("Current thought number (numeric value, e.g., 1, 2, 3)"), + totalThoughts: z.coerce.number().int().min(1).describe("Estimated total thoughts needed (numeric value, e.g., 5, 10)"), + isRevision: z.coerce.boolean().optional().describe("Whether this revises previous thinking"), + revisesThought: z.coerce.number().int().min(1).optional().describe("Which thought is being reconsidered"), + branchFromThought: z.coerce.number().int().min(1).optional().describe("Branching point thought number"), branchId: z.string().optional().describe("Branch identifier"), - needsMoreThoughts: z.boolean().optional().describe("If more thoughts are needed") + needsMoreThoughts: z.coerce.boolean().optional().describe("If more thoughts are needed") }, outputSchema: { thoughtNumber: z.number(),