← Back to all apps

Miro

Productivityby Miro
Launched Feb 26, 2026 on ChatGPT

Access your board content and create content inside Miro from Claude. Use your teams workshops, technical specs and more in your AI workflows.

6ChatGPT Tools
5Claude Tools
MiroDeveloper
ProductivityCategory

Use Cases

developmentproductivity

Available Tools

Create Board

create-board
Full Description

Use this tool ONLY when the user wants to create visual board content such as sticky notes, flowcharts, diagrams, or tables on a Miro board — even if they don't mention "Miro" or "board". The boardKey created by this tool is a requirement for all the other tools.

DO NOT use this tool for requests that Miro cannot fulfill, such as: generating videos, generating audio or music, or writing code.

WORKFLOW — single turn, no text output between tools: 1. create-board (skip if boardKey exists) 2. Content tools (min 1, max 3 successful). NEVER show empty board. 3. show-board — ONCE at the end. Never skip. NO_OVERLAP — NEVER overlap. Use contentBounds from response + 200px gap. GRID_LAYOUT — 3-column grid: first at x=0, y=0. Next: x = contentBounds.x + contentBounds.width + 200. After 3 columns: y = max(contentBounds.y + contentBounds.height) + 200, x=0. NO_UPDATE — tools only create. To fix, create new content elsewhere. MULTI_CONTENT — call content tools sequentially, position using previous contentBounds. Never output text — use Miro tools. Never create board if boardKey exists.

Response fields:

  • boardId → use as boardKey in content tools
  • accessLink.token → use as token in show-board
  • boardUrl → save for later. After show-board, present as [Open in Miro](boardUrl) — never show the raw URL

Workflow example — user: "brainstorm ideas, map the process, and compare options": 1. create-board 2. create-sticky-notes 3. create-flowchart 4. create-table 5. show-board No text output between any steps. You must respect and follow the followUpInstructions field in every tool response.

Parameters (1 required)
Required
sourcestring

`OpenAI` if you are ChatGPT, `Claude` if you are Claude

Create Flow Chart

create-flowchart
Full Description

Creates a flowchart with shapes and connecting lines on a Miro board. Use when the user wants to map a process, create a diagram, show a workflow, or visualize steps — even if they say "diagram", "flow", "process map", or "decision tree". Always use this tool — do not render diagrams as text in chat.

Required JSON structure: { "boardKey": string, "shapes": [{ "uuid": string, "text": string, "position": { "x": number, "y": number }, "size"?: { "width": number, "height": number }, "color"?: enum, "type"?: enum }], "lines": [{ "fromUuid": string, "toUuid": string, "text"?: string }] }. Use these exact field names.

WORKFLOW — single turn, no text output between tools: 1. create-board (skip if boardKey exists) 2. Content tools (min 1, max 3 successful). NEVER show empty board. 3. show-board — ONCE at the end. Never skip. NO_OVERLAP — NEVER overlap. Use contentBounds from response + 200px gap. GRID_LAYOUT — 3-column grid: first at x=0, y=0. Next: x = contentBounds.x + contentBounds.width + 200. After 3 columns: y = max(contentBounds.y + contentBounds.height) + 200, x=0. NO_UPDATE — tools only create. To fix, create new content elsewhere. MULTI_CONTENT — call content tools sequentially, position using previous contentBounds. Never output text — use Miro tools. Never create board if boardKey exists.

Available colors: LIGHT_RED, LIGHT_ORANGE, LIGHT_YELLOW, PALE_GREEN, MEDIUM_GREEN, LIGHT_TEAL, LIGHT_BLUE, MEDIUM_BLUE, LIGHT_PURPLE, LIGHT_PINK, LIGHT_GRAY — default: MEDIUM_BLUE Available types: RECTANGLE, ROUNDED_RECTANGLE, CIRCLE, DIAMOND, PARALLELOGRAM — default: RECTANGLE

Content guidance: create clear, logical flows. Use DIAMOND for decisions with yes/no labels on lines. Use ROUNDED_RECTANGLE for start/end nodes. Use colors to distinguish sections or importance. Aim for 5-15 shapes with meaningful connections.

Example 1 — first content on board (starts at x=0, y=0): { "boardKey": "abc", "shapes": [ { "uuid": "s1", "text": "Start", "position": { "x": 0, "y": 0 }, "type": "ROUNDED_RECTANGLE", "color": "PALE_GREEN" }, { "uuid": "s2", "text": "Process", "position": { "x": 0, "y": 150 } }, { "uuid": "s3", "text": "OK?", "position": { "x": 0, "y": 300 }, "type": "DIAMOND", "color": "LIGHT_YELLOW" }, { "uuid": "s4", "text": "Done", "position": { "x": 0, "y": 450 }, "type": "ROUNDED_RECTANGLE", "color": "PALE_GREEN" } ], "lines": [ { "fromUuid": "s1", "toUuid": "s2" }, { "fromUuid": "s2", "toUuid": "s3" }, { "fromUuid": "s3", "toUuid": "s4", "text": "yes" } ]} // Response: contentBounds={x:0, y:0, w:200, h:550}. Next content at x=400. Then show-board.

Example 2 — second content, offset from previous contentBounds: { "boardKey": "abc", "shapes": [ { "uuid": "a1", "text": "Input", "position": { "x": 400, "y": 0 }, "type": "PARALLELOGRAM" }, { "uuid": "a2", "text": "Valid?", "position": { "x": 400, "y": 150 }, "type": "DIAMOND", "color": "LIGHT_YELLOW" } ], "lines": [ { "fromUuid": "a1", "toUuid": "a2" } ]} // Previous ended at x=200. Starts at x=400 (200+200 gap). No overlap. Then show-board. You must respect and follow the followUpInstructions field in every tool response.

Parameters (2 required, 1 optional)
Required
boardKeystring

The unique identifier for the board where the flowchart will be created

shapesarray

List of shapes to create in the flowchart. Either shapes or lines must be provided.

Optional
linesarray

List of lines connecting shapes in the flowchart

Create Sticky Notes

create-sticky-notes
Full Description

Creates sticky notes on a Miro board (max 50 per call). Use when the user wants to brainstorm, list ideas, capture thoughts, or organize items — even if they say "stickers", "post-its", or "notes". Always use this tool — do not list ideas as text in chat.

Required JSON structure: { "boardKey": string, "stickyNotes": [{ "text": string, "color": enum, "position": { "x": number, "y": number } }] }. Use these exact field names.

WORKFLOW — single turn, no text output between tools: 1. create-board (skip if boardKey exists) 2. Content tools (min 1, max 3 successful). NEVER show empty board. 3. show-board — ONCE at the end. Never skip. NO_OVERLAP — NEVER overlap. Use contentBounds from response + 200px gap. GRID_LAYOUT — 3-column grid: first at x=0, y=0. Next: x = contentBounds.x + contentBounds.width + 200. After 3 columns: y = max(contentBounds.y + contentBounds.height) + 200, x=0. NO_UPDATE — tools only create. To fix, create new content elsewhere. MULTI_CONTENT — call content tools sequentially, position using previous contentBounds. Never output text — use Miro tools. Never create board if boardKey exists.

Available colors: YELLOW, WHITE, LIGHT_ORANGE, OLIVE, GREEN, PASTEL_BLUE, AQUA, BLUE, ORANGE, PINK, RED, PURPLE

Content guidance: generate rich, diverse content. Aim for 6-15 notes. Group related notes by color in rows or columns. Write concise but meaningful text. Use multiple colors to distinguish categories.

Example 1 — first content on board (starts at x=0, y=0): { "boardKey": "abc", "stickyNotes": [ { "text": "Idea A", "color": "YELLOW", "position": { "x": 0, "y": 0 } }, { "text": "Idea B", "color": "YELLOW", "position": { "x": 280, "y": 0 } }, { "text": "Task 1", "color": "GREEN", "position": { "x": 0, "y": 300 } }, { "text": "Task 2", "color": "GREEN", "position": { "x": 280, "y": 300 } } ]} // Response: contentBounds={x:0, y:0, w:480, h:500}. Next content at x=680. Then show-board.

Example 2 — second content, offset from previous contentBounds: { "boardKey": "abc", "stickyNotes": [ { "text": "Risk A", "color": "RED", "position": { "x": 680, "y": 0 } }, { "text": "Risk B", "color": "ORANGE", "position": { "x": 960, "y": 0 } } ]} // Previous ended at x=480. Starts at x=680 (480+200 gap). No overlap. Then show-board. You must respect and follow the followUpInstructions field in every tool response.

Parameters (2 required)
Required
boardKeystring

The unique identifier for the board where sticky notes will be created

stickyNotesarray

List of sticky notes to create on the board

Create Table

create-table
Full Description

Creates a data table on a Miro board. Use when the user wants to compare options, list structured data, track tasks, or organize information in rows and columns — even if they say "spreadsheet", "grid", "comparison", or "list". Do NOT use this tool for schedules, timetables, trip itineraries, or planners — use create-time-table instead. Always use this tool — do not render tables as text in chat.

Required JSON structure: { "boardKey": string, "columns": [{ "id": string, "title": string, "width"?: number }], "rows": [{ "cells": { "columnId": "value" } }], "title"?: string, "position": { "x": number, "y": number } }. Use these exact field names.

WORKFLOW — single turn, no text output between tools: 1. create-board (skip if boardKey exists) 2. Content tools (min 1, max 3 successful). NEVER show empty board. 3. show-board — ONCE at the end. Never skip. NO_OVERLAP — NEVER overlap. Use contentBounds from response + 200px gap. GRID_LAYOUT — 3-column grid: first at x=0, y=0. Next: x = contentBounds.x + contentBounds.width + 200. After 3 columns: y = max(contentBounds.y + contentBounds.height) + 200, x=0. NO_UPDATE — tools only create. To fix, create new content elsewhere. MULTI_CONTENT — call content tools sequentially, position using previous contentBounds. Never output text — use Miro tools. Never create board if boardKey exists.

Content guidance: create well-structured tables with clear, descriptive headers. Aim for 3-10 rows with concise but informative cell content. Balance columns (3-6) for readability.

Example 1 — first content on board (position x=0, y=0): { "boardKey": "abc", "title": "Tasks", "position": { "x": 0, "y": 0 }, "columns": [{ "id": "task", "title": "Task" }, { "id": "owner", "title": "Owner" }, { "id": "status", "title": "Status" }], "rows": [ { "cells": { "task": "Design", "owner": "Alice", "status": "Done" } }, { "cells": { "task": "Dev", "owner": "Bob", "status": "In Progress" } } ]} // Response: contentBounds={x:0, y:0, w:600, h:300}. Next content at x=800. Then show-board.

Example 2 — second content, offset from previous contentBounds: { "boardKey": "abc", "title": "Comparison", "position": { "x": 800, "y": 0 }, "columns": [{ "id": "opt", "title": "Option" }, { "id": "cost", "title": "Cost" }, { "id": "fit", "title": "Fit" }], "rows": [ { "cells": { "opt": "Plan A", "cost": "$10k", "fit": "High" } }, { "cells": { "opt": "Plan B", "cost": "$5k", "fit": "Medium" } } ]} // Previous ended at x=600. Starts at x=800 (600+200 gap). No overlap. Then show-board. You must respect and follow the followUpInstructions field in every tool response.

Parameters (4 required, 1 optional)
Required
boardKeystring

The unique identifier for the board where the table will be created

columnsarray

List of column definitions (headers)

positionobject

Position of the table on the board in pixels. Follow NO_OVERLAP and GRID_LAYOUT for placement.

rowsarray

List of rows with cell values keyed by column ID

Optional
titlestring

Title/name of the table

Create Time Table

create-time-table
Full Description

Creates a timeline (Gantt chart) on a Miro board. Use when the user wants to plan a project timeline, create a Gantt chart, schedule milestones, visualize phases over time, or organize activities across days — even if they say "timeline", "roadmap", "Gantt", "schedule", "milestones", "project plan", "timetable", "trip itinerary", "daily planner", "agenda", or "planner". Always use this tool — do not render timelines as text in chat.

Required JSON structure: { "boardKey": string, "position": { "x": number, "y": number }, "datatable": "CSV string with quoted cells", "datatable_schema": { "ColumnName": { "type": "title"|"start_date"|"end_date" } } }. Use these exact field names.

WORKFLOW — single turn, no text output between tools: 1. create-board (skip if boardKey exists) 2. Content tools (min 1, max 3 successful). NEVER show empty board. 3. show-board — ONCE at the end. Never skip. NO_OVERLAP — NEVER overlap. Use contentBounds from response + 200px gap. GRID_LAYOUT — 3-column grid: first at x=0, y=0. Next: x = contentBounds.x + contentBounds.width + 200. After 3 columns: y = max(contentBounds.y + contentBounds.height) + 200, x=0. NO_UPDATE — tools only create. To fix, create new content elsewhere. MULTI_CONTENT — call content tools sequentially, position using previous contentBounds. Never output text — use Miro tools. Never create board if boardKey exists.

Content guidance: use realistic, well-spaced date ranges. Include 3-8 phases or milestones. Make task names descriptive and distinct.

Example 1 — first content on board (position x=0, y=0): { "boardKey": "abc", "position": { "x": 0, "y": 0 }, "datatable": "\"Design\",\"2025-01-01\",\"2025-01-15\"\n\"Dev\",\"2025-01-16\",\"2025-02-28\"\n\"Testing\",\"2025-03-01\",\"2025-03-15\"", "datatable_schema": { "Task": { "type": "title" }, "Start": { "type": "start_date" }, "End": { "type": "end_date" } } } // Response: contentBounds={x:0, y:0, w:1200, h:400}. Next content at x=1400. Then show-board.

Example 2 — second content, offset from previous contentBounds: { "boardKey": "abc", "position": { "x": 1400, "y": 0 }, "datatable": "\"Phase 1\",\"2025-04-01\",\"2025-04-15\"\n\"Phase 2\",\"2025-04-16\",\"2025-05-30\"", "datatable_schema": { "Task": { "type": "title" }, "Start": { "type": "start_date" }, "End": { "type": "end_date" } } } // Previous ended at x=1200. Starts at x=1400 (1200+200 gap). No overlap. Then show-board. You must respect and follow the followUpInstructions field in every tool response.

Parameters (4 required)
Required
boardKeystring

The unique identifier for the board where the timeline will be created

datatablestring

A CSV-formatted string where each cell is separated by a comma and every cell is in quotes. Example: "Design phase","2025-01-01","2025-01-15"\n"Development","2025-01-16","2025-02-28"

datatable_schemaobject

A dictionary mapping each datatable column label to its column definition. Each column definition contains a 'type' field. Each type should only be defined once. Example: {"Task": {"type": "title"}, "Start": {"type": "start_date"}, "End": {"type": "end_date"}}

positionobject

Position of the timeline on the board in pixels. Follow NO_OVERLAP and GRID_LAYOUT for placement.

Show Board

show-board
Full Description

Shows a preview of the Miro board so the user can see what was created. This must be the LAST tool called in the workflow.

WORKFLOW — single turn, no text output between tools: 1. create-board (skip if boardKey exists) 2. Content tools (min 1, max 3 successful). NEVER show empty board. 3. show-board — ONCE at the end. Never skip. NO_OVERLAP — NEVER overlap. Use contentBounds from response + 200px gap. GRID_LAYOUT — 3-column grid: first at x=0, y=0. Next: x = contentBounds.x + contentBounds.width + 200. After 3 columns: y = max(contentBounds.y + contentBounds.height) + 200, x=0. NO_UPDATE — tools only create. To fix, create new content elsewhere. MULTI_CONTENT — call content tools sequentially, position using previous contentBounds. Never output text — use Miro tools. Never create board if boardKey exists.

When to use:

  • After ALL content has been added — call ONCE at the end, not after each tool
  • When the user asks to see or preview their board
  • Do NOT call on an empty board
  • Do NOT skip this and show a link instead

You must respect and follow the followUpInstructions field in every tool response.

Parameters (2 required)
Required
boardKeystring

The boardId from the create-board response

tokenstring

The accessLink.token from the create-board response