Miro Boards
Let an agent work on Miro whiteboards: list and open boards, read the items on a board, create new boards, and add or edit sticky notes and cards to capture ideas, action items and workshop output. Curated from Miro's official OpenAPI specification.
Connect this API to an AI agent Browse all specs
What you can do with Miro Boards via MCP
Every endpoint below becomes a governed tool your AI agent (Claude, ChatGPT, or a customer-facing VX agent) can call — with scoped permissions, sandbox testing, and audit logs.
| Method | Path | Operation | Description |
|---|---|---|---|
| GET | /v1/oauth-token |
getAccessTokenInfo | Check which user and team the connected Miro token belongs to |
| GET | /v2/boards |
listBoards | List or search boards the user can access |
| POST | /v2/boards |
createBoard | Create a new board |
| GET | /v2/boards/{board_id} |
getBoard | Get a board's details |
| GET | /v2/boards/{board_id}/items |
listBoardItems | List items on a board (sticky notes, cards, shapes, text, frames) |
| GET | /v2/boards/{board_id}/items/{item_id} |
getBoardItem | Get one item on a board |
| POST | /v2/boards/{board_id}/sticky_notes |
createStickyNote | Add a sticky note to a board |
| GET | /v2/boards/{board_id}/sticky_notes/{item_id} |
getStickyNote | Get a sticky note |
| PATCH | /v2/boards/{board_id}/sticky_notes/{item_id} |
updateStickyNote | Edit a sticky note's text, color or position |
| POST | /v2/boards/{board_id}/cards |
createCard | Add a card (task-style item with title, description, due date) to a board |
| GET | /v2/boards/{board_id}/cards/{item_id} |
getCard | Get a card |
| PATCH | /v2/boards/{board_id}/cards/{item_id} |
updateCard | Edit a card's title, description, due date or assignee |
Authentication
oAuth2AuthCode
OAuth 2.0
Scopes: boards:read boards:write
Miro REST API v2 uses an OAuth 2.0 access token sent as Authorization: Bearer <token>.
How to get a credential
- Go to https://miro.com/app/settings/user-profile/apps and click Create new app (choose the team the app belongs to).
- Under Permissions, tick
boards:readandboards:write. - Add the VX Agents OAuth redirect URL, or click Install app and get OAuth token to get a token for your own team.
- Copy the access token (or the client id/secret for the OAuth flow). Expiring tokens are refreshed with the refresh token.
Permissions used
| Scope | Operations |
|---|---|
boards:read |
getAccessTokenInfo, listBoards, getBoard, listBoardItems, getBoardItem, getStickyNote, getCard |
boards:write |
createBoard, createStickyNote, updateStickyNote, createCard, updateCard |
Common errors
- 401 Unauthorized: token missing, revoked or expired. Reinstall the app or refresh the token.
- 403 Forbidden: the app lacks
boards:write, or the token's user has no edit access to that board (ask the board owner to share it). - 400 Bad Request: invalid body, e.g. an unknown sticky-note
shape/fillColoror a position outside the frame. - 429 Too Many Requests: Miro's credit-based rate limit was hit; wait and retry with backoff.
Store the token as a VX Agents credential (OAuth2 / bearer token) and attach it to the agent; never paste it into chat.
Usage guide
Setup
- Connect a Miro OAuth token with
boards:readandboards:write(see the authentication section). - Optional preset: pin
board_idwhen the agent always works on one board (for example a team retro board). The id is the part after/board/in the board URL, e.g.uXjVK123abc=. - Call
getAccessTokenInfoonce to confirm which user and team the token belongs to.
Capture ideas on a board
- Find the board:
listBoardswithquery(name search) andsort=last_opened, or use the presetboard_id. - Read what is already there:
listBoardItemswithtype=sticky_noteortype=card,limitup to 50; followcursorfrom the response for the next page. - Open a single item when needed:
getBoardItem,getStickyNoteorgetCard. - Show the user what you plan to add, then write:
createStickyNotewithdata.content(plain text or simple HTML),style.fillColor(e.g.light_yellow), andposition.x/position.y.createCardfor action items:data.title,data.description,data.dueDate,data.assigneeId.
- Fix wording or move items with
updateStickyNote/updateCard(send only the fields that change). - Start a fresh workspace with
createBoard(name,description) only when the user asks for a new board.
Good to know
- Positions are in board units relative to the board centre (0,0). Space new notes about 250 units apart so they do not overlap; read existing items first to find free space.
- Item ids are strings; always pass the
board_idthe item belongs to. dueDateuses ISO 8601 UTC, e.g.2026-10-20T17:00:00Z.- There is no delete in this spec: to remove content, ask the user to do it in Miro.
- Confirm with the user before creating boards or adding many items to a shared board; other people see changes live.
- Rate limits are credit-based; batch your reads and avoid polling.
How to use this spec
- Create a free VX Agents account (sandbox tools included).
- Open the marketplace and connect “Miro Boards” to an agent.
- Expose it as an MCP server for Claude/ChatGPT, or chat with it directly.