Skip to main content
Glama
FradSer

Sequential Thinking Multi-Agent System

by FradSer

Sequential Thinking Multi-Agent System (MAS)

Python Version Framework Twitter Follow

English | 简体中文

An MCP server that processes sequential thoughts through a team of specialized AI agents, each analyzing the problem from a different cognitive perspective.

What This Is

This is an MCP server, not a standalone application. It runs as a background service that extends an MCP-compatible LLM client (like Claude Desktop) with structured sequential-thinking capabilities. It exposes one tool, sequentialthinking, that runs every thought through a fixed multi-agent workflow: an initial synthesis, several specialist agents thinking in parallel, and a final synthesis that answers the original question.

Related MCP server: Sequential-Thinking

How It Works

The system uses a fixed full_exploration strategy for every request. The AI complexity analyzer still runs to record diagnostic metadata (complexity score, problem type, required thinking modes), but it no longer changes the execution path — all thoughts take the same route:

flowchart TD
    A[Input Thought] --> B[AI Complexity Analyzer]
    B --> C[Complexity Metadata Stored]
    C --> D[Fixed Strategy: full_exploration]
    D --> E[Step 1: Initial Synthesis]
    E --> F[Step 2: Parallel Specialist Agents]
    F --> G[Step 3: Final Synthesis]
    G --> H[Unified Response]

The Specialist Agents

Each request runs six specialist agents in parallel, plus a synthesis agent that runs twice (once at the start, once at the end). Every specialist except synthesis can optionally use web research via ExaTools.

Agent

Thinking direction

Focus

Time budget

Factual

factual

Objective facts and verified data

120s

Emotional

emotional

Intuition and gut reactions

30s

Critical

critical

Risks, weaknesses, logical flaws

120s

Optimistic

optimistic

Benefits, opportunities, value

120s

Creative

creative

New ideas and alternatives

240s

Meta-cognitive

metacognitive

Bias detection and reasoning-process evaluation

90s

Synthesis

synthesis

Integration and final answer

60s

Key properties:

  • Deterministic: every request runs the same multi-step path.

  • Parallel: the specialist agents run simultaneously with asyncio.gather.

  • Synthesis-driven: both orchestration and the final answer come from the synthesis agent, which uses the enhanced model.

Model Strategy

Two models are configured per provider:

  • Enhanced model: used by the synthesis agent (integration tasks).

  • Standard model: used by the specialist agents.

Research Capabilities

ExaTools is attached to every agent except synthesis. Research is optional — it activates only when EXA_API_KEY is set. Without it, the system works on pure reasoning.

The sequentialthinking Tool

The server exposes one MCP tool.

Input

{
  thought: string,               // One focused reasoning step
  thoughtNumber: number,         // 1-based step index; increment each call
  totalThoughts: number,         // Planned number of steps
  nextThoughtNeeded: boolean,    // true for intermediate steps, false on final step
  isRevision: boolean,           // true only when revising earlier conclusions
  branchFromThought?: number,    // Set with branchId to branch from a prior step
  branchId?: string,             // Branch identifier (required when branching)
  needsMoreThoughts: boolean     // true only when extending beyond totalThoughts
}

Output

{
  should_continue: boolean,      // Canonical continuation signal
  next_thought_number: number?,  // Recommended next thoughtNumber
  stop_reason: string,           // Why to continue/stop/retry
  current_thought_number: number,
  total_thoughts: number,
  next_call_arguments?: {        // Suggested next-call arguments when applicable
    thoughtNumber: number,
    totalThoughts: number,
    nextThoughtNeeded: boolean,
    needsMoreThoughts: boolean
  },
  parameter_usage: Record<string, string>
}

Call Contract

  • Treat this tool as a multi-step loop, not a one-shot call.

  • After every response, read structuredContent.should_continue.

  • Keep calling until should_continue is false.

  • Actively use reflection: when a step is weak or incorrect, send a revision step with isRevision=true.

  • Prefer structuredContent.next_thought_number and next_call_arguments when building the next request.

Supported Providers

Provider

Env var

Default enhanced model

Default standard model

DeepSeek (default)

DEEPSEEK_API_KEY

deepseek-chat

deepseek-chat

Groq

GROQ_API_KEY

openai/gpt-oss-120b

openai/gpt-oss-20b

OpenRouter

OPENROUTER_API_KEY

deepseek/deepseek-chat-v3-0324

deepseek/deepseek-r1

GitHub Models

GITHUB_TOKEN

openai/gpt-5

openai/gpt-5-min

Anthropic

ANTHROPIC_API_KEY

claude-3-5-sonnet-20241022

claude-3-5-haiku-20241022

Ollama

none

devstral:24b

devstral:24b

Installation

Prerequisites

  • Python 3.10+

  • An LLM API key from one of the providers above

  • Optional: EXA_API_KEY for web research

  • uv package manager (recommended) or pip

Install

git clone https://github.com/FradSer/mcp-server-mas-sequential-thinking.git
cd mcp-server-mas-sequential-thinking

uv pip install .        # or: pip install .

Configure an MCP Client

Add to your MCP client configuration:

{
  "mcpServers": {
    "sequential-thinking": {
      "command": "mcp-server-mas-sequential-thinking",
      "env": {
        "LLM_PROVIDER": "deepseek",
        "DEEPSEEK_API_KEY": "your_api_key",
        "EXA_API_KEY": "your_exa_key_optional"
      }
    }
  }
}

Environment Variables

# LLM provider (required)
LLM_PROVIDER="deepseek"  # deepseek, groq, openrouter, github, anthropic, ollama
DEEPSEEK_API_KEY="sk-..."

# Optional: override the models per provider (prefixed by provider name)
# DEEPSEEK_ENHANCED_MODEL_ID="deepseek-chat"
# DEEPSEEK_STANDARD_MODEL_ID="deepseek-chat"

# Optional: web research (enables ExaTools)
# EXA_API_KEY="your_exa_api_key"

# Optional: custom endpoint
# LLM_BASE_URL="https://custom-endpoint.com"

# Optional: team orchestration mode (standard/broadcast, route, coordinate)
# TEAM_MODE="standard"

Run the Server Directly

mcp-server-mas-sequential-thinking        # installed script
uv run mcp-server-mas-sequential-thinking  # or via uv

Development

# Install with dev dependencies
uv pip install -e ".[dev]"

# Code quality
uv run ruff check . --fix
uv run ruff format .
uv run mypy .

# Run tests
uv run pytest tests/

# Or use the Makefile
make test        # all tests with coverage + quality checks
make test-fast   # fast run without coverage
make check-all   # all quality checks

Test with MCP Inspector

npx @modelcontextprotocol/inspector uv run mcp-server-mas-sequential-thinking

Open http://127.0.0.1:6274/ and test the sequentialthinking tool.

Token Consumption Warning

The multi-agent architecture consumes significantly more tokens than a single-agent tool — roughly 5-10x more per sequentialthinking call, because every call invokes multiple specialist agents. The tradeoff is deeper, multi-perspective analysis.

Project Structure

mcp-server-mas-sequential-thinking/
├── src/mcp_server_mas_sequential_thinking/
│   ├── main.py                          # MCP server entry point (MCPServer)
│   ├── processors/
│   │   ├── multi_thinking_core.py       # Specialist agent definitions
│   │   └── multi_thinking_processor.py  # Parallel sequence execution
│   ├── routing/
│   │   ├── ai_complexity_analyzer.py    # AI complexity analysis
│   │   ├── complexity_types.py          # Complexity metric models
│   │   └── multi_thinking_router.py     # Fixed full_exploration routing
│   ├── services/
│   │   ├── server_core.py               # ThoughtProcessor implementation
│   │   ├── processing_orchestrator.py   # Agno Team orchestration
│   │   ├── workflow_executor.py
│   │   └── context_builder.py
│   ├── infrastructure/
│   │   ├── persistent_memory.py         # SQLite session storage
│   │   └── learning_resources.py        # Agent learning machine
│   ├── security/rate_limiter.py         # Rate limiting and request validation
│   └── config/
│       ├── modernized_config.py         # Provider strategies
│       └── constants.py                 # System constants
├── scripts/mcp_python_client_smoke.py   # Protocol smoke test
├── tests/                               # Unit and integration tests
├── pyproject.toml
└── Makefile

Changelog

See CHANGELOG.md for version history.

Contributing

Contributions are welcome. Please ensure:

  1. Code follows the project style (ruff, mypy)

  2. Commit messages use conventional commits format

  3. All tests pass before submitting a PR

  4. Documentation is updated as needed

License

This project does not yet declare a license. See the LICENSE discussion if you need to reuse it.

Acknowledgments

  • Built with Agno v2.x

  • Model Context Protocol by Anthropic

  • Research capabilities powered by Exa (optional)

  • Multi-dimensional thinking inspired by Edward de Bono's work

Support

Available Tools

1 tool
sequentialthinkingA

Multi-step sequential reasoning contract. Always treat this tool as iterative: after each response, read structuredContent.should_continue and continue calling until it is false. Actively use reflection: when a step reveals a flaw, explicitly send a revision step with isRevision=true. Input contract:

  • thought: one concrete reasoning step in natural language.

  • thoughtNumber: 1-based step index; increment by one for each new step.

  • totalThoughts: target number of steps for the current plan.

  • nextThoughtNeeded: true while the sequence should continue; false on final step.

  • isRevision: true only when revising an earlier conclusion.

  • branchFromThought + branchId: set together to explore an alternative branch.

  • needsMoreThoughts: true only when extending beyond totalThoughts. Output contract:

  • structuredContent.should_continue: canonical continuation signal.

  • structuredContent.next_thought_number: next recommended thoughtNumber.

  • structuredContent.stop_reason: canonical reason code for orchestration.

ParametersJSON Schema
NameRequiredDescriptionDefault
thoughtYesCurrent reasoning step text. Keep this to one concrete step.
thoughtNumberYes1-based sequence index for this thought. Increment for each step.
totalThoughtsYesEstimated total number of steps in the current reasoning plan.
nextThoughtNeededYesSet true when another thought follows this one. Set false on the final thought.
isRevisionYesSet true only when this step revises an earlier conclusion.
branchFromThoughtYesOriginal thought number for branching. Null for the main path.
branchIdYesBranch identifier. Required when branchFromThought is not null.
needsMoreThoughtsYesSet true only when you must continue beyond totalThoughts.

Output Schema

ParametersJSON Schema
NameRequiredDescription
should_continueYesIf true, call sequentialthinking again. The tool is designed for multi-step reasoning loops.
next_thought_numberNoRecommended thoughtNumber for the next call. Null means no next step is currently required.
stop_reasonYesMachine-readable reason that explains why to continue or stop.
current_thought_numberYesEcho of the current thoughtNumber after normalization.
total_thoughtsYesEcho of current totalThoughts after normalization.
next_call_argumentsNoConcrete argument recommendations for the next call when the current run completes successfully and should continue.
parameter_usageYesContract reminders for each core parameter to keep multi-step iterations consistent.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Without annotations, the description carries full burden. It discloses the iterative nature, revision mechanism, and output contract. It lacks explicit statements about side effects or auth but is sufficient for the intended reasoning use.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections (input contract, output contract) and front-loaded with the core concept. It is slightly lengthy but each sentence adds value, so it earns a 4.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (8 required params, output schema), the description covers the input and output contracts, usage pattern, and corner cases like revision and branching. It is nearly complete, lacking only examples or defaults, which are covered by the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with descriptions for all 8 parameters. The description adds value by contextualizing parameter usage, such as grouping branchFromThought and branchId, and clarifying that needsMoreThoughts extends beyond totalThoughts.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool is a 'Multi-step sequential reasoning contract' and explains its iterative, revision, and branching capabilities. It is very specific and distinguishes itself by detailing the contract-like behavior.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly instructs to treat the tool iteratively, read structuredContent.should_continue, and continue until false. It also specifies when to use revisions (when a flaw is revealed) and branching (with branchFromThought and branchId).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 1 tool updatev0.8.0
    • Changedsequentialthinking31 fields changed
      • addedInput schema / properties / branchFromThought
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 1,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Original thought number for branching. Null for the main path.",
        +  "title": "Branchfromthought"
        +}
      • addedInput schema / properties / branchId
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Branch identifier. Required when branchFromThought is not null.",
        +  "title": "Branchid"
        +}
      • removedInput schema / properties / branch_from
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "integer"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Branch From"
        -}
      • removedInput schema / properties / branch_id
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Branch Id"
        -}
      • addedInput schema / properties / isRevision
        Added value: +{
        +  "description": "Set true only when this step revises an earlier conclusion.",
        +  "title": "Isrevision",
        +  "type": "boolean"
        +}
      • removedInput schema / properties / is_revision
        Removed value: -{
        -  "default": false,
        -  "title": "Is Revision",
        -  "type": "boolean"
        -}
      • addedInput schema / properties / needsMoreThoughts
        Added value: +{
        +  "description": "Set true only when you must continue beyond totalThoughts.",
        +  "title": "Needsmorethoughts",
        +  "type": "boolean"
        +}
      • removedInput schema / properties / needs_more
        Removed value: -{
        -  "default": false,
        -  "title": "Needs More",
        -  "type": "boolean"
        -}
      • addedInput schema / properties / nextThoughtNeeded
        Added value: +{
        +  "description": "Set true when another thought follows this one. Set false on the final thought.",
        +  "title": "Nextthoughtneeded",
        +  "type": "boolean"
        +}
      • removedInput schema / properties / next_needed
        Removed value: -{
        -  "title": "Next Needed",
        -  "type": "boolean"
        -}
      • removedInput schema / properties / revises_thought
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "integer"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Revises Thought"
        -}
      • addedInput schema / properties / thought / description
        Added value: +"Current reasoning step text. Keep this to one concrete step."
      • addedInput schema / properties / thought / minLength
        Added value: +1
      • addedInput schema / properties / thoughtNumber
        Added value: +{
        +  "description": "1-based sequence index for this thought. Increment for each step.",
        +  "minimum": 1,
        +  "title": "Thoughtnumber",
        +  "type": "integer"
        +}
      • removedInput schema / properties / thought_number
        Removed value: -{
        -  "title": "Thought Number",
        -  "type": "integer"
        -}
      • addedInput schema / properties / totalThoughts
        Added value: +{
        +  "description": "Estimated total number of steps in the current reasoning plan.",
        +  "minimum": 1,
        +  "title": "Totalthoughts",
        +  "type": "integer"
        +}
      • removedInput schema / properties / total_thoughts
        Removed value: -{
        -  "title": "Total Thoughts",
        -  "type": "integer"
        -}
      • changedInput schema / required
        Previous value: -[
        -  "thought",
        -  "thought_number",
        -  "total_thoughts",
        -  "next_needed"
        -]New value: +[
        +  "thought",
        +  "thoughtNumber",
        +  "totalThoughts",
        +  "nextThoughtNeeded",
        +  "isRevision",
        +  "branchFromThought",
        +  "branchId",
        +  "needsMoreThoughts"
        +]
      • addedInput schema / title
        Added value: +"sequentialthinkingArguments"
      • addedOutput schema / $defs
        Added value: +{
        +  "NextCallArguments": {
        +    "description": "Recommended arguments for the next tool call.",
        +    "properties": {
        +      "needsMoreThoughts": {
        +        "description": "Set to true only when you need to exceed totalThoughts and extend the sequence.",
        +        "title": "Needsmorethoughts",
        +        "type": "boolean"
        +      },
        +      "nextThoughtNeeded": {
        +        "description": "Set to true when another step should follow the next call. Set to false on the final thought.",
        +        "title": "Nextthoughtneeded",
        +        "type": "boolean"
        +      },
        +      "thoughtNumber": {
        +        "description": "Recommended thoughtNumber for the next tool call.",
        +        "minimum": 1,
        +        "title": "Thoughtnumber",
        +        "type": "integer"
        +      },
        +      "totalThoughts": {
        +        "description": "Recommended totalThoughts for the next tool call.",
        +        "minimum": 1,
        +        "title": "Totalthoughts",
        +        "type": "integer"
        +      }
        +    },
        +    "required": [
        +      "thoughtNumber",
        +      "totalThoughts",
        +      "nextThoughtNeeded",
        +      "needsMoreThoughts"
        +    ],
        +    "title": "NextCallArguments",
        +    "type": "object"
        +  },
        +  "StopReason": {
        +    "description": "Reason code for continuing or stopping thought iteration.",
        +    "enum": [
        +      "next_thought_required",
        +      "needs_more_thoughts",
        +      "thought_sequence_complete",
        +      "validation_error",
        +      "processing_error",
        +      "rate_limited",
        +      "request_too_large",
        +      "unexpected_error"
        +    ],
        +    "title": "StopReason",
        +    "type": "string"
        +  }
        +}
      • addedOutput schema / description
        Added value: +"Structured control fields returned on every tool response."
      • addedOutput schema / properties / current_thought_number
        Added value: +{
        +  "description": "Echo of the current thoughtNumber after normalization.",
        +  "minimum": 1,
        +  "title": "Current Thought Number",
        +  "type": "integer"
        +}
      • addedOutput schema / properties / next_call_arguments
        Added value: +{
        +  "anyOf": [
        +    {
        +      "$ref": "#/$defs/NextCallArguments"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Concrete argument recommendations for the next call when the current run completes successfully and should continue."
        +}
      • addedOutput schema / properties / next_thought_number
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 1,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Recommended thoughtNumber for the next call. Null means no next step is currently required.",
        +  "title": "Next Thought Number"
        +}
      • addedOutput schema / properties / parameter_usage
        Added value: +{
        +  "additionalProperties": {
        +    "type": "string"
        +  },
        +  "description": "Contract reminders for each core parameter to keep multi-step iterations consistent.",
        +  "title": "Parameter Usage",
        +  "type": "object"
        +}
      • removedOutput schema / properties / result
        Removed value: -{
        -  "title": "Result",
        -  "type": "string"
        -}
      • addedOutput schema / properties / should_continue
        Added value: +{
        +  "description": "If true, call sequentialthinking again. The tool is designed for multi-step reasoning loops.",
        +  "title": "Should Continue",
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / stop_reason
        Added value: +{
        +  "$ref": "#/$defs/StopReason",
        +  "description": "Machine-readable reason that explains why to continue or stop."
        +}
      • addedOutput schema / properties / total_thoughts
        Added value: +{
        +  "description": "Echo of current totalThoughts after normalization.",
        +  "minimum": 1,
        +  "title": "Total Thoughts",
        +  "type": "integer"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "result"
        -]New value: +[
        +  "should_continue",
        +  "stop_reason",
        +  "current_thought_number",
        +  "total_thoughts",
        +  "parameter_usage"
        +]
      • changedOutput schema / title
        Previous value: -"sequentialthinkingOutput"New value: +"SequentialThinkingStructuredContent"
  2. 1 tool updatev1.0.0
    • First observedsequentialthinking

TDQS

A4.7/5.0
Disambiguation5/5

Only one tool exists, so there is no possibility of ambiguity or confusion between tools.

Naming Consistency5/5

With a single tool, naming consistency is inherently perfect; the name clearly describes the action.

Tool Count5/5

One tool is appropriate for a focused multi-step reasoning system; the tool itself is complex and self-contained.

Completeness5/5

The tool covers the full sequential reasoning lifecycle including revision, branching, and extension, leaving no obvious gaps.

Maintenance

ActivityMaintained
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • F
    license
    C
    quality
    D
    maintenance
    An MCP server implementing the Unified Cognitive Processing Framework for advanced problem-solving, creative thinking, and cognitive analysis through structured tools for knowledge mapping, recursive questioning, and perspective generation.
    3
    16
    -
  • A
    license
    A
    quality
    D
    maintenance
    A MCP server that implements sequential thinking protocols, provides structured problem-solving methods, decomposes complex problems into manageable steps, and supports iterative optimization and alternative reasoning paths.
    1
    2
    Apache 2.0

Latest Blog Posts

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/FradSer/mcp-server-mas-sequential-thinking'

If you have feedback or need assistance with the MCP directory API, please join our Discord server