Ennodia
OfficialClick on "Deploy 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., "@Ennodiareview my pull request #42 with Codex and Claude, then compare the results"
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.
Ennodia isn't another agent. It connects the agents you use.
Stay in Codex, Claude Code, or any agent you like. When a task needs another model, your agent hands that part over through Ennodia and brings the answer back. Ennodia runs on your computer, and each agent uses your own account.
Have Gemini listen to meeting.mp3 through Ennodia and tell me what was decided.Why use it
Keep the app you like. Ennodia has no window of its own. You work in your agent as before, and it can now reach the others.
Your agents work together. Any agent can hand part of a task to any other and get the answer back in your chat.
Nothing to pay, nothing to join. Ennodia is free and open source, with no account. It uses the agents and plans you have.
It grows with your agents. It is a set of tools, not a framework or a method. Each new model one agent gains becomes an ability for all of them.
It stays on your computer. Every handoff leaves a receipt there: who did the work, how long it took, and what came back.
Less to keep up with. You don't need to follow every new model. Name the task, and your agent hands it to one that can do it.
Next on the roadmap: Ennodia reads its receipts, so your agent stops repeating what failed.
Related MCP server: agentloop
What each agent adds
No model leads every task, so each agent you connect brings an ability the others lack.
Listen. Gemini hears audio files. Codex hands it the file path and gets back what Gemini heard.
Draw. Codex draws with GPT Image. Claude Code can hand it a brief and get the images back.
Review. Two other agents review the same patch in fresh sessions. Compare maps where they agree and differ.
Read. Kimi K3 in OpenCode reads long documents. Your agent hands it a spec and gets back the rules, each with its line number.
When your own agent has the ability, it does the task itself, with no handoff. See each route and the public scores behind each strength.
Install
Send this address to your agent:
try-ennodia.cherninlab.comFor manual setup, add this Model Context Protocol (MCP) server to your client:
{
"mcpServers": {
"ennodia": {
"command": "npx",
"args": ["-y", "ennodia"]
}
}
}Ennodia loads six core tools by default: about 10,000 characters of tool definitions in each session.
Add "--tools", "all" to args for the full tool set.
Requirements: Bun 1.3.14 or newer, a compatible MCP client, and a supported agent with working provider access.
npx downloads Ennodia. Bun runs it. You can also use bunx ennodia.
Get your first result · Installation for agents
How a handoff works
Your agent calls
ennodia_runwith the task, the agent or model to use, and a time limit.Ennodia starts that agent's own command-line tool in a fresh session, with its own tools and your account for it.
The answer comes back to your conversation, with its status and a receipt saved on your computer.
Your conversation history stays in your agent.
For two or more answers, Compare maps agreements, contradictions, and gaps.
When one answer is complete as it stands, Compare can choose it, and ennodia_run returns it unchanged.
Supported agents
Codex CLI, Claude Code, OpenCode, Kilo Code, Kiro CLI, Cline, Hermes Agent, and Antigravity. Model availability and tool permissions depend on the installed agent and its provider configuration. Discovery finds executable commands. It does not verify authentication or model access. Codex workers use a read-only sandbox by default.
Ennodia discovers native Agent Skills and can request them for specific tasks. A separate task keeps the trial outside the main conversation. Native agents can also select unrequested skills from their own environment.
Recipes · Using skills · Understand results
Evidence
Can Gemini hear this file?: a Codex conversation hands an audio file to Gemini through Antigravity.
Measurement plan: how Ennodia compares single agents with teams on public benchmarks.
Audio routing pilot: Codex got 10 of 10 speech questions right through Gemini, and 4 of 10 alone. Across all 30 clips the gain was not significant, and each answer took about twice as long.
Data and limits
Ennodia runs locally without an Ennodia-hosted service.
Selected agents can send material to their configured model providers.
Terminal run history is stored locally and can be disabled with ENNODIA_HISTORY=0.
Each handoff costs time and uses your agents' own quotas and charges. General time or token savings have not been established. Ennodia can limit child tasks and estimated input tokens. Those estimates exclude internal harness work and are not provider bills.
Data governance · Budgets · Roadmap
Technical reference and contribution
The main entry point is ennodia_run.
The full tool set adds raw tasks, separate Compare calls, budget estimates, and the Plan Advisor, which proposes explicit tasks before execution.
MCP tools · Experimental Ennodia IO · Contributing · MIT license
bun install
bun run verifyExperimental Pragmatic mode
Pragmatic mode runs independent model attempts, tailored plans, and skill trials, then compares the evidence. It keeps bulky evidence outside the main conversation and returns findings for your agent to verify. Savings are not yet validated.
Available Tools
6 toolsennodia_cancel_runCancel Ennodia runAIdempotent
Cancel a high-level run and any active child task, Judge, or Result Advisor.
| Name | Required | Description | Default |
|---|---|---|---|
| runId | Yes | Run ID returned by ennodia_run. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, and idempotentHint=true, so the safety profile is covered. The description adds genuinely non-obvious behavioral context: cancellation cascades to child tasks, Judges, and Result Advisors, which an agent could not infer from the annotations or the single-parameter schema. It stops short of stating post-cancel run state or what happens if the run already finished.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, front-loaded with the verb and resource and immediately following with the scope of the effect. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-param mutation tool with no output schema and annotations covering safety and idempotency, the description supplies the key missing piece (cascade scope). It does not describe the post-cancellation response or error behavior for an already-completed run, but nothing essential to invoking it is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter and schema description coverage is 100%, so the schema already documents runId as 'Run ID returned by ennodia_run.' The description adds nothing about the parameter, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (cancel) and resource (run) plus the cascade scope: active child task, Judge, or Result Advisor. That scope detail makes it clearly distinct from ennodia_run and ennodia_get_run, though no sibling is named explicitly, which is what would push this to a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no when-to-use guidance, no prerequisites (e.g. run must be in progress), and no mention of alternatives such as ennodia_get_run for inspecting a run instead. Usage is only inferable from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ennodia_get_runGet Ennodia runARead-only
Inspect a run or wait up to waitMs for completion. Prefer waitMs: 30000, compact: true and includeEvents: false while awaiting results. A nonterminal response means work continues; do not claim its findings were consumed.
| Name | Required | Description | Default |
|---|---|---|---|
| runId | Yes | Run ID returned by ennodia_run. | |
| waitMs | No | Wait for a terminal state without cancelling or extending the run. Use 30000 for ordinary polling. Longer waits require a client tool timeout greater than waitMs. | |
| compact | No | Omit repeated routing, budget, prompt preview and skill metadata. Preserve status, timing, task IDs, answers and errors. Answer and event limits still apply. Use false for full diagnostics. | |
| maxEvents | No | Maximum run events to include. Use 0 to omit events. | |
| includeEvents | No | Include bounded run event history. | |
| maxAnswerChars | No | Maximum final-answer characters to include. Use 0 to omit answer text. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the read-only safety profile, and the description adds genuinely new semantics: a nonterminal response means work continues, and the agent must not treat its findings as consumed. That is real behavioral context beyond readOnlyHint. It does not cover rate limits, auth, or return shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, zero filler, and the primary action plus recommended configuration are front-loaded ahead of the caveat about nonterminal responses. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a six-parameter polling tool with no output schema, the description covers the action, the recommended invocation profile, and the key interpretation pitfall. The main residual gap is that the response structure itself is undocumented anywhere, though the compact parameter description partially compensates.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so each of the six parameters is already documented with defaults, ranges, and practical guidance. The description restates a recommended combination (waitMs, compact, includeEvents) but adds no syntax or format detail beyond what the schema provides, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb pair (inspect / wait for completion) against a named resource (a run), and the required runId parameter ties it to outputs of ennodia_run. It does not explicitly differentiate itself from ennodia_cancel_run or ennodia_history, so an agent must infer the boundary from names alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives concrete operational guidance for the polling case ('Prefer waitMs: 30000, compact: true and includeEvents: false while awaiting results') and states the condition under which the call is not finished. It stops short of naming alternatives or stating when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ennodia_historyList durable Ennodia run historyARead-only
Read terminal run receipts persisted under the local Ennodia history directory. Use after a restart to inspect previous final answers and Judge disagreement analysis.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum persisted run snapshots to return, newest first. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds genuine context beyond that: only *terminal* runs are persisted, the receipts live under a local history directory, and they survive a restart. It omits ordering, retention bounds, and pagination behavior, which the schema only partly supplies.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero filler, with the scoping statement front-loaded and the usage condition following. Nothing needs trimming or reordering.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description carries the burden of saying what comes back, and it does indicate final answers plus Judge disagreement analysis. Minor gaps remain around ordering and retention, but for a one-optional-parameter read tool it is sufficient to call correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single `limit` parameter is already well documented (newest first, max 500, exclusiveMinimum 0). The description adds nothing about the parameter, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Read terminal run receipts persisted under the local Ennodia history directory"), which is concrete and distinct from a live-run tool. It does not name any sibling such as ennodia_get_run to draw the boundary explicitly, so it falls short of full differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Use after a restart to inspect previous final answers and Judge disagreement analysis" gives a clear triggering condition and intent. It offers no exclusions or named alternative (e.g., when to prefer ennodia_get_run for an in-flight run), which keeps it out of the top band.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ennodia_list_harnessesList Ennodia harnessesARead-only
Discover local harnesses, availability, versions, capabilities, adapter notes, and inputGuidance. Before audio/image/video work, read inputGuidance: model capabilities do not guarantee native input through a harness. Use first when setup or routing fails.
| Name | Required | Description | Default |
|---|---|---|---|
| refresh | No | Re-scan available harnesses instead of returning the short-lived discovery cache. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare it read-only and local, so the safety profile is covered; the description adds the discovery-cache behavior (refresh re-scans), the caveat that model capabilities do not guarantee native input through a harness, and a troubleshooting-first role. It does not describe pagination or the shape of the returned list.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the action and returned facets, then layers the two directives. Dense and telegraphic but every clause carries information; no filler sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, yet the description enumerates what discovery yields (availability, versions, capabilities, adapter notes, inputGuidance), which compensates. For a single-optional-param read tool with annotations covering safety, this is close to complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter and schema coverage is 100%, so the schema fully documents refresh. The description adds no format or semantic detail about it, which is the expected baseline when the schema does the work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb (Discover) and resource (local harnesses) and enumerates the returned facets: availability, versions, capabilities, adapter notes, inputGuidance. It is clearly distinguishable from ennodia_list_skills, though it never explicitly contrasts itself with that sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete usage context: read inputGuidance before audio/image/video work, and use this first when setup or routing fails. It states when to reach for the tool but names no alternative sibling to prefer instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ennodia_list_skillsList Ennodia skillsARead-only
Discover prompt-only skills from project, user, and built-in skill directories without returning full instruction text.
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | No | Optional working directory to locate project-specific skills. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds a genuinely useful behavioral disclosure — that the listing deliberately omits full instruction text — which tells the agent it must follow up elsewhere to actually read a skill. It stops short of describing ordering or result shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler: it leads with the action and resource, then immediately qualifies the scope and the output limitation. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-required-parameter, read-only listing tool with no output schema, the description plus annotations cover what an agent needs: what is listed, from where, and the key fact that instruction bodies are not included. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the single 'cwd' parameter is already documented as the way to locate project-specific skills. The description says project skills come from directories but adds no semantics beyond the schema, which is the expected baseline when the schema does the work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb ('Discover') plus resource ('skills') and names the three source scopes (project, user, built-in directories), so the agent knows exactly what is returned. It does not explicitly contrast itself with the closest sibling ennodia_list_harnesses, but the resource name and the 'prompt-only' qualifier make the distinction reasonably clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied: this is the discovery call you make before invoking skills. However, there is no explicit when-to-use statement, no mention of prerequisites such as needing a project context, and no routing advice versus ennodia_list_harnesses or ennodia_run.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ennodia_runRun EnnodiaA
Start a high-level Ennodia orchestration. Set pragmatic for evidence-focused investigation or patch proposals with one or more independent workers. Use Plan Advisor for tailored model and skill assignments. Use this as the default entrypoint: it plans routing, starts one or more local harness tasks, optionally compares successful outputs, and returns a run ID. Runs usually take minutes; use ennodia_get_run with waitMs: 30000 and includeEvents: false until terminal, then consume and verify its answer. A wait timeout does not cancel or finish the run.
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | No | Working directory for child harness commands. | |
| mode | No | auto follows the planner; single runs one selected harness; parallel runs all candidate harnesses. | auto |
| model | No | Optional model override passed to the selected task harnesses. | |
| budget | No | Optional preflight budget limits for an Ennodia operation. | |
| prompt | Yes | The user task to route to local AI harnesses. For native media, first read ennodia_list_harnesses inputGuidance, specify local paths and a harness/model, then verify one small sample with mode single and compare false. Ennodia sends text, not media attachments. | |
| compare | No | Whether to run the Judge + Result Advisor after tasks finish. auto compares when the planner sees value and at least two tasks produce output. | auto |
| refresh | No | Re-scan harnesses before planning the run. | |
| category | No | Optional caller-provided route category. Pass this when you know the task category; Ennodia then skips keyword classification. | |
| skillIds | No | Installed native skill IDs to request from child harnesses. Returned metadata does not prove that an agent loaded the skill. | |
| harnessId | No | Force one harness by ID, such as codex or claude-code. Omit to let Ennodia plan. | |
| pragmatic | No | Experimental evidence contract for one or more independent workers. Preserves routing and comparison choices. Use Plan Advisor for tailored model and skill assignments. This is workflow guidance, not a permission sandbox or a savings guarantee. | |
| timeoutMs | No | Per-task timeout in milliseconds. Defaults to the task manager timeout and is capped at one hour. | |
| isolateCwd | No | Run each selected harness against an ephemeral isolated copy of cwd instead of cwd itself. Use this in parallel mode or whenever comparing skills/harnesses against the same cwd, so concurrent file writes cannot clobber each other. Isolation fails before task spawn if the copied tree contains a symbolic link. The reported task cwd is an execution trace; its temporary directory is deleted when the task becomes terminal. | |
| judgeModel | No | Optional model override for the comparison Judge. | |
| advisorModel | No | Optional model override for the Result Advisor. | |
| nativeSandbox | No | Codex worker native sandbox. Defaults to read-only on every turn, including continuation. Request workspace-write only for authorized edits. Other harnesses reject this setting; Judge/Advisor settings are unchanged. | |
| continueTaskId | No | Continue the latest settled persistent task owned by this server. Use its Ennodia task ID. The working directory and harness stay the same. Each follow-up gets a new task and execution allowance. | |
| judgeHarnessId | No | Harness to use as the comparison Judge. Omit to use the default priority: claude-code, codex, antigravity, opencode, kilo, kiro, cline, then hermes-agent. | |
| maxOutputChars | No | Maximum characters from each successful task output to pass into the Judge + Result Advisor workflow. Use 0 to suppress candidate text. | |
| persistSession | No | Opt in to native Codex session persistence. Requires one explicit harness and a persistent cwd. Default tasks remain ephemeral. | |
| nativeSubagents | No | Disable Codex built-in subagent tools for workers. Other harnesses reject this setting. Does not block external commands or affect Judge/Advisor tasks. | |
| reasoningEffort | No | Optional reasoning effort for a Codex worker. Other harnesses reject explicit effort settings; omit to preserve native defaults. | |
| advisorHarnessId | No | Harness that runs the Result Advisor after the Judge. Defaults to the judge harness selection. | |
| synthesizerModel | No | Deprecated alias for advisorModel. Do not send both fields with different values. | |
| synthesizerHarnessId | No | Deprecated alias for advisorHarnessId. Do not send both fields with different values. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=false and openWorldHint=true; the description adds the operational profile that matters here: runs "usually take minutes," they are asynchronous, and "a wait timeout does not cancel or finish the run." That is genuinely useful beyond the annotations, though it says nothing about cost, concurrency limits, or failure modes of the harness tasks.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four dense, front-loaded sentences that lead with what the tool does and end with the polling contract. Slightly redundant: "Use Plan Advisor for tailored model and skill assignments" repeats guidance already present in the pragmatic schema description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 25-parameter orchestration tool with no output schema, the description covers the full lifecycle (plan -> run -> poll -> verdict), the return value (run ID), and the async/polling contract. It leaves unstated what the run-ID payload or final answer looks like, and gives no scope on run cost, which keeps it short of complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3 and the schema already covers all 25 parameters. The description still adds selection guidance the schema does not: when to set pragmatic (investigate vs patch) and how to poll via waitMs/includeEvents. It does not attempt to explain the many tuning parameters (judgeModel, nativeSandbox, isolateCwd), leaving those to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (start) and resource (Ennodia orchestration) and spells out the mechanics: plans routing, starts local harness tasks, optionally compares outputs, returns a run ID. It also distinguishes itself from the sibling ennodia_get_run by naming it as the follow-up poll step.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly positions itself as "the default entrypoint," names the alternative (ennodia_get_run) with concrete parameters (waitMs: 30000, includeEvents: false) and the condition (until terminal). It also routes agents to pragmatic mode for evidence/patch work and to Plan Advisor for model/skill assignments.
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.
6 tool updates
v0.4.1- First observed
ennodia_cancel_run - First observed
ennodia_get_run - First observed
ennodia_history - First observed
ennodia_list_harnesses - First observed
ennodia_list_skills - First observed
ennodia_run
TDQS
Scored across 6 tools
Each tool has a distinct lifecycle role: list_harnesses/list_skills are discovery, run starts work, get_run reads status, history reads past receipts, cancel_run stops work. The only mild overlap is get_run vs history (live vs persisted) and run vs list_harnesses routing guidance, but descriptions clarify these boundaries.
All tools use the ennodia_ prefix with snake_case verb_noun naming, which is highly consistent. Minor deviation: ennodia_run is a bare verb with no noun, while others include an object (enumodia_list_harnesses, ennodia_get_run).
Six tools is well-scoped for an orchestration server, covering discovery, execution, polling, history, and cancellation without redundancy. Each tool earns its place in the run lifecycle.
The lifecycle is well covered: discover harnesses/skills, start run, poll, cancel, and read history. Minor gap: no explicit tool for listing or retrieving an in-progress run's result beyond polling, but get_run with waitMs handles terminal results adequately.
Maintenance
Related MCP Connectors
MCP server for your apps' tools and custom tools, plus hosted AI agents and approval-gated workflows
MCP server for building and testing AI agents with multi-model experimentation and insights.
MCP server for mandates, delegation, policy-gated execution, credential grants, and audit.
MCP Server for an Agent Task Marketplace
Related MCP Servers
- AlicenseAqualityDmaintenanceMCP server orchestrating local CLI agents (Claude Code, OpenAI Codex, Google Gemini) for cross-validation, second opinions, and persona-driven prompting.18MIT
- AlicenseNot gradedqualityCmaintenanceMCP server that enables AI agents to run a deterministic orchestration loop with decomposition, subagent execution, and review feedback across multiple LLM backends.60MIT
- FlicenseNot gradedqualityCmaintenanceMulti-model agent orchestration MCP server that enables plan-code-review-deliver pipelines with configurable providers and models.-
- AlicenseNot gradedqualityBmaintenanceMCP server for agentic task orchestration and management, enabling AI agents to create goals, plan tasks with acceptance criteria, track dependencies, request human input, and provide proof of completion.20 npm3MIT