OM

olgasafonova/miro-mcp-server

API development
28 stars 0 forks Quality 59 Trend 33

MCP server for controlling Miro whiteboards with AI assistants

Overview

Run your Miro workshops, retros, and planning sessions from the command line. Read boards, create stickies, organize frames, and generate diagrams through Claude, Cursor, or any MCP client. — Not officially affiliated with Miro. See official options below. 1. Go to miro.com/app/settings/user-profile/apps 2. Create an app with boards:read and boards:write permissions 3. Install to your team and copy the token Tell us what made it hard — even one sentence helps. - "Add a yellow sticky saying 'Review PRs'" - "Create a flowchart: Start → Decision → End" - "What boards do I have?" - "Share the Design board with [email protected]" - "Create a mindmap with 'Project Ideas' as root" For Claude clients that support skills (Claude Code, Claude Desktop), this repo includes a miro-workflow skill that describes how to assemble a few common board layouts from the atomic create-item tools.

README

Miro MCP Server

Run your Miro workshops, retros, and planning sessions from the command line. Read boards, create stickies, organize frames, and generate diagrams through Claude, Cursor, or any MCP client.

Community project — Not officially affiliated with Miro. See official options below.

110 tools | Single binary | All platforms | All major AI tools


Documentation

Document Description
QUICKSTART.md Get running in 2 minutes
SETUP.md Full setup for all AI tools
CONFIG.md Configuration reference
PERFORMANCE.md Optimization guide
CHANGELOG.md Version history
ERRORS.md Error handling & troubleshooting

Quick Start

1. Install

Homebrew (macOS/Linux):

brew tap olgasafonova/tap && brew install miro-mcp-server

One-liner (macOS/Linux):

curl -fsSL https://raw.githubusercontent.com/olgasafonova/miro-mcp-server/main/install.sh | sh

Docker:

docker pull ghcr.io/olgasafonova/miro-mcp-server:latest

Manual download: See SETUP.md for all platforms

2. Get a Miro Token

  1. Go to miro.com/app/settings/user-profile/apps
  2. Create an app with boards:read and boards:write permissions
  3. Install to your team and copy the token

3. Configure Your AI Tool

Claude Code:

claude mcp add miro -e MIRO_ACCESS_TOKEN=your-token -- miro-mcp-server

Claude Desktop / Cursor / VS Code: See SETUP.md

Cursor Marketplace:

/add-plugin miro

Not working? Tell us what made it hard — even one sentence helps.


What You Can Do

Category Examples
Boards Create, copy, delete, update, share, list members
Items Sticky notes, shapes, text, cards, app cards, images, documents, frames, docs
Diagrams Generate flowcharts and sequence diagrams from Mermaid; list and inspect native diagram items
Docs Create and manage Markdown documents on boards
Upload Upload and replace local image and document files on boards
Tables Discover and inspect tables on boards
Mindmaps Create mindmap nodes with parent-child relationships
Code Widgets Syntax-highlighted code snippets on boards (v2-experimental)
Bulk Ops Create multiple items at once, sticky grids
Tags Create, attach, update, and organize with tags
Groups Group, list, and manage item groups
Connectors Connect items with styled arrows
Export Board thumbnails, PDF/SVG export (Enterprise)

Voice Examples

  • “Add a yellow sticky saying ‘Review PRs’”
  • “Create a flowchart: Start → Decision → End”
  • “What boards do I have?”
  • “Share the Design board with [email protected]”
  • “Create a mindmap with ‘Project Ideas’ as root”

Companion Skill: miro-workflow

For Claude clients that support skills (Claude Code, Claude Desktop), this repo includes a miro-workflow skill that describes how to assemble a few common board layouts from the atomic create-item tools.

Five layouts are covered:

Workflow Trigger phrase examples
Sprint Board “set up a sprint board for sprint 42”
Retrospective “create a retro board for our team”
Brainstorm “brainstorm board for [topic]”
Story Map “map the user journey for [product]”
Kanban “kanban for our backlog”

Each one specifies frame sizes, gap math, sticky placement, color conventions (the Miro API takes hex for frame fills and named values for stickies; two different vocabularies), and the tool-call order to follow. For single-tool calls (“add one sticky”) or read-only inspection, the atomic tools are usually enough on their own.

The skill is new and likely needs adjustment as more layouts get exercised against real boards. Files live under skills/miro-workflow/. Claude Code auto-discovers skills from ~/Projects/claude-code-config/skills/; for other hosts, follow your client’s skill installation docs.

The badge above is awarded by SkillCheck Pro; this skill currently scores 92/100 with zero Critical issues and zero Warnings. Skills in this repo earn the badge at ≥90/100 with zero Critical and zero Warnings; below that bar, the badge is dropped until the skill passes again.


Companion CLI: miro-cli

For shell-first usage, this server has a sibling: miro-cli. Same author, same Miro API coverage, different runtime. One verb per endpoint, JSON in and out, plus a local SQLite mirror for offline search. Reach for it when you’re scripting Miro in CI, bulk-migrating stickies between boards, or querying boards offline without burning API quota.

The MCP server and the CLI overlap deliberately. Use the MCP server when an agent runtime is in the loop (Claude Code, Claude Desktop, Cursor). Use the CLI when bash, Makefiles, or CI are. Use both if you want.

Install:

brew install olgasafonova/tap/miro-cli
# or
go install github.com/olgasafonova/miro-cli/cmd/miro-cli@latest

Companion MCP Apps server: miro-mcp-apps

If you want Miro data to render as interactive UI in the chat (cards, tables, color clusters, SVG graphs) instead of streamed JSON, there’s a TypeScript sibling: miro-mcp-apps. Eleven tools built on the MCP Apps extension (SEP-1865), reusing the same MIRO_ACCESS_TOKEN. The two servers run side-by-side: this one for the 110-tool CRUD surface, that one for visual at-a-glance views.

You want… Use
Programmatic control: create/update/move/connect items, generate diagrams miro-mcp-server (this repo)
Visual board summaries, sticky color clusters, connector graphs rendered inline miro-mcp-apps
Same in bash, CI, or a Makefile miro-cli

The MCP Apps pattern is TypeScript-only today (Go SDK has no ext-apps helpers), which is why this companion lives in a separate repo instead of bolting onto the Go server.


Token Efficiency

The full tool surface (110 tools) costs roughly 20.8K tokens of preload; the essentials profile trims that to ~2.8K. For sessions where that footprint matters, set MIRO_TOOLS_PROFILE=essentials in your client config; the server then registers a curated 14-tool subset (boards, list/find/search, sticky/text/frame/connector creation, list/get/update/delete items) plus one discovery meta-tool. Agents reach the rest via miro_tool_search on demand.

Profile Tools Preload tokens (est.)
full (default) 110 ~20,795
essentials 15 ~2,848

Savings: ~17,760 tokens (86.2% reduction) when you opt into essentials. Description tokens are exact (JSON-marshaled); schema cost is estimated at 200 bytes per tool. Reproduce locally with go run ./cmd/token-count/.

miro_tool_search(query?, category?, limit?) is registered in both profiles. It searches tool names, titles, descriptions, and categories with weighted keyword scoring (name 3×, title 2×, category 2.5×, description 1×), returns up to 50 matches, and never recommends itself. Use it when you don’t know which tool to reach for, or to scope to a category before browsing. Empty query plus a category returns the category’s tools alphabetically.

See CONFIG.md for the full env-var reference.


All 110 Tools


Diagram Generation

Create flowcharts and sequence diagrams from Mermaid syntax:

Flowchart:

flowchart TB
    A[Start] --> B{Decision}
    B -->|Yes| C[Success]
    B -->|No| D[Retry]
    D --> B

Sequence Diagram:

sequenceDiagram
    Alice->>Bob: Hello Bob!
    Bob-->>Alice: Hi Alice!

Supported: flowchart/graph, sequenceDiagram, directions (TB/LR/BT/RL), shapes ([] rectangle, {} diamond, (()) circle), labeled edges.


Why This Server?

Feature This Server TypeScript alternatives
Runtime Single binary Requires Node.js
Size ~14MB 100MB+ with node_modules
Startup ~50ms 500ms-2s
Memory ~10MB idle ~50MB idle
Diagram generation Built-in Mermaid parser AI-based
Rate limiting Automatic with backoff Manual
Caching 2-minute TTL None
Circuit breaker Yes No

Official vs Community

Miro released their official MCP server in December 2025 and has grown it substantially since. Comparison refreshed 18-09-2026 by enumerating the 45 tools the hosted server actually registers at mcp.miro.com, rather than counting the documented set — the docs lag the deployment in both directions, and the surface moves fast enough that a count is perishable: 65 on 13-08-2026, 63 on 18-08, 61 on 09-09, 45 on 18-09.

The September drop is a consolidation rather than attrition. Every one of the sixteen removed tools is a content read or write path superseded by the canvas_* family — board_list_items, board_show, context_explore, context_get, all three diagram_*, all three doc_*, all four layout_* — and the server’s own connection instructions now lead with Canvas Composer SVG as “Miro’s unified interaction/representation protocol for the canvas”. The 09-09 pass saw it coming: layout_* were still registered but already self-describing as deprecated in favour of canvas. Earlier churn: board_trash and space_delete, present on 17-08-2026, were gone the next day, leaving the surface with no hard-destructive verbs; all five code_widget_* tools present on 18-08 were gone by 09-09, while canvas_search, canvas_load_format_skill and content_item_list_roles arrived. Recent additions come from their changelogs on new MCP tools and code widget endpoints.

Feature This Server Official Miro MCP
Tools 110 (or 15 in essentials profile) 45
Transport stdio + HTTP HTTPS only (hosted at mcp.miro.com)
Self-hosting Yes No
Offline mode Yes No
Auth Token + OAuth2 OAuth 2.1, dynamic client registration (Enterprise orgs need admin enablement)
Board list metadata id, owner, team, created/modified timestamps name and URL
Diagram generation Mermaid, parsed locally; native diagram items readable via miro_list_diagrams/miro_get_diagram None since 18-09-2026 (diagram_create_mermaid, diagram_update_mermaid and diagram_get_mermaid_instructions removed; diagrams now go through the canvas SVG tools)
AI context No None since 18-09-2026 (context_explore and context_get removed)
Layout DSL Composed from bulk create + the miro-workflow skill None since 18-09-2026 — all four layout_* tools removed, having self-described as deprecated in favour of the canvas tools on 09-09
Canvas as SVG Read + create + update (data-miro-id diff; local geometry transform; spatial approximation). Reads scope to a single frame via frame_id, and read output is directly re-submittable to the update tool Yes (read, create, update from SVG). Reads scope to a rectangle or a widget_ids list and refuse areas above 500 widgets; canvas_search (pattern and regex over the SVG) narrows the scope first. Read output is re-escaped, so it cannot be fed back to the update tool verbatim
Spaces & sections No Yes (10 tools) — workspace-level grouping of boards, not board content
Comments Yes (create, list, get, reply, resolve; v2-experimental) Yes (create, list, reply, resolve)
Prototypes No Yes (read, create, upload URL)
Code widgets 6 tools incl. position move (v2-experimental) None since 09-09-2026 (5 tools on 18-08-2026)
Docs & Tables Doc formats + table read Tables only (create/sync/history); all three doc_* tools removed 18-09-2026
Images Create, upload, update from file Create, upload URL, get data/URL
Bulk operations Yes Partial (table_sync_rows upsert only)
Mindmaps Yes No
Tags & Groups Yes No
Connectors CRUD Yes No
Item-level CRUD Yes (sticky, shape, text, card, image, document, embed, frame) Canvas SVG, not per-item verbs
Board sharing / members Yes (allowlist-gated) Sharing, role updates and content_item_list_roles for the read side; no member CRUD
Export Yes (PDF/SVG) No
Current user Derived from board owner Yes (user_who_am_i)
MCP Resources 3 No
MCP Prompts 5 workflows Bundled agent skills (browse, code-review, diagram, doc, table)
Runtime Single Go binary Hosted (closed-source)
Rate limiting Adaptive N/A (hosted)
Caching Built-in (2min TTL) N/A
Metrics Prometheus No
OpenTelemetry Built-in (mcp-otel-go, OTel Registry) No

Where the differences come from. Spaces, sections, canvas-SVG and prototypes have no endpoints in the public REST API v2 — checked 13-08-2026 against the 114-path OpenAPI spec tracked in api-tracking/, and re-checked by probing the live API, since the spec omits endpoints Miro does ship. Those run on Miro-internal APIs. The reverse also holds: mindmaps, tags, groups, connectors and export are public REST surfaces the official server has not wrapped.

Board context used to be a design difference rather than a gap, and as of 18-09-2026 it is neither: context_get returned a server-side AI summary of a board and has been removed along with context_explore. miro_get_board_content returns the structured content itself — items by type, frame hierarchy, connectors and tags — and lets the model already in your session do the summarizing, with no second inference hop.

When to use the official server: You want zero-setup via plugin marketplace, OAuth 2.1 enterprise security, spaces and sections, comments, or SVG/prototype workflows. Board context extraction is no longer among them — those tools were removed on 18-09-2026.

When to use this server: You need full REST coverage (110 tools, or a tunable 15-tool essentials mode), offline/self-hosted operation, richer board listing metadata, bulk ops, mindmaps, tags, connectors, or export.

Both can coexist — use different MCP server names in your config.


Performance

  • Caching: 2-minute TTL reduces API calls
  • Rate limiting: Adapts to Miro’s rate limit headers
  • Circuit breaker: Isolates failing endpoints
  • Parallel bulk ops: Creates items concurrently
  • Token validation: Fails fast on startup with clear error
  • Transient error retry: Auto-retries 502/503/504 with backoff
  • OpenTelemetry: Built-in tracing and metrics via mcp-otel-go (OTel Registry)

See PERFORMANCE.md for optimization tips and benchmarks.


HTTP Mode Endpoints

When running with -http :8080:

Endpoint Description
/ MCP protocol (Streamable HTTP)
/health Health check (JSON)
/health?deep=true Deep health check (tests Miro API)
/metrics Prometheus metrics
/.well-known/mcp-server-card SEP-2127 Server Card (JSON) via mcp-servercard-go

Health check response:

{
  "status": "healthy",
  "server": "miro-mcp-server",
  "version": "1.21.0",
  "uptime": "2h30m",
  "components": {
    "config": {"status": "healthy"},
    "miro_api": {"status": "healthy", "latency": "145ms"}
  }
}

Development

# Build
make build

# Run tests
make test

# Run with coverage
make test-cover

# Lint
make lint

# Build for all platforms
make build-all

# See all targets
make help

Docker Deployment

Quick start:

# Using Docker Compose
export MIRO_ACCESS_TOKEN=your-token
docker compose up -d

# Or build and run manually
docker build -t miro-mcp-server .
docker run -e MIRO_ACCESS_TOKEN=xxx -p 8080:8080 miro-mcp-server

docker-compose.yml features:

  • Health checks configured
  • Resource limits template
  • Environment variable passthrough

Debugging with MCP Inspector

Test and debug the server interactively with MCP Inspector:

# Install and run (no setup required)
npx @modelcontextprotocol/inspector miro-mcp-server

# With environment variables
MIRO_ACCESS_TOKEN=your-token npx @modelcontextprotocol/inspector miro-mcp-server

Open http://localhost:6274 to:

  • Browse all 110 tools with their schemas
  • Test tool calls interactively
  • View raw JSON-RPC messages
  • Debug parameter validation

See SETUP.md for more debugging options.


Supported Platforms

Platform Binary
macOS (Apple Silicon) miro-mcp-server-darwin-arm64
macOS (Intel) miro-mcp-server-darwin-amd64
Linux (x64) miro-mcp-server-linux-amd64
Linux (ARM64) miro-mcp-server-linux-arm64
Windows (x64) miro-mcp-server-windows-amd64.exe
Docker ghcr.io/olgasafonova/miro-mcp-server

Supported AI Tools

Tool Status
Claude Code Tested
Claude Desktop Tested
Cursor Tested
VS Code + GitHub Copilot Supported
Windsurf Supported
Replit Supported
Any MCP-compatible client Supported

See SETUP.md for configuration guides.


Account Compatibility

Account Type Support
Free 106 tools
Team 106 tools
Business 106 tools
Enterprise All 110 tools

Four tools need an Enterprise plan and fail with a hint saying so: the three PDF/SVG export tools (miro_create_export_job, miro_get_export_job_status, miro_get_export_job_results) and miro_get_org_audit_logs, which additionally needs the auditlogs:read scope. miro_get_board_picture works on every plan. Everything else works on any plan.

The 6 code widget tools and 5 comment tools use Miro’s v2-experimental API; availability may vary by account or plan, and the endpoints may change before GA.


Like This Project?

If this server saved you time, consider giving it a ⭐ on GitHub. It helps others discover the project.


More MCP Servers

Check out my other MCP servers:

Server Description Stars
gleif-mcp-server Access GLEIF LEI database. Look up company identities, verify legal entities.
mediawiki-mcp-server Connect AI to any MediaWiki wiki. Search, read, edit wiki content.
nordic-registry-mcp-server Access Nordic business registries. Look up companies across Norway, Denmark, Finland, Sweden.
productplan-mcp-server Talk to your ProductPlan roadmaps. Query OKRs, ideas, launches.
tilbudstrolden-mcp Nordic grocery deal hunting. Find offers, plan meals, track spending.
mcp-servercard-go Go library for SEP-2127 Server Cards. Pre-connect discovery for MCP servers.

License

MIT


Built for the Miro and MCP communities.

Miro is a trademark of Miro Inc. This project is not affiliated with or endorsed by Miro.

View this README on GitHub

Install

docker run -e MIRO_ACCESS_TOKEN=xxx -p 8080:8080 miro-mcp-server