attach_tag_to_item
Attach an existing tag to an item on the board
Build and edit Miro boards from an agent — sticky notes, shapes, cards, frames, connectors and tags — and read back what is already on the canvas.
LABSCO SUMMARY
Colour names instead of hex codes, a floor of 10 on get_board_items, no height on text items, and a cap of 20 per bulk request. Those constraints are the vendor's own words and they decide how the calls get written: create_sticky_note and create_tag want predefined colour names and reject hex, create_text supports width but not height because the Miro API does not, and get_board_items will not accept a limit below 10. The bulk calls are described as sequential API calls behind a single tool, so batching saves round trips to this server rather than requests to Miro. create_connector needs its start and end items on the board already, which forces item creation to complete before any arrow is drawn. create_webhook is marked experimental, which is the one place here worth treating as provisional.
A Miro board server: it lists, creates, copies and deletes boards, creates and updates the items on them, groups and tags those items, searches a board by text, and subscribes to board events.
list_boards with an optional query filter and teamId, plus get_board, create_board, update_board, copy_board and delete_board.create_sticky_note, create_text, create_shape, create_card, create_frame, create_image and create_document from a URL, create_embed for embedded content, and create_connector between items already on the board, with an optional caption.get_board_items filtered by type and parentItemId, get_item for one item's detail, get_frames, get_items_in_frame, and search_items by content or text.bulk_create_items, bulk_update_items, bulk_delete_items and bulk_create_connectors.create_group for existing items, get_tags, create_tag, attach_tag_to_item and remove_tag_from_item.get_board_members returns everyone with access, and share_board_with_user invites by email with a role and an optional message.create_webhook for board events against a callbackUrl, and get_webhooks to list what is subscribed.A Miro OAuth token with access to the boards you intend to touch, supplied as MIRO_OAUTH_TOKEN.
One command plus a key — npm install @aditya.mishra/miro-mcp, then supply credentials
USE CASES
Put down a frame to hold the work, then place the sticky notes and shapes inside it at coordinates you control.
Create the items in a batch, then connect them in a second batch, because a connector needs its start and end items already on the board.
Find the board, list what is on it by item type, and search the canvas by the text you remember.
Move and restyle items in batches, gather the related ones together, and label them so the board stays readable.
Check who already has access, then invite the missing collaborators by email at the role you intend.
Counted once with only startup setup. Other versions, modes or optional credentials may expose a different list.
attach_tag_to_itemAttach an existing tag to an item on the board
bulk_create_connectorsCreate multiple connectors at once efficiently (max 20 connectors per request, implemented via sequential API calls)
bulk_create_itemsCreate multiple items at once efficiently (max 20 items per request, implemented via sequential API calls)
bulk_delete_itemsDelete multiple items at once efficiently (max 20 items per request, implemented via sequential API calls)
bulk_update_itemsUpdate multiple items at once efficiently (max 20 items per request, implemented via sequential API calls)
copy_boardCopy an existing board
create_boardCreate a new Miro board
create_cardCreate a card item with title and description
create_connectorCreate a connector/line between two existing items (CRITICAL: both items must already exist on the board)
create_documentCreate a document item from a URL
create_embedCreate an embedded content item from a URL
create_frameCreate a frame container to organize other items
create_groupGroup multiple existing items together
create_imageCreate an image item from a URL
create_shapeCreate a geometric shape with content and styling options
create_sticky_noteCreate a sticky note with predefined color names (REQUIRED: use color names, not hex codes)
create_tagCreate a new tag with predefined color names (CRITICAL: use predefined color names, NOT hex colors)
create_textCreate a text item (LIMITATION: text items only support width in geometry, height is NOT supported by Miro API)
create_webhookCreate a webhook subscription for board events (experimental feature)
delete_boardDelete a board
delete_itemDelete an item from the board (handles empty API responses correctly)
get_boardGet detailed information about a specific board
get_board_itemsGet all items from a board with filtering options (Note: minimum limit is 10, not less)
get_board_membersGet all members with access to a board
get_framesGet all frame items from a board
get_itemGet detailed information about a specific item on the board
get_items_in_frameGet all items contained within a specific frame
get_tagsGet all tags from a board
get_webhooksGet all webhook subscriptions
list_boardsList all available Miro boards with optional query filter
remove_tag_from_itemRemove a tag from an item on the board
search_itemsSearch for items on a board by content/text
share_board_with_userInvite a user to collaborate on a board via email
update_boardUpdate board properties
update_itemUpdate any item properties (position, style, data, etc.)
BEFORE YOU INSTALL
35 tools when we connected. The documented categories overlap and add to 41, but there are 35 distinct tools. The webhook feature is experimental, and bulk operations run as sequential API calls capped at 20 items.
CONTEXT COST
Rated by the size of the 35 tool definitions that ride along on every turn, not by how many there are
INSTALLATION
npm install @aditya.mishra/miro-mcp{
"mcpServers": {
"miro-mcp": {
"command": "npx",
"args": [
"@aditya.mishra/miro-mcp"
],
"env": {
"MIRO_OAUTH_TOKEN": "<YOUR_MIRO_OAUTH_TOKEN>"
}
}
}
}{
"mcpServers": [
{
"name": "miro-mcp",
"command": "npx",
"args": [
"@aditya.mishra/miro-mcp"
],
"env": {
"MIRO_OAUTH_TOKEN": "<YOUR_MIRO_OAUTH_TOKEN>"
}
}
]
}