Skip to content
Scalekit Docs
Talk to an Engineer Dashboard

Miro MCP connector

OAuth 2.1/DCRCollaborationDesignProductivity

Connect to Miro MCP to create and manage boards, frames, sticky notes, shapes, diagrams, and comments directly from your AI workflows.

Miro MCP connector

  1. Terminal window
    npm install @scalekit-sdk/node

    Full SDK reference: Node.js | Python

  2. Add your Scalekit credentials to your .env file. Find values in app.scalekit.com > Developers > API Credentials.

    .env
    SCALEKIT_ENVIRONMENT_URL=<your-environment-url>
    SCALEKIT_CLIENT_ID=<your-client-id>
    SCALEKIT_CLIENT_SECRET=<your-client-secret>
  3. quickstart.ts
    import { ScalekitClient } from '@scalekit-sdk/node'
    import 'dotenv/config'
    const scalekit = new ScalekitClient(
    process.env.SCALEKIT_ENV_URL,
    process.env.SCALEKIT_CLIENT_ID,
    process.env.SCALEKIT_CLIENT_SECRET,
    )
    const actions = scalekit.actions
    const connector = 'miromcp'
    const identifier = 'user_123'
    // Generate an authorization link for the user
    const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
    console.log('Authorize Miro MCP:', link)
    process.stdout.write('Press Enter after authorizing...')
    await new Promise(r => process.stdin.once('data', r))
    // Make your first call
    const result = await actions.executeTool({
    connector,
    identifier,
    toolName: 'miromcp_code_widget_get',
    toolInput: { miro_url: 'https://example.com/miro-url' },
    })
    console.log(result)

Connect this agent connector to let your agent:

  • I user who am — Returns the identity of the current authenticated user
  • Rows table sync — Add or update rows in a Miro table
  • List table, comment, code widget — Get rows from a Miro table with column metadata
  • Create table, prototype, layout — Create a table on a Miro board with specified columns
  • Read prototype, layout — Read prototype screens from a Miro board
  • Get prototype, layout, image — Reserve a single-use upload slot for one HTML screen

Use the exact tool names from the Tool list below when you call execute_tool. If you’re not sure which name to use, list the tools available for the current user first.

miromcp_board_create#Create a new Miro board with a given name and optional description. Always confirm with the user before calling this tool, as board creation cannot be undone.4 params

Create a new Miro board with a given name and optional description. Always confirm with the user before calling this tool, as board creation cannot be undone.

NameTypeRequiredDescription
namestringrequiredName of the new board.
descriptionstringoptionalOptional description for the board.
invocation_sourcestringoptionalIdentifies what triggered this tool call.
is_repositorybooleanoptionalSet to true when operating in a source-control repository folder, false otherwise.
miromcp_board_list_items#List items on a Miro board with cursor-based pagination. Optionally filter by item type to retrieve specific elements such as cards, sticky notes, frames, or images.6 params

List items on a Miro board with cursor-based pagination. Optionally filter by item type to retrieve specific elements such as cards, sticky notes, frames, or images.

NameTypeRequiredDescription
limitintegerrequiredMaximum number of items to return per page. Range: 10-1000; capped at 50 when filtering by parent.
miro_urlstringrequiredFull Miro board URL, optionally with a frame target via moveToWidget query parameter.
cursorstringoptionalOpaque cursor for retrieving the next page of results.
invocation_sourcestringoptionalIdentifies what triggered this tool call.
is_repositorybooleanoptionalSet to true when operating in a source-control repository folder, false otherwise.
item_typestringoptionalFilter items by type. Leave empty to return all item types.
miromcp_board_search_boards#Search and list Miro boards accessible to the current user, scoped to their team. Returns board metadata including name and URL, suitable for discovering relevant boards before operating on them.7 params

Search and list Miro boards accessible to the current user, scoped to their team. Returns board metadata including name and URL, suitable for discovering relevant boards before operating on them.

NameTypeRequiredDescription
include_contentbooleanoptionalWhen true, searches inside board content in addition to names and descriptions.
invocation_sourcestringoptionalIdentifies what triggered this tool call.
is_repositorybooleanoptionalSet to true when operating in a source-control repository folder, false otherwise.
limitintegeroptionalMaximum number of boards to return per page. Range: 1-50.
offsetintegeroptionalZero-based index of the first board to return for pagination.
owned_by_mebooleanoptionalWhen true, restricts results to boards owned by the current user.
querystringoptionalText to search for in board names and descriptions. Leave empty to list all accessible boards.
miromcp_code_widget_create#Create a code widget on a Miro board. The widget displays syntax-highlighted source code with an optional title and line numbers. Coordinates are board-absolute (center is 0,0) unless a frame is targeted via moveToWidget, in which case x/y are relative to the frame's top-left corner.11 params

Create a code widget on a Miro board. The widget displays syntax-highlighted source code with an optional title and line numbers. Coordinates are board-absolute (center is 0,0) unless a frame is targeted via moveToWidget, in which case x/y are relative to the frame's top-left corner.

NameTypeRequiredDescription
codestringrequiredSource code content to display in the widget.
heightnumberoptionalHeight of the code widget in pixels. Defaults to 100.
invocation_sourcestringoptionalIdentifies what triggered this tool call.
is_repositorybooleanoptionalSet to true when operating in a source-control repository folder, false otherwise.
languagestringoptionalProgramming language for syntax highlighting. Defaults to PlainText when omitted.
line_numbers_visiblebooleanoptionalWhether to show line numbers in the code widget. Defaults to true.
miro_urlstringoptionalFull Miro board URL. If not provided, a new board will be created (requires user confirmation).
titlestringoptionalDisplay title for the code widget.
widthnumberoptionalWidth of the code widget in pixels. Defaults to 800.
xnumberoptionalX-axis coordinate for widget placement.
ynumberoptionalY-axis coordinate for widget placement.
miromcp_code_widget_delete#Delete a code widget from a Miro board. This action permanently removes the widget and cannot be undone.3 params

Delete a code widget from a Miro board. This action permanently removes the widget and cannot be undone.

NameTypeRequiredDescription
miro_urlstringrequiredFull Miro URL to a specific code widget item.
invocation_sourcestringoptionalIdentifies what triggered this tool call.
is_repositorybooleanoptionalSet to true when operating in a source-control repository folder, false otherwise.
miromcp_code_widget_get#Read a code widget from a Miro board, returning its source code, language, title, and position.3 params

Read a code widget from a Miro board, returning its source code, language, title, and position.

NameTypeRequiredDescription
miro_urlstringrequiredFull Miro URL to a specific code widget item.
invocation_sourcestringoptionalIdentifies what triggered this tool call.
is_repositorybooleanoptionalSet to true when operating in a source-control repository folder, false otherwise.
miromcp_code_widget_list_items#List code widgets on a Miro board. Returns a paginated list of all code widget items on the board. Use the cursor from a previous response to retrieve the next page.5 params

List code widgets on a Miro board. Returns a paginated list of all code widget items on the board. Use the cursor from a previous response to retrieve the next page.

NameTypeRequiredDescription
cursorstringoptionalPagination cursor from a previous list response. Omit to start from the beginning.
invocation_sourcestringoptionalIdentifies what triggered this tool call.
is_repositorybooleanoptionalSet to true when operating in a source-control repository folder, false otherwise.
limitintegeroptionalMaximum number of items to return (10-50). Defaults to 10.
miro_urlstringoptionalFull Miro board URL. If not provided, a new board will be created (requires user confirmation).
miromcp_code_widget_update#Update an existing code widget on a Miro board. All fields are optional — only the provided fields are updated.11 params

Update an existing code widget on a Miro board. All fields are optional — only the provided fields are updated.

NameTypeRequiredDescription
miro_urlstringrequiredFull Miro URL to a specific code widget item.
codestringoptionalNew source code content. Omit to leave unchanged.
heightnumberoptionalNew height in pixels. Omit to leave unchanged.
invocation_sourcestringoptionalIdentifies what triggered this tool call.
is_repositorybooleanoptionalSet to true when operating in a source-control repository folder, false otherwise.
languagestringoptionalNew programming language for syntax highlighting. Omit to leave unchanged.
line_numbers_visiblebooleanoptionalWhether to show line numbers. Omit to leave unchanged.
titlestringoptionalNew display title. Omit to leave unchanged.
widthnumberoptionalNew width in pixels. Omit to leave unchanged.
xnumberoptionalNew X-axis coordinate. Omit to leave unchanged.
ynumberoptionalNew Y-axis coordinate. Omit to leave unchanged.
miromcp_comment_create#Create a new comment on the Miro board canvas. The comment appears at the specified canvas coordinates and is attributed to the current user. To attach the comment to an existing board item, pass a URL that targets that item.6 params

Create a new comment on the Miro board canvas. The comment appears at the specified canvas coordinates and is attributed to the current user. To attach the comment to an existing board item, pass a URL that targets that item.

NameTypeRequiredDescription
contentstringrequiredText content of the comment.
miro_urlstringrequiredMiro board URL. Can be a plain board URL or include moveToWidget/focusWidget parameter to target a specific item.
xnumberrequiredX-axis coordinate of the comment on the canvas.
ynumberrequiredY-axis coordinate of the comment on the canvas.
invocation_sourcestringoptionalIdentifies what triggered this tool call.
is_repositorybooleanoptionalSet to true when the folder you are operating in is a source-control repository; set to false otherwise.
miromcp_comment_list_comments#List comments from a Miro board or a specific item on the board. Comments include author information, messages (original comment and replies), reactions, resolved status, and position. Use limit and offset for pagination. Use from_date and to_date to filter by creation time. Use resolved to filter by resolved status.8 params

List comments from a Miro board or a specific item on the board. Comments include author information, messages (original comment and replies), reactions, resolved status, and position. Use limit and offset for pagination. Use from_date and to_date to filter by creation time. Use resolved to filter by resolved status.

NameTypeRequiredDescription
miro_urlstringrequiredMiro board URL. Can be a plain board URL or include moveToWidget/focusWidget parameter to target a specific item.
from_datestringoptionalReturn only comments created at or after this date. Format: ISO 8601.
invocation_sourcestringoptionalIdentifies what triggered this tool call.
is_repositorybooleanoptionalSet to true when the folder you are operating in is a source-control repository; set to false otherwise.
limitintegeroptionalMaximum number of comments to return per page. Range: 1-50. Default: 20.
offsetintegeroptionalZero-based offset for pagination. Default: 0.
resolvedbooleanoptionalFilter by resolved status. true returns only resolved comments, false returns only unresolved. Omit to return all comments.
to_datestringoptionalReturn only comments created at or before this date. Format: ISO 8601.
miromcp_comment_reply#Add a reply message to an existing comment thread on a Miro board. Use comment_list_comments to find comment IDs. The reply appears as the last message in the thread and is attributed to the current user.5 params

Add a reply message to an existing comment thread on a Miro board. Use comment_list_comments to find comment IDs. The reply appears as the last message in the thread and is attributed to the current user.

NameTypeRequiredDescription
comment_idstringrequiredID of the comment thread to reply to. Obtain from comment_list_comments.
contentstringrequiredText content of the reply message.
miro_urlstringrequiredMiro board URL. Can be a plain board URL or include moveToWidget/focusWidget parameter to target a specific item.
invocation_sourcestringoptionalIdentifies what triggered this tool call.
is_repositorybooleanoptionalSet to true when the folder you are operating in is a source-control repository; set to false otherwise.
miromcp_comment_resolve#Resolve or unresolve a comment thread on a Miro board. Resolving marks the thread as addressed; unresolving reopens it. Use comment_list_comments with resolved=false to find open threads.5 params

Resolve or unresolve a comment thread on a Miro board. Resolving marks the thread as addressed; unresolving reopens it. Use comment_list_comments with resolved=false to find open threads.

NameTypeRequiredDescription
comment_idstringrequiredID of the comment thread to resolve or unresolve. Obtain from comment_list_comments.
miro_urlstringrequiredMiro board URL. Can be a plain board URL or include moveToWidget/focusWidget parameter to target a specific item.
resolvedbooleanrequiredSet to true to resolve the thread, false to unresolve it.
invocation_sourcestringoptionalIdentifies what triggered this tool call.
is_repositorybooleanoptionalSet to true when the folder you are operating in is a source-control repository; set to false otherwise.
miromcp_context_explore#Explore high-level items on a Miro board, returning a list of frames, documents, prototypes, tables, and diagrams with their URLs and titles. Use this to discover what's on a board before retrieving detailed content with context_get.3 params

Explore high-level items on a Miro board, returning a list of frames, documents, prototypes, tables, and diagrams with their URLs and titles. Use this to discover what's on a board before retrieving detailed content with context_get.

NameTypeRequiredDescription
miro_urlstringrequiredFull Miro board URL, optionally with a frame target via moveToWidget query parameter.
invocation_sourcestringoptionalIdentifies what triggered this tool call.
is_repositorybooleanoptionalSet to true when operating in a source-control repository folder, false otherwise.
miromcp_context_get#Get text context from a Miro board or a specific item on a board. Providing a plain board URL returns an AI-generated overview of the entire board; providing a URL with a moveToWidget parameter returns detailed content for that specific item (document Markdown, prototype HTML, frame summary, table data, or diagram Mermaid code).3 params

Get text context from a Miro board or a specific item on a board. Providing a plain board URL returns an AI-generated overview of the entire board; providing a URL with a moveToWidget parameter returns detailed content for that specific item (document Markdown, prototype HTML, frame summary, table data, or diagram Mermaid code).

NameTypeRequiredDescription
miro_urlstringrequiredMiro board URL, either plain for a board overview or with moveToWidget/focusWidget to get content for a specific item.
invocation_sourcestringoptionalIdentifies what triggered this tool call.
is_repositorybooleanoptionalSet to true when operating in a source-control repository folder, false otherwise.
miromcp_diagram_create#Create a diagram on a Miro board from DSL (Domain-Specific Language) text. Call diagram_get_dsl first to obtain the correct DSL format for the diagram type, then pass the generated DSL here. Supported types: flowchart, uml_class, uml_sequence, entity_relationship.8 params

Create a diagram on a Miro board from DSL (Domain-Specific Language) text. Call diagram_get_dsl first to obtain the correct DSL format for the diagram type, then pass the generated DSL here. Supported types: flowchart, uml_class, uml_sequence, entity_relationship.

NameTypeRequiredDescription
diagram_dslstringrequiredDSL text defining the diagram, following the format specification from diagram_get_dsl.
diagram_typestringrequiredType of diagram to create. Must match the type used when calling diagram_get_dsl.
titlestringrequiredRequired title for the diagram.
invocation_sourcestringoptionalIdentifies what triggered this tool call.
is_repositorybooleanoptionalSet to true when operating in a source-control repository folder, false otherwise.
miro_urlstringoptionalFull Miro board URL where the diagram will be placed. If not provided, a new board is created (requires user confirmation).
xnumberoptionalX-axis coordinate for diagram placement on the board.
ynumberoptionalY-axis coordinate for diagram placement on the board.
miromcp_diagram_get_dsl#Get the DSL (Domain-Specific Language) format specification for a diagram type, including rules, syntax, color guidelines, and examples needed to write valid DSL. Call this before diagram_create to understand the expected format; you only need to call it once per diagram type per conversation.4 params

Get the DSL (Domain-Specific Language) format specification for a diagram type, including rules, syntax, color guidelines, and examples needed to write valid DSL. Call this before diagram_create to understand the expected format; you only need to call it once per diagram type per conversation.

NameTypeRequiredDescription
diagram_typestringrequiredType of diagram to get the DSL format specification for.
miro_urlstringrequiredFull Miro board URL, optionally with a frame target via moveToWidget query parameter.
invocation_sourcestringoptionalIdentifies what triggered this tool call.
is_repositorybooleanoptionalSet to true when operating in a source-control repository folder, false otherwise.
miromcp_doc_create#Create a doc format item (structured document similar to Google Docs) on a Miro board. Content accepts GitHub Flavored Markdown including headings, lists, links, and tables.6 params

Create a doc format item (structured document similar to Google Docs) on a Miro board. Content accepts GitHub Flavored Markdown including headings, lists, links, and tables.

NameTypeRequiredDescription
contentstringoptionalThe content of the document in markdown format.
invocation_sourcestringoptionalIdentifies what triggered this tool call. Set to 'skill' when invoked by a Miro AI skill, 'ui' when invoked from the Miro MCP UI, or leave unset otherwise.
is_repositorybooleanoptionalSet to true when the folder you are operating in is a source-control repository; set to false otherwise.
miro_urlstringoptionalFull Miro board URL (e.g., 'https://miro.com/app/board/uXjVOakxTk0='). If not provided, a new board will be created (requires user confirmation). To target a specific parent frame, include ?moveToWidget=<frame_id>.
xnumberoptionalX-axis coordinate for document placement. Without a frame target: board-absolute, board center is x=0. With a frame target via moveToWidget: relative to the frame's top-left corner (frame top-left is x=0).
ynumberoptionalY-axis coordinate for document placement. Without a frame target: board-absolute, board center is y=0. With a frame target via moveToWidget: relative to the frame's top-left corner (frame top-left is y=0).
miromcp_doc_get#Read the content of a doc format item from a Miro board. Returns the markdown content and content version for use in subsequent edits.3 params

Read the content of a doc format item from a Miro board. Returns the markdown content and content version for use in subsequent edits.

NameTypeRequiredDescription
miro_urlstringrequiredFull Miro URL to a specific item (e.g., 'https://miro.com/app/board/uXjVOakxTk0=/?moveToWidget=3458764516062720430'). Must include moveToWidget or focusWidget query parameter.
invocation_sourcestringoptionalIdentifies what triggered this tool call. Set to 'skill' when invoked by a Miro AI skill, 'ui' when invoked from the Miro MCP UI, or leave unset otherwise.
is_repositorybooleanoptionalSet to true when the folder you are operating in is a source-control repository; set to false otherwise.
miromcp_doc_update#Edit content in an existing doc format item on a Miro board using find-and-replace. Provide the exact text to find (old_content) and the replacement text (new_content).6 params

Edit content in an existing doc format item on a Miro board using find-and-replace. Provide the exact text to find (old_content) and the replacement text (new_content).

NameTypeRequiredDescription
miro_urlstringrequiredFull Miro URL to a specific item (e.g., 'https://miro.com/app/board/uXjVOakxTk0=/?moveToWidget=3458764516062720430'). Must include moveToWidget or focusWidget query parameter.
invocation_sourcestringoptionalIdentifies what triggered this tool call. Set to 'skill' when invoked by a Miro AI skill, 'ui' when invoked from the Miro MCP UI, or leave unset otherwise.
is_repositorybooleanoptionalSet to true when the folder you are operating in is a source-control repository; set to false otherwise.
new_contentstringoptionalThe text to replace old_content with. Can be empty to delete the found text.
old_contentstringoptionalThe exact text to find in the document. Must match exactly — read the document first to get the precise text.
replace_allbooleanoptionalIf true, replaces all occurrences of old_content. If false (default), replaces only the first occurrence.
miromcp_image_create#Create an image item on a Miro board using either an upload token (from image_get_upload_url) or a publicly accessible image URL. Exactly one of image_token or image_url must be provided.9 params

Create an image item on a Miro board using either an upload token (from image_get_upload_url) or a publicly accessible image URL. Exactly one of image_token or image_url must be provided.

NameTypeRequiredDescription
miro_urlstringrequiredFull Miro board URL (e.g., 'https://miro.com/app/board/uXjVOakxTk0='). To target a specific parent frame, include ?moveToWidget=<frame_id>.
image_tokenstringoptionalToken returned by image_get_upload_url after the upload completes. Mutually exclusive with image_url.
image_urlstringoptionalPublicly accessible URL of the image to add to the board. Mutually exclusive with image_token.
invocation_sourcestringoptionalIdentifies what triggered this tool call. Set to 'skill' when invoked by a Miro AI skill, 'ui' when invoked from the Miro MCP UI, or leave unset otherwise.
is_repositorybooleanoptionalSet to true when the folder you are operating in is a source-control repository; set to false otherwise.
titlestringoptionalOptional title label for the image widget.
widthnumberoptionalImage width in pixels. Height scales proportionally.
xnumberoptionalX-axis coordinate. Without a frame target: board-absolute, board center is x=0. With a frame target via moveToWidget: relative to the frame's top-left corner (frame top-left is x=0).
ynumberoptionalY-axis coordinate. Without a frame target: board-absolute, board center is y=0. With a frame target via moveToWidget: relative to the frame's top-left corner (frame top-left is y=0).
miromcp_image_get_data#Get image data for an image item from a Miro board. Returns the raw image data associated with the specified image widget.3 params

Get image data for an image item from a Miro board. Returns the raw image data associated with the specified image widget.

NameTypeRequiredDescription
miro_urlstringrequiredFull Miro URL to a specific item (e.g., 'https://miro.com/app/board/uXjVOakxTk0=/?moveToWidget=3458764516062720430'). Must include moveToWidget or focusWidget query parameter.
invocation_sourcestringoptionalIdentifies what triggered this tool call. Set to 'skill' when invoked by a Miro AI skill, 'ui' when invoked from the Miro MCP UI, or leave unset otherwise.
is_repositorybooleanoptionalSet to true when the folder you are operating in is a source-control repository; set to false otherwise.
miromcp_image_get_upload_url#Get a single-use upload URL for a local image on a Miro board. Returns an upload_url and a token to pass to image_create after the upload completes.8 params

Get a single-use upload URL for a local image on a Miro board. Returns an upload_url and a token to pass to image_create after the upload completes.

NameTypeRequiredDescription
miro_urlstringrequiredFull Miro board URL (e.g., 'https://miro.com/app/board/uXjVOakxTk0='). To target a specific parent frame, include ?moveToWidget=<frame_id>.
content_typestringoptionalMIME type of the image to upload. Accepted: image/bmp, image/gif, image/jpeg, image/png, image/svg+xml, image/vnd.adobe.photoshop. When provided, the upload request Content-Type must match exactly.
invocation_sourcestringoptionalIdentifies what triggered this tool call. Set to 'skill' when invoked by a Miro AI skill, 'ui' when invoked from the Miro MCP UI, or leave unset otherwise.
is_repositorybooleanoptionalSet to true when the folder you are operating in is a source-control repository; set to false otherwise.
titlestringoptionalOptional title label for the image widget.
widthnumberoptionalImage width in pixels. Height scales proportionally.
xnumberoptionalX-axis coordinate. Without a frame target: board-absolute, board center is x=0. With a frame target via moveToWidget: relative to the frame's top-left corner (frame top-left is x=0).
ynumberoptionalY-axis coordinate. Without a frame target: board-absolute, board center is y=0. With a frame target via moveToWidget: relative to the frame's top-left corner (frame top-left is y=0).
miromcp_image_get_url#Get the image download URL for an image item from a Miro board. Returns a URL that can be used to download the image content.3 params

Get the image download URL for an image item from a Miro board. Returns a URL that can be used to download the image content.

NameTypeRequiredDescription
miro_urlstringrequiredFull Miro URL to a specific item (e.g., 'https://miro.com/app/board/uXjVOakxTk0=/?moveToWidget=3458764516062720430'). Must include moveToWidget or focusWidget query parameter.
invocation_sourcestringoptionalIdentifies what triggered this tool call. Set to 'skill' when invoked by a Miro AI skill, 'ui' when invoked from the Miro MCP UI, or leave unset otherwise.
is_repositorybooleanoptionalSet to true when the folder you are operating in is a source-control repository; set to false otherwise.
miromcp_image_resource_upload#Upload one or more images to Miro board resources for use in prototype HTML. Provide either image_urls (publicly accessible URLs) or image_tokens (from image_get_upload_url after upload) — not both. Returns one entry per input in the same order. On partial failure, retry only the failed indices.5 params

Upload one or more images to Miro board resources for use in prototype HTML. Provide either image_urls (publicly accessible URLs) or image_tokens (from image_get_upload_url after upload) — not both. Returns one entry per input in the same order. On partial failure, retry only the failed indices.

NameTypeRequiredDescription
miro_urlstringrequiredFull Miro board URL (e.g., 'https://miro.com/app/board/uXjVOakxTk0='). To target a specific parent frame, include ?moveToWidget=<frame_id>.
image_tokensarrayoptionalTokens from image_get_upload_url after each image upload completes. Mutually exclusive with image_urls.
image_urlsarrayoptionalPublicly accessible image URLs to upload as board resources. Mutually exclusive with image_tokens.
invocation_sourcestringoptionalIdentifies what triggered this tool call.
is_repositorybooleanoptionalSet to true when the folder you are operating in is a source-control repository; set to false otherwise.
miromcp_layout_create#Create multiple board items (and connectors between them) on a Miro board from DSL (Domain-Specific Language) text. PREREQUISITE: Call layout_get_dsl first to obtain the DSL format specification. Items are created using board-absolute coordinates. Frames are always created first, then all other items, then connectors last. Returns a list of any items that failed to be created.4 params

Create multiple board items (and connectors between them) on a Miro board from DSL (Domain-Specific Language) text. PREREQUISITE: Call layout_get_dsl first to obtain the DSL format specification. Items are created using board-absolute coordinates. Frames are always created first, then all other items, then connectors last. Returns a list of any items that failed to be created.

NameTypeRequiredDescription
dslstringrequiredDSL text describing the items to create. Must follow the format from layout_get_dsl.
miro_urlstringrequiredFull Miro board URL (e.g., 'https://miro.com/app/board/uXjVOakxTk0='). To target a specific parent frame, include ?moveToWidget=<frame_id>.
invocation_sourcestringoptionalIdentifies what triggered this tool call.
is_repositorybooleanoptionalSet to true when the folder you are operating in is a source-control repository; set to false otherwise.
miromcp_layout_get_dsl#Get the DSL (Domain-Specific Language) format specification for creating board items and connectors. Returns syntax rules, item types, connector syntax, valid colors, valid shape types, and a complete example. REQUIRED: Call this before layout_create to understand the DSL format. In a conversation, call this only once and reuse the specification.2 params

Get the DSL (Domain-Specific Language) format specification for creating board items and connectors. Returns syntax rules, item types, connector syntax, valid colors, valid shape types, and a complete example. REQUIRED: Call this before layout_create to understand the DSL format. In a conversation, call this only once and reuse the specification.

NameTypeRequiredDescription
invocation_sourcestringoptionalIdentifies what triggered this tool call.
is_repositorybooleanoptionalSet to true when the folder you are operating in is a source-control repository; set to false otherwise.
miromcp_layout_read#Read existing board items and return them as DSL text. When given a board URL, returns all supported top-level items. When the URL targets a specific frame (via moveToWidget), returns the frame and its children. By default (mode=structured), DOCs and TABLEs are returned as shallow headers; pass mode=full to force inline DOC bodies and TABLE rows.4 params

Read existing board items and return them as DSL text. When given a board URL, returns all supported top-level items. When the URL targets a specific frame (via moveToWidget), returns the frame and its children. By default (mode=structured), DOCs and TABLEs are returned as shallow headers; pass mode=full to force inline DOC bodies and TABLE rows.

NameTypeRequiredDescription
miro_urlstringrequiredFull Miro board URL (e.g., 'https://miro.com/app/board/uXjVOakxTk0='). To target a specific parent frame, include ?moveToWidget=<frame_id>.
invocation_sourcestringoptionalIdentifies what triggered this tool call.
is_repositorybooleanoptionalSet to true when the folder you are operating in is a source-control repository; set to false otherwise.
modestringoptionalDSL render mode: 'structured' (default) returns DOCs/TABLEs as one-line shallow headers; 'full' inlines DOC bodies and TABLE rows.
miromcp_layout_update#Edit board items and connectors using find-and-replace on their DSL representation. Provide old_string (text to find in the current DSL) and new_string (replacement). Modified lines are updated, new lines create items/connectors, removed lines delete them. Use layout_read first to see the current DSL, then apply targeted edits.6 params

Edit board items and connectors using find-and-replace on their DSL representation. Provide old_string (text to find in the current DSL) and new_string (replacement). Modified lines are updated, new lines create items/connectors, removed lines delete them. Use layout_read first to see the current DSL, then apply targeted edits.

NameTypeRequiredDescription
miro_urlstringrequiredFull Miro board URL (e.g., 'https://miro.com/app/board/uXjVOakxTk0='). To target a specific parent frame, include ?moveToWidget=<frame_id>.
new_stringstringrequiredReplacement text. Empty string deletes matched items.
old_stringstringrequiredExact text to find in the current board DSL.
invocation_sourcestringoptionalIdentifies what triggered this tool call.
is_repositorybooleanoptionalSet to true when the folder you are operating in is a source-control repository; set to false otherwise.
replace_allbooleanoptionalReplace all occurrences (true) or just the first (false).
miromcp_prototype_create#Create a Miro prototype from one or more HTML screens. Prefer html_tokens (from prototype_get_upload_url) over html_contents. All images must be board resources — run them through image_resource_upload first. Max 20 screens per call; max 1,048,576 bytes per screen.9 params

Create a Miro prototype from one or more HTML screens. Prefer html_tokens (from prototype_get_upload_url) over html_contents. All images must be board resources — run them through image_resource_upload first. Max 20 screens per call; max 1,048,576 bytes per screen.

NameTypeRequiredDescription
miro_urlstringrequiredFull Miro board URL.
device_typestringoptionalTarget device type for the prototype. Applies to every screen.
html_contentsarrayoptionalLast-resort fallback. Use ONLY when the runtime cannot issue an HTTP PUT at all.
html_tokensarrayoptionalPreferred input. Ordered list of tokens from prototype_get_upload_url, one per screen. Max 20 tokens per call.
invocation_sourcestringoptionalIdentifies what triggered this tool call.
is_repositorybooleanoptionalSet to true when operating in a source-control repository folder, false otherwise.
orientationstringoptionalScreen orientation for the prototype. Applies to every screen.
xnumberoptionalX-axis coordinate for prototype placement.
ynumberoptionalY-axis coordinate for prototype placement.
miromcp_prototype_get_upload_url#Reserve a single-use upload slot for one HTML screen. Returns upload_url and token. PUT the raw HTML as the request body with Content-Type: text/html; no auth header. Max size: 1,048,576 bytes. After upload, pass the token to prototype_create.3 params

Reserve a single-use upload slot for one HTML screen. Returns upload_url and token. PUT the raw HTML as the request body with Content-Type: text/html; no auth header. Max size: 1,048,576 bytes. After upload, pass the token to prototype_create.

NameTypeRequiredDescription
miro_urlstringrequiredFull Miro board URL.
invocation_sourcestringoptionalIdentifies what triggered this tool call.
is_repositorybooleanoptionalSet to true when operating in a source-control repository folder, false otherwise.
miromcp_prototype_read#Read prototype screens from a Miro board. Returns prototype screens with metadata (position, dimensions, device type) and optional HTML markup representing each screen's UI layout. Provide screen_id to read a specific screen, or omit to list all screens on the board.5 params

Read prototype screens from a Miro board. Returns prototype screens with metadata (position, dimensions, device type) and optional HTML markup representing each screen's UI layout. Provide screen_id to read a specific screen, or omit to list all screens on the board.

NameTypeRequiredDescription
miro_urlstringrequiredFull Miro board URL.
include_htmlbooleanoptionalWhether to include HTML markup for each screen. Set to true only when HTML is needed for a specific screen.
invocation_sourcestringoptionalIdentifies what triggered this tool call.
is_repositorybooleanoptionalSet to true when operating in a source-control repository folder, false otherwise.
screen_idstringoptionalWidget ID of a specific prototype screen to read. When omitted, all prototype screens on the board are returned.
miromcp_table_create#Create a table on a Miro board with specified columns. Supports text, select, date, link, and person column types. If no board URL is provided a new board will be created — always confirm with the user first.7 params

Create a table on a Miro board with specified columns. Supports text, select, date, link, and person column types. If no board URL is provided a new board will be created — always confirm with the user first.

NameTypeRequiredDescription
columnsarrayrequiredList of columns to create. At least one column must be provided.
table_titlestringrequiredThe title/name of the table.
invocation_sourcestringoptionalIdentifies what triggered this tool call.
is_repositorybooleanoptionalSet to true when operating in a source-control repository folder, false otherwise.
miro_urlstringoptionalFull Miro board URL where the table will be placed. If not provided, a new board is created (requires user confirmation).
xnumberoptionalX-axis coordinate for table placement on the board.
ynumberoptionalY-axis coordinate for table placement on the board.
miromcp_table_list_rows#Get rows from a Miro table with column metadata. Each row includes a stable rowId that uniquely identifies it within the table — use rowIds to target specific rows in table_sync_rows.6 params

Get rows from a Miro table with column metadata. Each row includes a stable rowId that uniquely identifies it within the table — use rowIds to target specific rows in table_sync_rows.

NameTypeRequiredDescription
miro_urlstringrequiredFull Miro URL to a specific item (e.g., 'https://miro.com/app/board/uXjVOakxTk0=/?moveToWidget=3458764516062720430'). Must include moveToWidget or focusWidget query parameter.
filter_bystringoptionalFilter rows by column value(s) in JSON format (case-insensitive). Only select columns are supported. Format: JSON object mapping column names to arrays of display values. Example: {"Status": ["In Progress", "Done"]}
invocation_sourcestringoptionalIdentifies what triggered this tool call. Set to 'skill' when invoked by a Miro AI skill, 'ui' when invoked from the Miro MCP UI, or leave unset otherwise.
is_repositorybooleanoptionalSet to true when the folder you are operating in is a source-control repository; set to false otherwise.
limitintegeroptionalMaximum rows to return (minimum 1).
next_cursorstringoptionalPagination cursor for the next set of results.
miromcp_table_sync_rows#Add or update rows in a Miro table. Include rowId to update an existing row (obtained from table_list_rows); rows without rowId are inserted as new.4 params

Add or update rows in a Miro table. Include rowId to update an existing row (obtained from table_list_rows); rows without rowId are inserted as new.

NameTypeRequiredDescription
miro_urlstringrequiredFull Miro URL to a specific item (e.g., 'https://miro.com/app/board/uXjVOakxTk0=/?moveToWidget=3458764516062720430'). Must include moveToWidget or focusWidget query parameter.
rowsarrayrequiredArray of rows to add or update. Include rowId to update an existing row; rows without rowId are inserted as new.
invocation_sourcestringoptionalIdentifies what triggered this tool call. Set to 'skill' when invoked by a Miro AI skill, 'ui' when invoked from the Miro MCP UI, or leave unset otherwise.
is_repositorybooleanoptionalSet to true when the folder you are operating in is a source-control repository; set to false otherwise.
miromcp_user_who_am_i#Returns the identity of the current authenticated user. Use this to confirm which Miro account is active before performing board operations.1 param

Returns the identity of the current authenticated user. Use this to confirm which Miro account is active before performing board operations.

NameTypeRequiredDescription
is_repositorybooleanoptionalSet to true when operating in a source-control repository folder, false otherwise.