Tree of Thoughts MCP Server
Provides integration with Ollama for automated thought generation using locally running LLMs.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Tree of Thoughts MCP ServerCreate a thought tree to solve the 24 game with numbers 3,8,8,8"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
π³ Tree of Thoughts (ToT) MCP Server
Tree of Thoughts (ToT) is a powerful reasoning framework that enables AI models to explore multiple solution paths systematically. Think of it as a decision tree for thoughtsβyour AI can generate different approaches, evaluate them, backtrack when stuck, and focus on the most promising paths. Perfect for complex problem-solving, strategic planning, and multi-step reasoning tasks.
Whether you're solving puzzles, planning projects, or exploring creative alternatives, ToT provides structured exploration with evaluation scores, pruning strategies, and persistent storage for tracking reasoning over time.
β¨ Features
π² Thought Trees - Create hierarchical thought structures with parent-child relationships
π Evaluation - Score thoughts to guide exploration toward promising paths
β©οΈ Backtracking - Mark thought branches as pruned and explore alternatives
βοΈ Pruning - Automatically remove low-scoring branches
π Best Path Selection - Identify and select the most promising thoughts
πΎ Persistent Storage - Save and load thought trees across sessions with atomic writes and error handling
π Statistics - Track tree metrics (depth, evaluations, pruning rates)
π Branching Strategies - Systematic exploration using BFS, DFS, beam search, and best-first search
π€ LLM Integration - Optional LLM provider for automated thought generation with strict mode support
π‘οΈ Robust Traversal - Iterative implementations for handling very deep trees without recursion limits
β Schema Validation - Input validation for all tool parameters
Related MCP server: Visum Thinker MCP Server
π Installation
npm install
npm run buildβοΈ Configuration
Add to your MCP client configuration (e.g., mcp.json):
{
"mcpServers": {
"tot": {
"command": "node",
"args": ["/path/to/ToT-mcp/dist/index.js"],
"env": {
"TOT_STORAGE_PATH": "/path/to/ToT-mcp/tot-storage.json",
"TOT_OUTPUT_DIR": "/path/to/ToT-mcp/output"
}
}
}
}π― Quick Start
Basic Example
Create a tree to solve a problem:
{
"goal": "Solve the 24 game with numbers [3, 8, 8, 8]",
"rootContent": "Start with the numbers 3, 8, 8, 8",
"maxDepth": 5
}Add child thoughts with different approaches:
{
"treeId": "tree-123",
"parentId": "thought-456",
"content": "Try multiplying 8 * 8 = 64, then 64 / 8 = 8, then 8 * 3 = 24"
}Evaluate thoughts to guide exploration:
{
"treeId": "tree-123",
"thoughtId": "thought-789",
"score": 0.95,
"reasoning": "This approach successfully reaches the target of 24"
}LLM Provider Configuration
The server supports optional LLM integration for automated thought generation. To configure an LLM provider, modify the server instantiation in src/index.ts:
const llmProvider = {
generateThoughts: async (prompt: string, count: number, context?: string): Promise<string[]> => {
// Your LLM implementation here
return Array.from({ length: count }, (_, i) => `Generated thought ${i + 1}`);
}
};
const config = {
llmProvider,
strictLLM: false // Set to true to throw errors when LLM is not configured
};
const server = new ToTMCPServer(config);Strict Mode: When strictLLM is set to true, the server will throw an error if generate_children is called without an LLM provider configured. This prevents accidental use of placeholder thoughts in production environments.
Using with LLM Providers
The ToT service includes LLM provider implementations in the src/llm-providers/ directory:
Mock LLM Provider - A simple mock implementation for testing:
import { MockLLMProvider } from './src/llm-providers/mock-llm-provider.js';
const llmProvider = new MockLLMProvider([
'Consider exploring the most promising path first',
'Try a different approach by breaking down the problem',
'Evaluate the trade-offs between different solutions'
]);
const config = { llmProvider, strictLLM: false };
const service = new ToTService('./tot-storage.json', config);Grok LLM Provider - Implementation using xAI's Grok API:
import { GrokLLMProvider } from './src/llm-providers/grok-llm-provider.js';
const apiKey = process.env.GROK_API_KEY;
const llmProvider = new GrokLLMProvider(apiKey);
const config = { llmProvider, strictLLM: true };
const service = new ToTService('./tot-storage.json', config);Ollama LLM Provider - Local LLM support using Ollama:
import { OllamaLLMProvider } from './src/llm-providers/ollama-llm-provider.js';
const ollamaBaseUrl = process.env.OLLAMA_BASE_URL || 'http://localhost:11434';
const ollamaModel = process.env.OLLAMA_MODEL || 'llama2';
const llmProvider = new OllamaLLMProvider(ollamaBaseUrl, ollamaModel);
const config = { llmProvider, strictLLM: true };
const service = new ToTService('./tot-storage.json', config);To use Ollama:
Install and start Ollama: https://ollama.ai
Pull a model:
ollama pull llama2(or any other model)Set environment variables:
LLM_PROVIDER_TYPE=ollamaOLLAMA_BASE_URL=http://localhost:11434(optional, default)OLLAMA_MODEL=llama2(optional, default)
See src/llm-providers/grok-llm-provider.ts and src/llm-providers/ollama-llm-provider.ts for full implementations. Remember to never hardcode API keys - use environment variables or secure configuration management.
Generate and Evaluate in One Step
The generateChildrenAndEvaluate method combines thought generation with automatic evaluation:
// Generate children with a default score of 50
const children = await service.generateChildrenAndEvaluate({
treeId: 'tree-123',
parentId: 'thought-456',
numChildren: 3
}, 50);
// Generate children and use LLM as judge for evaluation
const childrenWithJudge = await service.generateChildrenAndEvaluate({
treeId: 'tree-123',
parentId: 'thought-456',
numChildren: 3
}, undefined, true);This method requires an LLM provider to be configured.
π οΈ Available Tools
Tree Management
create_tree
Create a new Tree of Thoughts with a root thought and goal.
Parameters:
goal(string, required): The goal or problem this tree is solvingrootContent(string, required): The content of the root thoughtmaxDepth(number, optional): Maximum depth of the tree (default: 10)metadata(object, optional): Optional metadata for the tree
get_tree
Get a tree by ID.
Parameters:
treeId(string, required): The ID of the tree to retrieve
list_trees
List all trees.
delete_tree
Delete a tree by ID.
Parameters:
treeId(string, required): The ID of the tree to delete
clear_tree
Clear a specific tree by ID.
Parameters:
treeId(string, required): The ID of the tree to clear
Thought Operations
add_child
Add a child thought to an existing thought.
Parameters:
treeId(string, required): The ID of the treeparentId(string, required): The ID of the parent thoughtcontent(string, required): The content of the child thoughtmetadata(object, optional): Optional metadata for the thought
evaluate_thought
Evaluate a thought with a score.
Parameters:
treeId(string, required): The ID of the treethoughtId(string, required): The ID of the thought to evaluatescore(number, required): The evaluation score (e.g., 0-1 or 0-100)reasoning(string, optional): Optional reasoning for the evaluation
select_thought
Mark a thought as selected for further exploration.
Parameters:
treeId(string, required): The ID of the treethoughtId(string, required): The ID of the thought to select
backtrack
Backtrack from a thought, marking all descendants as pruned.
Parameters:
treeId(string, required): The ID of the treethoughtId(string, required): The ID of the thought to backtrack from
prune_tree
Prune thoughts below a certain evaluation threshold.
Parameters:
treeId(string, required): The ID of the treethreshold(number, required): The evaluation threshold (thoughts below this will be pruned)
move_subtree
Move a subtree to a new parent within the same tree. Performs cycle detection, depth validation, and supports dry-run mode for safe preview.
Parameters:
treeId(string, required): The ID of the treesubtreeRootId(string, required): The ID of the subtree root to movenewParentId(string, required): The ID of the new parent thoughtdryRun(boolean, optional): If true, preview the move without making changes (default: false)
Returns:
valid(boolean): Whether the move is validerrors(array): List of validation errorsmovedCount(number): Number of thoughts that would be movednewSubtreeRootDepth(number): New depth of the subtree root after movewarnings(array): List of warnings and recommendationsaffectedThoughtIds(array): IDs of all thoughts in the subtree
Important Notes:
Cannot move the tree root (use
create_treeto create a new tree instead)Cannot move a subtree to create a cycle (new parent must not be a descendant of subtree root)
Move must not exceed the tree's maxDepth limit
Use
dryRun: trueto preview the move before executingAfter moving, consider re-evaluating thoughts in their new context
This is a reasoning-layer operation for restructuring thought trees, distinct from Task Orchestrator's
move_taskwhich is for execution workflow management
Query Operations
get_thought
Get a specific thought by ID.
Parameters:
treeId(string, required): The ID of the treethoughtId(string, required): The ID of the thought to retrieve
get_tree_structure
Get the hierarchical structure of a tree.
Parameters:
treeId(string, required): The ID of the tree
get_best_thoughts
Get the best evaluated thoughts in a tree.
Parameters:
treeId(string, required): The ID of the treelimit(number, optional): Maximum number of thoughts to return (default: 5)
get_tree_stats
Get statistics about a tree.
Parameters:
treeId(string, required): The ID of the tree
Returns:
totalThoughts: Total number of thoughts in the treeevaluatedThoughts: Number of evaluated thoughtsselectedThoughts: Number of selected thoughtsprunedThoughts: Number of pruned thoughtsmaxDepthReached: Maximum depth reached in the treeaverageEvaluation: Average evaluation score
System Operations
clear_tree
Clear a specific tree by ID.
Parameters:
treeId(string, required): The ID of the tree to clear
clear_strategy
Clear a specific strategy by ID.
Parameters:
strategyId(string, required): The ID of the strategy to clear
clear_everything
Clear all trees and strategies.
save_state
Manually save the current state to storage.
get_version
Get the version information of this ToT MCP server.
explore_with_strategy
Explore a thought tree using a systematic branching strategy.
Parameters:
treeId(string, required): The ID of the tree to explorestrategy(string, required): The branching strategy to use (bfs,dfs,beam, orbest_first)maxThoughts(number, optional): Maximum number of thoughts to explore (default: 100)beamWidth(number, optional): Beam width for beam search strategy (default: 3)stopCriteria(object, optional): Optional stop criteriaminEvaluation(number): Stop when a thought reaches this evaluation scoremaxDepth(number): Stop when reaching this depthtargetThoughtCount(number): Stop when exploring this many thoughts
Returns:
thoughtsExplored: Number of thoughts exploredthoughtsCreated: Number of thoughts created during explorationmaxDepthReached: Maximum depth reachedbestThoughtId: ID of the best thought foundbestEvaluation: Evaluation score of the best thoughtstoppedReason: Reason why exploration stopped
π Usage Example
Here's a typical workflow for solving a problem using ToT:
Create a tree with your goal and initial thought
Add child thoughts representing different approaches
Evaluate each thought based on its promise
Select the best thoughts for further exploration
Add more children to selected thoughts
Backtrack if a path doesn't work out
Prune low-scoring branches to focus resources
Review the tree structure to understand the reasoning path
π Data Structures
Thought
{
id: string;
content: string;
parentId: string | null;
children: string[];
evaluation: number | null;
state: 'pending' | 'evaluated' | 'selected' | 'pruned';
depth: number;
createdAt: string;
metadata?: Record<string, any>;
}Tree
{
id: string;
rootId: string;
thoughts: Map<string, Thought>;
goal: string;
createdAt: string;
updatedAt: string;
maxDepth: number;
metadata?: Record<string, any>;
}πΎ Storage
Thought trees are persisted to tot-storage.json in JSON format. The storage mechanism uses:
Atomic Writes: Data is written to a temporary file first, then renamed to prevent corruption
Error Handling: Graceful recovery from corrupt files with detailed error messages
Schema Validation: Loaded data is validated to ensure structural integrity
Graceful Degradation: Corrupt or missing files result in an empty state rather than crashes
Logs of tool calls are stored in the output directory with daily rotation.
π License
MIT
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/HefnySco/agent_mcp_tot'
If you have feedback or need assistance with the MCP directory API, please join our Discord server