Summary
Please expose Miro's existing UI action "Create board from frame" as an MCP tool (and ideally as a documented REST API endpoint). Agents today cannot invoke this native operation and must reconstruct frames manually via layout_read + layout_create, which is slower, lossy, and error-prone.
Submitter: Rick Sipin — rick@sipin.org
MCP client: Cursor
Proposed tool (sketch)
Name: board_create_from_frame (or frame_copy_to_board)
Inputs:
source_miro_url — board URL with ?moveToWidget=<frame_id> targeting the frame to copy
name — name for the new board (required)
description — optional board description
copy_mode — optional: copy (default, leave source unchanged) vs move (if ever supported)
Output:
- New board
miro_url
- New frame
miro_url (root frame on the new board)
items_copied_count / items_skipped_count with reasons for skipped items
Behavior: Match the product UI feature: create a new board containing the selected frame and all supported child content (stickies, shapes, text, connectors, images, nested frames, etc.) with faithful geometry and parent/child relationships.
Motivation
We attempted to copy the "Event Storming Defined" frame from an Event Storming example board to a new board using MCP only. The manual DSL path worked partially but exposed clear gaps:
| Approach |
Result |
| UI Create board from frame |
Not available to agents |
layout_read + board_create + layout_create |
~165/218 items; 2 images unsupported; 53 connectors failed on first pass (alias scope); 84 items lost frame parent when batched across calls |
| REST Copy board |
Copies entire board, not one frame |
A first-class create board from frame tool would let agents perform the same operation users already trust in the UI.
Problems with the current workaround (layout_read + layout_create)
- Unsupported item types —
layout_read reported "skipped 2 unsupported items" (images) on our test frame.
- Connectors —
from/to local aliases only resolve within a single layout_create call; cross-batch or cross-board copies require remapping every endpoint to full item URLs.
- Parent frame scope —
parent=esd_frame aliases do not persist across separate layout_create batches; later batches created 84 items without a frame parent, shifting positions until manually corrected.
- No nested frame fidelity — separate board-level frames near the source frame are not included when reading one frame; UI copy may behave differently.
- Payload limits — large frames require batching, which compounds alias/parent/connector issues.
- Rate limits & round-trips — reconstructing 200+ items is many API calls vs one native copy.
Real-world test case (optional reference for QA)
- Source board: Event Storming Example — frame "Event Storming Defined"
- Goal: New board with same name, frame copied, source board unchanged
- Manual MCP copy board: https://miro.com/app/board/uXjVHEXdRP4=/
- Connectors: 53 required a second pass with coordinate-based ID remapping
Suggested acceptance criteria
Contact
Rick Sipin — rick@sipin.org
Thank you for considering this. Happy to provide additional reproduction details or retest a beta implementation.
Summary
Please expose Miro's existing UI action "Create board from frame" as an MCP tool (and ideally as a documented REST API endpoint). Agents today cannot invoke this native operation and must reconstruct frames manually via
layout_read+layout_create, which is slower, lossy, and error-prone.Submitter: Rick Sipin — rick@sipin.org
MCP client: Cursor
Proposed tool (sketch)
Name:
board_create_from_frame(orframe_copy_to_board)Inputs:
source_miro_url— board URL with?moveToWidget=<frame_id>targeting the frame to copyname— name for the new board (required)description— optional board descriptioncopy_mode— optional:copy(default, leave source unchanged) vsmove(if ever supported)Output:
miro_urlmiro_url(root frame on the new board)items_copied_count/items_skipped_countwith reasons for skipped itemsBehavior: Match the product UI feature: create a new board containing the selected frame and all supported child content (stickies, shapes, text, connectors, images, nested frames, etc.) with faithful geometry and parent/child relationships.
Motivation
We attempted to copy the "Event Storming Defined" frame from an Event Storming example board to a new board using MCP only. The manual DSL path worked partially but exposed clear gaps:
layout_read+board_create+layout_createA first-class create board from frame tool would let agents perform the same operation users already trust in the UI.
Problems with the current workaround (
layout_read+layout_create)layout_readreported "skipped 2 unsupported items" (images) on our test frame.from/tolocal aliases only resolve within a singlelayout_createcall; cross-batch or cross-board copies require remapping every endpoint to full item URLs.parent=esd_framealiases do not persist across separatelayout_createbatches; later batches created 84 items without a frame parent, shifting positions until manually corrected.Real-world test case (optional reference for QA)
Suggested acceptance criteria
Contact
Rick Sipin — rick@sipin.org
Thank you for considering this. Happy to provide additional reproduction details or retest a beta implementation.