A Model Context Protocol server for critical, narrated, sequential thinking. Think one step at a time, out loud — with required confidence calibration and adversarial self-critique on every thought.
It fuses three disciplines:
- Sequential thinking — break problems into ordered, numbered steps; revise; branch.
- Thinking out loud — explain each thought in first-person, exploratory voice. Putting half-formed reasoning into words is itself the double-check on it.
- Critical self-examination — every thought is paired with confidence, assumptions, critique, and a counter-argument.
The single tool is criticalthinking. Every call must include the four critical-thinking fields — there is no opt-out, by design.
go install github.com/jacaudi/critical-thinking/cmd/critical-thinking@latest
# or
docker pull ghcr.io/jacaudi/critical-thinking:v1.4.2The Go install lands the binary at $GOPATH/bin/critical-thinking.
# stdio (default; for Claude Desktop, Codex CLI, VS Code, etc.)
critical-thinking
# Streamable HTTP
critical-thinking -http :3000
# Docker (HTTP on :3000)
docker run --rm -p 3000:3000 ghcr.io/jacaudi/critical-thinking:v1.4.2Request:
{
"thought": "I think we should normalize first because reads dominate writes.",
"thoughtNumber": 1, "totalThoughts": 3, "nextThoughtNeeded": true,
"confidence": 0.6,
"assumptions": ["read:write ratio is ~10:1"],
"critique": "Drifted into solution mode without confirming the ratio.",
"counterArgument": "If writes dominate, monolith-first is simpler.",
"nextStepRationale": "Verify the read:write ratio before committing to normalization."
}Response (structuredContent):
{ "branches": [], "thoughtHistoryLength": 1, "sessionConfidence": 0.6 }The text content is a rendered transcript in first-person, exploratory voice. Subsequent calls can omit thoughtNumber (auto-assigned) and totalThoughts (inherited). Every critical-thinking field has a server-side length cap to enforce one-tight-sentence discipline. The full contract lives in the tool description itself.
Add the server with the claude CLI — pick one transport.
stdio (the binary runs as a subprocess of Claude Code):
claude mcp add critical-thinking -- critical-thinkingStreamable HTTP (run the server separately, point Claude Code at the URL):
critical-thinking -http :3000 &
claude mcp add --transport http critical-thinking http://localhost:3000/mcpScope it with --scope user (available in every project for your user) or --scope project (committed to .mcp.json in the repo). Default scope is local (this project, your machine only).
Verify with claude mcp list. Inside a session, /mcp shows server status and tools.
mcp.json (Claude Desktop / Codex CLI / VS Code):
{
"mcpServers": {
"critical-thinking": { "command": "critical-thinking" }
}
}Or HTTP:
{
"mcpServers": {
"critical-thinking": { "url": "http://localhost:3000/mcp" }
}
}More client recipes in docs/clients.md.
The server exposes thinking://current — a per-session JSON snapshot of the full thought history (trunk + branches, all critical-thinking fields preserved).
- docs/configuration.md — env vars, HTTP endpoints, session lifecycle
- docs/clients.md — Claude Desktop, Codex CLI, VS Code, Cursor recipes
- docs/development.md — building, testing, debugging with MCP Inspector
- docs/migration.md — breaking changes since
http-sequential-thinking
MIT.