miro-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| MIRO_ENV_FILE | No | Path to the env file containing MIRO_ACCESS_TOKEN. Overrides the default location ~/.config/miro-mcp/miro.env. | |
| MIRO_MCP_PROFILE | No | Tool profile to expose: full (default, all 77 tools) or essential (~15 tools). | full |
| MIRO_ACCESS_TOKEN | No | Miro OAuth access token. Provide this directly or supply the token via an env file. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_boardsA | List boards visible to the token. Offset-paginated. |
| get_boardB | Get full details of one board (name, owner, links, sharing policy). |
| create_boardC | Create a new board. |
| copy_boardC | Copy an existing board, optionally renaming or moving it to a team. |
| update_boardC | Rename a board or change its description. |
| delete_boardA | Delete a board permanently. Requires |
| list_connectorsB | List connectors on a board (cursor-paginated). |
| get_connectorC | Get one connector (start/end items, captions, style). |
| create_connectorC | Connect two items. |
| update_connectorC | Update a connector's endpoints, caption or style. |
| delete_connectorC | Delete a connector. Requires |
| create_docB | Create a doc format item on the board.
|
| get_docC | Get a doc format item including its markdown/html content. |
| delete_docC | Delete a doc format item. Requires |
| replace_docA | Replace a doc's content — implemented as read + delete + create because REST has no doc update endpoint. The new doc gets a NEW item id; the old id stops existing. Preserves
position, geometry, parent and content type (unless overridden).
Requires |
| get_board_thumbnailA | Get the board's thumbnail image URL. Reads the board's |
| list_board_export_jobsB | List board export jobs for an organization. ENTERPRISE PLAN ONLY — requires a Discovery access token. |
| create_board_export_jobA | Start a board export job (up to 1000 boards). ENTERPRISE PLAN ONLY — requires a Discovery access token. |
| get_board_export_job_statusB | Get the status of a board export job. ENTERPRISE PLAN ONLY — requires a Discovery access token. |
| get_board_export_job_resultsA | Get the download links of a finished board export job. ENTERPRISE PLAN ONLY — requires a Discovery access token. |
| create_groupC | Group items together. |
| list_groupsB | List all groups on a board (cursor-paginated). |
| get_groupC | Get one group with the items it contains. |
| get_group_itemsB | List the items that belong to a group (cursor-paginated). |
| update_groupB | Replace a group's membership entirely with a new set of items. A new group id is assigned by Miro on update. |
| ungroupA | Dissolve a group (items stay on the board). Requires
|
| list_itemsA | List items on a board in a compact shape (id, type, x, y, size, parent, text).
|
| get_itemB | Get the full JSON of one item (data, style, position, geometry, parent, timestamps). |
| search_itemsB | Search items by text content (client-side scan of titles/content). Scans up to |
| update_item_positionB | Move an item on the canvas or reparent it into/out of a frame. Works on any item type. |
| delete_itemA | Delete any single item. Requires |
| get_items_by_tagC | List items carrying a given tag (offset-paginated). |
| bulk_create_itemsA | Create up to 20 items in one call. Each entry follows the Miro bulk schema: |
| bulk_update_itemsA | Update many items concurrently (client-side batch; no bulk-update endpoint exists in REST). Each entry: |
| bulk_delete_itemsB | Delete many items concurrently. Requires |
| create_sticky_noteC | Create a sticky note. |
| update_sticky_noteC | Update a sticky note's content, style, position or parent. |
| create_shapeC | Create a shape. |
| update_shapeC | Update a shape's content, style, position or parent. |
| create_textC | Create a standalone text item. |
| update_textC | Update a text item's content, style, position or parent. |
| create_cardC | Create a card. |
| update_cardC | Update a card's data, style, position or parent. |
| create_app_cardC | Create an app card (widget card linked to an app).
|
| update_app_cardC | Update an app card's data, style, position or parent. |
| create_frameC | Create a frame. |
| update_frameC | Update a frame's title, visibility, style, size or position. |
| create_embedC | Create an embed item from a URL. |
| update_embedC | Update an embed item's data, position or parent. |
| create_document_from_urlC | Add a document item (PDF, etc.) to the board from a URL. |
| upload_documentC | Upload a document file from the local disk (PDF, DOCX, PPTX, XLSX, CSV; max ~30 MB). |
| update_documentC | Update a document item (replace its URL, retitle, move). |
| upload_imageC | Upload a local image file to the board (PNG/JPG/SVG, max 6 MB). This is a real multipart upload — the main gap vs. the hosted Miro connector. |
| create_image_from_urlC | Create an image item from a public URL. |
| update_imageC | Update an image item (swap URL, retitle, move/resize). |
| list_code_widgetsC | List code widget items. EXPERIMENTAL: uses the
|
| get_code_widgetC | Get one code widget. EXPERIMENTAL. |
| create_code_widgetC | Create a code widget (syntax-highlighted code block). EXPERIMENTAL. |
| update_code_widgetD | Update a code widget. EXPERIMENTAL. |
| list_board_membersB | List members of a board (offset-paginated). Set |
| get_board_memberC | Get one board member (role, type). |
| share_boardB | Invite users to a board by email (up to 20 per call).
|
| update_board_memberB | Change a board member's role (viewer, commenter, editor, coowner). Requires |
| remove_board_memberB | Remove a member from a board. Requires |
| list_mindmap_nodesC | List mind map nodes on a board. EXPERIMENTAL — the /v2-experimental API may change. |
| get_mindmap_nodeC | Get one mind map node. EXPERIMENTAL. |
| create_mindmap_nodeB | Create a mind map node (text type). EXPERIMENTAL. With |
| delete_mindmap_nodeB | Delete a mind map node. EXPERIMENTAL. Requires |
| whoamiA | Show the context of the current access token. Returns the token type, the user the token belongs to, the team it was installed on, and the granted scopes. Useful to verify auth before other calls. Requires no board. |
| list_tagsB | List all tags on a board (cursor-paginated). |
| create_tagB | Create a tag. |
| get_tagC | Get one tag. |
| update_tagA | Rename a tag or change its color. Note: tag changes via REST are not reflected on the board in realtime — refresh the board to see them. |
| delete_tagA | Delete a tag from the board. Requires |
| attach_tagB | Attach a tag to an item (cards/stickies: max 8 tags). Changes are not reflected in realtime — refresh the board to see them. |
| detach_tagB | Remove a tag from an item. Requires |
| get_item_tagsC | List the tags attached to an item. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 77 tools
Most tools have a distinct resource/action target, and descriptions clarify overlaps such as generic get_item versus type-specific get_doc/get_group. However, the many per-type create/update tools plus generic bulk and generic get/list tools create some selection ambiguity for agents.
The set overwhelmingly follows a snake_case verb_noun convention (create_board, update_sticky_note, bulk_delete_items). Minor deviations like whoami and ungroup are readable but not fully consistent with the pattern.
77 tools is an extreme mismatch for a coherent agent-facing toolset; the surface is inflated by per-item-type CRUD variants and bulk/generic alternatives. This creates substantial selection burden even if individual tools are useful.
The surface covers boards, members, tags, groups, connectors, docs, many item types, exports, and auth, with broad CRUD coverage. Minor gaps remain, such as no update operation for mind map nodes and some resource access relying on generic item tools.