mcp-atom-of-thoughts
Health Pass
- License — License: MIT
- Description — Repository has a description
- Active repo — Last push 0 days ago
- Community trust — 26 GitHub stars
Code Fail
- os.homedir — User home directory access in src/approval.ts
- process.env — Environment variable access in src/approval.ts
- os.homedir — User home directory access in src/config.ts
Permissions Pass
- Permissions — No dangerous permissions requested
This server provides a structured reasoning framework for LLMs. It decomposes problems into trackable "atoms" with dependency graphs, confidence scoring, and interactive browser-based visualizations.
Security Assessment
The tool reads the user's home directory path (`os.homedir`) and accesses environment variables to manage configuration and an approval system. This is standard for MCP servers, but flagged as it can reveal local system paths. The visualization feature opens a local HTTP server to render D3.js graphs in your browser and receive approve/reject feedback. No dangerous permissions, hardcoded secrets, or shell command execution were detected. Overall risk: Low.
Quality Assessment
The project is under the permissive MIT license and is actively maintained. It demonstrates strong engineering practices with TypeScript 5.9, excellent documentation, and a robust test suite (183 passing tests). The repository currently has 26 GitHub stars, indicating early but growing community adoption.
Verdict
Safe to use — a well-engineered reasoning tool with standard local server behavior and no dangerous permission requirements.
MCP server for structured AI reasoning — decompose problems into atomic thoughts with dependency graphs, confidence tracking, and interactive D3.js visualization
Setup
Add to your MCP config:
{
"mcpServers": {
"atom-of-thoughts": {
"command": "npx",
"args": ["-y", "@dioptx/mcp-atom-of-thoughts"]
}
}
}
[!TIP]
Works with Claude Code, Cursor, Windsurf, or any MCP client.
How it works
graph LR
P["P · Premise"]:::premise --> R["R · Reasoning"]:::reasoning
R --> H["H · Hypothesis"]:::hypothesis
H --> V["V · Verification"]:::verification
V --> C["C · Conclusion"]:::conclusion
classDef premise fill:#6b7280,stroke:#9ca3af,color:#fff,font-weight:bold
classDef reasoning fill:#3b82f6,stroke:#60a5fa,color:#fff,font-weight:bold
classDef hypothesis fill:#eab308,stroke:#facc15,color:#000,font-weight:bold
classDef verification fill:#06b6d4,stroke:#22d3ee,color:#fff,font-weight:bold
classDef conclusion fill:#22c55e,stroke:#4ade80,color:#fff,font-weight:bold
Chain atoms together. Each carries a confidence score (0-1). Reasoning terminates when a high-confidence conclusion is reached or max depth is hit. Sessions isolate separate problems so they don't interfere.
Tools
Three tools:
| Tool | When to reach for it |
|---|---|
AoT-fast |
Default. Tradeoffs, debugging, decisions, option evaluation. Depth 3. |
AoT-full |
Plans, architecture, decomposition into sub-problems. Depth 5. |
atomcommands |
Sessions, export, approval polling, decomposition lifecycle. |
Quick example
AoT-fast({atomId:"P1", content:"API returns 500 on POST /users", atomType:"premise"})
AoT-fast({atomId:"R1", content:"Unhandled exception in route handler", atomType:"reasoning", dependencies:["P1"]})
AoT-fast({atomId:"C1", content:"Add try-catch in POST handler", atomType:"conclusion", dependencies:["R1"], confidence:0.9})
Only atomId, content, and atomType are required. Everything else has defaults.
Visualization
Set viz: true on any call to open an interactive D3 graph in the browser:
AoT-fast({atomId:"C1", ..., viz: true})
The approve/reject UI posts decisions back to the server over HTTP. No filesystem polling.
Configuration
{
"args": ["-y", "@dioptx/mcp-atom-of-thoughts", "--mode", "fast", "--viz", "never"]
}
| Flag | Default | Effect |
|---|---|---|
--mode full|fast|both |
both |
Which tools to register |
--viz auto|always|never |
auto |
auto = render on viz:true; always = every call; never = skip (CI) |
--max-depth <n> |
5 / 3 | Override depth limit |
--output-dir <path> |
OS temp | Where to write viz HTML |
--downloads-dir <path> |
~/Downloads | Approval JSON fallback |
Each reasoning chain gets its own session. Default: "default".
atomcommands new_sessioncreates and activates a new one.atomcommands switch_session/list_sessions/reset_sessionfor management.- When reasoning terminates, the session auto-archives. The next zero-dep atom auto-spawns
default-2,default-3, etc. - Or pass
sessionIdon any AoT call to target explicitly.
Two problems in one MCP process stay isolated without manual session management.
Visualization & Approvalviz: true generates a self-contained HTML file (D3 bundled inline, works offline) and opens your browser. The UI shows:
- Force-directed graph colored by atom type with confidence rings
- Sidebar to approve/reject phases or individual atoms
- Approve/reject POSTs to a local
127.0.0.1listener (ephemeral port)
Poll results via atomcommands check_approval. Falls back to ~/Downloads file scan if the HTTP listener can't bind.
npx (zero install):
{ "command": "npx", "args": ["-y", "@dioptx/mcp-atom-of-thoughts"] }
npm global:
npm install -g @dioptx/mcp-atom-of-thoughts
Smithery:
npx -y @smithery/cli install @dioptx/mcp-atom-of-thoughts --client claude
Docker:
docker build -t aot . && docker run -i --rm aot
Development
git clone https://github.com/dioptx/mcp-atom-of-thoughts.git
cd mcp-atom-of-thoughts
npm install
npm test # 183 tests (unit + e2e)
npm run build
Migrating from v2
See MIGRATION_v2_to_v3.md for the full lookup table. The short version:
AoT-lightis nowAoT-fastAoTis nowAoT-fullgenerate_visualizationis nowviz: trueon any AoT callexport_graphandcheck_approvalare nowatomcommandssubcommands--no-viz/--no-approvalreplaced by--viz auto|always|never
MIT · Based on Atom of Thoughts
Reviews (0)
Sign in to leave a review.
Leave a reviewNo results found
