Mural MCP Server
Provides tools to edit Mural board content: create and update sticky notes, text boxes, shapes, areas, images, and connectors; list and retrieve widgets; navigate workspaces, rooms, and murals; and create new murals.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Mural MCP ServerCreate a sticky note saying 'Project kickoff' in my workspace."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Mural MCP Server
MCP server for the Mural visual collaboration platform — focused on board content editing: sticky notes, shapes, text boxes, areas, images, and connectors.
Built with the Model Context Protocol SDK and TypeScript. Runs over stdio — compatible with any MCP client (Warp, Cursor, Claude Code, etc.).
Features
20 tools across 4 modules:
Board Editing — Write (13 tools)
Tool | Description |
| Batch-create sticky notes (1–1000) |
| Update text, position, color, size |
| Batch-create text boxes (1–1000) |
| Update a text box |
| Batch-create shapes — rectangle, circle, diamond, triangle, star, hexagon, and 50+ more |
| Update a shape |
| Create grouping areas |
| Update an area |
| Add image from public URL (auto-detects dimensions, max 10 MB) |
| Draw a connected arrow between two widgets |
| Connect multiple widget pairs in one call (up to 100) |
| Draw a freeform arrow (not snapped to widgets) |
| Delete any widget by ID |
Board Editing — Read (2 tools)
Tool | Description |
| List widgets (paginated, default 50, stripped to key fields) |
| Get a single widget by ID |
Navigation (4 tools)
Tool | Description |
| List accessible workspaces |
| List rooms in a workspace (default limit 50) |
| List murals in a room or workspace (default limit 50) |
| Get mural metadata |
Mural Management (1 tool)
Tool | Description |
| Create a new mural (defaults: infinite canvas, grey background) |
Related MCP server: miro-remote-mcp
Token Efficiency
All tool responses are optimized for minimal token usage:
Stripped responses — only decision-relevant fields are returned (id, type, position, text, style essentials)
Compact JSON — no pretty-printing, short keys (
w/h/bginstead ofwidth/height/backgroundColor)Batch summaries — create tools return
{summary, count, ids, preview}instead of full object dumpsPagination —
get_widgetsdefaults to 50 items with cursor-based paginationServer-side validation — shape types validated server-side (no bloated enums in schema)
Prerequisites
1. Register a Mural App
Go to app.mural.co → click your avatar → "Create and manage apps"
Click "New app"
Set the redirect URL to:
http://localhost:9876/callbackNote your Client ID and Client Secret
2. Install & Build
git clone https://github.com/janschmiedgen/mural-mcp.git
cd mural-mcp
npm install
npm run build3. One-Time OAuth Authentication
export MURAL_CLIENT_ID=your_client_id
export MURAL_CLIENT_SECRET=your_client_secret
npm run authThis opens your browser for Mural consent. Tokens are saved to ~/.mural-mcp/tokens.json and auto-refresh at runtime.
MCP Client Setup
Warp
Add as a CLI MCP Server in Settings → MCP Servers:
{
"command": "node",
"args": ["/path/to/mural-mcp/build/index.js"],
"env": {
"MURAL_CLIENT_ID": "your_client_id",
"MURAL_CLIENT_SECRET": "your_client_secret"
}
}Cursor
Add to ~/.cursor/mcp.json:
{
"mcpServers": {
"mural": {
"command": "node",
"args": ["/path/to/mural-mcp/build/index.js"],
"env": {
"MURAL_CLIENT_ID": "your_client_id",
"MURAL_CLIENT_SECRET": "your_client_secret"
}
}
}
}Claude Code
claude mcp add mural -- node /path/to/mural-mcp/build/index.jsSet MURAL_CLIENT_ID and MURAL_CLIENT_SECRET in your shell environment.
Configuration
Workspace Allowlist (optional)
Restrict access to specific workspaces by setting the MURAL_ALLOWED_WORKSPACES environment variable:
export MURAL_ALLOWED_WORKSPACES="workspace_id_1,workspace_id_2"If not set, all workspaces the authenticated user can access are available.
Development
npm install
npm run build # Compile TypeScript → build/
npm run dev # Run with tsx (hot reload)
npm run auth # Re-authenticate with MuralArchitecture
src/
├── index.ts # Entry point, registers tools, starts stdio transport
├── types.ts # TypeScript interfaces (Widget, Mural, Room, etc.)
├── auth/
│ ├── oauth.ts # OAuth2 + PKCE flow, token refresh
│ ├── token-store.ts # Token persistence (~/.mural-mcp/tokens.json)
│ └── workspace-guard.ts # Workspace allowlist guard
├── client/
│ └── mural-api.ts # HTTP client for Mural Public API v1
├── tools/
│ ├── widgets-write.ts # 13 write tools (create, update, connect, delete)
│ ├── widgets-read.ts # 2 read tools (get_widgets, get_widget)
│ ├── navigation.ts # 4 navigation tools (workspaces, rooms, murals)
│ └── mural-manage.ts # 1 management tool (create_mural)
└── utils/
└── strip.ts # Response strippers for token efficiencyTransport: stdio (no HTTP server at runtime)
Auth: OAuth2 + PKCE, tokens stored in
~/.mural-mcp/tokens.json, auto-refreshAPI: Mural Public API v1 (
https://app.mural.co/api/public/v1)
Mural API Notes
A few quirks discovered during development that may help contributors:
Arrow semantics: In the Mural API,
startRefIdis the widget the arrowhead points TO, andendRefIdis the tail. The arrowhead renders at the first point in the points array.Sticky note styles on creation: Only
fontSizeandtextAligncan be set during creation.backgroundColormust be set via a subsequent update call.Image upload: Requires a 3-step process: (1) download image, (2) create an asset URL via the API, (3) PUT the image to blob storage, (4) create the image widget referencing the asset name.
Vertical arrows:
connect_widgetsmay fail withWIDGET_SIZE_INVALIDwhen source and target are nearly vertically aligned (near-zero arrow width). Usecreate_arrow(freeform) as a fallback.
License
MIT
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseAqualityAmaintenanceMCP server for controlling Miro whiteboards with AI assistants. Create and manage stickies, shapes, frames, connectors, and more.8826MIT
- Flicense-qualityDmaintenanceAn MCP server that enables Claude AI to programmatically create and manipulate Miro boards via the Miro API with OAuth2 authentication. Supports 14 tools for board, item, and connector operations.
- Flicense-qualityDmaintenanceEnables interaction with Miro boards via MCP tools, supporting listing items, creating stickies, frames, shapes, connectors, and manipulating mind maps.
- FlicenseAqualityDmaintenanceMCP server for interacting with Mural's public API, enabling browsing and management of workspaces, rooms, murals, and widgets within Mural.23
Related MCP Connectors
Real-time collaborative whiteboard — AI agents and humans edit the same board live over MCP.
Official Miro MCP server - Supports context to code and creating diagrams, docs, and data tables.
A MCP server built for developers enabling Git based project management with project and personal…
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/janschmiedgen/mural-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server