Skip to content

MCP Tools

This page describes the tools exposed by the Ennodia MCP server. The normal entrypoint is ennodia_run: it starts a visible orchestration and returns a run ID. Use ennodia_get_run to poll status, events, child task IDs, Compare state, and the final answer.

GoalTool sequence
Check local setupennodia_list_harnesses
Preview route and costennodia_estimate_budget
Preview compositional shard costennodia_estimate_compositional_budget
Start a visible end-to-end runennodia_run -> ennodia_get_run
Start focused review shardsennodia_start_compositional -> ennodia_get_compositional_status
Debug raw child tasksennodia_start -> ennodia_get_task
Compare completed outputsennodia_start_compare -> ennodia_get_compare
Install bundled skillsennodia_list_skills -> ennodia_install_skills
Inspect terminal receipts after restartennodia_history

For harness IDs and setup notes, see Supported Harnesses. For budget request examples, see Budgets and Limits.

ennodia_plan, ennodia_estimate_budget, ennodia_start, and ennodia_run use local harness discovery plus either a caller-provided category or a lightweight keyword fallback. Pass category when the agent caller already knows the task type, and pass refresh: true to re-scan installed commands before planning or starting work.

ennodia_start and ennodia_run also accept skillIds. Ennodia treats skills as native Agent Skills: folders containing SKILL.md, installed in the paths each harness already understands. It does not inline full skill content into the delegated prompt. Task and run views include selected skill metadata in appliedSkills.

ennodia_estimate_budget, ennodia_estimate_compositional_budget, ennodia_start, ennodia_run, and ennodia_start_compare support a budget object for local preflight enforcement. Budgeting is an input-token estimate plus child-task count guard. It does not claim to know provider billing, output tokens, cache behavior, harness-internal context, or private subscription quota.

Ennodia uses category before keyword classification. Valid categories are code, research, browser, image, and general. The fallback classifier uses strong browser, image, code, and research signals; bare words such as review or page are not enough on their own. Pass harnessId to skip adapter choice and target a specific adapter.

harnessId forces a specific adapter. Current adapter IDs are:

IDTool
claude-codeClaude Code
codexCodex CLI
opencodeOpenCode
kiloKilo Code
kiroKiro CLI
clineCline CLI
hermes-agentHermes Agent
antigravityAntigravity

Fields named maxOutputChars, maxAnswerChars, or maxCandidateChars bound returned text. 0 omits that text while still returning status, IDs, timing, and character counts.

Detects supported local AI tools and reports availability, runnable state, command path, version, capabilities, and adapter notes.

InputDefaultMeaning
refreshfalseIgnore the short discovery cache and re-scan.

Use this first when a client setup, command path, or adapter is not behaving as expected.

Discovers native Agent Skills from supported harness locations, plus bundled Ennodia skills that can be installed into those locations:

  • Codex and agent-compatible: .agents/skills, ~/.agents/skills
  • Claude Code: .claude/skills, ~/.claude/skills
  • OpenCode native: .opencode/skills, ~/.config/opencode/skills
  • OpenCode compatible: .agents/skills, ~/.agents/skills, .claude/skills, ~/.claude/skills
  • Antigravity: .agent/skills, ~/.gemini/antigravity/skills
  • Ennodia bundled installable skills under skills

The list response returns summaries, searched directories, installation metadata, and load warnings. It does not return full instruction text.

InputDefaultMeaning
cwdserver process cwdOptional working directory to locate project-specific skills.

Installs bundled Ennodia skills into native harness skill directories. It defaults to dryRun: true, so callers can inspect planned writes first.

InputDefaultMeaning
skillIdsall bundledBundled skill IDs to install.
harnessIdsCodex, Claude Code, OpenCode, AntigravityNative harness locations to target.
scopeprojectproject or user.
cwdrequired for project scopeProject directory used for project installs.
overwritefalseReplace existing target skill folders.
dryRuntruePreview without copying files.

Classifies a prompt and previews the route Ennodia would take without starting a child process.

InputDefaultMeaning
promptrequiredTask text to classify.
categoryfallback classifierOptional caller-provided category: code, research, browser, image, or general.
refreshfalseRe-scan harness discovery before planning.
includeMermaidtrueInclude a presentational Mermaid route diagram. Set false for compact machine reads.

Returns the category, routing reasons, ordered candidate harness IDs, selected harness, whether parallel execution is suggested, whether Compare is suggested, and, by default, a Mermaid route diagram. Run and polling views do not embed that diagram.

Plans a run without starting child tasks, then estimates preflight input tokens and checks optional limits.

InputDefaultMeaning
promptrequiredTask text to classify, route, and estimate.
categoryfallback classifierOptional caller-provided category.
harnessIdplanner choiceForce one adapter by ID.
modeautoauto, single, or parallel.
compareautoInclude Compare in the estimate.
refreshfalseRe-scan harness discovery before planning.
maxOutputCharseffective 24000Characters per successful task assumed for Compare; values above the judge prompt cap are estimated at 24000.
budget.maxEstimatedInputTokensnoneMark the estimate exceeded above this input-token count.
budget.maxChildTasksnoneMark the estimate exceeded above this child-task count.

The response includes the route plan, selected harness IDs, estimate assumptions, subscription-limit check status, and exceeded issues.

Resolves focused compositional slices to harnesses, then estimates preflight input tokens and child task count without starting child processes.

InputDefaultMeaning
promptrequiredOverall question or synthesis goal that every slice belongs to.
slices[].idgeneratedOptional stable slice ID. Supplied IDs must be unique.
slices[].titlenoneOptional short label for the slice.
slices[].promptrequiredFocused task prompt for the slice.
slices[].categoryfallback classifierOptional caller-provided route category for this slice.
slices[].harnessIdslice planner choiceOptional adapter ID for this slice.
slices[].modeladapter defaultOptional model override retained in the resolved slice summary.
cwdserver process cwdOptional working directory used to validate requested native skills.
refreshfalseRe-scan harness discovery before resolving slice routes.
skillIds[]Optional installed native skill IDs to validate against every selected slice harness.
includeCompareEstimatetrueInclude a later Compare pass in the returned budget estimate.
maxOutputCharseffective 24000Characters per successful slice output assumed for Compare; values above the judge prompt cap are estimated at 24000.
budget.maxEstimatedInputTokensnoneMark the estimate exceeded above this input-token count.
budget.maxChildTasksnoneMark the estimate exceeded above this child-task count.

The response includes resolved slice summaries, selected harness IDs, budget assumptions, subscription-limit check status, and exceeded issues.

Starts the full orchestration: plan, execute one or more child tasks, optionally Compare successful outputs, and expose the final answer through ennodia_get_run. Runs usually take minutes; callers should poll ennodia_get_run with sensible spacing and trust remainingMs/etaConfidence instead of giving up after a few seconds.

InputDefaultMeaning
promptrequiredTask sent to the selected local AI tools.
categoryfallback classifierOptional caller-provided category.
harnessIdplanner choiceForce one adapter by ID.
modeautoauto, single, or parallel.
cwdserver process cwdWorking directory for child commands.
modeladapter defaultOptional model override passed to task harnesses.
timeoutMs300000Timeout for each child task, capped at 1 hour.
compareautoauto, true, or false.
refreshfalseRe-scan harness discovery before planning.
judgeHarnessIdCompare priorityHarness used for the judge pass.
judgeModeljudge defaultOptional judge model override.
synthesizerHarnessIdjudge harnessHarness used for final synthesis.
synthesizerModeljudge modelOptional synthesizer model override.
maxOutputChars80000Characters per successful task loaded for Compare before the 24000-character judge-prompt cap.
skillIds[]Optional list of installed native skill IDs to ask selected harnesses to use.
budget.maxEstimatedInputTokensnoneFail before starting if estimated input tokens exceed this value.
budget.maxChildTasksnoneFail before starting if selected child tasks exceed this value.

Returns a run view with id, status, selected harnesses, child task IDs, Compare ID when one exists, events, timing, ETA, budget estimate/check, and final answer when already available. The important value is id; poll it with ennodia_get_run.

Returns the current run state.

InputDefaultMeaning
runIdrequiredID returned by ennodia_run.
includeEventstrueInclude run event history.
maxEvents100Maximum run events to return. Capped at 300.
maxAnswerChars80000Maximum final-answer characters. Capped at 200000.

Terminal run states are succeeded, failed, and cancelled. A run should not be considered complete before it reaches one of those states.

Cancels a high-level run and any active child task or Compare.

InputDefaultMeaning
runIdrequiredID returned by ennodia_run.

Cancellation is explicit. A cancelled run should not be presented as a normal model failure.

Lists runs started by the current MCP server process.

InputDefaultMeaning
includeEventsfalseInclude bounded event history.
maxEvents25Maximum events per run. Capped at 300.
maxAnswerChars2000Maximum answer characters per run. Capped at 200000.

Live run history is bounded and in-memory. Restarting the MCP server clears in-progress state; terminal receipts can still be read through ennodia_history when history is enabled.

Lists terminal run snapshots persisted under the local history directory. Use it after a restart to inspect previous final answers and Compare disagreement analysis.

InputDefaultMeaning
limit20Maximum persisted run snapshots to return, newest first. Capped at 500.

History is enabled by default for createDefaultEnnodiaCore, written under ~/.ennodia/history/runs.jsonl, and capped to the most recent 500 terminal runs. Set ENNODIA_HISTORY=0 to opt out.

Starts one or more raw child tasks without run-level Compare or final synthesis. Use it for debugging adapters or for manual Compare workflows.

InputDefaultMeaning
promptrequiredTask sent to the selected local AI tools.
categoryfallback classifierOptional caller-provided category.
harnessIdplanner choiceForce one adapter by ID.
modesinglesingle or parallel.
cwdserver process cwdWorking directory for child commands.
modeladapter defaultOptional model override.
timeoutMs300000Timeout for each child task, capped at 1 hour.
refreshfalseRe-scan harness discovery before planning.
skillIds[]Optional list of installed native skill IDs to ask selected harnesses to use.
budget.maxEstimatedInputTokensnoneFail before starting if estimated input tokens exceed this value.
budget.maxChildTasksnoneFail before starting if selected child tasks exceed this value.

Returns started task IDs, the route plan, and the budget estimate/check.

Starts one focused child task per slice. Use it for large reviews where each agent should inspect a smaller part of the problem. The tool returns task IDs; poll them with ennodia_get_task, then pass the useful completed task IDs to ennodia_start_compare.

InputDefaultMeaning
promptrequiredOverall question or synthesis goal that every slice belongs to.
slices[].idgeneratedOptional stable slice ID. Supplied IDs must be unique.
slices[].titlenoneOptional short label for the slice.
slices[].promptrequiredFocused task prompt for the slice.
slices[].categoryfallback classifierOptional caller-provided route category for this slice.
slices[].harnessIdslice planner choiceOptional adapter ID for this slice.
slices[].modeladapter defaultOptional model override for this slice.
cwdserver process cwdWorking directory for child commands.
timeoutMs300000Timeout for each slice task, capped at 1 hour.
refreshfalseRe-scan harness discovery before resolving slice routes.
skillIds[]Optional installed native skill IDs to ask every selected slice harness to use.
includeCompareEstimatetrueInclude a later Compare pass in the returned budget estimate.
maxOutputCharseffective 24000Characters per successful slice output assumed for Compare; values above the judge prompt cap are estimated at 24000.
budget.maxEstimatedInputTokensnoneFail before starting if estimated input tokens exceed this value.
budget.maxChildTasksnoneFail before starting if slice child tasks exceed this value.

Returns slice task IDs, resolved harness IDs, the budget estimate/check, and a ready-to-use compareNext object for the later ennodia_start_compare call.

Inspects several shard task IDs at once, groups their states, and returns the successful non-empty task IDs that are ready for Compare.

InputDefaultMeaning
taskIdsrequiredShard task IDs returned by ennodia_start_compositional.
promptnoneOptional synthesis prompt included in compareNext when enough outputs are ready.
minSuccessfulTasksForCompare2Minimum successful non-empty outputs required for compareReady.
includeOutputfalseInclude bounded stdout and stderr previews for known tasks.
maxOutputChars2000Maximum stdout and stderr characters per task when output is included.

The response includes readyTaskIds, runningTaskIds, failedTaskIds, cancelledTaskIds, emptySucceededTaskIds, missingTaskIds, grouped counts, compact task summaries, and compareNext when a synthesis prompt was supplied and enough task outputs are ready.

Returns task status, captured output, events, timing, and ETA.

InputDefaultMeaning
taskIdrequiredID returned by ennodia_start, ennodia_run, or Compare.
includeOutputtrueInclude bounded stdout and stderr.
includeEventstrueInclude bounded task events.
maxOutputChars200000Maximum stdout and stderr characters. Capped at 200000.
maxEvents300Maximum task events. Capped at 300.

A task is terminal only after the child process exits and stdout/stderr have drained or timed out visibly.

Cancels a running task by task ID.

Lists recent tasks started by the current MCP server process. By default it returns a compact view; request output or events only when you need them.

Runs a judge pass and then a synthesizer pass over completed Ennodia tasks or caller-supplied responses.

InputDefaultMeaning
promptrequiredOriginal user task or question the candidates answer.
taskIds[]Completed Ennodia task IDs to compare.
responses[]Caller-supplied responses with IDs, labels, and text.
judgeHarnessIdCompare priorityHarness used for the judge pass.
judgeModeljudge defaultOptional judge model override.
synthesizerHarnessIdjudge harnessHarness used for final synthesis.
synthesizerModeljudge modelOptional synthesizer model override.
maxOutputChars80000Characters per task candidate loaded for Compare before the 24000-character judge-prompt cap.
budget.maxEstimatedInputTokensnoneFail before starting if estimated judge/synthesizer input tokens exceed this value.
budget.maxChildTasksnoneFail before starting if the judge plus synthesizer task count exceeds this value.

Compare asks the judge for agreements, contradictions, unique insights, blind spots, and risks. The synthesizer uses that analysis plus the original candidates to produce one answer. This is model-led comparison, not formal voting.

Returns Compare status, candidate inputs, judge analysis, synthesis, child task IDs, timing, and ETA.

Cancels a running Compare and its active child task.

Lists recent Compare runs started by the current MCP server process.