Atlas / MCP servers / cherninlab / ennodia

ennodiaSAFE

mcp/cherninlab/ennodia

Connects the AI agents you use: your agent hands a task to another and gets the answer back

Verdict
SAFE
Grade
B
Trust score
88 /100
Exposed tools
26 17r · 9w · 0d
Transport
stdio
License
MIT
Stars
6
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

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.

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 agen
Read from source at commit bed2a9e22073OBSERVED · 2026-10-11
02

Connect

Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.

claude-code (npm)
claude mcp add ennodia -- npx -y [email protected]
03

Exposed tools (26)

17 read · 9 write · 0 destructive.

ToolRiskDescription
ennodia_cancel_compareread
ennodia_cancel_plan_adviceread
ennodia_cancel_runwrite
ennodia_cancel_taskread
ennodia_estimate_budgetread
ennodia_estimate_compositional_budgetread
ennodia_get_compareread
ennodia_get_compositional_statusread
ennodia_get_plan_adviceread
ennodia_get_runwrite
ennodia_get_taskread
ennodia_historyread
ennodia_install_skillswrite
ennodia_list_comparesread
ennodia_list_harnessesread
ennodia_list_plan_adviceread
ennodia_list_runsread
ennodia_list_skillsread
ennodia_list_tasksread
ennodia_planread
ennodia_runwrite
ennodia_startwrite
ennodia_start_advised_planwrite
ennodia_start_comparewrite
ennodia_start_compositionalwrite
ennodia_start_plan_advicewrite
04

Trust audit

SAFEgrade B · trust 88/100 Nothing in the source contradicts what it says it does. Grade A is reserved for packages that have also passed the behavioural sandbox.

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codePASS
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfacePASS
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (7 observation(s))
Network
declared (1 observation(s))
Shell
none-observed
Dependencies
not all pinned
Secrets in source
none-found

Findings (19)

LOWInventory / provenance · inv.binary · CWE-1104
website/public/studies/compare-strip.webm
compare-strip.webm
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
LOWInventory / provenance · inv.binary · CWE-1104
website/public/studies/draw-strip.webm
draw-strip.webm
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
LOWInventory / provenance · inv.binary · CWE-1104
website/public/studies/orchestrate-strip.webm
orchestrate-strip.webm
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
LOWInventory / provenance · inv.binary · CWE-1104
website/public/studies/perception-strip.webm
perception-strip.webm
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
LOWInventory / provenance · inv.binary · CWE-1104
website/public/studies/read-strip.webm
read-strip.webm
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
bench/audio-routing/run.ts:22
import { createDefaultEnnodiaCore } from "../../src/index";
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
bench/polyglot/run.ts:18
import { createDefaultEnnodiaCore } from "../../src/index";
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
src/dev/package-smoke.ts:58
{ cwd: join(import.meta.dir, "../../packages/ennodia-io") },
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
src/dev/sync-version.ts:28
const root = new URL("../../", import.meta.url);
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
website/src/data/budget-model.test.ts:2
import { estimateRunBudget } from "../../../src/budget";
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
docs/reference/ennodia-io.md:102
curl http://127.0.0.1:17273/v1/provider-options
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
docs/reference/ennodia-io.md:156
curl http://127.0.0.1:17273/v1/chat/completions \
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
packages/ennodia-io/src/io.test.ts:172
"http://127.0.0.1/v1/provider-options",
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
packages/ennodia-io/src/io.test.ts:175
"http://127.0.0.1/v1/models",
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
packages/ennodia-io/src/io.test.ts:197
"http://127.0.0.1/v1/provider-options?includeUnavailable=false",
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
package.json
@modelcontextprotocol/sdk, zod, @types/bun, oxlint, typescript
Why it matters. 5 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
packages/ennodia-io/package.json
zod, @types/bun, typescript
Why it matters. 3 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
website/package.json
@astrojs/react, @astrojs/starlight, @lucide/astro, astro, react, react-dom, recharts, sharp
Why it matters. 11 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWPrompt injection · prompt.transfer_instruction · CWE-94, CWE-1427
website/public/third-party-notices.txt:21
airplay, alert-circle, alert-octagon, alert-triangle, aperture, arrow-down-circle, arrow-down-left, arrow-down-right, arrow-down, arrow-left-circle, arrow-left, arrow-right-circle, arrow-right, arrow-
Why it matters. an instruction to move sensitive data to an outside destination
Fix. remove; a skill never needs the user's secrets off the machine

Gates applied: no_behavioural_pass.

Audited 2026-10-11 · audit v0.4.1 · source sha bed2a9e22073full audit observations/trust-audit/mcp-server/cherninlab__ennodia.json · Report an issue / request a re-scan
05

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-11bed2a9e22073SAFEB88first audit
06

Questions

What is the ennodia MCP server?

Connects the AI agents you use: your agent hands a task to another and gets the answer back

What tools does ennodia expose?

26 in total: 17 read-only, 9 that write, and 0 that can delete or overwrite. Every one is listed on this page with its risk.

Is ennodia safe to connect to an agent?

The audit found nothing in the source that contradicts what it says it does, and graded it B (88/100). Grade A is held back for packages that have also passed a sandboxed behavioural run, which is why a clean server reads B.

What credentials does ennodia need?

It reads ENNODIA_IO_API_KEY from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.

How does ennodia run?

It speaks stdio, so it runs as a local process your client starts. It is published on npm as @ennodia/website at 0.0.0.

How current is this page?

The grade is for one exact copy of the source (bed2a9e22073), read on 2026-10-11. The repository is watched and re-audited when it changes.

Advertisement