Skip to main content
Glama

Imladris

Named for Imladris (Rivendell), seat of the Council of Elrond — where representatives of every free people gathered to weigh a hard decision together.

Imladris Council

Design (source of truth)

docs/architecture/ — overview, pipeline, MCP surface, configuration reference, provider abstraction, judge, security, and deployment.

Related MCP server: multi-agent-debate-mcp

How it works (one paragraph)

The harness's native model calls the imladris MCP tool (via the /council or /council-session prompt). The server fans the prompt out to the configured panel (1–8 members) concurrently (each provider is a plain HTTPS call), collects answers (with partial-result tolerance), then runs an API-side analysis judge (consensus / contradictions / partial coverage / unique insights / blind spots). The tool returns that analysis plus all raw panel answers. The native model reads both and authors the final answer. A session call uses a local ~/.imladris/sessions/<thread_id>.json store to rebuild prior user/assistant turns for the next panel pass. An MCP server can't call back into the harness model, so the judge is API-side and the native model is always the outer author.

Install

Bootstrap uv and install the imladris console tool with a single command. You do not need a local checkout of this repository:

# macOS / Linux
curl -fsSL https://raw.githubusercontent.com/FeanorsCodeSL/imladris/main/scripts/install.sh | sh
# Windows
irm https://raw.githubusercontent.com/FeanorsCodeSL/imladris/main/scripts/install.ps1 | iex

Each script installs uv if absent, resolves or installs Python 3.13, removes any previous imladris uv tool environment, reinstalls with the resolved Python interpreter, and verifies imladris --help before finishing. This puts two commands on your console PATH: imladris (the configurator TUI) and imladris-mcp (the MCP stdio server harnesses spawn). Until a PyPI release is uploaded, this git-URL install requires git on PATH; the installer checks that up front.

Use the installer as the supported install workflow, including for local source testing. Raw uv tool install . is only useful when deliberately debugging uv itself because it bypasses the installer safeguards.

Then run the configurator:

imladris

Imladris TUI dashboard

The full-screen configurator loads the current config, shows the council roster, lets you add/edit/delete members, assign the judge role, writes ~/.imladris/config.json + ~/.imladris/.env (0600), and wires selected harnesses (Claude Code / Codex / OpenCode) with the imladris MCP entry. After that, continue in your harness and invoke /council, /council-session, or the imladris tool when you want deliberation.

Run imladris doctor to print the resolved roster, roles, and wired harnesses (no secrets). Use imladris refresh-catalog or the TUI refresh action to update the local models.dev cache; runtime deliberation only reads cache/seed data. Council sessions are local files under ~/.imladris/sessions/. Clear one or all of them with imladris clear-sessions [thread_id] or the imladris_clear_sessions MCP tool.

Repository layout

orchestrator/        the service package
  mcp_server.py      FastMCP server — tools: imladris, imladris_status, imladris_clear_sessions; council + council-session prompts; main()
  panel.py           panel fan-out orchestration (partial results + degradation)
  judge.py           API-side analysis judge
  model_catalog.py   offline-first model metadata, models.dev parser, cache helpers
  budget.py          advisory context-budget estimates
  sessions.py        local council-session store and message reconstruction
  providers/         single OpenAI-compatible chat provider kind + factory
  settings.py        JSON/YAML + env config loading/validation; roles panel/judge
  models.py          Pydantic request/response models
  interfaces.py      Protocol seams; fakes.py — deterministic test doubles
  costing.py         cost estimation; json_utils.py — tolerant judge JSON
  cli/               imladris configurator: TUI, catalog, config ops, secrets, probe, harness/
  tests/             pytest suite (respx for HTTP)
config/              imladris.example.yaml (illustrative providers, presets, pricing)
scripts/             install.sh, install.ps1, stdio smoke (Bash + PowerShell)
docs/architecture/   live architecture, configuration, security, deployment references
.github/workflows/   CI, sonar
.agents/skills/      imladris-deliberate skill

Develop

Requires Python 3.13.

python -m venv .venv
./.venv/bin/python -m pip install -r orchestrator/requirements-dev.txt

./.venv/bin/ruff check orchestrator           # lint
./.venv/bin/ruff format --check orchestrator  # style gate (CI enforces)
./.venv/bin/python -m pytest                  # tests

./.venv/bin/python -m orchestrator.mcp_server # run the MCP server over stdio
IMLADRIS_SOURCE="$(pwd)" ./scripts/install.sh # install/test from this checkout

On Windows, use the same installer path:

.\scripts\install.ps1 -Source .

Configuration

Run imladris to write ~/.imladris/config.json and ~/.imladris/.env (0600). The in-repo config/imladris.example.yaml is illustrative only. Both JSON and YAML config files are supported by extension; the TUI writes JSON. Secrets live only in env vars referenced by name (api_key_env) from the config — never in the config file, never logged, never returned by imladris_status.

Resolution: --config <path>IMLADRIS_CONFIG./imladris.{json,yaml}~/.imladris/config.{json,yaml}.

Integration

Per-harness setup (Claude Code, Codex, OpenCode) is wired automatically by the imladris configurator. Every entry launches imladris-mcp over stdio with IMLADRIS_CONFIG pointed at ~/.imladris/config.json. For the manual config snippets, see docs/architecture/06-deployment.md.

License

MIT. See also SECURITY.md, CONTRIBUTING.md, THIRD-PARTY-NOTICES.md.

Available Tools

3 tools
imladrisA

Convene a panel of independent AI models to deliberate on a hard question, then return a structured analysis (consensus, disagreements, gaps, unique insights, blind spots) plus all raw panel answers. Use for research, expert critique, "compare and contrast", architecture/design trade-offs, or any task where being wrong is costly. You (the calling model) remain the final author: read the analysis + raw answers and write the answer.

ParametersJSON Schema
NameRequiredDescriptionDefault
promptYesThe question or task for the panel to deliberate on.
contextNoBackground appended to the prompt for every panellist and the judge.
thread_idNoStable session id (^[A-Za-z0-9_-]{1,64}$); reuses local history.
prior_answerNoYour prior answer for this thread; stored as the assistant turn.
panelNo1-8 enabled provider ids to use as the panel (else the configured one).
presetNoNamed preset selecting a panel and judge.
analysis_modelNoOverride the judge; must be an enabled provider with the 'judge' role.
max_tokensNoMax output tokens per provider call.
temperatureNoPanel sampling temperature (the judge always runs at temperature 0).
reasoning_effortNoReasoning-effort hint for providers that support it.
timeout_sNoOverall deadline in seconds for the deliberation.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries full burden. It discloses the deliberation process, the structured output format, and the user's role as final author. It does not contradict any annotations (none exist). Minor omission: no explicit statement about non-destructiveness, but implied.

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

Conciseness5/5

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

The description is a single ~80-word sentence front-loaded with the core action and output, followed by usage examples and a final note. Every sentence adds value; no redundancy or fluff.

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 complexity (11 params, output schema exists), the description adequately covers purpose, output, and usage flow. It mentions thread_id/prior_answer for session continuity. Sibling tools are session-focused, so the core tool's description is sufficient. Could mention that it does not modify external state, but overall complete.

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

Parameters3/5

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

Schema description coverage is 100% (all 11 parameters documented). The description adds value by explaining the overall workflow and user responsibility, but does not repeat parameter details. Baseline is 3, and the description provides moderate complement beyond the schema.

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 uses a specific verb ('Convene a panel') and resource ('independent AI models') and clearly states the output: structured analysis plus raw answers. It distinguishes itself from sibling tools (imladris_clear_sessions, imladris_status) which are session management utilities.

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

Usage Guidelines4/5

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

The description explicitly lists use cases: research, expert critique, compare/contrast, architecture/design trade-offs, and any costly task. It also advises the user to remain final author. While it doesn't provide when-not-to-use or alternatives, the context is clear enough.

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

imladris_clear_sessionsA

Clear local Imladris council-session history.

Pass a thread_id to clear one session, or omit it to clear all local session JSON files under ~/.imladris/sessions.

ParametersJSON Schema
NameRequiredDescriptionDefault
thread_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior3/5

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

No annotations provided, so description carries full burden. It discloses the destructive nature ('clear', 'JSON files under ~/.imladris/sessions'), but does not mention reversibility, permissions, or side effects.

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

Conciseness5/5

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

Two sentences, front-loaded with the action, every sentence adds value. No wasted words.

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 low complexity (1 optional param, has output schema), the description covers main behavior, scope control, and file location. Missing error handling or safety notes, but sufficient for a clear operation.

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?

With 0% schema coverage, the description adds essential semantics: the thread_id parameter controls scope (one vs all). It explains the behavioral difference, which is beyond the schema's type/default information.

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 action ('Clear') and the resource ('local Imladris council-session history'). It distinguishes between clearing a single session (with thread_id) and all sessions (by omitting parameter), which differentiates it from siblings imladris and imladris_status.

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

Usage Guidelines4/5

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

It provides clear usage patterns: pass thread_id for one session, omit for all. However, it lacks explicit when-not-to-use or alternatives to sibling tools.

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

imladris_statusA

Return resolved non-secret config: presets, provider roles, per-provider egress (on-prem/off-prem), and advisory context-budget state. Performs no liveness probe.

Never returns secret values or api_key_env names (plan §6.2).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

Fully discloses what it returns and does not return (no secrets, no liveness probe). No annotations exist, so description carries full burden; it does so comprehensively.

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

Conciseness5/5

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

Two concise sentences: first lists returned items, second adds constraints. No fluff. Front-loaded with key purpose.

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

Completeness5/5

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

For a zero-parameter tool with output schema (implied), description covers what the agent needs to know about the tool's input and output, despite not listing return values.

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?

No parameters, so baseline 4. Description adds no parameter info, but none needed.

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?

Clearly states it returns resolved non-secret config (presets, provider roles, egress info, context-budget state) and explicitly excludes liveness probes and secrets. Differentiated from siblings: 'imladris' (presumably main) and 'imladris_clear_sessions' (session clearing).

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

Usage Guidelines4/5

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

Implicitly indicates use for obtaining non-secret config; notes it performs no liveness probe (so not a health check). No explicit when-not or alternatives, but context is clear.

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. 3 tool updatesv0.1.0
    • First observedimladris
    • First observedimladris_clear_sessions
    • First observedimladris_status

TDQS

A4.1/5.0
Disambiguation5/5

Each tool serves a distinct purpose: the main tool for convening panels, clear_sessions for session cleanup, and status for configuration. No overlap in functionality.

Naming Consistency3/5

The main tool is named simply 'imladris' while the auxiliary tools follow a 'imladris_verb_noun' pattern. This inconsistency breaks the pattern and could cause confusion.

Tool Count4/5

Three tools is minimal but reasonable for a focused server covering core functionality, session management, and status. Slightly thin but not insufficient.

Completeness3/5

Missing operations for listing past sessions or retrieving cached results. The clear_sessions tool only removes sessions without providing overview or retrieval capabilities.

Maintenance

ActivityStale
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

  • A
    license
    A
    quality
    C
    maintenance
    Facilitates structured multi-agent debates with arguments, rebuttals, and judgments across multiple rounds, enabling diverse AI personas to engage in formal debate and collaborative problem-solving.
    1
    35
    17
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables multi-model LLM council reviews and parallel sidecar conversations within Claude, allowing Claude to orchestrate structured reviews from various AI models and fold their responses back into the session.
    1,721
    2
    MIT

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/FeanorsCodeSL/imladris'

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