Miro Management
Use this skill to work with Miro through the REST API.
Quick start
- Get the user's Miro app client ID, client secret, and redirect URI if using OAuth.
- Prefer a local redirect URI such as
http://127.0.0.1:4000/auth/miro/callback. - Use
scripts/miro_api.pyfor OAuth, token refresh, board/item operations, exports, and raw API calls. - Start with:
auth-urlserve-oauth-callbacklist-boardslist-board-items
- Never bundle client secrets, refresh tokens, or live access tokens into the skill package.
Auth modes
OAuth mode
Use shell environment variables when possible:
$env:MIRO_CLIENT_ID = '...'
$env:MIRO_CLIENT_SECRET = '...'
$env:MIRO_REDIRECT_URI = 'http://127.0.0.1:4000/auth/miro/callback'
Start the callback helper:
python scripts/miro_api.py serve-oauth-callback --port 4000 --token-file .miro/tokens.json
Then generate the authorization URL:
python scripts/miro_api.py auth-url
Open that URL, approve the app, and let the callback helper store the token payload.
Direct token mode
If the user already has a working Miro access token, skip OAuth and use either:
$env:MIRO_ACCESS_TOKEN = '...'
python scripts/miro_api.py list-boards
or a saved token file:
python scripts/miro_api.py list-boards --token-file .miro/tokens.json
Core workflow
1. Confirm access
Use a cheap check first:
python scripts/miro_api.py list-boards --token-file .miro/tokens.json
2. Inspect a board
python scripts/miro_api.py get-board --board-id <id> --token-file .miro/tokens.json
python scripts/miro_api.py list-board-items --board-id <id> --token-file .miro/tokens.json
3. Create or export content
python scripts/miro_api.py create-sticky-note --board-id <id> "Hello from OpenClaw" --token-file .miro/tokens.json
python scripts/miro_api.py create-text --board-id <id> "Roadmap" --token-file .miro/tokens.json
python scripts/miro_api.py create-shape --board-id <id> "API Layer" --token-file .miro/tokens.json
python scripts/miro_api.py create-card --board-id <id> "Task" --token-file .miro/tokens.json
python scripts/miro_api.py export-board-items --board-id <id> --format markdown --output-file board-report.md --token-file .miro/tokens.json
4. Refresh when needed
python scripts/miro_api.py refresh-token --token-file .miro/tokens.json
Common commands
auth-url— print the OAuth authorization URLserve-oauth-callback— run a local callback server and exchange the returned code for tokensexchange-code— manually exchange a copied authorization code for tokensrefresh-token— refresh access using the stored refresh tokenwhoami— test token with a lightweight boards calllist-boards— list accessible boardsget-board— get board detailscreate-board— create a boardlist-board-items— list board itemsexport-board-items— export board items to markdown, csv, or jsoncreate-sticky-note— create a sticky notecreate-text— create a text itemcreate-shape— create a shape itemcreate-card/update-card— create or update a card itemcreate-sticky-note/update-sticky-note— create or update sticky notescreate-text/update-text— create or update text itemscreate-shape/update-shape— create or update shapescreate-connector— connect two board itemslist-board-members— list board membersget-webhooks/create-webhook/delete-webhook— manage webhookscreate-brainstorm-cluster— drop a row of idea sticky notescreate-kanban-row— create a lightweight kanban-style rowcreate-architecture-chain— create connected architecture boxesdelete-item— delete an item by type path + item idpreview-write— preview a write request without sending itraw— send an arbitrary Miro API request with optional JSON body
Mutation rules
For write calls:
- Confirm the target board and item IDs.
- Summarize the exact body and endpoint before sending when the change is not obviously desired.
- Keep secrets and tokens outside the skill folder.
- Prefer exporting API results to files instead of dumping giant payloads in chat.
- Treat live board writes as real external actions, not harmless local tests.
References
Read references/miro-oauth-notes.md for the Miro OAuth flow, token endpoint, redirect URI rules, and safe local storage guidance.
Read references/miro-request-examples.md for starter create/export commands and raw request examples.