Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

Miro

OCI · GHCR.IO/OLGASAFONOVA/MIRO-MCP-SERVER:1.25.0 · 6 COMPONENTS

Control Miro whiteboards with AI. 110 tools for boards, diagrams, mindmaps, comments, SVG.

0 this week 56 Trust /100

Last scanned (18 hours ago)

Scores higher than 95% of OCI servers

Category Design and Media

Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security0
  • No malware scan is available for this kind of package: the supply-chain vendors we use do not cover it. This is a permanent gap in our coverage, not a finding about the package.Unverified
  • Known CVEs could not be checked: this artifact ships no SBOM or dependency manifest, so there is no dependency list to read.Unverified
  • Install-script risk not yet assessed.Unverified
  • Dependency health could not be checked: this artifact ships no SBOM or dependency manifest, so there is no dependency list to read.Unverified
Provenance & Transparency48
  • Source repository is publicly reachable at the declared URL. View diagnostics → Pass
  • Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
  • Clear OSI-approved license (MIT).Pass
  • Actively maintained (last published 46 days ago).Pass
  • Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability80
  • 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 22062 tokens (~200/item across 110 items; 110 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management100
  • No destabilizing schema changes in the last 30 days.Pass
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 100% of tool parameters carry a description.Pass
  • Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety98
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • 12 of 13 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "miro_detach_tag" implies "remove" and declares no destructiveHint at all, which the MCP spec reads as destructive by default. See how to fix → Partial
  • An AI judge read all 111 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a current MCP spec version (2026-07-28).Pass

Unverified: 1 category

A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.

Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 1 Nov 26 +1
    • Stability: 0.97 → pass security
  • 31 Oct 26 −1
    • Stability: pass → 0.97 functional
  • 25 Oct 26 +1
    • Stability: 0.97 → pass security
  • 24 Oct 26 −1
    • Stability: pass → 0.97 functional
  • 18 Oct 26 +1
    • Stability: 0.97 → pass security
  • 16 Oct 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 90 to 93. That category is still filling its 30-day observation window: 27 days of observed history at the previous scan, 28 at this one. The score rises as the window fills, whether or not the server changes.

  • 13 Oct 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 80 to 83. That category is still filling its 30-day observation window: 24 days of observed history at the previous scan, 25 at this one. The score rises as the window fills, whether or not the server changes.

  • 12 Oct 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 73 to 80. That category is still filling its 30-day observation window: 22 days of observed history at the previous scan, 24 at this one. The score rises as the window fills, whether or not the server changes.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 4 Nov 2026 · Analysed oci/ghcr.io/olgasafonova/miro-mcp-server:1.25.0

Provenance No attestation

The registry publishes no build provenance for this version, so there is nothing to verify.

Result No attestation
Ecosystem oci
Reason No attestation published

Background: How many MCP packages publish verified provenance →

MCP tools · 110 exposed · ~21,385 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
miro_attach_tag ~151

Attach an existing tag to a sticky note or card. The tag must already exist; create it first with miro_create_tag if needed. Only sticky_note and card items support tags. USE WHEN: "tag this sticky as Urgent", "add the Done label", "mark this card with Priority" FAILS WHEN: tag_id doesn't exist on this board (list with miro_list_tags), item is not a sticky_note or card. VOICE-FRIENDLY: "Tagged sticky with 'Urgent'"

NameTypeReqDescription
board_idstringyesBoard ID
item_idstringyesID of the item to tag (sticky note only)
tag_idstringyesID of the tag to attach
NameTypeReqDescription
item_idstringyes–
messagestringyes–
successbooleanyes–
tag_idstringyes–

No examples provided.

miro_bulk_create ~266

Create multiple items at once (max 20). For creating only stickies in a grid, use miro_create_sticky_grid instead. USE WHEN: "add these 5 stickies", "create items for each of these", "batch add" ITEM FIELDS: - type (required): sticky_note, shape, text - content, x, y, width, height, color, parent_id: standard fields - shape: shape type (when type=shape) - text_color: text color (shape and text items only) - font_size: font size in points (shape and text items only; default 14) - text_align: horizontal text alignment (shape items only): left, center, right - text_align_vertical: vertical text alignment (shape items only): top, middle, bottom RETURNS: Count of created items and their IDs (returned in input order even when API IDs are assigned out of order). FAILS WHEN: More than 20 items. Empty items list. Individual items may fail while others succeed; check errors in response. VOICE-FRIENDLY: "Created 5 items on the board"

NameTypeReqDescription
board_idstringyesBoard ID
itemsnull|arrayyesItems to create (max 20)
NameTypeReqDescription
createdintegeryes–
errorsnull|array––
failed_itemsnull|array––
item_idsnull|arrayyes–
item_urlsnull|array––
messagestringyes–
retriable_idsnull|array––

No examples provided.

miro_bulk_delete ~129

Delete multiple items at once (max 20). WARNING: Cannot be undone. Use dry_run=true to preview first. RETURNS: Count of deleted items and their IDs. FAILS WHEN: More than 20 items. Empty items list. Individual items may fail while others succeed; check errors in response. VOICE-FRIENDLY: "Deleted 5 items from the board"

NameTypeReqDescription
board_idstringyesBoard ID
dry_runboolean–If true, returns preview without deleting
item_idsnull|arrayyesIDs of items to delete (max 20)
NameTypeReqDescription
deletedintegeryes–
errorsnull|array––
failed_itemsnull|array––
item_idsnull|arrayyes–
messagestringyes–
retriable_idsnull|array––

No examples provided.

miro_bulk_update ~288

Update multiple items at once (max 20). Only provide fields you want to change. USE WHEN: "update positions for these items", "rename these stickies", "move several items into a frame", "center the text on these shapes". ITEM FIELDS: - item_id (required): ID of the item to update - type (optional but recommended): 'shape', 'sticky_note', or 'text'. When set, the update routes to the type-specific endpoint and accepts type-specific fields like text_align. When omitted, falls back to the generic /items endpoint (cross-type fields only). - content, x, y, width, height, color, parent_id: cross-type fields, accepted regardless of type - text_color: shape and text items (requires type=shape or type=text) - text_align: shape items (requires type=shape): left, center, right - text_align_vertical: shape items (requires type=shape): top, middle, bottom RETURNS: Count of updated items and their IDs. FAILS WHEN: More than 20 items. Empty items list. Individual items may fail while others succeed; check errors in response. VOICE-FRIENDLY: "Updated 5 items on the board"

NameTypeReqDescription
board_idstringyesBoard ID
itemsnull|arrayyesItems to update (max 20)
NameTypeReqDescription
errorsnull|array––
failed_itemsnull|array––
item_idsnull|arrayyes–
messagestringyes–
retriable_idsnull|array––
updatedintegeryes–

No examples provided.

miro_copy_board ~121

Copy an existing Miro board. USE WHEN: "copy this board", "duplicate board", "make a copy of X board" RETURNS: New board ID, name, and view link. VOICE-FRIENDLY: "Copied board to 'Sprint Planning Copy'"

NameTypeReqDescription
board_idstringyesID of the board to copy
descriptionstring–Description for the copy
namestring–Name for the copy (defaults to 'Copy of {original}')
team_idstring–Team ID to copy board to
NameTypeReqDescription
idstringyes–
messagestringyes–
namestringyes–
view_linkstringyes–

No examples provided.

miro_create_app_card ~184

Create an app card with custom fields and status indicators. For simple cards with due dates, use miro_create_card instead. USE WHEN: "create an app card", "add a card with fields", "create a custom card" RETURNS: App card ID and view link. VOICE-FRIENDLY: "Created app card 'Integration Status'"

NameTypeReqDescription
board_idstringyesBoard ID
descriptionstring–App card description
fieldsnull|array–Custom fields (max 5)
parent_idstring–Frame ID to place card in
statusstring–Status indicator: connected, disconnected, disabled
titlestringyesApp card title
widthnumber–Card width (default 320)
xnumber–X position
ynumber–Y position
NameTypeReqDescription
descriptionstringyes–
idstringyes–
item_urlstring––
messagestringyes–
statusstringyes–
titlestringyes–

No examples provided.

miro_create_board ~94

Create a new Miro board. USE WHEN: "create a board", "new board", "make a board for X" RETURNS: Board ID, name, and view link. VOICE-FRIENDLY: "Created board 'Sprint Planning'"

NameTypeReqDescription
descriptionstring–Board description
namestringyesName for the new board
team_idstring–Team ID to create board in
NameTypeReqDescription
idstringyes–
messagestringyes–
namestringyes–
view_linkstringyes–

No examples provided.

miro_create_card ~189

Create a card on a Miro board. Cards have title, description, and due dates. For cards with custom fields and status, use miro_create_app_card. USE WHEN: "add a card", "create a task card", "card with due date" RETURNS: Card ID, title, and view link. VOICE-FRIENDLY: "Created card 'Review design specs'"

NameTypeReqDescription
board_idstringyesBoard ID
descriptionstring–Card description/body text
due_datestring–Due date in ISO 8601 format (e.g., 2024-12-31)
parent_idstring–Frame ID to place card in
titlestringyesCard title
widthnumber–Card width (default 320)
xnumber–X position
ynumber–Y position
NameTypeReqDescription
idstringyes–
item_urlstring––
messagestringyes–
titlestringyes–

No examples provided.

miro_create_code_widget ~305

Create a code widget: a syntax-highlighted code snippet on the board. Uses v2-experimental API. May change or become unavailable before GA. USE WHEN: "add a code snippet", "put this code on the board", "create a code block" PARAMETERS: - code: The source code (max 6000 characters). Required. - language: For syntax highlighting (e.g. javascript, go, python). Optional. - title: Widget header text (max 100 characters). Optional. RETURNS: Widget ID and view link. FAILS WHEN: code exceeds 6000 characters. board_id not found. Account lacks access to the experimental API.

NameTypeReqDescription
board_idstringyesBoard ID
codestringyesThe code content of the widget (max 6000 characters)
heightnull|number–Height in pixels
languagestring–Programming language for syntax highlighting (e.g. javascript, go, python)
line_numbers_visiblenull|boolean–Show line numbers (API default applies when omitted)
parent_idstring–ID of a parent frame to attach the widget to
titlestring–Title of the code widget (max 100 characters)
widthnull|number–Width in pixels
xnumber–X position on the board (center origin)
ynumber–Y position on the board (center origin)
NameTypeReqDescription
idstringyes–
item_urlstring––
languagestring––
messagestringyes–
titlestring––

No examples provided.

miro_create_comment ~206

Open a comment thread on a board, optionally attached to a specific item. Uses a v2-experimental API that Miro ships undocumented; it may change or become unavailable without notice. USE WHEN: "comment on this board", "leave feedback on that sticky", "add a note for the team on item X" PARAMETERS: - board_id: Required. - content: Required. First message of the thread. - item_id: Optional. Attaches the thread to an item; without it the comment lands at the board origin (the API ignores position coordinates on create). RETURNS: Thread ID, and the item ID when attached. VOICE-FRIENDLY: "Added a comment on the pricing sticky"

NameTypeReqDescription
board_idstringyesBoard ID to comment on
contentstringyesText of the comment (first message of the thread)
item_idstring–Optional item ID to attach the comment to. Omit for a board-level comment.
NameTypeReqDescription
idstringyes–
item_idstring––
messagestringyes–

No examples provided.

miro_create_connector ~227

Create a connector line between two items. Styles: straight, elbowed (default), curved. Caps: none, arrow, stealth, diamond, filled_diamond, oval, filled_oval, triangle, filled_triangle. USE WHEN: "connect these items", "draw a line from A to B", "link items together", "add an arrow" RETURNS: Connector ID and view link. FAILS WHEN: start_item_id or end_item_id don't exist on the board. Both endpoints are required.

NameTypeReqDescription
board_idstringyesBoard ID
captionstring–Text label on the connector
end_capstring–End arrow: none, arrow, filled_arrow, diamond, etc.
end_item_idstringyesID of the item to connect to
start_capstring–Start arrow: none, arrow, filled_arrow, diamond, etc.
start_item_idstringyesID of the item to connect from
stylestring–Connector style: straight, elbowed, curved (default elbowed)
NameTypeReqDescription
idstringyes–
item_urlstring––
messagestringyes–

No examples provided.

miro_create_doc ~226

Create a rich text document on a Miro board from Markdown content. USE WHEN: User says "add a document", "create a doc from markdown", "put markdown on the board" PARAMETERS: - board_id: Required - content: Markdown text (required). Supports headings, lists, bold, italic, links, code blocks. - x, y: Position - parent_id: Frame ID to place doc in EXAMPLE: {"board_id": "uXjVN1234", "content": "# Sprint Goals\n- Ship v2.0\n- Fix critical bugs"} RELATED: Use miro_get_doc to read doc content. Use miro_delete_doc to remove. For URL-based documents, use miro_create_document instead. VOICE-FRIENDLY: "Created doc format item on board"

NameTypeReqDescription
board_idstringyesBoard ID
contentstringyesMarkdown content for the document
parent_idstring–Frame ID to place document in
xnumber–X position
ynumber–Y position
NameTypeReqDescription
idstringyes–
item_urlstring––
messagestringyes–

No examples provided.

miro_create_document ~161

Add a document (PDF, etc.) to a Miro board from a URL. URL must be publicly accessible. USE WHEN: "add a document from URL", "put a PDF on the board", "add a reference document" RETURNS: Document ID, title, and view link. RELATED: To upload a local file instead, use miro_upload_document.

NameTypeReqDescription
board_idstringyesBoard ID
parent_idstring–Frame ID to place document in
titlestring–Document title
urlstringyesURL of the document (PDF, etc.) to add
widthnumber–Document preview width
xnumber–X position
ynumber–Y position
NameTypeReqDescription
idstringyes–
item_urlstring––
messagestringyes–
titlestringyes–

No examples provided.

miro_create_embed ~217

Embed external content as a live preview on a Miro board. Supports YouTube, Vimeo, Figma, Google Docs, Loom, and other oEmbed providers. For static images from URL, use miro_create_image. For document references from URL, use miro_create_document. USE WHEN: "embed this YouTube video", "add a Figma link", "embed Google Doc", "put a Loom video on the board" RETURNS: Embed ID, URL, provider name, and view link.

NameTypeReqDescription
board_idstringyesBoard ID
heightnumber–Embed height (default 300)
modestring–Display mode: inline (default) or modal
parent_idstring–Frame ID to place embed in
urlstringyesURL to embed (YouTube, Vimeo, Figma, Google Docs, etc.)
widthnumber–Embed width (default 400)
xnumber–X position
ynumber–Y position
NameTypeReqDescription
idstringyes–
item_urlstring––
messagestringyes–
providerstring––
urlstringyes–

No examples provided.

miro_create_export_job ~145

Export boards to PDF, SVG, or HTML. ENTERPRISE ONLY. RETURNS: Export job ID and initial status. Poll with miro_get_export_job_status. FAILS WHEN: Not on Enterprise plan. No board_ids provided. More than 50 boards. Invalid format (must be pdf, svg, or html).

NameTypeReqDescription
board_idsnull|arrayyesBoard IDs to export (max 50)
formatstring–Export format: pdf, svg, or html (default: pdf)
org_idstringyesOrganization ID (Enterprise only)
request_idstring–Unique request ID for idempotency (auto-generated if empty)
NameTypeReqDescription
job_idstringyes–
messagestringyes–
request_idstringyes–
statusstringyes–

No examples provided.

miro_create_flowchart_shape ~455

Create a flowchart shape using the experimental API. Supports additional stencil shapes beyond the standard shape tool. USE WHEN: User says "create a flowchart shape", "add a process box", "draw a decision diamond for flowchart" For standard shapes, use miro_create_shape instead. This tool uses the v2-experimental API for flowchart-specific stencil shapes. PARAMETERS: - board_id: Required - shape: Shape type (required). Supports: rectangle, round_rectangle, circle, rhombus, parallelogram, trapezoid, pentagon, hexagon, star, flow_chart_predefined_process, wedge_round_rectangle_callout, etc. - content: Text inside the shape - x, y: Position - width, height: Size (default 200x200) - fill_color: Fill color (hex like #006400) - border_color: Border color (hex like #000000) - parent_id: Frame ID RETURNS: Item ID, shape type, content, and view link. NOTE: Uses v2-experimental API. Shape types may change when this moves to GA.

NameTypeReqDescription
board_idstringyesBoard ID
border_colorstring–Border color: 6-char hex like #000000 or named (red, orange, yellow, green, blue, purple, pink, gray, white, black)
contentstring–Text inside the shape
fill_colorstring–Fill/background color: 6-char hex like #006400 or named (red, orange, yellow, green, blue, purple, pink, gray, white, black)
heightnumber–Height in pixels (default 200)
parent_idstring–Frame ID to place shape in
shapestringyesFlowchart shape type: rectangle, round_rectangle, circle, rhombus, parallelogram, trapezoid, pentagon, hexagon, star, flow_chart_predefined_process, wedge_round_rectangle_callout, etc.
widthnumber–Width in pixels (default 200)
xnumber–X position
ynumber–Y position
NameTypeReqDescription
contentstring––
idstringyes–
item_urlstring––
messagestringyes–
shapestringyes–

No examples provided.

miro_create_frame ~293

Create a frame container to group items visually. For logical grouping without a visual border, use miro_create_group. USE WHEN: "create a frame", "add a container", "make a section for X" PARAMETERS: - color: Background color. Accepts a 6-char hex like "#006400" or a named color: red, orange, yellow, green, blue, purple, pink, gray, white, black. Note: frames use a smaller palette than stickies; sticky-only names like 'light_yellow' or 'light_green' are NOT valid for frames (use a hex value or a base named color instead). RETURNS: Frame ID, title, and view link. EXAMPLE: {"board_id": "uXjVN1234", "title": "Q1 Goals", "width": 800, "height": 600, "color": "green"}

NameTypeReqDescription
board_idstringyesBoard ID
colorstring–Background color: 6-char hex like #006400 or named (red, orange, yellow, green, blue, purple, pink, gray, white, black)
heightnumber–Height (default 600)
titlestring–Frame title
widthnumber–Width (default 800)
xnumber–X position
ynumber–Y position
NameTypeReqDescription
idstringyes–
item_urlstring––
messagestringyes–
titlestringyes–

No examples provided.

miro_create_from_svg ~455

Create board items from an SVG document, parsed locally. Supported elements: rect (-> rectangle shape; rx>0 -> round_rectangle; data-type="sticky" -> sticky note with data-content text; data-type="frame" -> frame with data-title), circle and ellipse (-> circle shape), polygon with 3 points (-> triangle shape), text (-> text item), image with a public href (-> image item), line with data-start/data-end referencing other elements' id attributes (-> connector, created after the referenced items; data-caption -> label), g with transform="translate(x,y)" (offset applied to children, nesting supported). Fill colors carry over. Unsupported elements (path, multi-point polygon, ...) are itemized in the response as skipped, never silently dropped. USE WHEN: "put this SVG on the board", "recreate this wireframe as board items", importing a diagram from a tool that exports SVG. NOT FOR: pixel-faithful SVG import (Miro has no vector item type; this maps to native shapes), Mermaid diagrams (use miro_generate_diagram), or editing existing items (use miro_update_from_svg). PARAMETERS: - board_id, svg: Required. SVG source, max 1 MiB, max 200 drawable elements per call. - offset_x, offset_y: Optional placement offset for the whole batch. RETURNS: created (id, type, source element per item), skipped (element + reason), count. On a mid-batch failure the created list still names every item that landed, so the caller can verify or clean up.

NameTypeReqDescription
board_idstringyesBoard ID to create items on
offset_xnumber–X offset added to every created item (default 0)
offset_ynumber–Y offset added to every created item (default 0)
svgstringyesSVG document. Supported elements: rect (data-type=sticky|frame for those item types), circle, ellipse, text, polygon (3 points -> triangle), image (public href), line (data-start/data-end referencing…
NameTypeReqDescription
countintegeryes–
creatednull|arrayyes–
messagestringyes–
skippednull|array––

No examples provided.

miro_create_group ~112

Group multiple items together logically (minimum 2). Grouped items move and resize together. For a visible container with a border and title, use miro_create_frame. USE WHEN: "group these items", "bundle items together", "make a group" RETURNS: Group ID and member item IDs. VOICE-FRIENDLY: "Grouped 4 items together"

NameTypeReqDescription
board_idstringyesBoard ID
item_idsnull|arrayyesIDs of items to group together (minimum 2)
NameTypeReqDescription
idstringyes–
item_idsnull|arrayyes–
item_urlstring––
item_urlsnull|array––
messagestringyes–

No examples provided.

miro_create_image ~227

Add an image to a Miro board from a URL. USE WHEN: User says "add an image", "insert picture from URL", "put this image on the board" PARAMETERS: - board_id: Required - url: Image URL (must be publicly accessible, required) - title: Alt text / title - width: Image width (preserves aspect ratio) - x, y: Position NOTE: The image URL must be publicly accessible. Private URLs won't work. FAILS WHEN: URL is not publicly accessible or returns 404. board_id not found. RELATED: To upload a local file instead, use miro_upload_image.

NameTypeReqDescription
board_idstringyesBoard ID
parent_idstring–Frame ID to place image in
titlestring–Image title/alt text
urlstringyesURL of the image to add (must be publicly accessible)
widthnumber–Image width (preserves aspect ratio)
xnumber–X position
ynumber–Y position
NameTypeReqDescription
idstringyes–
item_urlstring––
messagestringyes–
titlestringyes–
urlstringyes–

No examples provided.

miro_create_mindmap_node ~329

Create a mindmap node. Omit parent_id for root; add parent_id for children. USE WHEN: "add a mindmap node", "create root node", "add child to mindmap" LAYOUT: Multiple children of the same parent stack at the same default position if x/y are omitted. To avoid overlap when creating siblings, supply explicit x/y for each child (canvas-absolute coordinates). For a fully manual tree, prefer miro_create_shape + miro_create_connector with explicit positions. PARAMETERS: - node_view: Currently only "text" is reliably supported. Other values may return 400. - x, y: Required for root nodes. Optional for children, but recommended when creating multiple siblings to override the API's default placement. RETURNS: Node ID, parent node ID, and view link. FAILS WHEN: parent_id references a non-existent node on the board. board_id not found.

NameTypeReqDescription
board_idstringyesBoard ID
contentstringyesText content of the node
node_viewstring–Node style: text (default). Other values may be rejected by the API.
parent_idstring–ID of the parent node (omit for root node)
xnumber–X position. Required for root nodes. For child nodes, supply x/y to override the API's default placement-on-top-of-parent and avoid overlap when creating multiple siblings.
ynumber–Y position. Required for root nodes. For child nodes, supply x/y to override the API's default placement.
NameTypeReqDescription
contentstringyes–
idstringyes–
item_urlstring––
messagestringyes–
parent_idstring––

No examples provided.

miro_create_shape ~753

Create a shape on a Miro board. USE WHEN: User says "add a rectangle", "draw a circle", "create a box for X" SHAPE TYPES: - Basic: rectangle, round_rectangle, circle, triangle, rhombus - Flow: parallelogram, trapezoid, pentagon, hexagon, star - Flowchart: flow_chart_predefined_process, wedge_round_rectangle_callout PARAMETERS: - board_id: Required. Get from list_boards or find_board - shape: Shape type (required, default: rectangle) - content: Text inside shape - color: Fill color. 6-char hex like "#FF5733" or named: red, orange, yellow, green, blue, purple, pink, gray, white, black. - text_color: Text color, same format as color. - text_align: Horizontal text alignment: left, center (default), right. - text_align_vertical: Vertical text alignment: top, middle (default), bottom. For non-rectangular shapes (triangle, hexagon), 'middle' aligns to the bounding-box center, which is not the same as the visual centroid. - x, y: Position (default: 0, 0) - width, height: Size (default: 200, 200) RETURNS: Item ID, shape type, position, size, and view link. RELATED: For flowchart-specific stencil shapes (experimental API), use miro_create_flowchart_shape instead. EXAMPLE: {"board_id": "uXjVN1234", "shape": "circle", "content": "Start", "color": "green", "text_align": "center", "x": 0, "y": 0}

NameTypeReqDescription
board_idstringyesBoard ID
colorstring–Fill/background color: 6-char hex like #006400 or named (red, orange, yellow, green, blue, purple, pink, gray, white, black)
contentstring–Text inside the shape
font_sizeinteger–Font size in points (default 14)
heightnumber–Height in pixels (default 200)
parent_idstring–Frame ID to place shape in. Coords (x, y) are then relative to the frame's TOP-LEFT; the shape's CENTER is placed at (x, y). Account for shape width/height when picking coords to keep it inside the f…
shapestringyesShape type: rectangle, circle, triangle, rhombus, round_rectangle, etc.
text_alignstring–Horizontal text alignment: left, center (default), right
text_align_verticalstring–Vertical text alignment: top, middle (default), bottom. Note: 'middle' aligns to the center of the bounding box, which for triangles/hexagons is not the visual centroid.
text_colorstring–Text color: 6-char hex like #ffffff or named (red, orange, yellow, green, blue, purple, pink, gray, white, black)
widthnumber–Width in pixels (default 200)
xnumber–X position. On canvas: absolute. Inside a frame (parent_id set): relative to frame's TOP-LEFT (0 = frame's left edge), and the shape's center is placed at this x.
ynumber–Y position. On canvas: absolute. Inside a frame (parent_id set): relative to frame's TOP-LEFT, shape center is placed at this y. Y increases downward.
NameTypeReqDescription
contentstring––
idstringyes–
item_urlstring––
messagestringyes–
shapestringyes–

No examples provided.

miro_create_sticky ~415

Create a sticky note on a Miro board. For multiple stickies in a grid, use miro_create_sticky_grid. For batch creation of mixed items, use miro_bulk_create. USE WHEN: "add a sticky", "create note saying X", "put a yellow sticky" RETURNS: Item ID, content, color, and view link. FAILS WHEN: Content is empty. board_id not found. VOICE-FRIENDLY: "Created yellow sticky 'Action item: Review design'"

NameTypeReqDescription
board_idstringyesBoard ID
colorstring–Sticky color (named only): yellow, light_yellow, light_green, green, dark_green, cyan, light_pink, pink, violet, red, light_blue, blue, dark_blue, gray, orange, black.
contentstringyesText content of the sticky note
parent_idstring–Frame ID to place sticky in. Coords (x, y) are then relative to the frame's TOP-LEFT corner; the sticky's CENTER is placed at (x, y). Default sticky is 199x228, so to keep it fully inside an 800x600…
widthnumber–Width in pixels (default ~199; height auto-scales). Set width=160 to fit 3 stickies in a 600-tall frame.
xnumber–X position. On canvas: absolute (0 = canvas left). Inside a frame (parent_id set): relative to frame's TOP-LEFT (0 = frame's left edge), and the sticky's center is placed at this x. To center horizon…
ynumber–Y position. On canvas: absolute. Inside a frame (parent_id set): relative to frame's TOP-LEFT, sticky center is placed at this y. Y increases downward.
NameTypeReqDescription
colorstringyes–
contentstringyes–
idstringyes–
item_urlstring––
messagestringyes–

No examples provided.

miro_create_sticky_grid ~208

Create multiple sticky notes arranged in a grid layout (max 50). For mixed item types, use miro_bulk_create. USE WHEN: "add a grid of stickies", "create 6 stickies in rows", "make sticky notes for each idea" VOICE-FRIENDLY: "Created 9 stickies in a 3x3 grid"

NameTypeReqDescription
board_idstringyesBoard ID
colorstring–Color for all stickies: yellow, green, blue, pink, orange, etc.
columnsinteger–Number of columns in grid (default 3)
contentsnull|arrayyesText for each sticky note
parent_idstring–Frame ID to place stickies in
spacingnumber–Space between stickies in pixels (default 220)
start_xnumber–Starting X position (default 0)
start_ynumber–Starting Y position (default 0)
NameTypeReqDescription
columnsintegeryes–
createdintegeryes–
item_idsnull|arrayyes–
item_urlsnull|array––
messagestringyes–
rowsintegeryes–

No examples provided.

miro_create_tag ~136

Create a tag on a Miro board. Colors: red, magenta, violet, blue, cyan, green, yellow, gray, light_green, dark_green, dark_blue, dark_gray, black. VOICE-FRIENDLY: "Created red tag 'Urgent'"

NameTypeReqDescription
board_idstringyesBoard ID
colorstring–Tag color: red, magenta, violet, blue, cyan, green, yellow, gray, light_green, dark_green, dark_blue, dark_gray, black
titlestringyesTag text (e.g., 'Urgent', 'Done', 'Review')
NameTypeReqDescription
colorstringyes–
idstringyes–
item_urlstring––
messagestringyes–
titlestringyes–

No examples provided.

miro_create_text ~197

Add free-floating text to a Miro board with no background or border. For notes with colored backgrounds, use miro_create_sticky. For rich Markdown documents, use miro_create_doc. USE WHEN: "add a title", "put heading text", "write a label", "add text saying X" RETURNS: Item ID, content, and view link.

NameTypeReqDescription
board_idstringyesBoard ID
colorstring–Text color: 6-char hex like #1a1a1a or named (red, orange, yellow, green, blue, purple, pink, gray, white, black)
contentstringyesText content
font_sizeinteger–Font size (default 14)
parent_idstring–Frame ID
widthnumber–Text box width
xnumber–X position
ynumber–Y position
NameTypeReqDescription
contentstringyes–
idstringyes–
item_urlstring––
messagestringyes–

No examples provided.

miro_delete_app_card ~94

Delete an app card from a Miro board. WARNING: Cannot be undone. Use dry_run=true to preview first. RETURNS: Confirmation with deleted app card ID. VOICE-FRIENDLY: "App card deleted successfully"

NameTypeReqDescription
board_idstringyesBoard ID
dry_runboolean–If true, returns preview without deleting
item_idstringyesApp card item ID to delete
NameTypeReqDescription
item_idstringyes–
messagestringyes–
successbooleanyes–

No examples provided.

miro_delete_board ~88

Delete a Miro board permanently. USE WHEN: "delete this board", "remove the board", "get rid of board X" WARNING: Cannot be undone. Use dry_run=true to preview first. RETURNS: Confirmation with deleted board ID.

NameTypeReqDescription
board_idstringyesID of the board to delete
dry_runboolean–If true, returns preview without deleting
NameTypeReqDescription
board_idstringyes–
messagestringyes–
successbooleanyes–

No examples provided.

miro_delete_code_widget ~95

Delete a code widget from a board. Uses v2-experimental API. May change or become unavailable before GA. WARNING: Cannot be undone. Use dry_run=true to preview first. RETURNS: Confirmation with deleted widget ID.

NameTypeReqDescription
board_idstringyesBoard ID
dry_runboolean–If true, returns preview without deleting
item_idstringyesCode widget item ID to delete
NameTypeReqDescription
idstringyes–
messagestringyes–
successbooleanyes–

No examples provided.

miro_delete_connector ~108

Delete a connector from a Miro board. USE WHEN: "delete this connector", "remove this line", "disconnect these items" WARNING: Cannot be undone. Use dry_run=true to preview first. RETURNS: Confirmation with deleted connector ID. VOICE-FRIENDLY: "Connector deleted successfully"

NameTypeReqDescription
board_idstringyesBoard ID
connector_idstringyesID of the connector to delete
dry_runboolean–If true, returns preview without deleting
NameTypeReqDescription
idstringyes–
messagestringyes–
successbooleanyes–

No examples provided.

miro_delete_doc ~151

Delete a doc format item from a Miro board. USE WHEN: User says "remove the document", "delete that doc" PARAMETERS: - board_id: Required - item_id: Doc format item ID to delete (required) - dry_run: If true, returns preview without deleting (optional) WARNING: This action cannot be undone. Use dry_run=true to preview what will be deleted before executing. RELATED: Use miro_get_doc to inspect before deleting. Use miro_create_doc to create new documents.

NameTypeReqDescription
board_idstringyesBoard ID
dry_runboolean–If true, returns preview without deleting
item_idstringyesDoc format item ID to delete
NameTypeReqDescription
item_idstringyes–
messagestringyes–
successbooleanyes–

No examples provided.

miro_delete_frame ~100

Delete a frame from a Miro board. Items inside are NOT deleted; they become ungrouped. WARNING: Cannot be undone. Use dry_run=true to preview first. RETURNS: Confirmation with deleted frame ID. VOICE-FRIENDLY: "Frame deleted successfully"

NameTypeReqDescription
board_idstringyesBoard ID
dry_runboolean–If true, returns preview without deleting
frame_idstringyesFrame ID to delete
NameTypeReqDescription
idstringyes–
messagestringyes–
successbooleanyes–

No examples provided.

miro_delete_group ~183

Delete a group. Set delete_items=true to also delete items (default: items are released to move independently). USE WHEN: deleting a group OR ungrouping items. With delete_items=false (default), items are ungrouped and remain on the board. With delete_items=true, both the group and its items are permanently deleted. WARNING: Deleting items (delete_items=true) cannot be undone. Use dry_run=true to preview first. RETURNS: Confirmation with deleted group ID. VOICE-FRIENDLY: "Group deleted, items ungrouped"

NameTypeReqDescription
board_idstringyesBoard ID
delete_itemsboolean–Also delete the items in the group (default: false, items are ungrouped)
dry_runboolean–If true, returns preview without deleting
group_idstringyesGroup ID to delete
NameTypeReqDescription
group_idstringyes–
messagestringyes–
successbooleanyes–

No examples provided.

miro_delete_item ~98

Delete an item from a Miro board. USE WHEN: "delete this item", "remove this sticky", "get rid of this shape" WARNING: Cannot be undone. Use dry_run=true to preview first. RETURNS: Confirmation with deleted item ID.

NameTypeReqDescription
board_idstringyesBoard ID
dry_runboolean–If true, returns preview without deleting
item_idstringyesItem ID to delete
NameTypeReqDescription
item_idstringyes–
messagestringyes–
successbooleanyes–

No examples provided.

miro_delete_mindmap_node ~95

Delete a mindmap node. Deleting a parent may affect children. Uses v2-experimental API. WARNING: Cannot be undone. Use dry_run=true to preview first. RETURNS: Confirmation with deleted node ID.

NameTypeReqDescription
board_idstringyesBoard ID
dry_runboolean–If true, returns preview without deleting
node_idstringyesMindmap node ID to delete
NameTypeReqDescription
idstringyes–
messagestringyes–
successbooleanyes–

No examples provided.

miro_delete_tag ~116

Delete a tag from a board. Removes the tag from all items. USE WHEN: "delete this tag", "remove tag from board", "get rid of tag X" WARNING: Cannot be undone. Use dry_run=true to preview first. RETURNS: Confirmation with deleted tag ID. VOICE-FRIENDLY: "Tag deleted successfully"

NameTypeReqDescription
board_idstringyesBoard ID
dry_runboolean–If true, returns preview without deleting
tag_idstringyesID of the tag to delete
NameTypeReqDescription
messagestringyes–
successbooleanyes–
tag_idstringyes–

No examples provided.

miro_detach_tag ~101

Remove a tag from a sticky note or card. The tag stays on the board for reuse; to delete it entirely, use miro_delete_tag. USE WHEN: "remove the Urgent tag", "untag this card", "take off the Done label"

NameTypeReqDescription
board_idstringyesBoard ID
item_idstringyesID of the item to untag
tag_idstringyesID of the tag to remove
NameTypeReqDescription
item_idstringyes–
messagestringyes–
successbooleanyes–
tag_idstringyes–

No examples provided.

miro_find_board ~214

Find a Miro board by name (case-insensitive, partial match). Returns board ID for subsequent operations. For listing all boards, use miro_list_boards. USE WHEN: "find board named X", "get the Design Sprint board" RETURNS: id, name, description, view_link, team_id, team_name, owner (id + name), created_at, modified_at. Answers "who owns this board" and "when was it last changed" without a follow-up miro_get_board. MATCH QUALITY: the match field says how the board was reached - "exact", "prefix", "contains", or "none". A "none" result is the nearest candidate rather than a match: nothing with that name was found, and the board returned is a guess. Check match before acting on the board ID. VOICE-FRIENDLY: "Found 'Design Sprint' board - ready to work on it"

NameTypeReqDescription
namestringyesBoard name to search for (case-insensitive, supports partial matching)
NameTypeReqDescription
created_atstring––
descriptionstring––
idstringyes–
matchstringyes–
messagestringyes–
modified_atstring––
namestringyes–
ownernull|object––
team_idstring––
team_namestring––
view_linkstringyes–

No examples provided.

miro_generate_diagram ~565

Generate a diagram on a Miro board from Mermaid code. Parses locally (no external service), creates shapes and connectors with auto-layout. USE WHEN: "create a flowchart", "generate diagram from code", "draw a process flow", "make a sequence diagram" NOT FOR: Freeform shape placement (use miro_create_shape). Mindmaps (use miro_create_mindmap_node). SUPPORTED SYNTAX: - flowchart/graph (directions: TB, BT, LR, RL): A[rect] --> B{diamond} -->|label| C((circle)) - sequenceDiagram: participant A; A->>B: sync; A-->>B: async OUTPUT MODES: - discrete (default): Individual shapes and connectors, no container - grouped: All items in a logical group for easy move/delete - framed: All items inside a titled frame PARAMETERS: - board_id: Required - diagram: Mermaid code (required). Must start with "flowchart TB", "graph LR", or "sequenceDiagram". - output_mode: "discrete" (default), "grouped", or "framed" - use_stencils: true for professional flowchart symbols (terminator, process, decision, I/O) - start_x, start_y: Position offset (default: 0, 0) - parent_id: Frame ID to place diagram inside RETURNS: Counts of created nodes/connectors/frames, all item IDs and view links, diagram dimensions. In grouped/framed mode, also returns container ID. FAILS WHEN: Invalid Mermaid syntax (returns line number and fix suggestion). Missing header (must start with flowchart/graph/sequenceDiagram). Input exceeds 50KB or 500 lines. VOICE-FRIENDLY: "Created flowchart with 6 shapes and 5 connectors"

NameTypeReqDescription
board_idstringyesBoard ID to create the diagram on
diagramstringyesDiagram code in Mermaid format (flowchart/graph syntax)
node_widthnumber–Width of each node (default: 180)
output_modestring–Output mode: 'discrete' (default) returns individual items, 'grouped' groups all items together for easy move/delete, 'framed' creates a frame containing all items
parent_idstring–Parent frame ID to create diagram inside
start_xnumber–Starting X position (default: 0)
start_ynumber–Starting Y position (default: 0)
use_stencilsboolean–Use professional flowchart stencils instead of basic shapes. Provides better visual styling with proper flowchart symbols (terminator, process, decision, I/O).
NameTypeReqDescription
connector_idsnull|arrayyes–
connector_urlsnull|array––
connectors_createdintegeryes–
diagram_heightnumberyes–
diagram_idstring––
diagram_typestring––
diagram_urlstring––
diagram_widthnumberyes–
frame_idsnull|array––
frame_urlsnull|array––
frames_createdintegeryes–
messagestringyes–
node_idsnull|arrayyes–
node_urlsnull|array––
nodes_createdintegeryes–
output_modestring––
total_itemsinteger––

No examples provided.

miro_get_app_card ~80

Get details of a specific app card by ID. RETURNS: App card ID, title, description, status, custom fields, and view link. VOICE-FRIENDLY: "App card 'API Status' shows 3 custom fields"

NameTypeReqDescription
board_idstringyesBoard ID
item_idstringyesApp card item ID
NameTypeReqDescription
created_atstring––
descriptionstringyes–
fieldsnull|array––
geometrynull|object––
idstringyes–
messagestringyes–
modified_atstring––
positionnull|object––
statusstringyes–
titlestringyes–

No examples provided.

miro_get_audit_log ~274

Query THIS SERVER's local execution log — which MCP tools ran here, when, and whether they succeeded. Covers this process only; it knows nothing about actions taken in Miro's UI or by other clients. USE WHEN debugging what this server did. For who did what in the Miro workspace, use miro_get_org_audit_logs instead. Filter by time range, tool, board, action type, or success/failure. RETURNS: Array of entries with timestamps, tool names, board IDs, and outcomes.

NameTypeReqDescription
actionstring–Filter by action type: create, read, update, delete, export, auth
board_idstring–Filter by board ID
limitinteger–Maximum events to return (default 50, max 500)
sincestring–Return events after this time (ISO 8601, e.g., 2024-01-01T00:00:00Z)
successnull|boolean–Filter by success status (true/false)
toolstring–Filter by tool name (e.g., miro_create_sticky)
untilstring–Return events before this time (ISO 8601, e.g., 2024-01-02T00:00:00Z)
NameTypeReqDescription
eventsnull|arrayyes–
has_morebooleanyes–
messagestringyes–
totalintegeryes–

No examples provided.

Install

How do I install the Miro MCP server?

Miro runs locally as a container image, launched with docker run --rm -i -e MIRO_ACCESS_TOKEN ghcr.io/olgasafonova/miro-mcp-server:1.25.0. Ready-made configuration for Claude, Cursor, VS Code, Codex and 3 more is on this page, copied from each client's own documentation.

oci · ghcr.io/olgasafonova/miro-mcp-server:1.25.0

# add to Claude Code
claude mcp add olgasafonova-miro-mcp-server -- docker run --rm -i -e MIRO_ACCESS_TOKEN ghcr.io/olgasafonova/miro-mcp-server:1.25.0

This image reads MIRO_ACCESS_TOKEN. Set it in your client's env block for this server; docker run -e passes it through to the container.

Common questions

What is the Miro MCP server?

Miro is an MCP server listed in the public MCP registry as io.github.olgasafonova/miro-mcp-server. Control Miro whiteboards with AI. 110 tools for boards, diagrams, mindmaps, comments, SVG. This page covers its container image (ghcr.io/olgasafonova/miro-mcp-server:1.25.0).

Is the Miro MCP server safe to use?

Miro scores 56 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the Miro MCP server expose?

Miro exposes 110 tools: miro_attach_tag, miro_bulk_create, miro_bulk_delete, miro_bulk_update, miro_copy_board, and 105 more. Their descriptions and schemas cost roughly 21,385 tokens of context every time the server is loaded.

Is the Miro MCP server still maintained?

Miro is still listed as active in the MCP registry. We last reached this channel on 4 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

What licence is the Miro MCP server under?

Miro declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.