Celi Miro MCP
Provides tools for extracting and understanding Miro board architecture diagrams, including fetching board items and connectors, resolving semantic nodes and relationships, searching components, and retrieving a compressed architecture graph for AI agents.
This server does not currently have a deployable release on Glama. Follow the repository's setup instructions to install and configure it for your MCP client, including any required credentials and local dependencies.
Celi Miro MCP
Model Context Protocol (MCP) server for converting live Miro architecture diagrams into semantic, AI-ready graph context for coding assistants.

Executive Overview
Celi Miro MCP enables modern AI coding agents—including Antigravity, Claude Code, and Cursor—to deeply inspect, traverse, and understand architectural diagrams created on Miro whiteboards.
Instead of manually exporting diagrams, screenshotting boards, or manually describing system architectures, you can paste any Miro board URL directly into your AI chat:
"Inspect the architecture in this board and implement the missing authentication service:
https://miro.com/app/board/uXjVHCjkewI=/"Your AI assistant automatically queries the Celi Miro MCP server, fetches board items and connectors, parses semantic groupings and relationships, compresses the topology into an optimal context graph, and applies the architecture directly to your codebase.
Related MCP server: Excalidraw Architect MCP
Key Capabilities
Feature | Description |
Zero Manual Exports | Point your AI assistant to any Miro board URL; extraction and traversal occur in real time. |
Semantic Graph Reduction | Translates raw Miro shapes, sticky notes, cards, and text boxes into structured nodes and edges. |
Short-ID Context Compression | Assigns compact IDs ( |
In-Memory TTL Caching | Prevents redundant Miro API requests during multi-turn developer chat conversations. |
Dual Transport Support | Operates over standard input/output ( |
Multi-Editor Ready | Native configurations for Google Antigravity, Cursor, and Anthropic Claude Code. |
System Architecture & Data Flow

The pipeline transforms raw whiteboard visual primitives into topological system architectures through four discrete phases:
[ Miro Board URL ]
│
▼
1. URL Parser & Guard ─────── Validates board URL syntax & token presence
│
▼
2. Miro REST Client ─────── Paginates /v2/boards/{board_id}/items & /connectors
│
▼
3. Graph Engine ─────── Filters shapes, cleans HTML, resolves labels & groups
│
▼
4. Semantic Reducer ─────── Builds adjacency graph, generates short-ID map (n1, n2...)
│
▼
[ FastMCP Server ] ─────── Delivers context to Antigravity, Claude Code, or CursorRequest Lifecycle Sequence
sequenceDiagram
autonumber
actor Dev as Developer
participant Agent as AI Coding Agent (Antigravity / Cursor)
participant MCP as Celi Miro MCP Server
participant Miro as Miro REST API v2
Dev->>Agent: "Analyze architecture: https://miro.com/app/board/uXjV.../"
Agent->>MCP: get_miro_architecture(board_url)
MCP->>MCP: Parse board ID & verify auth header
MCP->>Miro: GET /v2/boards/{board_id}/items (paginated)
Miro-->>MCP: Raw items (shapes, cards, text)
MCP->>Miro: GET /v2/boards/{board_id}/connectors (paginated)
Miro-->>MCP: Raw connectors & captions
MCP->>MCP: Strip HTML, resolve node labels & group hierarchy
MCP->>MCP: Build adjacency list & compress to compact graph
MCP-->>Agent: JSON semantic architecture graph + token map
Agent->>Dev: Delivers precise architectural insights & code scaffoldingMCP Tools Reference

The server exposes four focused MCP tools designed for agentic reasoning:
1. get_miro_architecture
Extracts the complete semantic architecture graph for a given Miro board.
Parameters:
board_url(string, required): Full Miro board URL (e.g.,https://miro.com/app/board/uXjVHCjkewI=/).force_refresh(boolean, optional, default:false): Bypass TTL cache and re-fetch directly from Miro.
Example Agent Query:
"What are all the services and databases defined on this architecture board?"
Response Format:
{ "success": true, "board_id": "uXjVHCjkewI=", "nodes": [ { "id": "n1", "label": "API Gateway", "type": "shape", "fill": "#2d9cdb" }, { "id": "n2", "label": "Authentication Service", "type": "shape", "fill": "#27ae60" }, { "id": "n3", "label": "User Database", "type": "shape", "fill": "#f2994a" } ], "edges": [ { "source": "n1", "target": "n2", "directed": true, "label": "POST /auth/login" }, { "source": "n2", "target": "n3", "directed": true, "label": "SQL Query" } ], "id_map": { "3458764512345678901": "n1", "3458764512345678902": "n2", "3458764512345678903": "n3" } }
2. get_miro_board_info
Lightweight pre-flight probe to verify token permissions and board accessibility without downloading the complete canvas.
Parameters:
board_url(string, required): Full Miro board URL.
Example Agent Query:
"Can I access this Miro board with my current credentials?"
Response Format:
{ "success": true, "board_id": "uXjVHCjkewI=", "accessible": true }
3. get_miro_node
Retrieves a specific component by its compressed node ID along with all immediate upstream and downstream connections.
Parameters:
board_url(string, required): Full Miro board URL.node_id(string, required): Compressed node ID (e.g.,"n2").force_refresh(boolean, optional, default:false): Force cache invalidation.
Example Agent Query:
"Inspect node n2: what services depend on it and what does it connect to?"
Response Format:
{ "success": true, "node": { "id": "n2", "label": "Authentication Service", "type": "shape" }, "connections": [ { "id": "n1", "label": "API Gateway", "direction": "incoming", "edge_label": "POST /auth/login" }, { "id": "n3", "label": "User Database", "direction": "outgoing", "edge_label": "SQL Query" } ] }
4. search_miro_architecture
Performs a case-insensitive search across all node labels on the board to locate specific components.
Parameters:
board_url(string, required): Full Miro board URL.query(string, required): Search term (e.g.,"database","redis","payment").force_refresh(boolean, optional, default:false): Force cache invalidation.
Example Agent Query:
"Search the board for any components related to 'payment' or 'checkout'."
Response Format:
{ "success": true, "query": "payment", "matches": [ { "id": "n7", "label": "Payment Processing Service", "type": "card" }, { "id": "n8", "label": "Stripe Webhook Handler", "type": "shape" } ] }
Installation & Setup
Prerequisites
Python 3.10 or later
A Miro account with a Personal Access Token (Generate Miro Token)
1. Clone & Install Dependencies
# Clone the repository
git clone <repo-url>
cd "miro MCP/project"
# Create a virtual environment
python -m venv .venv
source .venv/bin/activate # On Windows: .venv\Scripts\activate
# Install required dependencies
pip install -r requirements.txt2. Automated 1-Click Client Setup (Windows)
Use the built-in interactive setup script to configure your AI editors in seconds:
# Run the PowerShell setup script
cd install
.\setup_mcp.ps1Or double-click setup_mcp.bat. The installer will prompt for your Miro Access Token and automatically configure:
Google Antigravity (
~/.gemini/config/mcp_config.json)Cursor IDE (
~/.cursor/mcp.json)Claude Code CLI (
claude mcp add)
3. Manual Editor Configuration
A. Google Antigravity
Add the server entry to your global or workspace mcp_config.json:
{
"mcpServers": {
"celi-miro": {
"command": "python",
"args": ["-m", "mcp_data.server"],
"cwd": "C:/Users/USER/Desktop/miro MCP/project",
"env": {
"MIRO_ACCESS_TOKEN": "your_miro_access_token_here",
"MCP_TRANSPORT": "stdio"
}
}
}
}For HTTP transport mode:
{
"mcpServers": {
"celi-miro": {
"serverUrl": "http://127.0.0.1:8000/mcp",
"headers": {
"Authorization": "Bearer your_miro_access_token_here"
}
}
}
}B. Cursor IDE
Add to ~/.cursor/mcp.json:
{
"mcpServers": {
"celi-miro": {
"command": "python",
"args": ["-m", "mcp_data.server"],
"cwd": "C:/Users/USER/Desktop/miro MCP/project",
"env": {
"MIRO_ACCESS_TOKEN": "your_miro_access_token_here"
}
}
}
}C. Claude Code
Run the registration command in your terminal:
# stdio mode
claude mcp add --scope user celi-miro python -m mcp_data.server
# HTTP mode
claude mcp add --transport http --header "Authorization: Bearer YOUR_MIRO_TOKEN" --scope user celi-miro http://127.0.0.1:8000/mcpStandalone Pipeline Execution (main.py)
You can also run the extraction pipeline as a standalone CLI tool without launching an MCP server:
# Set environment variables in .env
MIRO_ACCESS_TOKEN=your_token_here
MIRO_BOARD_ID=your_board_id_here
MIRO_OUTPUT_DIR=miro_data
# Execute the pipeline
python main.pyGenerated Artifacts (miro_data/)
File | Purpose |
| Complete raw JSON array of all items on the board. |
| Complete raw JSON array of all board connectors and captions. |
| Compressed semantic graph featuring shortened IDs ( |
| Ultra-compact Markdown representation tailored for LLM prompt context. |
| Bi-directional mapping between raw Miro IDs and compressed short IDs. |
| Human-readable component relationship inventory. |
| Consolidated snapshot containing all items, connectors, and relations. |
Sample Markdown Output (architecture.md)
# Architecture Graph (uXjVHCjkewI=)
## Items
- n1: API Gateway (shape)
- n2: Authentication Service (shape)
- n3: User Database (shape)
- n4: Redis Session Store (shape)
## Relations
- n1 (API Gateway) -[POST /auth/login]-> n2 (Authentication Service)
- n2 (Authentication Service) -[SQL Query]-> n3 (User Database)
- n2 (Authentication Service) -[Cache Lookup]-> n4 (Redis Session Store)Docker & Remote Hosting
A production-ready Dockerfile is included for hosting Celi Miro MCP on container platforms (e.g., AWS ECS, Google Cloud Run, Railway):
# Build the Docker container
docker build -t celi-miro-mcp .
# Run with HTTP transport on port 8000
docker run -d \
-p 8000:8000 \
-e MCP_TRANSPORT=http \
-e PORT=8000 \
-e MIRO_ACCESS_TOKEN=your_token \
celi-miro-mcpTest the live endpoint:
curl http://localhost:8000/mcpEnvironment Variables Reference
Variable | Required | Default | Description |
| Yes (or | — | Miro API Personal Access Token. |
| Only for | — | Target Miro board identifier for standalone runs. |
| No |
| Transport protocol: |
| No |
| HTTP listen port when |
| No |
| Directory for files generated by |
Project Structure
project/
├── assets/ # AI-generated documentation graphics & diagrams
│ ├── miro_mcp_hero.jpg # Hero banner illustration
│ ├── mcp_pipeline.jpg # Technical architecture pipeline schematic
│ └── mcp_tools.jpg # 4-tool overview and query workflow diagram
├── install/ # One-click client installer scripts
│ ├── setup_mcp.ps1 # PowerShell automated configuration utility
│ └── setup_mcp.bat # Windows batch file launcher
├── mcp_data/ # MCP protocol server implementation
│ ├── __init__.py
│ ├── errors.py # Structured MCP error response builders
│ ├── miro_url.py # Miro URL validation & board ID extractor
│ ├── pipeline.py # Cached extraction pipeline with TTL
│ └── server.py # FastMCP server & tool definitions
├── client.py # Paginated Miro REST API v2 client
├── config.py # Environment configuration & constants
├── Dockerfile # Container build definition (Python 3.12-slim)
├── graph.py # Graph construction & short-ID compression
├── LICENSE # Non-Commercial Personal & Hobby Use License
├── main.py # Standalone local extraction entrypoint
├── parser.py # HTML tag stripping & node label extraction
├── README.md # Comprehensive documentation
├── requirements.txt # Pinned Python package dependencies
└── storage.py # JSON & Markdown export utilitiesError Codes & Troubleshooting
Error Code | HTTP Status | Meaning | Resolution |
| — | No access token was provided in header or env. | Add |
|
| Token is invalid, revoked, or expired. | Generate a new token in Miro Developer settings. |
|
| Token lacks permission for this specific board. | Confirm board is shared with the Miro account owning the token. |
|
| Board URL does not exist or was deleted. | Check board URL spelling and verify board exists. |
|
| Miro rate limit threshold reached. | Server respects |
| — | Provided string is not a valid Miro board link. | Ensure URL begins with |
| — | Requested node ID does not exist in graph. | Call |
License
This project is licensed under the Non-Commercial Personal & Hobby Use License.
Permitted: Personal, educational, experimentation, testing, and hobbyist projects are free of charge.
Strictly Prohibited: Selling, reselling, sublicensing, leasing, commercial distribution, or incorporating into commercial products/services without explicit prior written authorization from the Copyright Holder.
See LICENSE for the complete legal terms.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
This server cannot be deployed
Maintenance
Related MCP Connectors
AI Agent with Architectural Memory. Impact analysis (free), tests and code from the graph (pro).
Create and edit architecture diagrams from your AI agent; get an SVG and a live editable canvas.
Turn AI conversations into visual knowledge maps. Create, connect, search, and organize thoughts.
Turn calls and notes into process flow diagrams in Claude, ChatGPT, VS Code, Cursor, and Teams.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceProvides AI coding agents with an embedded knowledge graph and architecture governance tools, enabling blast radius analysis, compliance checks, and smart context extraction from codebases.Apache 2.0
- FlicenseNot gradedqualityAmaintenanceEnables AI coding assistants to turn architecture descriptions into auto-laid-out, hand-drawn diagrams across 25 types, then revise them in natural language and export SVG/PNG. It can also persist and query a version-controlled architecture knowledge graph, fully offline without API keys.-
- FlicenseNot gradedqualityAmaintenanceEnables AI coding assistants to generate, revise, and export auto-laid-out hand-drawn diagrams from architecture descriptions across many diagram types, and optionally maintain a queryable, version-controlled architecture knowledge graph.-
- FlicenseNot gradedqualityAmaintenanceEnables AI assistants in Cursor, Claude Code, and Windsurf to turn plain descriptions of components, actors, or data into auto-laid-out, editable hand-drawn diagrams across 25 types — including architecture, flowcharts, sequence diagrams, Gantt charts, and charts — with architecture-aware styling and natural-language revision. It can optionally persist a system as a version-controlled, queryable knowledge graph, and it runs fully offline with no API keys, exporting to SVG and PNG.-