{
  "markdown": "# JSON Canvas MCP Server\n\nA remote [Model Context Protocol](https://modelcontextprotocol.io) server for working with\n[JSON Canvas](https://jsoncanvas.org/spec/1.0/) files — the open infinite-canvas format used by\n[Obsidian](https://obsidian.md/blog/json-canvas/). Create, validate, read, edit, export, and\nsearch `.canvas` files, with an inline interactive canvas viewer.\n\nHosted by [MCPCentral](https://mcpcentral.io) at **`https://jsoncanvas.mcpcentral.io/mcp`**\n(Streamable HTTP). This repository is the public listing for the\n[MCP Registry](https://registry.modelcontextprotocol.io); the server itself is closed-source.\n\n<!-- Registry validation marker — must match server.json `name`. -->\nmcp-name: io.mcpcentral/jsoncanvas\n\n## Authentication\n\nThe endpoint requires **Microsoft Entra OAuth** via the MCPCentral gateway\n(`login.mcpcentral.io`). MCP clients perform the standard OAuth flow automatically: an\nunauthenticated request returns `401` with a `WWW-Authenticate` pointing at the\n[RFC 9728](https://datatracker.ietf.org/doc/html/rfc9728) metadata at\n`/.well-known/oauth-protected-resource`, and the client takes you through sign-in. **Canvases are\nstored privately per authenticated user.**\n\n## Client configuration\n\n**Claude Code**\n```bash\nclaude mcp add jsoncanvas --transport http https://jsoncanvas.mcpcentral.io/mcp\n```\n\n**Claude Desktop / other clients via `mcp-remote`**\n```json\n{\n  \"mcpServers\": {\n    \"jsoncanvas\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"mcp-remote\", \"https://jsoncanvas.mcpcentral.io/mcp\"]\n    }\n  }\n}\n```\n\nAny MCP client that supports remote Streamable HTTP servers with OAuth (Claude, Goose,\nOpenAI connectors, MCP Inspector) can connect.\n\n## Tools\n\n| Tool | Description |\n| --- | --- |\n| `create_canvas` | Create a canvas from nodes (+ optional edges); stored under a date-prefixed `.canvas` name. |\n| `validate_canvas` | Validate canvas data against the JSON Canvas 1.0 spec. |\n| `read_canvas` | Read a stored canvas and return its nodes and edges. |\n| `list_canvases` | List your stored canvases. |\n| `edit_canvas` | Atomic batch add/update/remove of nodes and edges (removing a node cascades its edges). |\n| `export_canvas` | Export to `markdown`, `svg`, `mermaid`, or `png` (full-fidelity raster via Browser Rendering). |\n| `search_canvases` | Case-insensitive field-level search across your canvases. |\n\n`create_canvas`, `read_canvas`, and `edit_canvas` carry MCP Apps UI metadata so supporting hosts\nrender the result inline in an interactive pan/zoom viewer.\n\n## Resources\n\n- `canvas://schema` — JSON Schema for canvas files.\n- `canvas://examples/basic` — a simple two-node example canvas.\n- `ui://canvas/viewer.html` — the interactive read-only viewer (MCP Apps UI).\n\n## Security\n\n- **Per-user isolation** — every canvas is scoped to the authenticated user; no cross-user reads.\n- **Auth required** — all tool calls require a valid Entra-issued bearer token.\n- **Hardened** — strict input/size caps, bounded search, accurate tool annotations, and an\n  SSRF-blocked PNG renderer (the headless browser cannot be coerced into outbound requests).\n- Report vulnerabilities per [SECURITY.md](./SECURITY.md). **Please do not** open public issues\n  for security reports.\n\n## License\n\n[MIT](./LICENSE).\n",
  "bytes": 3251,
  "sha": "ea22169ccaed015deadfc72ecad0756e31fec65181b410ce9ca747b96487414a",
  "repo_slug": "mcpcentral-io/jsoncanvas-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_mcpcentral_jsoncanvas_32aa2c71/readme"
}