Home
Softono
miro-mcp-server

miro-mcp-server

Open source MIT Go
24
Stars
10
Forks
0
Issues
2
Watchers
1 week
Last Commit

About miro-mcp-server

MCP server for controlling Miro whiteboards with AI assistants

Platforms

Web Self-hosted

Languages

Go

Links

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.

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

CI Go Report Card License: MIT MCP Context — full MCP Context — essentials


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
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
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

Validated by SkillCheck Pro

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. Six 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 92-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 (92 tools) costs roughly 15.5K tokens of preload — about 7.8% of a 200K Claude context. For sessions where that footprint matters, set MIRO_TOOLS_PROFILE=essentials in your client config; the server then registers a curated 15-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.) % of 200K context
full (default) 92 ~15,500 7.8%
essentials 15 ~2,400 1.2%

Savings: ~13,100 tokens (84.5% 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 92 Tools

Board Management (9)
Tool Description
miro_list_boards List accessible boards
miro_find_board Find board by name
miro_get_board Get board details
miro_get_board_summary Get board stats and item counts
miro_get_board_content Get all board content for AI analysis
miro_create_board Create a new board
miro_copy_board Copy an existing board
miro_update_board Update board name/description
miro_delete_board Delete a board
Board Members (5)
Tool Description
miro_list_board_members List users with access
miro_get_board_member Get member details
miro_share_board Share board via email (requires MIRO_SHARE_ALLOWED_DOMAINS; fail-closed by default)
miro_update_board_member Update member role (Destructive: prompts before role escalation)
miro_remove_board_member Remove member from board

Sharing and role-change tools are guarded for prompt-injection safety. See SECURITY.md and CONFIG.md.

Create Items (18)
Tool Description
miro_create_sticky Create a sticky note
miro_create_sticky_grid Create stickies in a grid layout
miro_create_shape Create a shape (rectangle, circle, etc.)
miro_create_flowchart_shape Create flowchart shape (experimental API)
miro_create_text Create text element
miro_create_frame Create a frame container
miro_create_card Create a card with due date
miro_create_app_card Create app card with custom fields
miro_create_image Add image from URL
miro_upload_image Upload local image file
miro_upload_document Upload local document file (PDF, DOCX, etc.)
miro_create_doc Create Markdown document
miro_create_document Add document from URL
miro_create_embed Embed YouTube, Figma, etc.
miro_create_connector Connect two items with arrow
miro_create_group Group items together
miro_create_mindmap_node Create mindmap node
miro_bulk_create Create multiple items at once
Frames (4)
Tool Description
miro_get_frame Get frame details
miro_update_frame Update frame title/color/size
miro_delete_frame Delete a frame
miro_get_frame_items List items inside a frame
Mindmaps (3)
Tool Description
miro_get_mindmap_node Get node details
miro_list_mindmap_nodes List all mindmap nodes
miro_delete_mindmap_node Delete a mindmap node
Read Items (8)
Tool Description
miro_list_items List items on a board
miro_list_all_items Get ALL items with auto-pagination
miro_get_item Get item details
miro_get_image Get image details and Miro-hosted URL
miro_get_document Get document details and Miro-hosted URL
miro_get_app_card Get app card details
miro_get_doc Get Markdown document content
miro_search_board Search items by content
Update & Delete Items (18)
Tool Description
miro_update_item Update item content/position/color
miro_update_sticky Update sticky note (shape, color)
miro_update_shape Update shape (fill, text color, type)
miro_update_text Update text element
miro_update_card Update card fields
miro_update_image Update image properties
miro_update_image_from_file Replace image file on existing item
miro_update_document Update document properties
miro_update_document_from_file Replace document file on existing item
miro_update_embed Update embed properties
miro_update_group Update group properties
miro_update_app_card Update app card fields
miro_bulk_update Update multiple items at once
miro_delete_item Delete an item
miro_delete_app_card Delete an app card
miro_update_doc Update document content (full or find-and-replace)
miro_delete_doc Delete a Markdown document
miro_bulk_delete Delete multiple items at once
Tags (9)
Tool Description
miro_create_tag Create a tag
miro_list_tags List all tags on board
miro_get_tag Get tag details by ID
miro_attach_tag Attach tag to item
miro_detach_tag Remove tag from item
miro_get_item_tags Get tags on an item
miro_get_items_by_tag Get all items with a specific tag
miro_update_tag Update tag name/color
miro_delete_tag Delete a tag
Connectors (4)
Tool Description
miro_list_connectors List all connectors
miro_get_connector Get connector details
miro_update_connector Update connector style/caption
miro_delete_connector Delete a connector
Groups (4)
Tool Description
miro_list_groups List all groups on board
miro_get_group Get group details
miro_get_group_items List items in a group
miro_delete_group Delete or ungroup a group
Export (4)
Tool Description
miro_get_board_picture Get board thumbnail
miro_create_export_job Export to PDF/SVG (Enterprise)
miro_get_export_job_status Check export progress
miro_get_export_job_results Get download links
Tables (2)
Tool Description
miro_list_tables List tables (data_table_format) on a board
miro_get_table Get table metadata by ID
Diagrams & Audit (3)
Tool Description
miro_generate_diagram Create diagram from Mermaid syntax
miro_get_audit_log Query local execution log
miro_get_desire_paths Query agent normalization patterns (what agents sent vs. what got auto-corrected)

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. Here's how they compare:

Feature This Server Official Miro MCP
Last changelog entry April 2026 January 2026
Tools 92 (or 15 in essentials profile) 13
Transport stdio + HTTP HTTPS only (hosted)
Self-hosting Yes No
Offline mode Yes No
Auth Token + OAuth2 OAuth 2.1 (admin approval)
Diagram generation Mermaid syntax Custom DSL (flowchart, UML, ER)
AI context No Yes (exploration, summaries, code workflows)
Bulk operations Yes No
Mindmaps Yes No
Tags & Groups Yes No
Connectors CRUD Yes No
Export Yes (PDF/SVG) No
MCP Resources 3 No
MCP Prompts 5 workflows 2 (code-focused)
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

When to use the official server: You want zero-setup via plugin marketplace, OAuth 2.1 enterprise security, AI-powered board context extraction, or code-to-board workflows.

When to use this server: You need full API coverage (92 vs 13 tools, or a tunable 15-tool essentials mode), offline/self-hosted operation, bulk ops, mindmaps, tags, connectors, export, or a lightweight binary.

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 92 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 Full access to all 92 tools
Team Full access to all 92 tools
Business Full access to all 92 tools
Enterprise Full access + export to PDF/SVG

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. GitHub stars
mediawiki-mcp-server Connect AI to any MediaWiki wiki. Search, read, edit wiki content. GitHub stars
nordic-registry-mcp-server Access Nordic business registries. Look up companies across Norway, Denmark, Finland, Sweden. GitHub stars
productplan-mcp-server Talk to your ProductPlan roadmaps. Query OKRs, ideas, launches. GitHub stars
tilbudstrolden-mcp Nordic grocery deal hunting. Find offers, plan meals, track spending. GitHub stars
mcp-servercard-go Go library for SEP-2127 Server Cards. Pre-connect discovery for MCP servers. GitHub stars

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.