sequentialthinking
Guide step-by-step reasoning through iterative revision, branching, and verification for deep problem-solving.
Instructions
A detailed tool for DEEP, EXTENSIVE, and dynamic problem-solving through extended thinking. This tool is designed for MAXIMUM DEPTH research and analysis with no artificial limits. Each thought can build on, question, or revise previous insights as understanding deepens.
IMPORTANT: For deep research tasks, you should:
Use 50+ thoughts minimum for complex problems, 100+ for deep research
Take time to explore multiple angles and perspectives
Question assumptions repeatedly throughout the process
Revise and refine understanding as you progress
Branch into alternative approaches when valuable
Generate multiple hypotheses and verify each thoroughly
Go as deep as needed - there is no maximum limit
When to use this tool:
Breaking down complex problems into steps
Planning and design with room for revision
Analysis that might need course correction
Problems where the full scope might not be clear initially
Problems that require a multi-step solution
Tasks that need to maintain context over multiple steps
Situations where irrelevant information needs to be filtered out
Deep research requiring extensive exploration
Multi-hypothesis generation and verification
Comprehensive analysis across multiple dimensions
Key features:
You can adjust total_thoughts up or down as you progress
You can question or revise previous thoughts
You can add more thoughts even after reaching what seemed like the end
You can express uncertainty and explore alternative approaches
Not every thought needs to build linearly - you can branch or backtrack
Generates a solution hypothesis
Verifies the hypothesis based on the Chain of Thought steps
Repeats the process until satisfied
Provides a correct answer
Parameters explained:
thought: Your current thinking step, which can include:
Regular analytical steps
Revisions of previous thoughts
Questions about previous decisions
Realizations about needing more analysis
Changes in approach
Hypothesis generation
Hypothesis verification
next_thought_needed: True if you need more thinking, even if at what seemed like the end
thought_number: Current number in sequence (can go beyond initial total if needed)
total_thoughts: Current estimate of thoughts needed (can be adjusted up/down)
is_revision: A boolean indicating if this thought revises previous thinking
revises_thought: If is_revision is true, which thought number is being reconsidered
branch_from_thought: If branching, which thought number is the branching point
branch_id: Identifier for the current branch (if any)
needs_more_thoughts: If reaching end but realizing more thoughts needed
You should:
Start with an initial estimate of needed thoughts, but be ready to adjust UPWARD frequently
Feel free to question or revise previous thoughts extensively
Don't hesitate to add more thoughts if needed, even at the "end" - research has no artificial limits
Express uncertainty when present and explore it deeply
Mark thoughts that revise previous thinking or branch into new paths
Ignore information that is irrelevant to the current step
Generate MULTIPLE solution hypotheses when appropriate, not just one
Verify each hypothesis thoroughly based on the Chain of Thought steps
Repeat the hypothesis-verification cycle multiple times for robustness
Explore edge cases, counterexamples, and alternative interpretations
For deep research: aim for 100+ thoughts, exploring breadth AND depth
Use branching extensively to explore alternative paths in parallel
Perform multiple revision passes to refine understanding
Only set next_thought_needed to false when truly done with COMPREHENSIVE analysis
Provide a single, well-researched, thoroughly verified answer as the final output
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| thought | Yes | Your current thinking step | |
| nextThoughtNeeded | Yes | Whether another thought step is needed | |
| thoughtNumber | Yes | Current thought number (numeric value, e.g., 1, 2, 3) | |
| totalThoughts | Yes | Estimated total thoughts needed (numeric value, e.g., 5, 10) | |
| isRevision | No | Whether this revises previous thinking | |
| revisesThought | No | Which thought is being reconsidered | |
| branchFromThought | No | Branching point thought number | |
| branchId | No | Branch identifier | |
| needsMoreThoughts | No | If more thoughts are needed |
Implementation Reference
- index.ts:91-137 (handler)The main handler function `processThought` that executes the sequential thinking logic: validates input, stores thought in history, handles branching, formats output, and returns the result (or error).
public processThought(input: unknown): { content: Array<{ type: string; text: string }>; isError?: boolean } { try { const validatedInput = this.validateThoughtData(input); if (validatedInput.thoughtNumber > validatedInput.totalThoughts) { validatedInput.totalThoughts = validatedInput.thoughtNumber; } this.thoughtHistory.push(validatedInput); if (validatedInput.branchFromThought && validatedInput.branchId) { if (!this.branches[validatedInput.branchId]) { this.branches[validatedInput.branchId] = []; } this.branches[validatedInput.branchId].push(validatedInput); } if (!this.disableThoughtLogging) { const formattedThought = this.formatThought(validatedInput); console.error(formattedThought); } return { content: [{ type: "text", text: JSON.stringify({ thoughtNumber: validatedInput.thoughtNumber, totalThoughts: validatedInput.totalThoughts, nextThoughtNeeded: validatedInput.nextThoughtNeeded, branches: Object.keys(this.branches), thoughtHistoryLength: this.thoughtHistory.length }, null, 2) }] }; } catch (error) { return { content: [{ type: "text", text: JSON.stringify({ error: error instanceof Error ? error.message : String(error), status: 'failed' }, null, 2) }], isError: true }; } } - index.ts:13-23 (schema)The `ThoughtData` interface defining the input/output shape for the tool, including thought, thoughtNumber, totalThoughts, isRevision, revisesThought, branchFromThought, branchId, needsMoreThoughts, and nextThoughtNeeded.
interface ThoughtData { thought: string; thoughtNumber: number; totalThoughts: number; isRevision?: boolean; revisesThought?: number; branchFromThought?: number; branchId?: string; needsMoreThoughts?: boolean; nextThoughtNeeded: boolean; } - index.ts:274-290 (registration)Tool registration via `ListToolsRequestSchema` (line 274-276) listing the SEQUENTIAL_THINKING_TOOL, and `CallToolRequestSchema` (line 278-290) dispatching calls with name 'sequentialthinking' to `processThought`.
server.setRequestHandler(ListToolsRequestSchema, async () => ({ tools: [SEQUENTIAL_THINKING_TOOL], })); server.setRequestHandler(CallToolRequestSchema, async (request) => { if (request.params.name === "sequentialthinking") { return thinkingServer.processThought(request.params.arguments); } return { content: [{ type: "text", text: `Unknown tool: ${request.params.name}` }], isError: true }; }); - index.ts:34-61 (helper)Helper `validateThoughtData` that validates the input object has required fields (thought, thoughtNumber, totalThoughts, nextThoughtNeeded) with correct types, and returns a clean ThoughtData object.
private validateThoughtData(input: unknown): ThoughtData { const data = input as Record<string, unknown>; if (!data.thought || typeof data.thought !== 'string') { throw new Error('Invalid thought: must be a string'); } if (!data.thoughtNumber || typeof data.thoughtNumber !== 'number') { throw new Error('Invalid thoughtNumber: must be a number'); } if (!data.totalThoughts || typeof data.totalThoughts !== 'number') { throw new Error('Invalid totalThoughts: must be a number'); } if (typeof data.nextThoughtNeeded !== 'boolean') { throw new Error('Invalid nextThoughtNeeded: must be a boolean'); } return { thought: data.thought, thoughtNumber: data.thoughtNumber, totalThoughts: data.totalThoughts, nextThoughtNeeded: data.nextThoughtNeeded, isRevision: data.isRevision as boolean | undefined, revisesThought: data.revisesThought as number | undefined, branchFromThought: data.branchFromThought as number | undefined, branchId: data.branchId as string | undefined, needsMoreThoughts: data.needsMoreThoughts as boolean | undefined, }; } - index.ts:63-89 (helper)Helper `formatThought` that creates the visual thought box with border, prefix (Revision/Branch/Thought), and thought number context, using chalk for coloring.
private formatThought(thoughtData: ThoughtData): string { const { thoughtNumber, totalThoughts, thought, isRevision, revisesThought, branchFromThought, branchId } = thoughtData; let prefix = ''; let context = ''; if (isRevision) { prefix = chalk.yellow('🔄 Revision'); context = ` (revising thought ${revisesThought})`; } else if (branchFromThought) { prefix = chalk.green('🌿 Branch'); context = ` (from thought ${branchFromThought}, ID: ${branchId})`; } else { prefix = chalk.blue('💭 Thought'); context = ''; } const header = `${prefix} ${thoughtNumber}/${totalThoughts}${context}`; const border = '─'.repeat(Math.max(header.length, thought.length) + 4); return ` ┌${border}┐ │ ${header} │ ├${border}┤ │ ${thought.padEnd(border.length - 2)} │ └${border}┘`; }