Miro
OCI · GHCR.IO/OLGASAFONOVA/MIRO-MCP-SERVER:1.24.0 · 6 COMPONENTS · SCANNED AUG 22
Control Miro whiteboards with AI. 110 tools for boards, diagrams, mindmaps, comments, SVG.
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 →
Supply Chain Security0
- Malware scan not yet available for this package.Unverified
- Known CVEs could not be checked: this artifact ships no SBOM, so there is no dependency list to read. Publishing one would let us assess it.Unverified
- Install-script risk not yet assessed.Unverified
- Dependency health could not be checked: this artifact ships no SBOM, so there is no dependency list to read. Publishing one would let us assess it.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 3 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 21848 tokens (~198/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 Management0
- Stability not yet verified: not enough scan history yet (needs a 30-day window).Unverified
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
Capabilities100
- Implements a current MCP spec version (2026-07-28).Pass
Unverified: 2 categories
Categories scored 0 because we could not verify them: 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.
Add this component to your MCP client. Where a client-specific snippet is available, pick your client below and copy it straight into your config; otherwise use the connection detail shown.
oci · ghcr.io/olgasafonova/miro-mcp-server:1.24.0
claude mcp add olgasafonova-miro-mcp-server -- docker run --rm -i ghcr.io/olgasafonova/miro-mcp-server:1.24.0
codex mcp add olgasafonova-miro-mcp-server -- docker run --rm -i ghcr.io/olgasafonova/miro-mcp-server:1.24.0
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"olgasafonova-miro-mcp-server": {
"type": "local",
"command": [
"docker",
"run",
"--rm",
"-i",
"ghcr.io/olgasafonova/miro-mcp-server:1.24.0"
],
"enabled": true
}
}
} mcp_servers:
olgasafonova-miro-mcp-server:
command: "docker"
args: ["run", "--rm", "-i", "ghcr.io/olgasafonova/miro-mcp-server:1.24.0"] {
"mcpServers": {
"olgasafonova-miro-mcp-server": {
"command": "docker",
"args": [
"run",
"--rm",
"-i",
"ghcr.io/olgasafonova/miro-mcp-server:1.24.0"
]
}
}
} 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.
- 18 Aug 26 41
First indexed and scored.
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 22 Aug 2026 · Analysed oci/ghcr.io/olgasafonova/miro-mcp-server:1.24.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 |
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.
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'"
| Name | Type | Req | Description |
|---|---|---|---|
| board_id | string | yes | Board ID |
| item_id | string | yes | ID of the item to tag (sticky note only) |
| tag_id | string | yes | ID of the tag to attach |
| Name | Type | Req | Description |
|---|---|---|---|
| item_id | string | yes | – |
| message | string | yes | – |
| success | boolean | yes | – |
| tag_id | string | yes | – |
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"
| Name | Type | Req | Description |
|---|---|---|---|
| board_id | string | yes | Board ID |
| items | null|array | yes | Items to create (max 20) |
| Name | Type | Req | Description |
|---|---|---|---|
| created | integer | yes | – |
| errors | null|array | – | – |
| failed_items | null|array | – | – |
| item_ids | null|array | yes | – |
| item_urls | null|array | – | – |
| message | string | yes | – |
| retriable_ids | null|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"
| Name | Type | Req | Description |
|---|---|---|---|
| board_id | string | yes | Board ID |
| dry_run | boolean | – | If true, returns preview without deleting |
| item_ids | null|array | yes | IDs of items to delete (max 20) |
| Name | Type | Req | Description |
|---|---|---|---|
| deleted | integer | yes | – |
| errors | null|array | – | – |
| failed_items | null|array | – | – |
| item_ids | null|array | yes | – |
| message | string | yes | – |
| retriable_ids | null|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"
| Name | Type | Req | Description |
|---|---|---|---|
| board_id | string | yes | Board ID |
| items | null|array | yes | Items to update (max 20) |
| Name | Type | Req | Description |
|---|---|---|---|
| errors | null|array | – | – |
| failed_items | null|array | – | – |
| item_ids | null|array | yes | – |
| message | string | yes | – |
| retriable_ids | null|array | – | – |
| updated | integer | yes | – |
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'"
| Name | Type | Req | Description |
|---|---|---|---|
| board_id | string | yes | ID of the board to copy |
| description | string | – | Description for the copy |
| name | string | – | Name for the copy (defaults to 'Copy of {original}') |
| team_id | string | – | Team ID to copy board to |
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | – |
| message | string | yes | – |
| name | string | yes | – |
| view_link | string | yes | – |
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'"
| Name | Type | Req | Description |
|---|---|---|---|
| board_id | string | yes | Board ID |
| description | string | – | App card description |
| fields | null|array | – | Custom fields (max 5) |
| parent_id | string | – | Frame ID to place card in |
| status | string | – | Status indicator: connected, disconnected, disabled |
| title | string | yes | App card title |
| width | number | – | Card width (default 320) |
| x | number | – | X position |
| y | number | – | Y position |
| Name | Type | Req | Description |
|---|---|---|---|
| description | string | yes | – |
| id | string | yes | – |
| item_url | string | – | – |
| message | string | yes | – |
| status | string | yes | – |
| title | string | yes | – |
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'"
| Name | Type | Req | Description |
|---|---|---|---|
| description | string | – | Board description |
| name | string | yes | Name for the new board |
| team_id | string | – | Team ID to create board in |
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | – |
| message | string | yes | – |
| name | string | yes | – |
| view_link | string | yes | – |
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'"
| Name | Type | Req | Description |
|---|---|---|---|
| board_id | string | yes | Board ID |
| description | string | – | Card description/body text |
| due_date | string | – | Due date in ISO 8601 format (e.g., 2024-12-31) |
| parent_id | string | – | Frame ID to place card in |
| title | string | yes | Card title |
| width | number | – | Card width (default 320) |
| x | number | – | X position |
| y | number | – | Y position |
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | – |
| item_url | string | – | – |
| message | string | yes | – |
| title | string | yes | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| board_id | string | yes | Board ID |
| code | string | yes | The code content of the widget (max 6000 characters) |
| height | null|number | – | Height in pixels |
| language | string | – | Programming language for syntax highlighting (e.g. javascript, go, python) |
| line_numbers_visible | null|boolean | – | Show line numbers (API default applies when omitted) |
| parent_id | string | – | ID of a parent frame to attach the widget to |
| title | string | – | Title of the code widget (max 100 characters) |
| width | null|number | – | Width in pixels |
| x | number | – | X position on the board (center origin) |
| y | number | – | Y position on the board (center origin) |
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | – |
| item_url | string | – | – |
| language | string | – | – |
| message | string | yes | – |
| title | string | – | – |
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"
| Name | Type | Req | Description |
|---|---|---|---|
| board_id | string | yes | Board ID to comment on |
| content | string | yes | Text of the comment (first message of the thread) |
| item_id | string | – | Optional item ID to attach the comment to. Omit for a board-level comment. |
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | – |
| item_id | string | – | – |
| message | string | yes | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| board_id | string | yes | Board ID |
| caption | string | – | Text label on the connector |
| end_cap | string | – | End arrow: none, arrow, filled_arrow, diamond, etc. |
| end_item_id | string | yes | ID of the item to connect to |
| start_cap | string | – | Start arrow: none, arrow, filled_arrow, diamond, etc. |
| start_item_id | string | yes | ID of the item to connect from |
| style | string | – | Connector style: straight, elbowed, curved (default elbowed) |
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | – |
| item_url | string | – | – |
| message | string | yes | – |
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"
| Name | Type | Req | Description |
|---|---|---|---|
| board_id | string | yes | Board ID |
| content | string | yes | Markdown content for the document |
| parent_id | string | – | Frame ID to place document in |
| x | number | – | X position |
| y | number | – | Y position |
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | – |
| item_url | string | – | – |
| message | string | yes | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| board_id | string | yes | Board ID |
| parent_id | string | – | Frame ID to place document in |
| title | string | – | Document title |
| url | string | yes | URL of the document (PDF, etc.) to add |
| width | number | – | Document preview width |
| x | number | – | X position |
| y | number | – | Y position |
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | – |
| item_url | string | – | – |
| message | string | yes | – |
| title | string | yes | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| board_id | string | yes | Board ID |
| height | number | – | Embed height (default 300) |
| mode | string | – | Display mode: inline (default) or modal |
| parent_id | string | – | Frame ID to place embed in |
| url | string | yes | URL to embed (YouTube, Vimeo, Figma, Google Docs, etc.) |
| width | number | – | Embed width (default 400) |
| x | number | – | X position |
| y | number | – | Y position |
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | – |
| item_url | string | – | – |
| message | string | yes | – |
| provider | string | – | – |
| url | string | yes | – |
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).
| Name | Type | Req | Description |
|---|---|---|---|
| board_ids | null|array | yes | Board IDs to export (max 50) |
| format | string | – | Export format: pdf, svg, or html (default: pdf) |
| org_id | string | yes | Organization ID (Enterprise only) |
| request_id | string | – | Unique request ID for idempotency (auto-generated if empty) |
| Name | Type | Req | Description |
|---|---|---|---|
| job_id | string | yes | – |
| message | string | yes | – |
| request_id | string | yes | – |
| status | string | yes | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| board_id | string | yes | Board ID |
| border_color | string | – | Border color: 6-char hex like #000000 or named (red, orange, yellow, green, blue, purple, pink, gray, white, black) |
| content | string | – | Text inside the shape |
| fill_color | string | – | Fill/background color: 6-char hex like #006400 or named (red, orange, yellow, green, blue, purple, pink, gray, white, black) |
| height | number | – | Height in pixels (default 200) |
| parent_id | string | – | Frame ID to place shape in |
| shape | string | yes | Flowchart shape type: rectangle, round_rectangle, circle, rhombus, parallelogram, trapezoid, pentagon, hexagon, star, flow_chart_predefined_process, wedge_round_rectangle_callout, etc. |
| width | number | – | Width in pixels (default 200) |
| x | number | – | X position |
| y | number | – | Y position |
| Name | Type | Req | Description |
|---|---|---|---|
| content | string | – | – |
| id | string | yes | – |
| item_url | string | – | – |
| message | string | yes | – |
| shape | string | yes | – |
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"}
| Name | Type | Req | Description |
|---|---|---|---|
| board_id | string | yes | Board ID |
| color | string | – | Background color: 6-char hex like #006400 or named (red, orange, yellow, green, blue, purple, pink, gray, white, black) |
| height | number | – | Height (default 600) |
| title | string | – | Frame title |
| width | number | – | Width (default 800) |
| x | number | – | X position |
| y | number | – | Y position |
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | – |
| item_url | string | – | – |
| message | string | yes | – |
| title | string | yes | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| board_id | string | yes | Board ID to create items on |
| offset_x | number | – | X offset added to every created item (default 0) |
| offset_y | number | – | Y offset added to every created item (default 0) |
| svg | string | yes | SVG 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… |
| Name | Type | Req | Description |
|---|---|---|---|
| count | integer | yes | – |
| created | null|array | yes | – |
| message | string | yes | – |
| skipped | null|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"
| Name | Type | Req | Description |
|---|---|---|---|
| board_id | string | yes | Board ID |
| item_ids | null|array | yes | IDs of items to group together (minimum 2) |
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | – |
| item_ids | null|array | yes | – |
| item_url | string | – | – |
| item_urls | null|array | – | – |
| message | string | yes | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| board_id | string | yes | Board ID |
| parent_id | string | – | Frame ID to place image in |
| title | string | – | Image title/alt text |
| url | string | yes | URL of the image to add (must be publicly accessible) |
| width | number | – | Image width (preserves aspect ratio) |
| x | number | – | X position |
| y | number | – | Y position |
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | – |
| item_url | string | – | – |
| message | string | yes | – |
| title | string | yes | – |
| url | string | yes | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| board_id | string | yes | Board ID |
| content | string | yes | Text content of the node |
| node_view | string | – | Node style: text (default). Other values may be rejected by the API. |
| parent_id | string | – | ID of the parent node (omit for root node) |
| x | number | – | 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. |
| y | number | – | Y position. Required for root nodes. For child nodes, supply x/y to override the API's default placement. |
| Name | Type | Req | Description |
|---|---|---|---|
| content | string | yes | – |
| id | string | yes | – |
| item_url | string | – | – |
| message | string | yes | – |
| parent_id | string | – | – |
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}
| Name | Type | Req | Description |
|---|---|---|---|
| board_id | string | yes | Board ID |
| color | string | – | Fill/background color: 6-char hex like #006400 or named (red, orange, yellow, green, blue, purple, pink, gray, white, black) |
| content | string | – | Text inside the shape |
| font_size | integer | – | Font size in points (default 14) |
| height | number | – | Height in pixels (default 200) |
| parent_id | string | – | 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… |
| shape | string | yes | Shape type: rectangle, circle, triangle, rhombus, round_rectangle, etc. |
| text_align | string | – | Horizontal text alignment: left, center (default), right |
| text_align_vertical | string | – | 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_color | string | – | Text color: 6-char hex like #ffffff or named (red, orange, yellow, green, blue, purple, pink, gray, white, black) |
| width | number | – | Width in pixels (default 200) |
| x | number | – | 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. |
| y | number | – | 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. |
| Name | Type | Req | Description |
|---|---|---|---|
| content | string | – | – |
| id | string | yes | – |
| item_url | string | – | – |
| message | string | yes | – |
| shape | string | yes | – |
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'"
| Name | Type | Req | Description |
|---|---|---|---|
| board_id | string | yes | Board ID |
| color | string | – | 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. |
| content | string | yes | Text content of the sticky note |
| parent_id | string | – | 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… |
| width | number | – | Width in pixels (default ~199; height auto-scales). Set width=160 to fit 3 stickies in a 600-tall frame. |
| x | number | – | 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… |
| y | number | – | 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. |
| Name | Type | Req | Description |
|---|---|---|---|
| color | string | yes | – |
| content | string | yes | – |
| id | string | yes | – |
| item_url | string | – | – |
| message | string | yes | – |
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"
| Name | Type | Req | Description |
|---|---|---|---|
| board_id | string | yes | Board ID |
| color | string | – | Color for all stickies: yellow, green, blue, pink, orange, etc. |
| columns | integer | – | Number of columns in grid (default 3) |
| contents | null|array | yes | Text for each sticky note |
| parent_id | string | – | Frame ID to place stickies in |
| spacing | number | – | Space between stickies in pixels (default 220) |
| start_x | number | – | Starting X position (default 0) |
| start_y | number | – | Starting Y position (default 0) |
| Name | Type | Req | Description |
|---|---|---|---|
| columns | integer | yes | – |
| created | integer | yes | – |
| item_ids | null|array | yes | – |
| item_urls | null|array | – | – |
| message | string | yes | – |
| rows | integer | yes | – |
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'"
| Name | Type | Req | Description |
|---|---|---|---|
| board_id | string | yes | Board ID |
| color | string | – | Tag color: red, magenta, violet, blue, cyan, green, yellow, gray, light_green, dark_green, dark_blue, dark_gray, black |
| title | string | yes | Tag text (e.g., 'Urgent', 'Done', 'Review') |
| Name | Type | Req | Description |
|---|---|---|---|
| color | string | yes | – |
| id | string | yes | – |
| item_url | string | – | – |
| message | string | yes | – |
| title | string | yes | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| board_id | string | yes | Board ID |
| color | string | – | Text color: 6-char hex like #1a1a1a or named (red, orange, yellow, green, blue, purple, pink, gray, white, black) |
| content | string | yes | Text content |
| font_size | integer | – | Font size (default 14) |
| parent_id | string | – | Frame ID |
| width | number | – | Text box width |
| x | number | – | X position |
| y | number | – | Y position |
| Name | Type | Req | Description |
|---|---|---|---|
| content | string | yes | – |
| id | string | yes | – |
| item_url | string | – | – |
| message | string | yes | – |
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"
| Name | Type | Req | Description |
|---|---|---|---|
| board_id | string | yes | Board ID |
| dry_run | boolean | – | If true, returns preview without deleting |
| item_id | string | yes | App card item ID to delete |
| Name | Type | Req | Description |
|---|---|---|---|
| item_id | string | yes | – |
| message | string | yes | – |
| success | boolean | yes | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| board_id | string | yes | ID of the board to delete |
| dry_run | boolean | – | If true, returns preview without deleting |
| Name | Type | Req | Description |
|---|---|---|---|
| board_id | string | yes | – |
| message | string | yes | – |
| success | boolean | yes | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| board_id | string | yes | Board ID |
| dry_run | boolean | – | If true, returns preview without deleting |
| item_id | string | yes | Code widget item ID to delete |
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | – |
| message | string | yes | – |
| success | boolean | yes | – |
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"
| Name | Type | Req | Description |
|---|---|---|---|
| board_id | string | yes | Board ID |
| connector_id | string | yes | ID of the connector to delete |
| dry_run | boolean | – | If true, returns preview without deleting |
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | – |
| message | string | yes | – |
| success | boolean | yes | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| board_id | string | yes | Board ID |
| dry_run | boolean | – | If true, returns preview without deleting |
| item_id | string | yes | Doc format item ID to delete |
| Name | Type | Req | Description |
|---|---|---|---|
| item_id | string | yes | – |
| message | string | yes | – |
| success | boolean | yes | – |
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"
| Name | Type | Req | Description |
|---|---|---|---|
| board_id | string | yes | Board ID |
| dry_run | boolean | – | If true, returns preview without deleting |
| frame_id | string | yes | Frame ID to delete |
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | – |
| message | string | yes | – |
| success | boolean | yes | – |
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"
| Name | Type | Req | Description |
|---|---|---|---|
| board_id | string | yes | Board ID |
| delete_items | boolean | – | Also delete the items in the group (default: false, items are ungrouped) |
| dry_run | boolean | – | If true, returns preview without deleting |
| group_id | string | yes | Group ID to delete |
| Name | Type | Req | Description |
|---|---|---|---|
| group_id | string | yes | – |
| message | string | yes | – |
| success | boolean | yes | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| board_id | string | yes | Board ID |
| dry_run | boolean | – | If true, returns preview without deleting |
| item_id | string | yes | Item ID to delete |
| Name | Type | Req | Description |
|---|---|---|---|
| item_id | string | yes | – |
| message | string | yes | – |
| success | boolean | yes | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| board_id | string | yes | Board ID |
| dry_run | boolean | – | If true, returns preview without deleting |
| node_id | string | yes | Mindmap node ID to delete |
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | – |
| message | string | yes | – |
| success | boolean | yes | – |
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"
| Name | Type | Req | Description |
|---|---|---|---|
| board_id | string | yes | Board ID |
| dry_run | boolean | – | If true, returns preview without deleting |
| tag_id | string | yes | ID of the tag to delete |
| Name | Type | Req | Description |
|---|---|---|---|
| message | string | yes | – |
| success | boolean | yes | – |
| tag_id | string | yes | – |
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"
| Name | Type | Req | Description |
|---|---|---|---|
| board_id | string | yes | Board ID |
| item_id | string | yes | ID of the item to untag |
| tag_id | string | yes | ID of the tag to remove |
| Name | Type | Req | Description |
|---|---|---|---|
| item_id | string | yes | – |
| message | string | yes | – |
| success | boolean | yes | – |
| tag_id | string | yes | – |
No examples provided.
miro_find_board ~150
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. VOICE-FRIENDLY: "Found 'Design Sprint' board - ready to work on it"
| Name | Type | Req | Description |
|---|---|---|---|
| name | string | yes | Board name to search for (case-insensitive, supports partial matching) |
| Name | Type | Req | Description |
|---|---|---|---|
| created_at | string | – | – |
| description | string | – | – |
| id | string | yes | – |
| message | string | yes | – |
| modified_at | string | – | – |
| name | string | yes | – |
| owner | null|object | – | – |
| team_id | string | – | – |
| team_name | string | – | – |
| view_link | string | yes | – |
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"
| Name | Type | Req | Description |
|---|---|---|---|
| board_id | string | yes | Board ID to create the diagram on |
| diagram | string | yes | Diagram code in Mermaid format (flowchart/graph syntax) |
| node_width | number | – | Width of each node (default: 180) |
| output_mode | string | – | Output mode: 'discrete' (default) returns individual items, 'grouped' groups all items together for easy move/delete, 'framed' creates a frame containing all items |
| parent_id | string | – | Parent frame ID to create diagram inside |
| start_x | number | – | Starting X position (default: 0) |
| start_y | number | – | Starting Y position (default: 0) |
| use_stencils | boolean | – | Use professional flowchart stencils instead of basic shapes. Provides better visual styling with proper flowchart symbols (terminator, process, decision, I/O). |
| Name | Type | Req | Description |
|---|---|---|---|
| connector_ids | null|array | yes | – |
| connector_urls | null|array | – | – |
| connectors_created | integer | yes | – |
| diagram_height | number | yes | – |
| diagram_id | string | – | – |
| diagram_type | string | – | – |
| diagram_url | string | – | – |
| diagram_width | number | yes | – |
| frame_ids | null|array | – | – |
| frame_urls | null|array | – | – |
| frames_created | integer | yes | – |
| message | string | yes | – |
| node_ids | null|array | yes | – |
| node_urls | null|array | – | – |
| nodes_created | integer | yes | – |
| output_mode | string | – | – |
| total_items | integer | – | – |
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"
| Name | Type | Req | Description |
|---|---|---|---|
| board_id | string | yes | Board ID |
| item_id | string | yes | App card item ID |
| Name | Type | Req | Description |
|---|---|---|---|
| created_at | string | – | – |
| description | string | yes | – |
| fields | null|array | – | – |
| geometry | null|object | – | – |
| id | string | yes | – |
| message | string | yes | – |
| modified_at | string | – | – |
| position | null|object | – | – |
| status | string | yes | – |
| title | string | yes | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | – | Filter by action type: create, read, update, delete, export, auth |
| board_id | string | – | Filter by board ID |
| limit | integer | – | Maximum events to return (default 50, max 500) |
| since | string | – | Return events after this time (ISO 8601, e.g., 2024-01-01T00:00:00Z) |
| success | null|boolean | – | Filter by success status (true/false) |
| tool | string | – | Filter by tool name (e.g., miro_create_sticky) |
| until | string | – | Return events before this time (ISO 8601, e.g., 2024-01-02T00:00:00Z) |
| Name | Type | Req | Description |
|---|---|---|---|
| events | null|array | yes | – |
| has_more | boolean | yes | – |
| message | string | yes | – |
| total | integer | yes | – |
No examples provided.