{"_id":"@dchoueiry/slate-mcp","_rev":"4-8ec93f6f38b290e1aba0920b0ff06448","name":"@dchoueiry/slate-mcp","dist-tags":{"latest":"0.3.3"},"versions":{"0.3.0":{"name":"@dchoueiry/slate-mcp","version":"0.3.0","keywords":["mcp","model-context-protocol","slate","canvas","whiteboard","claude-code"],"license":"MIT","_id":"@dchoueiry/slate-mcp@0.3.0","maintainers":[{"name":"dchoueiry","email":"dimichoueiry99@gmail.com"}],"homepage":"https://github.com/dimichoueiry/slate#readme","bugs":{"url":"https://github.com/dimichoueiry/slate/issues"},"bin":{"slate-mcp":"src/index.js"},"dist":{"shasum":"9904d2682e7097977121291a17732ac9411f18a1","tarball":"https://registry.npmjs.org/@dchoueiry/slate-mcp/-/slate-mcp-0.3.0.tgz","fileCount":7,"integrity":"sha512-ggaAsSnY2wfZ/aZfCRu6R6/Ywy8cdP9OlBC0FjUrjCkbUrlg+I4oxYmgpjEpdF9wO88J6zCzQrXCENnnqjopDA==","signatures":[{"sig":"MEQCIHDGx4i6vd+sVlPpsW+tCpSeHFCjbpcDHvFRca/47mD5AiA8HX+Icx3Ip7AmlpDmrvNioJRv5BlMW3zzd4cqSxQ60A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":45215},"type":"module","engines":{"node":">=18"},"gitHead":"a2b3439ae4482089b2f9dbbec41a24750b96cc5f","scripts":{"test":"node --test"},"_npmUser":{"name":"dchoueiry","email":"dimichoueiry99@gmail.com"},"repository":{"url":"git+https://github.com/dimichoueiry/slate.git","type":"git","directory":"slate-mcp"},"_npmVersion":"10.9.0","description":"MCP bridge that lets a local coding agent (Claude Code or any MCP client) draw on and read from your Slate canvas.","directories":{},"_nodeVersion":"22.11.0","dependencies":{"ws":"^8.18.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/slate-mcp_0.3.0_1783449830914_0.7387583190017692","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@dchoueiry/slate-mcp","version":"0.3.1","keywords":["mcp","model-context-protocol","slate","canvas","whiteboard","claude-code"],"license":"MIT","_id":"@dchoueiry/slate-mcp@0.3.1","maintainers":[{"name":"dchoueiry","email":"dimichoueiry99@gmail.com"}],"homepage":"https://github.com/dimichoueiry/slate#readme","bugs":{"url":"https://github.com/dimichoueiry/slate/issues"},"bin":{"slate-mcp":"src/index.js"},"dist":{"shasum":"5f0e585e94f1cddf2379f758fca1b7eef8a839e0","tarball":"https://registry.npmjs.org/@dchoueiry/slate-mcp/-/slate-mcp-0.3.1.tgz","fileCount":7,"integrity":"sha512-5EnbtlqG7kQ6llZMHGYdIOkFwSijmY7Qn+JXlpewby68BVifmQHvQYpUm7TdliIzoTh0n7A7bAgUsKp806rGeQ==","signatures":[{"sig":"MEQCIEjISzf/sYYFUdK4pbHcdtt2Yrpt9zcnE0wvCZGH9r2OAiACkJHwVwieVZlqhw+06es/ZF3P86uFitt4lCMkUmCb9g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":45988},"type":"module","engines":{"node":">=18"},"gitHead":"49a53af0fafb779d698db29d5da9d780fe3d1257","scripts":{"test":"node --test"},"_npmUser":{"name":"dchoueiry","email":"dimichoueiry99@gmail.com"},"repository":{"url":"git+https://github.com/dimichoueiry/slate.git","type":"git","directory":"slate-mcp"},"_npmVersion":"10.9.0","description":"MCP bridge that lets a local coding agent (Claude Code or any MCP client) draw on and read from your Slate canvas.","directories":{},"_nodeVersion":"22.11.0","dependencies":{"ws":"^8.18.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/slate-mcp_0.3.1_1785380215064_0.010470195549119321","host":"s3://npm-registry-packages-npm-production"}},"0.3.2":{"name":"@dchoueiry/slate-mcp","version":"0.3.2","keywords":["mcp","model-context-protocol","slate","canvas","whiteboard","claude-code"],"license":"MIT","_id":"@dchoueiry/slate-mcp@0.3.2","maintainers":[{"name":"dchoueiry","email":"dimichoueiry99@gmail.com"}],"homepage":"https://github.com/dimichoueiry/slate#readme","bugs":{"url":"https://github.com/dimichoueiry/slate/issues"},"bin":{"slate-mcp":"src/index.js"},"dist":{"shasum":"b749149b9d0262bbfd957cee320dfdd937a10d6e","tarball":"https://registry.npmjs.org/@dchoueiry/slate-mcp/-/slate-mcp-0.3.2.tgz","fileCount":7,"integrity":"sha512-FU0jN4bjBjXP7zZK0IOGk6yCgskAVdHa2z9SRvvJPlkx9YOu6yV4y0DC+MJd+8Kv4Mu9nCJG49QgVZosl0tvYA==","signatures":[{"sig":"MEUCIQCGNumPxx2gB2ehOSOIkhZ5O6IbdOLEaynEKccUb2ue3QIgN5FgQGr6J88Ht/koqxsHjFuq6im5DY4F0iJKbZzcMZo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":47639},"type":"module","engines":{"node":">=18"},"gitHead":"29549ff3fd487505d75b2821b2af649a3810e51a","scripts":{"test":"node --test"},"_npmUser":{"name":"dchoueiry","email":"dimichoueiry99@gmail.com"},"repository":{"url":"git+https://github.com/dimichoueiry/slate.git","type":"git","directory":"slate-mcp"},"_npmVersion":"10.9.0","description":"MCP bridge that lets a local coding agent (Claude Code or any MCP client) draw on and read from your Slate canvas.","directories":{},"_nodeVersion":"22.11.0","dependencies":{"ws":"^8.18.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/slate-mcp_0.3.2_1785382994064_0.7017338499345385","host":"s3://npm-registry-packages-npm-production"}},"0.3.3":{"name":"@dchoueiry/slate-mcp","version":"0.3.3","publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/dimichoueiry/slate.git","directory":"slate-mcp"},"description":"MCP bridge that lets a local coding agent (Claude Code or any MCP client) draw on and read from your Slate canvas.","license":"Apache-2.0","type":"module","bin":{"slate-mcp":"src/index.js"},"engines":{"node":">=18"},"scripts":{"test":"node --test"},"dependencies":{"ws":"^8.18.0"},"keywords":["mcp","model-context-protocol","slate","canvas","whiteboard","claude-code"],"_id":"@dchoueiry/slate-mcp@0.3.3","gitHead":"3a3748cb9fc0e8c80be52bfe1c302dad557466a2","bugs":{"url":"https://github.com/dimichoueiry/slate/issues"},"homepage":"https://github.com/dimichoueiry/slate#readme","_nodeVersion":"22.11.0","_npmVersion":"10.9.0","dist":{"integrity":"sha512-GhlLAl2FbPIYZyLhPI9I4XTaPF8r5Vf0edmAR47zVukjEqHcApizxeX+fbivpqownEP5T8eVx7L84DBC61lwSA==","shasum":"c8b1667825bb41bfc54c0095720ef45c2fd12a22","tarball":"https://registry.npmjs.org/@dchoueiry/slate-mcp/-/slate-mcp-0.3.3.tgz","fileCount":8,"unpackedSize":58995,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCICweUp8kA1xT3iMOMadrrJ8MeI1gzGnyCmBWcu0GSzcFAiAuhQpjWmAEikTdTSztlBa/azZjEja7vSHPLeWOiNSoTw=="}]},"_npmUser":{"name":"dchoueiry","email":"dimichoueiry99@gmail.com"},"directories":{},"maintainers":[{"name":"dchoueiry","email":"dimichoueiry99@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/slate-mcp_0.3.3_1786066326591_0.873656048766376"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-07T18:43:50.733Z","modified":"2026-08-07T01:32:06.867Z","0.3.0":"2026-07-07T18:43:51.065Z","0.3.1":"2026-07-30T02:56:55.223Z","0.3.2":"2026-07-30T03:43:14.226Z","0.3.3":"2026-08-07T01:32:06.733Z"},"bugs":{"url":"https://github.com/dimichoueiry/slate/issues"},"license":"Apache-2.0","homepage":"https://github.com/dimichoueiry/slate#readme","keywords":["mcp","model-context-protocol","slate","canvas","whiteboard","claude-code"],"repository":{"type":"git","url":"git+https://github.com/dimichoueiry/slate.git","directory":"slate-mcp"},"description":"MCP bridge that lets a local coding agent (Claude Code or any MCP client) draw on and read from your Slate canvas.","maintainers":[{"name":"dchoueiry","email":"dimichoueiry99@gmail.com"}],"readme":"# slate-mcp\n\n**Your coding agent finally has a whiteboard.**\n\n`slate-mcp` is an MCP server that lets Claude Code — or any MCP client — draw on and read from your [Slate](../README.md) canvas. Ask your agent to *\"map this repo's architecture on my board\"* and watch the diagram animate onto the canvas. Rearrange it by hand, then ask the agent *\"what did I change?\"* — it reads your edits back.\n\nEverything runs on your machine: the agent talks to this bridge over stdio, and the bridge talks to your open Slate tab over a localhost WebSocket. It works with both a local dev Slate and the deployed web app (browsers allow `https` pages to reach `ws://127.0.0.1`). No cloud, no accounts, no telemetry.\n\n## Setup\n\n```sh\nclaude mcp add slate -- npx @dchoueiry/slate-mcp\n```\n\nThen open Slate in your browser and ask your agent to draw something. On first use the agent shows you a 4-digit pairing code — type it into the dialog that appears in Slate. That's it; the pairing persists.\n\n## What the agent can do\n\n| Tool | What it does |\n|---|---|\n| `list_boards` | List your boards |\n| `read_board` | Read every object on a board — including reveal steps and your hand edits (selected objects are marked) |\n| `get_selection` | Read what you currently have **selected** — select objects, then say \"make these blue\" or \"summarize this\" |\n| `create_board` | Create and open a new board |\n| `add_objects` | Draw a batch of stickies/shapes/text/frames/connectors (one undo step, animates in; optional auto-layout). Add `reveal:{step,effect}` to stage objects for Reveal Mode. Text with `w` becomes a wrapped text box; a sticky whose first line starts with `ai:`, `img:`, `search:`, … is a live runnable AI node — the agent can build entire flows |\n| `update_objects` | Edit text, colors, positions, wrapped text width, and Reveal Mode metadata |\n| `delete_objects` | Delete objects (never boards) |\n| `run_node` | Run a Slate AI node (`ai:`, `chart:`, `img:`, …) like pressing ▶ |\n| `get_node_output` | Read a node's last output |\n| `get_run_status` | Poll a slow run (video, deep research) |\n| `render_board` | **See** the board as a PNG — check its own layout, read your freehand ink (\"improve what I circled\") |\n| `focus_on` | Pan/zoom your viewport to its work (smooth, rate-limited) |\n| `add_upload` | Pipe a CSV/text file from its environment into a real upload node — full-fidelity, wireable into `business:`/`chart:` flows |\n\n`add_objects` also places **icons** (340-name built-in registry) and **agent-authored SVG graphics** (sanitized: no scripts, no external references).\n\nEverything the agent draws is a normal Slate object: move it, restyle it, and undo any agent action with a single ⌘Z.\n\n## Reveal Mode\n\nAgents can stage a board for presentation playback by assigning reveal metadata:\n\n```json\n{\n  \"reveal\": { \"step\": 2, \"effect\": \"pop\", \"durationMs\": 360 }\n}\n```\n\nObjects with the same `step` reveal together. Supported effects are `pop`, `fade`, `slide-up`, `slide-left`, and `none`. To remove staging from an object, call `update_objects` with `{\"reveal\": null}`.\n\n## Multiple agent sessions\n\nRun slate-mcp from as many MCP clients as you like (Claude Code, Claude Desktop, Cursor, …) at the same time — they all share your one Slate tab, no disconnecting and reconnecting. The first process to start owns the port and the tab; every later one automatically joins it as a peer, authenticated with the same pairing token. If the owning session exits, a surviving one takes over within a second and the tab reconnects on its own.\n\n## What the agent can never do\n\nTouch your settings or API keys, delete boards, act while no Slate tab is open, or connect without your one-time pairing confirmation. The bridge binds to `127.0.0.1` only, checks web origins against an allowlist, and authenticates every session with a 256-bit token stored in `~/.slate-mcp/`.\n\n## Options\n\n```sh\nslate-mcp [--port 8642] [--allow-origin https://your-slate-domain.com]\n```\n\n- `--port` / `SLATE_MCP_PORT` — WebSocket port (set the same port in Slate if you change it)\n- `--allow-origin` / `SLATE_BRIDGE_ORIGINS` — extra allowed web origins for self-hosted Slate deployments (localhost is always allowed)\n\n## Development\n\n```sh\nnpm test   # security + protocol tests (node --test)\n```\n\nMIT.\n","readmeFilename":"README.md"}