Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
作者による説明(英語の原文)
Model Context Protocol server that exposes the Macula mesh to any agent harness
この3つを1つのスコアにまとめることはしません。意見、測定、人気はそれぞれ別のものだからです。
このサーバーのやさしい解説はまだ書いていません。以下はレジストリから読み取った事実です。
使っているAIアプリを選んで、設定をコピーしてください。
必要なもの
どのアプリを使っていますか?
上でアプリを選んでください。選んだアプリを覚えておくので、次からはボタンに「…にインストール」と表示されます。
Claude Desktop → Settings → Developer → Edit Config を開き、claude_desktop_config.json にこれを貼り付けます
{
"mcpServers": {
"macula": {
"command": "npx",
"args": [
"-y",
"@macula-io/mcp"
]
}
}
}ターミナルでこれを実行します
claude mcp add macula -- npx -y @macula-io/mcpプロジェクトの .cursor/mcp.json、または ~/.cursor/mcp.json に貼り付けます
{
"mcpServers": {
"macula": {
"command": "npx",
"args": [
"-y",
"@macula-io/mcp"
]
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
プロジェクトの .vscode/mcp.json に貼り付けます
{
"servers": {
"macula": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@macula-io/mcp"
]
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
これはパソコンで動くサーバーですが、ChatGPTがつなげるのはインターネット上のサーバーだけです。ほかのアプリを選んでください。
選んだアプリは、この端末のCookieに保存されます。アカウントは不要です。
この設定は、作者のレジストリ登録情報から作成しています。READMEと違う場合は、READMEに従ってください。
パソコンで動くサーバーです。インストールすると、ツール一覧がAIアプリに表示されます。
誰でも見られる情報をチェックしており、コードは読んでいません。当てはまらない項目は数に入れていません。 · 2026年11月6日にチェック
レジストリ名はドメイン macula.io で確認済みです(レジストリがドメインの所有を確認しています)
このリポジトリはまだGitHubから読み取っていません
このリポジトリはまだGitHubから読み取っていません
これはパソコンで動くため、インターネット上のエンドポイントはありません
パソコンで動き、代わりにローカルの設定を使います
パソコンで動くサーバーです。ツール一覧を読み取れるのは、インターネット上のエンドポイントがある場合だけです
レジストリでこのカテゴリにある有効なすべてのサーバーと比較しています。スターは、公開者がリポジトリの所有者である場合だけ数えます。
当てはまる基本チェック1項目のうち1項目に合格しました。コードは読んでいません。キーやトークンを追加する前に、サーバーがどんなアクセスを求めているかを確認し、必要な権限だけを持つキーを使ってください。
レジストリには必須のキーは載っていません。ただし、最初に使うときにサインインを求めるサーバーもあります。
あなたのパソコンで動きます。必要なときにAIアプリが起動し、データは作者のサーバーを通りません(サーバー自体がオンラインサービスを呼び出す場合を除きます)。
GitHubリポジトリの最終更新は–、最新バージョン(0.51.2)がレジストリに届いたのは3 日前です。
Claude Desktop、Claude Code、Cursor、VS CodeなどのMCP対応アプリで使えます。パソコンにNode.jsも必要です。
同じカテゴリには:Spec Driven Development, Remote Desktop Commander, Symantec Cloud DLP AIops
同じカテゴリで、ほかの作者が作ったサーバー。スターの多い順。
カードの見方:★ GitHubスターi3つの柱:レビュー · チェック · 利用状況i更新=最新バージョンをレジストリに公開した日i
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.
Governed Symantec Cloud DLP — 14 MCP tools, read-only with audit.
作者のリポジトリから書かれたとおりにコピーしたものです。PopNx MCPは内容を確認・推奨していません。HTML、画像、スクリプトは取り除いています。リンクはこのサイトの外へ移動します。
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
冒頭だけを表示しています。続きはリポジトリで読めます