{
  "markdown": "# synapse-rmcp\n\nHost, Docker, Compose, SSH, logs, ZFS, and file operations over MCP and CLI.\n\nSynapse is a full-parity Rust port of\n[synapse-mcp](https://github.com/dinglebear-ai/synapse-mcp), built with the\n[rmcp](https://github.com/modelcontextprotocol/rust-sdk) framework.\n\nThe server exposes two MCP tools (`flux` and `scout`) plus equivalent CLI\ncommands, covering all 59 production actions from the original TypeScript server.\n\n## Contents\n\n- [Naming](#naming)\n- [Capabilities And Boundaries](#capabilities-and-boundaries)\n- [Install](#install)\n- [Quickstart](#quickstart)\n- [Client Configuration](#client-configuration)\n- [Plugin Packages](#plugin-packages)\n- [Runtime Surfaces](#runtime-surfaces)\n- [MCP Tool Reference](#mcp-tool-reference)\n- [CLI Reference](#cli-reference)\n- [Authentication](#authentication)\n- [Safety And Trust Model](#safety-and-trust-model)\n- [Distribution Contract](#distribution-contract)\n- [Verification](#verification)\n- [Deployment](#deployment)\n- [Troubleshooting](#troubleshooting)\n- [Tools and Actions](#tools-and-actions)\n- [Known Parity Gaps](#known-parity-gaps)\n- [Configuration](#configuration)\n- [Run](#run)\n- [Architecture](#architecture)\n- [Development](#development)\n- [Documentation](#documentation)\n- [Related Servers](#related-servers)\n- [License](#license)\n\n## Naming\n\nThe repository is `synapse-rmcp`, the Rust crate is `synapse`, the MCP server\nidentity is `synapse`, and the installed binary is `synapse`. The npm launcher\npackage is `synapse-rmcp`.\n\nAcross most of the RMCP family, naming follows\n`repo=<service>-rmcp`, `npm=<service>-rmcp`, and `CLI=r<service>`. Synapse is an\nexception because it is a Rust port of the older TypeScript `synapse-mcp`\nproject and keeps the operator-facing `synapse` binary.\n\n## Capabilities And Boundaries\n\nSynapse provides local Docker, Compose, host, SSH, log, ZFS, and file-operation\nworkflows through two MCP tools and the equivalent CLI:\n\n- `flux` manages Docker infrastructure, containers, Compose projects, and host\n  inspection.\n- `scout` handles SSH/local host inspection, safe file reads, allowlisted\n  command execution, bounded descriptor-confined file transfer, ZFS introspection,\n  and log retrieval.\n- REST exists only as a compatibility shim for a subset of actions.\n- The web surface is a lightweight static admin shell, not a full dashboard.\n\n**Not for:** arbitrary shell access, unaudited remote mutation, or bypassing\nhost SSH trust. Destructive Docker/Compose/exec/file-transfer actions require\nexplicit host targets and confirmation policy.\n\nMCP callers never provide credentials, tokens, keys, or secrets as action\narguments. Tokens, OAuth settings, host topology, SSH trust, and allowlists live\nin server-side configuration or the local SSH environment.\n\n## Install\n\nUse the npm launcher for stdio MCP or CLI access without a manual binary\ninstall:\n\n```bash\nnpx -y @dinglebear/synapse --help\nnpx -y @dinglebear/synapse mcp\n```\n\nFor a permanent command:\n\n```bash\nnpm i -g @dinglebear/synapse\nsynapse --version\n```\n\nThe npm package downloads the `synapse` binary from GitHub Releases during\n`postinstall`, keeping the release tag aligned with\n`packages/synapse-rmcp/package.json`.\n\nFrom source:\n\n```bash\ncargo build --release\n```\n\nThe production image includes Python 3 plus the official Docker CLI/Compose\nplugin because Scout's remote descriptor wrappers and Flux Compose operations\ninvoke those runtime tools. The image does not contain a Docker daemon; Flux\nuses the mounted socket or SSH-forwarded remote socket. Persistent appdata lives\nat `~/.synapse` on the host and `/data` in the container.\n\n## Quickstart\n\nThe first-screen 30-second path is:\n\n```bash\nnpx -y @dinglebear/synapse mcp\n```\n\nThen configure an MCP client with stdio:\n\n```json\n{\n  \"mcpServers\": {\n    \"synapse\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"synapse-rmcp\", \"mcp\"]\n    }\n  }\n}\n```\n\nStart with a read-only call:\n\n```json\n{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"scout\",\n    \"arguments\": {\n      \"action\": \"nodes\"\n    }\n  }\n}\n```\n\n## Client Configuration\n\nstdio is preferred for local MCP clients:\n\n```json\n{\n  \"mcpServers\": {\n    \"synapse\": {\n      \"command\": \"synapse\",\n      \"args\": [\"mcp\"]\n    }\n  }\n}\n```\n\nStreamable HTTP uses `/mcp` on the configured host and port:\n\n```json\n{\n  \"mcpServers\": {\n    \"synapse\": {\n      \"url\": \"http://127.0.0.1:40080/mcp\",\n      \"headers\": {\n        \"Authorization\": \"Bearer ${SYNAPSE_MCP_TOKEN}\"\n      }\n    }\n  }\n}\n```\n\n## Plugin Packages\n\n`plugins/synapse/` ships Claude Code, Codex, and Gemini CLI manifests that all\npoint at the same HTTP MCP endpoint and the same shared skill.\n\nThese packages contain **no lifecycle hooks**. Connecting to a server that is\nalready running needs no setup — the manifests substitute your `server_url` and\n`api_token` directly. If this machine also *runs* the server, bootstrap it once\nby hand:\n\n```bash\nsynapse setup install                  # put/refresh the binary on PATH\nsynapse setup plugin-hook              # check, then repair on blocking failures\nsynapse setup plugin-hook --no-repair  # audit only; never mutates appdata\n```\n\nExport the relevant `SYNAPSE_*` variables (or write them to `~/.synapse/.env`)\nfirst; `plugins/README.md` maps each plugin option to its variable. Re-run\n`synapse setup install` after a plugin update.\n\n## Runtime Surfaces\n\n| Surface | Status | Purpose |\n|---|---:|---|\n| MCP | Required | Agent-facing `flux` and `scout` tools |\n| CLI | Required | Scriptable parity surface for operators |\n| REST | Compatibility | Thin local action endpoint for 14 of 59 actions |\n| Web | Present | Lightweight static admin shell |\n\n## MCP Tool Reference\n\nSynapse exposes two MCP tools:\n\n- `flux`: Docker daemon, container, host, and Compose operations.\n- `scout`: SSH/local host inspection, filesystem reads, allowlisted exec,\n  multi-host emit, file beam, ZFS, and logs.\n\nBoth tools use an action-dispatched JSON shape:\n\n```json\n{\"name\":\"flux\",\"arguments\":{\"action\":\"docker\",\"subaction\":\"info\"}}\n{\"name\":\"scout\",\"arguments\":{\"action\":\"nodes\"}}\n```\n\nThe detailed action tables below are curated README reference material. The\ngenerated runtime MCP schema and the Rust action definitions are the source of\ntruth for the live tool contract.\n\n## CLI Reference\n\nCommon commands:\n\n```bash\nsynapse flux docker info\nsynapse flux container list\nsynapse flux compose list --host myhost\nsynapse scout nodes\nsynapse scout exec --host myhost --command hostname\nsynapse scout zfs pools --host myhost\nsynapse scout logs journal --host myhost --unit docker\n```\n\n## Authentication\n\nMounted HTTP supports bearer and Google OAuth modes. Loopback stdio/local dev\ncan run without mounted HTTP auth. Important variables:\n\n```bash\nSYNAPSE_MCP_HOST=127.0.0.1\nSYNAPSE_MCP_PORT=40080\nSYNAPSE_MCP_TOKEN=change-me\nSYNAPSE_MCP_AUTH_MODE=bearer\n```\n\nSee [Configuration](#configuration) and `docs/CONFIG.md` for the full auth\nmatrix.\n\n## Safety And Trust Model\n\nSynapse separates read and write scopes (`synapse:read`, `synapse:write`) and\nuses confirmation gates for destructive operations. `SYNAPSE_MCP_ALLOW_DESTRUCTIVE`\ncan skip prompts only in loopback-safe contexts. Host `protocol` is authoritative\nand defaults to SSH when omitted; local execution requires the explicit built-in\n`local` host or `protocol: \"local\"`. SSH host trust is delegated to OpenSSH\nknown-hosts behavior, and command execution uses execvp/argv semantics without\nshell interpolation. `scout beam` enforces both endpoints' configured read roots,\nblocks sensitive and symlinked paths, and caps each transfer at 64 MiB.\n\n`scout exec` and `scout emit` accept only these 18 typed commands\n(`ALLOWED_READ_COMMANDS` in `src/synapse/command_policy.rs`):\n\n`cat`, `head`, `tail`, `grep`, `rg`, `ls`, `tree`, `wc`, `uniq`, `diff`, `stat`,\n`file`, `du`, `df`, `pwd`, `hostname`, `uptime`, `whoami`\n\n`git` is deliberately excluded, as are shells, interpreters, network clients, and\nmutating tools (`EXEC_DENYLIST`). There is no `find` or `sort` in the allowlist —\nuse the dedicated `scout find` action for filesystem search. Per-host custom\ncommands may be enabled via `execAllowlist`, but receive a zero-argument policy\nuntil a typed argument policy is registered.\n\n## Distribution Contract\n\nThe source of truth for release identity is the version shared by `Cargo.toml`,\n`.release-please-manifest.json`, `packages/synapse-rmcp/package.json`, release\nartifacts, and `server.json`.\n\nDistribution/version invariants:\n\n- The npm package downloads the matching GitHub Release binary.\n- The installed binary remains `synapse`.\n- `server.json` must point at `ghcr.io/dinglebear-ai/synapse:<version>`.\n- Plugin manifests stay versionless where marketplaces derive identity from git\n  state.\n- Generated docs and schemas must come from source-controlled generation\n  inputs; curated README/docs should point at source-of-truth files for details.\n\n## Verification\n\n```bash\njust validate-plugin          # plugin manifests, MCP config, monitors, skills\nnpm --prefix packages/synapse-rmcp run check\ncargo fmt --check\ncargo check\ncargo test\ngit diff --check\n```\n\n## Deployment\n\nFor a persistent mounted HTTP server:\n\n```bash\nSYNAPSE_MCP_HOST=0.0.0.0 \\\nSYNAPSE_MCP_PORT=40080 \\\nSYNAPSE_MCP_TOKEN=change-me \\\nsynapse serve\n```\n\nUse bearer or OAuth before exposing the endpoint beyond loopback. Production\nDocker/Compose notes live in `docs/DEPLOYMENT.md` and `docs/DOCKER.md` when\npresent; local operator usage can stay on stdio.\n\n## Troubleshooting\n\n- `401` or `403` from `/mcp`: check bearer/OAuth settings and gateway headers.\n- no hosts appear: check `SYNAPSE_HOSTS_CONFIG`, `SYNAPSE_CONFIG_FILE`, and\n  `~/.ssh/config`.\n- destructive actions are refused: confirm the host target and confirmation\n  policy.\n- SSH errors: verify OpenSSH known_hosts, mux/socket availability, and host\n  reachability outside Synapse first.\n\n## Tools and Actions\n\n### `flux` — Docker infrastructure management\n\n#### `flux docker` — Docker daemon operations (9 actions)\n\n| Subaction | Scope | Description |\n|---|---|---|\n| `info` | `synapse:read` | Docker daemon information |\n| `df` | `synapse:read` | Docker disk usage |\n| `images` | `synapse:read` | List Docker images; `dangling_only` to filter untagged |\n| `networks` | `synapse:read` | List Docker networks |\n| `volumes` | `synapse:read` | List Docker volumes |\n| `pull` | `synapse:write` | Pull a Docker image; requires `host`, `image` |\n| `build` | `synapse:write` | Build a Docker image; requires `host`, `context`, `tag`; optional `dockerfile`, `no_cache` |\n| `rmi` | `synapse:write` | Remove a Docker image; requires `host`, `image`, `force=true` |\n| `prune` | `synapse:write` | Remove unused resources; requires `host`, `prune_target`, `force=true` |\n\n#### `flux container` — Container lifecycle + inspection (14 actions)\n\n| Subaction | Scope | Description |\n|---|---|---|\n| `list` | `synapse:read` | List containers; optional `state`, `name_filter`, `image_filter`, `label_filter` |\n| `inspect` | `synapse:read` | Detailed container info; requires `container_id`; optional `summary` |\n| `logs` | `synapse:read` | Container logs; requires `container_id`; optional `lines`, `since`, `until`, `grep`, `stream` |\n| `stats` | `synapse:read` | Resource usage stats; optional `container_id` |\n| `top` | `synapse:read` | Show running processes; requires `container_id` |\n| `search` | `synapse:read` | Full-text search by name/image/labels; requires `query` |\n| `start` | `synapse:write` | Start a stopped container; requires `host`, `container_id` |\n| `stop` | `synapse:write` | Stop a running container (destructive); requires `host`, `container_id` |\n| `restart` | `synapse:write` | Restart a container; requires `host`, `container_id` |\n| `pause` | `synapse:write` | Pause a running container; requires `host`, `container_id` |\n| `resume` | `synapse:write` | Resume a paused container; requires `host`, `container_id` |\n| `pull` | `synapse:write` | Pull latest image for a container; requires `host`, `container_id` |\n| `recreate` | `synapse:write` | Recreate container with image pull (destructive); requires `host`, `container_id`; optional `pull` (default true) |\n| `exec` | `synapse:write` | Execute command inside container (destructive, execvp); requires `host`, `container_id`, `command` array |\n\n#### `flux host` — Host inspection (9 actions)\n\n| Subaction | Scope | Description |\n|---|---|---|\n| `status` | `synapse:read` | Check Docker connectivity on a host |\n| `info` | `synapse:read` | OS, kernel, architecture |\n| `uptime` | `synapse:read` | System uptime |\n| `resources` | `synapse:read` | CPU, memory, disk usage |\n| `services` | `synapse:read` | Systemd service status; requires `host`; optional `state`, `service` |\n| `network` | `synapse:read` | Network interfaces |\n| `mounts` | `synapse:read` | Mounted filesystems; requires `host` |\n| `ports` | `synapse:read` | Port mappings; requires `host`; optional `protocol`, `limit`, `offset` |\n| `doctor` | `synapse:read` | Diagnostic checks; requires `host`; optional `checks` (comma-separated) |\n\n#### `flux compose` — Docker Compose project management (10 actions)\n\n| Subaction | Scope | Description |\n|---|---|---|\n| `list` | `synapse:read` | List all Docker Compose projects; requires `host` |\n| `status` | `synapse:read` | Get project service status; requires `host`, `project`; optional `service` |\n| `up` | `synapse:write` | Start a compose project; requires `host`, `project` |\n| `down` | `synapse:write` | Stop a compose project (destructive); requires `host`, `project`; optional `remove_volumes`, `force` |\n| `restart` | `synapse:write` | Restart a compose project (destructive); requires `host`, `project` |\n| `recreate` | `synapse:write` | Recreate compose containers (destructive); requires `host`, `project` |\n| `logs` | `synapse:read` | Get project logs; requires `host`, `project`; optional `service`, `lines`, `since` |\n| `build` | `synapse:write` | Build compose project images; requires `host`, `project`; optional `service` |\n| `pull` | `synapse:write` | Pull compose project images; requires `host`, `project`; optional `service` |\n| `refresh` | `synapse:read` | Refresh compose project cache; requires `host` |\n\n#### `flux help` — Auto-generated flux docs\n\n| Action | Scope | Description |\n|---|---|---|\n| `help` | public | Return flux action reference; optional `topic` (e.g. `\"container:list\"`), `format` (`markdown`\\|`json`) |\n\n---\n\n### `scout` — SSH/local host inspection\n\n#### Scout simple actions (9 actions)\n\n| Action | Scope | Description |\n|---|---|---|\n| `nodes` | `synapse:read` | List all configured SSH hosts |\n| `peek` | `synapse:read` | Read a file or directory listing; requires `host`, `path`; optional `tree`, `depth` |\n| `find` | `synapse:read` | Find files by glob; requires `host`, `path`, `pattern`; optional `depth`, `limit` |\n| `ps` | `synapse:read` | List processes; requires `host`; optional `sort` (`cpu`\\|`mem`\\|`pid`\\|`time`), `grep`, `user`, `limit` |\n| `df` | `synapse:read` | Disk usage; requires `host`; optional `path` |\n| `delta` | `synapse:read` | Compare files or content; requires `source_host`, `source_path`; then either `target_host`+`target_path` or `content` |\n| `exec` | `synapse:write` | Execute allowlisted command (destructive, execvp); requires `host`, `command`; optional `path`, `args`, `timeout_secs` |\n| `emit` | `synapse:write` | Multi-host execution (destructive); requires `targets` array, `command`; optional `args`, `timeout_secs` |\n| `beam` | `synapse:write` | Bounded root-confined file transfer (destructive); requires `source_host`, `source_path`, `dest_host`, `dest_path`; both paths must be under configured Scout/Compose roots |\n\n#### `scout zfs` — ZFS introspection (3 subactions)\n\n| Subaction | Scope | Description |\n|---|---|---|\n| `pools` | `synapse:read` | List ZFS pools; requires `host`; optional `pool` name filter |\n| `datasets` | `synapse:read` | List ZFS datasets; requires `host`; optional `pool`, `dataset_type`, `recursive` |\n| `snapshots` | `synapse:read` | List ZFS snapshots; requires `host`; optional `pool`, `dataset`, `limit` |\n\n#### `scout logs` — Log retrieval (4 subactions)\n\n| Subaction | Scope | Description |\n|---|---|---|\n| `syslog` | `synapse:read` | Read `/var/log/syslog` (falls back to `/var/log/messages`); requires `host`; optional `lines`, `grep` |\n| `journal` | `synapse:read` | Read systemd journal; requires `host`; optional `lines`, `unit`, `priority`, `since`, `until`, `grep` |\n| `dmesg` | `synapse:read` | Read kernel ring buffer; requires `host`; optional `lines`, `grep` |\n| `auth` | `synapse:read` | Read `/var/log/auth.log` (falls back to `/var/log/secure`); requires `host`; optional `lines`, `grep` |\n\n#### `scout help` — Auto-generated scout docs\n\n| Action | Scope | Description |\n|---|---|---|\n| `help` | public | Return scout action reference; optional `topic` (e.g. `\"zfs:pools\"`), `format` (`markdown`\\|`json`) |\n\n## Known Parity Gaps\n\n`synapse` achieves **action-level parity** with `synapse-mcp` — all 59\nproduction actions from `synapse-mcp/docs/INVENTORY.md` are implemented. However,\nthe following features from the original TypeScript server are **not yet ported**:\n\n### Not ported\n\n| Feature | Description |\n|---|---|\n| `claude/channel` notifications | Original forwards Docker events and log tails as `notifications/claude/channel` MCP notifications. No equivalent exists in Rust. |\n| Templated MCP resources | Original exposes `synapse://hosts/{host}`, `synapse://hosts/{host}/stacks`, `synapse://stacks`, `synapse://stacks/{host}/{stack}`, `synapse://stacks/{host}/{stack}/env`, `synapse://containers/{host}`, `synapse://containers/{host}/{id}`. Rust exposes tool-specific schema and help resources plus read-scoped `synapse://hosts`, `synapse://compose/projects`, `synapse://status`, and `synapse://activity`. |\n| Root SSH login gate | Original gates `sshUser=root` through elicitation unless `SYNAPSE_ALLOW_ROOT_LOGIN=true`. Rust has destructive-operation elicitation but no root-login gate. |\n| TOFU fingerprint store | Original persists fingerprints to `~/.config/synapse/known_hosts.json` and rejects changed fingerprints. Rust uses strict OpenSSH `known_hosts` with wildcard warnings — different operator behavior. |\n| `SYNAPSE_EXCLUDE_HOSTS` | Original env var to exclude hosts from fleet discovery is absent in Rust. |\n| `SYNAPSE_MCP_ALLOW_YOLO` | Original \"skip all confirmation gates\" mode. Rust has `SYNAPSE_MCP_ALLOW_DESTRUCTIVE` (per-restart override, loopback-only), which is not identical. |\n| `SYNAPSE_DEBUG_ERRORS` | Original opt-in mode that returns full internal error detail. Rust always sanitizes internal tool errors. |\n| `git` in exec allowlist | Original includes `git` in `ALLOWED_READ_COMMANDS` with flag guards. Rust deliberately excludes `git`. |\n\n## Configuration\n\n```bash\nSYNAPSE_MCP_HOST=127.0.0.1\nSYNAPSE_MCP_PORT=40080\nSYNAPSE_MCP_TOKEN=change-me\n```\n\nKey environment variables:\n\n| Variable | Default | Description |\n|---|---:|---|\n| `SYNAPSE_MCP_HOST` | `127.0.0.1` | Bind host for HTTP transport. |\n| `SYNAPSE_MCP_PORT` | `40080` | Bind port for HTTP transport. |\n| `SYNAPSE_MCP_TOKEN` | unset | Static bearer token for auth. |\n| `SYNAPSE_MCP_NO_AUTH` | `false` | Disable auth for loopback development only. |\n| `SYNAPSE_NOAUTH` | `false` | Delegate auth/authz to an isolated trusted upstream gateway. |\n| `SYNAPSE_MCP_ALLOW_DESTRUCTIVE` | `false` | Skip destructive-operation confirmation prompts (loopback only). |\n| `SYNAPSE_MCP_MAX_CONCURRENCY` | `50` | Maximum simultaneous in-flight operational requests. Excess requests receive HTTP 429 with `Retry-After`. Set to `0` to disable. Public probes, OAuth discovery, and static assets are exempt from concurrency shedding. |\n| `SYNAPSE_MCP_PUBLIC_URL` | unset | OAuth public URL; HTTPS required except loopback development. |\n| `SYNAPSE_HOSTS_CONFIG` | unset | Inline host topology. Omitted host protocols default to SSH; local execution requires `protocol: \"local\"`. |\n\nSee `.env.example` for the full list of variables, `docs/CONFIG.md` for\nconfiguration details, and `docs/SECURITY.md` for transport, path, transfer,\ncontainer, and CI runner trust boundaries.\n\n## Run\n\n```bash\n# Start MCP server (stdio transport)\ncargo run -- mcp\n\n# Start HTTP server\ncargo run -- serve\n\n# CLI examples\ncargo run -- flux docker info\ncargo run -- flux container list\ncargo run -- flux compose list --host myhost\ncargo run -- scout nodes\ncargo run -- scout exec --host myhost --command hostname\ncargo run -- scout zfs pools --host myhost\ncargo run -- scout logs journal --host myhost --unit docker\n```\n\nMCP examples:\n\n```json\n{\"name\":\"flux\",\"arguments\":{\"action\":\"docker\",\"subaction\":\"info\"}}\n{\"name\":\"flux\",\"arguments\":{\"action\":\"container\",\"subaction\":\"list\",\"state\":\"running\"}}\n{\"name\":\"flux\",\"arguments\":{\"action\":\"compose\",\"subaction\":\"status\",\"host\":\"myhost\",\"project\":\"mystack\"}}\n{\"name\":\"scout\",\"arguments\":{\"action\":\"nodes\"}}\n{\"name\":\"scout\",\"arguments\":{\"action\":\"exec\",\"host\":\"myhost\",\"command\":\"hostname\"}}\n{\"name\":\"scout\",\"arguments\":{\"action\":\"zfs\",\"subaction\":\"pools\",\"host\":\"myhost\"}}\n{\"name\":\"scout\",\"arguments\":{\"action\":\"logs\",\"subaction\":\"journal\",\"host\":\"myhost\",\"unit\":\"docker\"}}\n```\n\n## Architecture\n\n```text\nFluxService   (src/flux_service/)  Docker/container/compose/host ops\nScoutService  (src/scout_service/) SSH/exec/fs/zfs/logs ops\n      ↓ via SynapseService facade (src/app.rs)\nMCP shims     (src/mcp/tools.rs)  tool args → service → Value\nCLI shim      (src/cli.rs)        argv → service → stdout\nREST layer    (src/api.rs)        POST /v1/synapse → service → JSON\n```\n\n## Development\n\n```bash\ncargo fmt --check\ncargo test\ncargo clippy -- -D warnings\ncargo build --release\n\njust dev     # serve with no auth (loopback, dev mode)\njust test    # cargo test\njust lint    # clippy\njust fmt     # cargo fmt\n```\n\nUseful docs:\n\n- `docs/API.md` for full tool contracts\n- `docs/CONFIG.md` for environment and auth\n- `docs/QUICKSTART.md` for local smoke tests\n- `plugins/synapse/skills/synapse/SKILL.md` for agent usage guidance\n- `tests/parity.rs` for automated parity verification against synapse-mcp INVENTORY\n\n## Documentation\n\nThis README is curated for first-run orientation and high-level action discovery.\nSource-of-truth docs and code are split as follows:\n\n- `docs/API.md` for the curated action contract reference.\n- `docs/MCP_SCHEMA.md` for MCP schema shape and drift expectations.\n- `docs/CONFIG.md` for environment and auth policy.\n- `docs/QUICKSTART.md` for local smoke tests.\n- `docs/PLUGINS.md` and `plugins/synapse/skills/synapse/SKILL.md` for agent\n  and marketplace usage.\n- `docs/generated/openapi.json` for generated OpenAPI output.\n- `src/flux_service/`, `src/scout_service/`, and `src/mcp/` for runtime source\n  of truth.\n\n## Related Servers\n\n- `runifi` - UniFi controller REST API bridge.\n- `rtailscale` - Tailscale API bridge for devices, users, and tailnet operations.\n- `unraid` / `runraid` - Unraid GraphQL bridge for NAS and server management.\n- `rapprise` - Apprise notification fan-out bridge for many delivery backends.\n- `rgotify` - Gotify push notification bridge for sends, messages, apps, and clients.\n- `rarcane` - Arcane Docker management bridge for containers and related resources.\n- `yarr` - Media-stack bridge for Sonarr, Radarr, Prowlarr, Plex, and related services.\n- `rytdl` - Media download and metadata workflow server.\n- `cortex` - Syslog and homelab log aggregation MCP server.\n- `axon` - RAG, crawl, scrape, extract, and semantic search project.\n- `labby` - Homelab control plane and Labby gateway project.\n- `lumen` - Local semantic code search MCP server.\n- `nugs` - Project/package management helper for local agent workflows.\n- `agentcast` - Agent transcript and activity publishing project.\n- `soma` - RMCP scaffold/runtime template for new provider-backed servers.\n\n## License\n\nOriginal Dinglebear-authored portions of this project are licensed under [AGPL-3.0-only](LICENSE). Separate commercial licensing is available for organizations that need terms outside the AGPL. Third-party material remains under its original license. See [LICENSING.md](https://github.com/dinglebear-ai/synapse/blob/main/LICENSING.md).\n",
  "bytes": 24177,
  "sha": "441437589f40d8255b648cbcc71ef59dabd179a22080d9b2da6fafe4b511d047",
  "repo_slug": "dinglebear-ai/synapse",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_ai_dinglebear_synapse_112eb3e4/readme"
}