Miro MCP Server - ADR-005 Resource Server Pattern (OAuth handled by Claude.ai)
Config is the same across clients — only the file and path differ.
{
"mcpServers": {
"miro-mcp-resource-server": {
"command": "<see-readme>",
"args": []
}
}
}Are you the author?
Add this badge to your README to show your security score and help users find safe servers.
A production-ready Model Context Protocol (MCP) server for Miro board manipulation, built in Rust with OAuth2 authentication. Enables Claude AI to programmatically create and manage Miro boards, with special focus on visualizing agile squad organizational structures.
No automated test available for this server. Check the GitHub README for setup instructions.
Five weighted categories — click any category to see the underlying evidence.
No known CVEs.
No package registry to scan.
Click any tool to inspect its schema.
Be the first to review
Have you used this server?
Share your experience — it helps other developers decide.
Sign in to write a review.
Others in design / productivity
Persistent memory using a knowledge graph
Dynamic problem-solving through sequential thought chains
MCP server for accessing Figma plugin console logs and screenshots via Cloudflare Workers or local mode
mini cli search engine for your docs, knowledge bases, meeting notes, whatever. Tracking current sota approaches while being all local
MCP Security Weekly
Get CVE alerts and security updates for Miro Mcp Resource Server and similar servers.
Start a conversation
Ask a question, share a tip, or report an issue.
Sign in to join the discussion.
A production-ready Model Context Protocol (MCP) server for Miro board manipulation, built in Rust with OAuth2 authentication. Enables Claude AI to programmatically create and manage Miro boards, with special focus on visualizing agile squad organizational structures.
Create the configuration directory and file:
# Create config directory
mkdir -p ~/.config/mcp/miro-rust
# Copy example config
cp config.example.json ~/.config/mcp/miro-rust/config.json
# Generate encryption key
openssl rand -hex 32
# Edit config.json with your credentials
nano ~/.config/mcp/miro-rust/config.json
Configuration file (~/.config/mcp/miro-rust/config.json):
{
"client_id": "your_client_id_here",
"client_secret": "your_client_secret_here",
"redirect_uri": "http://localhost:3010/oauth/callback",
"encryption_key": "output_from_openssl_rand_hex_32",
"port": 3010
}
Configuration Fields (Resource Server Pattern):
client_id: Your Miro OAuth2 Client ID (for OAuth metadata endpoint)port: Server port (3010 for development)Note: No client_secret, redirect_uri, or encryption_key needed - Claude handles the OAuth flow
# Install dependencies and build
cargo build --release
# Run the server
cargo run --release
# Or run in development mode
cargo run
The MCP server exposes OAuth Protected Resource metadata at /.well-known/oauth-protected-resource. Claude will discover this endpoint and handle the OAuth flow automatically when you first use the MCP server.
miro-mcp-server/
├── src/
│ ├── auth/ # OAuth2 implementation
│ │ ├── oauth.rs # Authorization code flow with PKCE
│ │ ├── token_store.rs # AES-256-GCM encrypted token storage
│ │ └── types.rs # Authentication types and errors
│ ├── mcp/ # MCP protocol implementation
│ │ ├── server.rs # MCP server with rmcp framework
│ │ └── auth_handler.rs # OAuth callback handling
│ ├── miro/ # Miro API client
│ │ ├── client.rs # HTTP client with auto-refresh
│ │ └── types.rs # Miro API types (boards, items, etc.)
│ ├── config.rs # Environment configuration
│ ├── lib.rs # Library exports
│ └── main.rs # Entry point
├── planning/ # Agile planning artifacts
└── tests/ # Integration tests
list_boards: List all accessible Miro boardscreate_board: Create a new board with name and descriptioncreate_sticky_note: Create sticky notes with custom content, position, and color