Skip to main content
Glama
elevanaltd

debate-hall-mcp

by elevanaltd

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
GITHUB_TOKENNoGitHub personal access token for syncing debates to Discussions and creating ADRs.
OPENROUTER_API_KEYNoAPI key for OpenRouter when using auto-orchestration with OpenRouter provider.
DEBATE_HALL_STATE_DIRNoDirectory for debate state files. Defaults to a local cache directory.
DEBATE_HALL_TIERS_FILENoPath to a YAML file defining tier configurations for auto-orchestration.

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
init_debateC

Create room. mode:fixed|mediated. strict_cognition->validate turns.

add_turnC

Record turn. role:Wind|Wall|Door. cognition:PATHOS|ETHOS|LOGOS→validates content.

get_debateB

State+optional transcript. include_transcript→adds turn history. context_turns:limit depth.

close_debateC

Finalize debate. synthesis:Door's final resolution->closes room.

Args: output_format: 'json' (default), 'octave', or 'both' seal: Add cryptographic seal to OCTAVE output for tamper detection (v1.0.0) export_decision: Export DecisionRecord to context directory for search indexing (Issue #138). Creates an OCTAVE file in .hestai/state/context/decisions/ that search_decisions can find.

pick_next_speakerB

Mediated mode only. role:Wind|Wall|Door→sets next expected speaker.

force_close_debateC

I5:safety override. reason:logged→force closes any state.

tombstone_turnD

I4:redact content→hash chain preserved. turn_index:0-based.

github_sync_debateA

Sync debate turns to GitHub Discussion/Issue comments.

Posts new turns as formatted comments with cognition headers. Idempotent: tracks synced turns to avoid duplicates.

Args: thread_id: The debate thread to sync repo: Repository in owner/repo format target_id: GitHub node ID (discussions) or issue number (issues) target_type: 'discussion' (GraphQL) or 'issue' (REST)

Note: Can be disabled by setting GITHUB_TOOLS_ENABLED=false

ratify_rfcA

Generate ADR from Door synthesis and create PR.

Requires: Debate must be closed with synthesis.

Args: thread_id: The debate thread to ratify repo: Repository in owner/repo format adr_number: Explicit ADR number (required to prevent collisions) target_id: Optional reference ID for linking (e.g., discussion node ID) adr_path: Path for ADR file in repo (default: docs/adr/)

Returns: Dictionary with pr_url, pr_number, adr_path, branch_name

Note: Can be disabled by setting GITHUB_TOOLS_ENABLED=false

human_interjectB

Inject human GitHub comment into active debate as context.

Fetches comment from GitHub and adds to debate context. Detects which role was replied to for injection typing.

Args: thread_id: The debate thread to inject into repo: Repository in owner/repo format target_id: GitHub node ID (discussions) or issue number (issues) comment_id: Comment node ID (DC_...) or issue comment ID (numeric)

Note: Can be disabled by setting GITHUB_TOOLS_ENABLED=false

run_debateA

Auto-orchestrate a Wind/Wall/Door debate (ADR-0002).

Runs a complete automated debate with three agents:

  • Wind (PATHOS): Expands possibilities and explores alternatives

  • Wall (ETHOS): Validates against constraints and evidence

  • Door (LOGOS): Synthesizes a third-way resolution

Args: topic: The debate topic to explore tier: Configuration tier (default: "standard") thread_id: Optional custom thread ID (auto-generated if not provided) compression_tier: Override compression tier (None = use tier default) primer_tier: Override primer tier (None = use tier default) context_files: Optional list of absolute file paths to inject as codebase context. Agents will see file contents in their prompts. mode: Debate mode - "standard" for full Wind/Wall/Door debate, "speed" for lightweight Speed Dialogue Mode (Issue #139), "raci" for RACI governance mode (Turn Manifest Compiler). raci_config: Required when mode="raci". Dictionary with RACI roles: - responsible: Proposer role name (required) - accountable: Decision maker role name (required) - consulted: List of advisor role names (optional, max 5) - informed: List of observer role names (optional, max 3, post-verdict OBSERVATION turns)

Returns: Dictionary with thread_id, topic, status, turn_count, and synthesis

resume_debateA

Resume a PAUSED debate from where it left off (Phase 4).

Allows resuming debates that were paused due to failures (provider timeouts, errors, etc.) during auto-orchestration.

Args: thread_id: The thread ID of the paused debate tier: Configuration tier (default: "standard") compression_tier: Override compression tier (None = use tier default) primer_tier: Override primer tier (None = use tier default)

Returns: Dictionary with thread_id, topic, status, turn_count, and synthesis

extract_decision_recordA

Extract a DecisionRecord from a closed debate.

The "Cognitive Notary" product - a verified record that can be indexed, searched, and cited by future decision-making agents.

Args: thread_id: Thread identifier of closed debate

Returns: Dictionary with DecisionRecord fields: - thread_id, topic, decided_at (identity) - synthesis, decision_hash, status (outcome) - wind_perspectives, wall_constraints, door_refinements (rationale) - consensus_reached, consensus_votes, refinement_count (validation) - extracted_at, source_hash, turn_count (provenance)

Raises: FileNotFoundError: If thread doesn't exist ValueError: If debate is not closed (ACTIVE or PAUSED status)

resolve_questionA

Resolve a question through structured debate and return decision record.

High-level Layer 3 API that combines run_debate + extract_decision_record into a single operation. Agents call this for quick, verified decisions.

Process:

  1. Generate thread_id if not provided (YYYY-MM-DD-topic-slug format)

  2. Run full Wind/Wall/Door debate via run_debate

  3. Extract DecisionRecord from closed debate

  4. Return verified decision ready for use

Args: topic: The question or topic to resolve tier: Tier configuration name (default: "standard") thread_id: Optional custom thread ID (auto-generated if None)

Returns: Dictionary with DecisionRecord fields plus debate metadata: - All DecisionRecord fields (identity, outcome, rationale, validation, provenance) - debate_result: The raw run_debate result for reference

Raises: RuntimeError: If debate fails or cannot be closed ValueError: If tier configuration is invalid

search_decisionsA

Search for past decisions matching a query.

Uses field-weighted BM25 to find relevant decisions from the decisions directory. Returns ranked results with relevance scores.

Field weights (ADR-0004):

  • SEARCH_ANCHORS: 15.0 (pre-computed Q&A)

  • TOPIC: 10.0 (what it is)

  • TAGS: 8.0 (classification)

  • SYNTHESIS: 5.0 (the decision)

  • RATIONALE: 2.0 (wind/wall perspectives)

Args: query: Search query string limit: Maximum number of results (default 10) min_score: Minimum score threshold 0-1 (default 0.0)

Returns: Dictionary with: - query: The search query - count: Number of results - results: List of matching decisions with thread_id, topic, synthesis, score, decided_at, file_path

consultA

Create advisory consultation session. advisor answers questioner's question.

Creates a two-party mediated session where a questioner asks an advisor for guidance. The question is recorded as the first turn.

Args: topic: What the consultation is about advisor_role: Who to consult (e.g. "TMG", "CE") question: The specific question being asked questioner_role: Who is asking (default: "Questioner") thread_id: Custom thread ID (auto-generated if omitted) context: Additional context for the advisor max_turns: Consultation turn limit (default: 6)

Returns: Dictionary with thread_id, status, session_type, question, advisor_role, questioner_role, awaiting, turn_count

conveneA

Assemble committee for group decision. members respond, chair manages order.

Creates a mediated committee session where multiple agents deliberate. Supports go_nogo (GO/NO-GO extraction), vote, and review decision types.

Args: topic: What the committee is deciding members: Committee member roles (e.g. ["CRS", "CE"]) brief: The brief/description for the committee chair_role: Who chairs the committee (default: "Chair") decision_type: "go_nogo" | "vote" | "review" (default: "review") thread_id: Custom thread ID (auto-generated if omitted) context: Additional context for the committee max_turns: Committee turn limit (default: 12)

Returns: Dictionary with thread_id, status, session_type, decision_type, chair_role, members, awaiting, turn_count

Prompts

Interactive templates invoked by user choice

NameDescription
debate_agentGet the system prompt for a debate agent (Wind, Wall, Door).

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

C2.9/5.0

Scored across 17 tools

Disambiguation3/5

Most tools are distinct, but init_debate, run_debate, resolve_question, consult, and convene all create or orchestrate sessions, so an agent could easily pick the wrong one. Descriptions separate manual vs auto vs committee/consultation modes, yet the overlapping names and session-creating behavior leave some ambiguity.

Naming Consistency4/5

Tool names are predominantly snake_case with a verb-first pattern (init_debate, add_turn, get_debate, close_debate, run_debate). A few names deviate, such as github_sync_debate (noun-led), human_interject (no direct object), and bare consult/convene, but the pattern is still readable and mostly predictable.

Tool Count3/5

The 17 tools exceed the typical 3-15 well-scoped range, and several utilities (force_close_debate, tombstone_turn, human_interject) are niche. The set still covers multiple subdomains, but the count feels heavy and includes some redundant high-level conveniences like resolve_question on top of run_debate+extract_decision_record.

Completeness2/5

The core debate lifecycle has init, add, get, close, force close, speaker picking, and tombstoning, but there is no way to list active debates or delete/archive a thread. More critically, consult and convene create sessions that return awaiting states, yet no tool exists to add advisor/committee turns, leaving those workflows half-built.

Maintenance

ActivityMaintained
ResponsivenessResponsive