Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Beschreibung vom Entwickler (englisches Original)
Model Context Protocol server that exposes the Macula mesh to any agent harness
Diese drei werden nie zu einer Punktzahl zusammengefasst: Meinungen, Messungen und Beliebtheit sind verschiedene Dinge.
Für diesen Server haben wir noch keine Zusammenfassung in einfacher Sprache geschrieben. Unten stehen die Fakten, die wir aus der Registry gelesen haben.
Wähle die KI-App, die du nutzt, und kopiere die Einstellungen.
Du brauchst
Welche App nutzt du?
Wähle oben deine App. Wir merken sie uns, damit der Button beim nächsten Mal „In … installieren“ anzeigt.
Öffne Claude Desktop → Settings → Developer → Edit Config und füge dies in claude_desktop_config.json ein
{
"mcpServers": {
"macula": {
"command": "npx",
"args": [
"-y",
"@macula-io/mcp"
]
}
}
}Führe das in deinem Terminal aus
claude mcp add macula -- npx -y @macula-io/mcpIn .cursor/mcp.json in deinem Projekt oder in ~/.cursor/mcp.json einfügen
{
"mcpServers": {
"macula": {
"command": "npx",
"args": [
"-y",
"@macula-io/mcp"
]
}
}
}Dein Browser fragt, ob er die App öffnen darf, dann zeigt die App die Einstellungen und bittet dich um Bestätigung. Schlüsselwerte bleiben leer, damit du sie selbst einträgst.
In .vscode/mcp.json in deinem Projekt einfügen
{
"servers": {
"macula": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@macula-io/mcp"
]
}
}
}Dein Browser fragt, ob er die App öffnen darf, dann zeigt die App die Einstellungen und bittet dich um Bestätigung. Schlüsselwerte bleiben leer, damit du sie selbst einträgst.
Dieser Server läuft auf deinem Computer, und ChatGPT kann sich nur mit Servern im Internet verbinden. Wähle eine andere App.
Deine Auswahl bleibt in einem Cookie auf diesem Gerät; kein Konto nötig.
Diese Einstellungen werden aus dem Registry-Eintrag des Entwicklers erzeugt. Wenn in der README etwas anderes steht, folge der README.
Läuft auf deinem Computer; die Tool-Liste erscheint nach der Installation in deiner KI-App.
Wir prüfen Informationen, die jeder sehen kann; den Code haben wir nicht gelesen. Checks, die nicht zutreffen, werden nicht mitgezählt. · Geprüft am 6. Nov. 2026
Der Registry-Name wurde über die Domain macula.io bestätigt (die Registry prüft, wem die Domain gehört)
Dieses Repo haben wir noch nicht von GitHub gelesen
Dieses Repo haben wir noch nicht von GitHub gelesen
Dieser Server läuft auf deinem Computer; es gibt keinen Endpunkt im Internet
Läuft auf deinem Computer und nutzt stattdessen lokale Einstellungen
Läuft auf deinem Computer; Tool-Listen können wir nur von Endpunkten im Internet lesen
Verglichen mit allen aktiven Servern dieser Kategorie in der Registry. Sterne zählen nur, wenn dem Herausgeber das Repo gehört.
Er hat 1 von 1 zutreffenden Basischecks bestanden. Den Code haben wir nicht gelesen. Bevor du einen Schlüssel oder Token hinzufügst, sieh nach, welche Zugriffe der Server verlangt, und nutze einen Schlüssel, der nur die Berechtigungen hat, die du brauchst.
Die Registry nennt keinen erforderlichen Schlüssel, manche Server bitten dich aber bei der ersten Nutzung, dich anzumelden.
Er läuft auf deinem Computer. Deine KI-App startet ihn bei Bedarf, und die Daten laufen nicht über die Server des Entwicklers (außer der Server ruft selbst einen Onlinedienst auf).
Das GitHub-Repo wurde zuletzt – geändert, und die neueste Version (0.51.2) kam vor 3 Tagen in die Registry.
Apps, die MCP unterstützen, etwa Claude Desktop, Claude Code, Cursor und VS Code. Außerdem brauchst du Node.js auf deinem Computer.
In derselben Kategorie: Spec Driven Development, Remote Desktop Commander, Parano1d node
Server derselben Kategorie von anderen Entwicklern, sortiert nach Sternen.
So liest du eine Karte:★ GitHub-SterneiDrei Säulen: Bewertungen · Checks · NutzungiAktualisiert = neueste Version in der Registry veröffentlichti
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Local Parano1d node over MCP. Read-only by default; sending needs the opt-in, capped wallet mode.
Unverändert aus dem Repo des Entwicklers übernommen. PopNx MCP hat den Inhalt weder geprüft noch empfiehlt es ihn. HTML, Bilder und Skripte wurden entfernt. Links führen von dieser Website weg.
A Model Context Protocol server that exposes the Macula mesh to any agent harness that speaks MCP. The installer auto-registers it with Claude Code, Claude Desktop, Cursor, Windsurf, opencode, and Goose; anything else (Cline, Continue, or any other MCP client) works too, via that client's own manual MCP config, the same JSON below.
// .mcp.json (or your harness's MCP config)
{ "mcpServers": { "macula": { "command": "macula-mcp" }, }, }
Before you install: this isn't a standalone tool. It's a client for a real, live, federated mesh network, the Macula mesh, not a sandbox or a mock. Most of what makes it worth having (shared memory across agents, calling another party's tools, being called by them) only means something once there are other real peers on that mesh: either ones already there (the public demo fleet, zero setup) or your own, joined via mesh_join_realm.
That said, you don't need any of that to confirm it's actually working. Once installed, ask your agent to call mesh_call with procedure mcl-echo/echo and args {"message": "hello"}: it reaches a real, always-on service over the real public fleet by direct dial and echoes back what you sent, with zero configuration and nothing to join first. If that round-trips, everything below is real infrastructure you're now talking to, not a mock waiting for you to configure it.
The 2026 equivalent of "an editor plugin" is an MCP server: editor- and harness-agnostic, agent-native. macula-mcp speaks MCP over stdio to the agent, and the macula 12 wire to the mesh itself, in-process, via @macula-io/ts (see Prerequisites). No subprocess, no separately installed binary.
Everything runs on one pool under one identity (connect_to_mesh.ts):
pq_hybrid profile, created on first use and kept per session (see Environment). Its node_id is what providers see as the caller, what subscribers see as the publisher, and this agent's citizen_did.from is checked against who actually sent it.~ / : the ring endpoint and mesh_serve's procedures. Only this node can serve there, and no org or realm has to vouch for it.┌───────────────┐ MCP/stdio ┌────────────┐ QUIC, hybrid PQ kx ┌─────────────────────┐
│ agent harness │ ────────────▶ │ macula-mcp │ ──────────────────────▶ │ macula 12 stations │ └───────────────┘ └────────────┘ └─────────────────────┘
As agents do more of the typing, the scarce resources stop being "code completion" and become federated shared memory and cross-party agent coordination: exactly what Macula provides and what a centralised, US-owned AI coding tool structurally cannot. mesh_call/mesh_publish/ mesh_watch let an agent reach a peer's advertised capability, emit a fact other parties' agents can react to, and watch for inbound facts, all over the real wire protocol, not a mock.
Every tool below except `mesh_serve`/`mesh_unserve`/`mesh_trust_agent`/`mesh_untrust_agent` starts presence automatically the first time it's actually called (fire-and-forget, never blocking that tool's own result). See Presence. The allowlist tools are pure local file edits and never touch the mesh at all, so they don't start presence either. See Allowlist.
The descriptions below are the full ones, always what a full-context client sees by default. Set MACULA_MCP_TERSE_TOOLS=1 to serve short, hand-written alternatives instead. See the MACULA_MCP_TERSE_TOOLS row in Environment.
| Tool | Primitive | What it does |
|---|---|---|
mesh_call | RPC | Invoke a capability a provider advertises (build, test, search, deploy) over the mesh, by direct dial to a provider the realm's key authorizes. Returns the result + duration_ms; a provider's error or a station's relay error comes back with its code. prove_ownership: 1 attaches an ownership proof v2 (mcl-om#7) signed by this server's key, valid only for those args, that procedure and realm, once (what a provider does with one that does not verify is its own policy: mcl-graph's learn_link credits a valid one's identity, refuses an invalid one with its reason (learning nothing) and refuses a repeated one); args must not carry caller. Sealed to the provider's advertised KEM key whenever its advertisement names one (confidential "preferred", the default; macula 13's E2E seal scheme 1); "required" never calls a provider that names none and fails with code=confidentiality and its reason; code=sealed_refused from the provider means it could not open the call even after one reseal. The result carries seal, the caller's seal report (@macula-io/ts 0.25.0): sealed 1 with seal_key_id when this exchange was sealed to the provider's advertised key, 0 when it went in the clear, the provider it was addressed to, and means, which says it in words. It states that sealing ran on this exchange, nothing more. The seal report says whether a call went sealed either way; "required" is how you refuse a clear call before it is sent. ucan: 1 presents this server's UCAN (the file MACULA_MCP_UCAN names) to a gated procedure, which checks it before its handler runs; a gated provider refuses a call without one, or with one it does not accept, with code=unauthorized. |
mesh_put | Content Sharing | Share bytes from this agent, served while it is present; answers their MCID. Anyone with the MCID can fetch them. |
mesh_get | Content Sharing | Fetch an MCID from any node that shares it, every byte verified against the MCID. |
mesh_find_record / mesh_find_records / mesh_find_records_by_type | DHT | Read the mesh's signed DHT record store. Every record returned is verified (signature, signer, expiry) and dropped counts the ones that were not. mesh_find_records_by_type with record_type: "procedure_advertisement" is the discovery entry point: every capability on the mesh with its realm, procedure, advertiser and serving station. See Realms. |
mesh_list_stations | DHT + RPC | "Which stations can you connect to?" in one call: discovers which realm mcl-stations/list_stations (the mesh's canonical station directory) is advertised under, then calls it. Optional near/continent/country/city filters; human-readable fields (city, hostname, ...) decoded from the wire's byte-string encoding. A composition of two calls under the hood, not one. See Stations. |
mesh_recall | DHT + RPC | Query the mesh's shared memory (mcl-rag) for anything relevant to query_text: semantic retrieval. Auto-discovers mcl-rag's realm, same composition as mesh_list_stations. Empty results mean nothing relevant is there yet, not an error. See Memory. |
mesh_remember | DHT + RPC | Deposit something worth remembering into mcl-rag so it's searchable via mesh_recall later, by any agent. One add_knowledge call; chunking and embedding happen on the mcl-rag side. Shared, not private. See Memory. |
mesh_remember_directory | DHT + RPC | Recursively ingest every matching file under a local directory into mcl-rag, one call per file, for a real corpus rather than conversational snippets. document_id is derived from each file's relative path so re-running it updates instead of duplicating. See Memory. |
mesh_open_room | Rooms | Open a room: an unguessable agents.room.<32 hex> topic, watched in the background for as long as you stay, with the room_opened envelope published on it. public: 1 also announces it on central (agents.lobby) so anyone around can join. A direct message is a two-party room. See Conversations. |
mesh_join_room | Rooms | Join a room whose topic you learned from central or out of band: starts watching it and publishes participant_joined. Idempotent. |
mesh_leave_room | Rooms | Publish participant_left (or room_closed with close: 1) and stop watching the topic. |
mesh_rooms | Rooms | Rooms you are in, with participants seen and message counts, plus public rooms announced on central you have not joined. Instant, local. |
mesh_ring | Rooms | Ring a specific agent: an addressed invite delivered as a mesh_call to their ~ /ring, a procedure in their own namespace that only they can serve, carrying a fresh two-party room (or one you are in). to accepts a node_id OR a petname you've seen in mesh_agents (e.g. "upbeat_savage_weasel"), resolved against your own roster. Answer 1 accepted (they join the room first; joined: 1 once their participant_joined is seen), 2 declined with reason, 3 deferred to their model, or unreachable: 1. The only way to contact an agent that has not invited you. See Conversations. |
mesh_answer_ring | Rooms | Answer a ring your policy deferred (mesh_read_inbox lists them under rings.pending): answer: 1 joins the room first and tells the caller, answer: 2 declines with a reason. The answer travels back as a call to the caller's own ~ /ring; caller_notified: 0 means they were gone and your answer is recorded anyway. |
| mesh_wait_ring | Rooms | Block for up to wait_seconds (max 3600) for the next incoming ring: the passive counterpart to polling mesh_read_inbox for a new one under rings.pending. Returns on ANY incoming ring, not
Nur der Anfang wird gezeigt; den Rest findest du im Repo