{
  "markdown": "# cnvs-whiteboard-skills\n\nAgent Skills + MCP server discovery for [**cnvs.app**](https://cnvs.app) — the free, no-signup real-time collaborative whiteboard. Any AI agent can read, write, draw, diagram, and subscribe to live human edits on a shared canvas, either through the hosted MCP server or the REST fallback.\n\nWorks with Claude Code, Claude Desktop, Cursor, OpenCode / OpenAI Codex, Aider (with MCP plugin), any other MCP-speaking client, and Hermes-family agents.\n\n## MCP Server\n\n**Endpoint**: `https://cnvs.app/mcp` (Streamable HTTP, protocol `2025-06-18`, no auth — the board ID is the access key).\n\n**Registered in the official [MCP Registry](https://registry.modelcontextprotocol.io)** as [`app.cnvs/whiteboard`](https://registry.modelcontextprotocol.io/v0/servers?search=cnvs).\n\n### Capabilities\n\n- **Tools** (25): board creation and inspection; visual previews; text, link, image, and stroke editing; movement and deletion; live-update waits; and complete kanban column, lane, task, query, and export workflows. The exact production list is published in [`/.well-known/mcp.json`](https://cnvs.app/.well-known/mcp.json). State-changing operations also have REST mirrors under `https://cnvs.app/api/boards/<id>/…` for runtimes that cannot speak MCP.\n- **Resources** (3): `cnvs://board/{id}/state.json` (full snapshot), `cnvs://board/{id}/preview.svg` (visual render), and `cnvs://board/{id}/tasks.json` (kanban state). All three are subscribable.\n- **Subscriptions**: `resources/subscribe` supported with `notifications/resources/updated` pushed over SSE, debounced ~3 s after activity settles.\n- **Live machine-readable manifests**: [`/quotas.json`](https://cnvs.app/quotas.json), [`/openapi.json`](https://cnvs.app/openapi.json), [`/llms.txt`](https://cnvs.app/llms.txt), [`/.well-known/mcp.json`](https://cnvs.app/.well-known/mcp.json), [`/.well-known/mcp/server.json`](https://cnvs.app/.well-known/mcp/server.json).\n\n## Installation\n\n### Codex / ChatGPT and Cursor packages\n\nThis repository is the public source package for both marketplace integrations:\n\n- [`.codex-plugin/plugin.json`](./.codex-plugin/plugin.json) and [`.mcp.json`](./.mcp.json) describe the Codex / ChatGPT plugin.\n- [`.cursor-plugin/plugin.json`](./.cursor-plugin/plugin.json) and [`mcp.json`](./mcp.json) describe the Cursor plugin.\n- [`SUBMISSION.md`](./SUBMISSION.md) and [`CURSOR-MARKETPLACE.md`](./CURSOR-MARKETPLACE.md) contain the prepared listing copy, disclosures, reviewer flows, and submission checklists.\n\nBoth packages connect only to the hosted production endpoint; there is no local server process or secret to configure.\n\n### Claude Desktop / Cursor / any MCP client\n\nOne-line config — add this to your client's `mcpServers` object:\n\n```json\n{\n  \"mcpServers\": {\n    \"cnvs\": {\n      \"type\": \"http\",\n      \"url\": \"https://cnvs.app/mcp\"\n    }\n  }\n}\n```\n\n### Claude Code CLI\n\n```bash\nclaude mcp add --transport http cnvs https://cnvs.app/mcp\n```\n\n### REST-only (no MCP client)\n\n```bash\n# Create a board\ncurl -X POST https://cnvs.app/api/boards\n\n# Add text\ncurl -X POST https://cnvs.app/api/boards/<id>/texts \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"x\":100,\"y\":200,\"content\":\"# Hello\",\"author\":\"ai:myagent\"}'\n\n# Long-poll for live changes\ncurl \"https://cnvs.app/api/boards/<id>/wait?timeout_ms=25000\"\n```\n\nFull REST reference: [`/llms.txt`](https://cnvs.app/llms.txt), [`/openapi.json`](https://cnvs.app/openapi.json).\n\n## Access model\n\nThere is no account or OAuth flow. A board URL or board ID is a bearer-style access credential: anyone who knows an unlocked board URL can open it. Boards can optionally require an 8-character lowercase alphanumeric access key for writes or for both reads and writes; legacy 6-character keys remain accepted. Pass a key only through the MCP tool's `access_key` argument or the `X-Board-Key` HTTP header.\n\nDo not paste private board URLs or access keys into public issues, logs, or repositories.\n\n## Useful prompts\n\n- Create a fresh whiteboard for our brainstorming session and return its URL.\n- Open this cnvs.app board, inspect its preview, and summarize the layout.\n- Turn this list into a shared kanban board with priorities and owners.\n\n## Skills included\n\nTwo related Agent Skills live in this repo, published under the [agentskills.io](https://agentskills.io/specification) open standard so they work in any compatible runtime. Install them into `~/.claude/skills/` to teach the agent how to use the MCP server well (preview-before-JSON, REST-over-MCP for writes, author-tag conventions, subscription-then-react loop).\n\n### [`cnvs-whiteboard/`](./cnvs-whiteboard/SKILL.md) — PRIMARY\n\nTeaches an AI agent how to collaborate on a cnvs.app board in real time:\n\n- Read the shared canvas state\n- Draw / diagram / flowchart / annotate — add, update, move, and delete text, links, sticky notes, strokes, images, and Mermaid diagrams (flowcharts, sequence / class / ER diagrams, mind maps, gantt charts, concept maps)\n- Render the SVG preview when the board contains drawings\n- Subscribe to live human edits via MCP, react via REST\n\nActivates on any cnvs.app board reference (URL `https://cnvs.app/#<id>`, `cnvs://board/<id>/...`, or a bare board ID) or phrases like \"collaborate on / draw / diagram / annotate / watch a shared whiteboard or canvas.\"\n\n### [`mcp-listen/`](./mcp-listen/SKILL.md) — HELPER (v0.3.0)\n\nPush-to-model pump for Streamable-HTTP MCP servers with `capabilities.resources.subscribe: true`. Opens a session, subscribes to the resource URIs the caller hands over, and emits one JSON line per `notifications/resources/updated` event on stdout — designed to be wrapped by Claude Code's `Monitor` tool so every server push becomes an in-chat notification (no polling, no log tailing).\n\n**Helper-only activation since v0.3.** Triggers only when the caller — a user or another skill — has supplied **both** an MCP server URL and at least one resource URI. Does NOT auto-activate from generic phrasing like \"watch this file\" or \"stay in the loop\". `cnvs-whiteboard` is the canonical caller and delegates its push channel here.\n\n**Output split since v0.3.** Only the actionable `resource_updated` event reaches stdout by default. Connection / subscription / heartbeat / transient-error events go to stderr so a wrapping `Monitor` doesn't fire on the listener's own bookkeeping. Pass `--verbose` (or `-v`) to merge everything onto stdout for debugging or single-channel logging (legacy v0.2 behavior).\n\n**Registry status.** Intentionally *not* listed in centralised skill registries yet. Current registry pipelines (e.g. `majiayu000/claude-skill-registry-core` as of 2026-05-03) archive only `SKILL.md` + generated metadata; they do not mirror bundled `scripts/**` or `package.json`, so an entry for `mcp-listen` would publish a broken skill. It will be (re-)submitted once core registries support directory-style skill archival with bundled-file mirroring and security scanning — see PR [`majiayu000/claude-skill-registry-core#40`](https://github.com/majiayu000/claude-skill-registry-core/pull/40) for the directory-archive primitive that just landed and the open question on bundled-script scanning. Until then, install it via `curl` from `cnvs.app` (below) or `git clone` this repo.\n\n### Install the skills\n\n```bash\n# cnvs-whiteboard (SKILL.md only — no deps)\nmkdir -p ~/.claude/skills/cnvs-whiteboard && cd ~/.claude/skills/cnvs-whiteboard\ncurl -O https://cnvs.app/cnvs-whiteboard/SKILL.md\n\n# mcp-listen (SKILL.md + scripts/ + npm install)\nmkdir -p ~/.claude/skills/mcp-listen && cd ~/.claude/skills/mcp-listen\ncurl -O https://cnvs.app/mcp-listen/SKILL.md \\\n     -O https://cnvs.app/mcp-listen/package.json \\\n     --create-dirs -o scripts/listen.mjs https://cnvs.app/mcp-listen/scripts/listen.mjs\nnpm install\n```\n\nAlternatively `git clone` this repo and `cp -r .claude/skills/* ~/.claude/skills/` — the `.claude/skills/` directory contains symlinks into `cnvs-whiteboard/` and `mcp-listen/` for Claude Code's expected layout.\n\n## Spec compliance\n\nBoth skills follow the [agentskills.io spec](https://agentskills.io/specification):\n\n- `name` matches the containing directory name\n- `description` under 1024 characters, imperative phrasing, explicit trigger keywords\n- `scripts/` subdirectory for bundled code (mcp-listen)\n- `license: MIT`, `compatibility` field declared, cross-references in each skill's \"Related skills\" section to prevent activation overlap\n\n## Why two skills\n\nEarlier versions had a single page (`/skill-cnvs.md` on cnvs.app — now a legacy redirect). Splitting into two coherent units follows the spec's \"design coherent units\" best practice:\n\n- `cnvs-whiteboard` owns the cnvs.app-specific workflow (read / write / render / gotchas).\n- `mcp-listen` owns the generic push-to-model pattern (usable against any MCP server).\n\nCross-references keep them pairing cleanly: `cnvs-whiteboard` mentions `mcp-listen` as its delegated push channel; `mcp-listen` mentions `cnvs-whiteboard` as the companion for cnvs-specific work. No activation overlap in practice.\n\n## Canonical sources\n\nSkills are **also** served live at:\n\n- [`https://cnvs.app/cnvs-whiteboard/SKILL.md`](https://cnvs.app/cnvs-whiteboard/SKILL.md)\n- [`https://cnvs.app/mcp-listen/SKILL.md`](https://cnvs.app/mcp-listen/SKILL.md)\n- [`https://cnvs.app/mcp-listen/scripts/listen.mjs`](https://cnvs.app/mcp-listen/scripts/listen.mjs)\n- [`https://cnvs.app/mcp-listen/package.json`](https://cnvs.app/mcp-listen/package.json)\n\nThe cnvs.app URLs are the canonical install targets for curl-based installers; this GitHub repo is the reference for aggregators that crawl public sources (skills.sh, etc.) and for users who prefer git clone.\n\n## Discovery surfaces\n\n### Live\n\n- **Official MCP Registry**: `app.cnvs/whiteboard` — [browse](https://registry.modelcontextprotocol.io/v0/servers?search=cnvs)\n- **cnvs.app `/.well-known/mcp.json`** — links both skills\n- **cnvs.app `/.well-known/mcp/server.json`** — MCP Registry entry with publisher-provided `_meta.skills[]`\n- **cnvs.app `/llms.txt`** — LLM-friendly full reference\n- **[`majiayu000/claude-skill-registry-core`](https://github.com/majiayu000/claude-skill-registry-core)** — `cnvs-whiteboard` listed (PR [#31](https://github.com/majiayu000/claude-skill-registry-core/pull/31) merged 2026-05-04). `mcp-listen` intentionally held back; see *Registry status* on the `mcp-listen/` section above.\n- **Lobehub** (used by Hermes agent) — both skills imported; MCP server submitted\n\n### Planned / under consideration\n\nNotes for future expansion of distribution. Not active yet — kept here so the next maintenance window doesn't have to re-discover the landscape.\n\n- **[`majiayu000/claude-skill-registry-core`](https://github.com/majiayu000/claude-skill-registry-core)** — re-submit `mcp-listen` as a separate PR now that PR [#40](https://github.com/majiayu000/claude-skill-registry-core/pull/40) (directory archives + bundled-script security scanning) is merged. `scripts/listen.mjs` is even hardcoded into their test assertions, so the pipeline already exercises our exact case.\n- **[`daymade/claude-code-skills`](https://github.com/daymade/claude-code-skills)** (vendored model) — fork, copy `cnvs-whiteboard/` and `mcp-listen/` directly into their tree (their layout already expects `scripts/`/`references/`/`assets/`), update `marketplace.json`, single PR for both skills. No bundled-files concern because the files are copied in.\n- **[`VoltAgent/awesome-agent-skills`](https://github.com/VoltAgent/awesome-agent-skills)** (curated awesome-list, 20k ⭐) — markdown link, ≤10-word description. Their CONTRIBUTING explicitly excludes brand-new skills (\"give your skill time to mature and gain users before submitting\"); revisit once there's documented external usage.\n- **[`sickn33/antigravity-awesome-skills`](https://github.com/sickn33/antigravity-awesome-skills)** (36k ⭐) — manual path: fork, add `skills/<name>/SKILL.md`, run `npm run validate`. Their `<!-- registry-sync: ... -->` header in README suggests automated pull from upstream registries, so a successful entry on `majiayu000/claude-skill-registry-core` *may* propagate here without a separate PR — confirm before submitting twice.\n- **[`agentskills/agentskills`](https://github.com/agentskills/agentskills)** (17.8k ⭐, the spec org behind agentskills.io) — investigate whether they accept reference implementations; `mcp-listen` as a worked example of MCP `resources/subscribe` consumption could fit there.\n- **`vercel-labs/agent-skills`** / **`vercel-labs/skills`** — almost certainly curated, but read CONTRIBUTING before ruling out.\n\nSkipped intentionally: `anthropics/skills` (curated, no community PRs); personal collections under ~100 ⭐; language-specific lists unless a relevant audience emerges.\n\n## License\n\nMIT. See [LICENSE](./LICENSE).\n",
  "bytes": 12787,
  "sha": "b91aad15e303b440a03b0f98c30563a8596c49832ad4f28ddf88534b85f2656b",
  "repo_slug": "lksrz/cnvs-whiteboard-skills",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_app_cnvs_whiteboard_c81dcfe4/readme"
}