Octonode MCP server — project authoring, plugins, workflows, and collaboration
Canonical Octonode repository documentation.
Octonode MCP server — project authoring, plugins, workflows, and collaboration
@octonode/mcp is a Model Context Protocol
server that lets any MCP client (Claude Code, Cursor, Windsurf, …) author
Octonode plugins. It speaks MCP's stdio transport (newline-delimited JSON-RPC)
with zero dependencies.
Tools
| Tool | Purpose |
|---|---|
create_plugin | Scaffold a runnable plugin (name, lang, dir?, node?). |
add_node | Add/replace a node in a manifest (dir, id, command, inputs?, …). |
update_plugin | Update manifest metadata (name, version, category, tags, …). |
validate_plugin | Validate a plugin folder's manifest. |
list_plugins | List installed plugins. |
publish_plugin | Publish a plugin to the hosted marketplace. |
run_workflow | Run a workflow from the project's .octonode config and return a compact run summary. |
describe_node | Resolve a node from the config and ask it to self-report its manifest. |
The server also exposes focused collaboration tools backed by the Hono API:
| Group | Functions |
|---|---|
| Octonode knowledge | Search the canonical documentation and code-authoring skill through the project-bound project_knowledge_search tool. |
| Profiles and members | Read/update the caller profile, upload/delete/read avatars, search members, list/revoke scoped agents. |
| Chat and notifications | Create/list/update conversations, manage members, page/send/edit/delete/react/read messages, and page/mark notifications. |
| Architecture GitHub and PRs | Connect one Architecture repository, list its PRs and affected Projects, read immutable project workflow diffs/files, and inspect async jobs. |
| Workflow review | Create/reply/edit/resolve workflow, node-range, code, and PR threads; create/apply/reject workflow or source suggestions. |
| Explicit GitHub publication | Publish/update/delete linked comments, resolve linked threads, and submit COMMENT/APPROVE/REQUEST_CHANGES reviews. |
| Recovery | List/download/start backups, perform logical or PITR restores/rollback, inspect operations, and request confirmed workspace erasure. |
Agent-token creation and browser realtime ticket minting are intentionally not MCP tools: an owner creates credentials through the authenticated Studio/API, and realtime sockets remain a browser session capability. Every MCP mutation is checked again by the Cloud API; the MCP process carries no GitHub installation token or persistence logic.
Repository operations use architectureId; workflow review operations additionally require the
contained projectId. There are no project-level GitHub connect or unlink tools.
Every write is validated against the manifest schema, so an agent cannot produce a structurally-broken plugin.
Project-authoring tools are API-backed and require OCTONODE_PROJECT. The project id is attached by
the MCP process, never accepted as a model tool argument. Reads require projects:read, writes use
projects:write, and runs/cancellation use workflows:run; the API checks the scoped credential on
every call. The initial surface covers bounded project context/files/source, nodes, workflows, the
native and installed-plugin catalogs, canonical Octonode knowledge, revision-safe topology/source writes, validation, run history,
workflow runs, and cancellation. It intentionally has no shell, arbitrary path, delete, Git publish,
marketplace publish, workspace administration, generic HTTP, or secret-read tool.
resources/list and resources/read expose the canonical octonode-code-author skill and a public
documentation index. tools/list includes read/write annotations; the same neutral descriptors are
consumed by the chat service.
Exercising workflows
The first six tools author plugins; the last two let an agent run what it built
against the project's .octonode config (config → code routing happens inside the
engine — these tools never touch source).
run_workflow
Executes a workflow and returns a compact summary.
Arguments:
| Arg | Type | Required | Description |
|---|---|---|---|
workflowId | string | yes | Id of the workflow to run. |
env | string | no | Environment name whose vars are injected into nodes. |
input | object | no | Initial input handed to every root node. |
config | string | no | Path to a config file. Defaults to searching the cwd for .octonode. |
Result on success:
{
"ok": true,
"status": "ok", // "ok" | "partial" | "error"
"runId": "…",
"durationMs": 1234,
"nodes": { "<nodeId>": { "status": "ok", "durationMs": 42 } },
"outputs": { "<terminalNodeId>": { /* node outputs */ } }
}On failure (config not found, unknown workflow, cycle, …) it returns
{ "ok": false, "error": { "message": "…" } }.
describe_node
Resolves a node's command from the config and asks the node process to self-report its manifest (declared inputs/outputs, icon, default config).
Arguments:
| Arg | Type | Required | Description |
|---|---|---|---|
nodeId | string | yes | Id of the node to describe. |
config | string | no | Path to a config file. Defaults to searching the cwd. |
env | string | no | Environment name whose vars are injected into the node. |
Result on success: { "ok": true, "nodeId": "…", "manifest": { /* manifest envelope */ } }.
If the node reports an error (or fails to spawn) it returns
{ "ok": false, "nodeId": "…", "error": { /* NodeError */ } }, and any thrown
error (config not found, node missing/orphaned, …) becomes
{ "ok": false, "error": { "message": "…" } }.
Running it
octonode mcp # run on this process's stdio
# or the standalone binary:
octonode-mcpClient configuration
Claude Code
claude mcp add octonode -- octonode mcpor in .mcp.json (project-scoped):
{ "mcpServers": { "octonode": { "command": "octonode", "args": ["mcp"] } } }Cursor (~/.cursor/mcp.json) / Windsurf / any MCP client:
{ "mcpServers": { "octonode": { "command": "octonode", "args": ["mcp"] } } }If octonode isn't on PATH, use the absolute path to the CLI (or octonode-mcp).
For collaboration tools, configure the Hono API and one user or scoped-agent credential:
export OCTONODE_API_URL=http://127.0.0.1:8787
export OCTONODE_API_TOKEN=<supabase-jwt-or-octo_agent_token>
export OCTONODE_WORKSPACE=org:<workspace-id>
export OCTONODE_PROJECT=<authorized-project-id>
octonode mcpThe workspace is attached to every request. Mutations receive a fresh idempotency key, API errors preserve status/conflict details, and binary backup/avatar responses are returned as base64.
Claude Code skill
A companion skill lives at skills/octonode-plugin-author/SKILL.md — copy it
into your project's .claude/skills/ (or ~/.claude/skills/) so Claude Code
knows the manifest format, the IPC node contract, and when to reach for these
tools. Other agents can read the same file as authoring guidance.
Protocol notes
- Transport: stdio, newline-delimited JSON-RPC 2.0 (one message per line).
- Implements
initialize,tools/list,tools/call,ping, and thenotifications/initializednotification.serverInfo.nameisoctonode-mcp. - stdout carries only JSON-RPC; all logs go to stderr.