Skip the install. Get this working in under 2 minutes.
Start a free trial on cloud.anythingmcp.com, add the Miro in one click, then point your AI client (Claude, ChatGPT, Copilot or Cursor) at the generated MCP endpoint. No Docker, no git clone, zero engineering experience required.
Summary
Let your AI work on your Miro boards: find boards, read what is on them, add and edit sticky notes, shapes, text, cards and frames, connect them with lines, organise with tags, and see who has access. Signed in with your Miro account.
Try asking
Example prompts for Miro
Click any prompt to copy it. Paste into Claude, ChatGPT, Cursor, Gemini, Copilot or OpenClaw to run it against this connector.
Claude is AI and can make mistakes. Please double-check responses.
💡 No install? Use cloud.anythingmcp.com directly. Sign in, click Connectors → Miro, paste your credentials, mint an MCP API key and you're done. No Docker, no
git clone, no local server.
Miro + Cursor
Let your AI work on your Miro boards: find boards, read what is on them, add and edit sticky notes, shapes, text, cards and frames, connect them with lines, organise with tags, and see who has access. Signed in with your Miro account.
Prerequisites
See the full setup instructions baked into the connector (visible in the in-app store when you select the connector). The required environment variables for this connector are:
MIRO_CLIENT_ID, MIRO_CLIENT_SECRET
Step 1 — Get credentials
- In Miro, click your avatar → Settings → Your apps (or open miro.com/app/settings/user-profile/apps) and click + Create new app. If you have no developer team yet, Miro asks you to create one first; it is free.
- Name the app (for example "AnythingMCP"), pick the developer team, tick Expire user authorization token and click Create app. This choice cannot be changed later. Without it the token never expires, which also works but is less safe.
- On the app page, under Redirect URI for OAuth2.0, add
https://cloud.anythingmcp.com/api/mcp-oauth/callbackand click Add. If you host AnythingMCP yourself, enterhttps://your-anythingmcp-host/api/mcp-oauth/callbackinstead. The URI must match character for character. - Under Permissions, tick
boards:readandboards:write. - Copy Client ID and Client secret from App Credentials into
MIRO_CLIENT_IDandMIRO_CLIENT_SECRET. The Client ID is a long number. - Install the connector, click Authorize with Provider on the connector page, choose the Miro team whose boards the AI should work with and click Install & authorize.
- Start with
miro_get_token_infoto check the user, the team and the granted permissions, then let the AI find a board withmiro_list_boards.
Staying signed in: the AI sees and changes the boards that the Miro user who authorized can open, in the team picked during authorization. To reach the boards of another team, authorize again and pick that team. Access tokens last an hour and are renewed automatically. The refresh token lasts 60 days and renews with every use, so a connector left unused for two months needs Authorize with Provider again.
Permissions and read-only setup: tick only boards:read, authorize again, and switch off every tool that creates, changes or deletes: miro_create_board, miro_update_board, miro_copy_board, miro_create_sticky_note, miro_update_sticky_note, miro_create_shape, miro_update_shape, miro_create_text, miro_update_text, miro_create_card, miro_update_card, miro_create_frame, miro_update_frame, miro_move_item, miro_delete_item, miro_create_connector, miro_update_connector, miro_delete_connector, miro_create_tag, miro_update_tag, miro_delete_tag, miro_attach_tag and miro_remove_tag_from_item.
Switched off at install: miro_delete_board, which deletes a whole board with everything on it, miro_share_board, which makes Miro email an invitation to the people named, and miro_update_board_member and miro_remove_board_member, which change or remove someone's access. Turn them on only if the AI should delete boards or manage who has access.
Deleting is final: miro_delete_item removes an item for good, with no undo through the API, and deleting a frame leaves its contents on the board. miro_delete_tag takes the tag off every item that carries it. The AI asks before deleting anything it did not just create.
Tags and plans: only cards and sticky notes can carry tags, at most 8 each, and tag changes show on an open board after a refresh. The Miro API is free to use, but free teams may hold only 3 editable boards, so miro_create_board and miro_copy_board can fail there. Boards in a developer team carry a watermark.
Common errors: 401 (tokenNotProvided) means the authorization expired or was revoked: click Authorize with Provider again, and if the app was deleted or its secret reset, update MIRO_CLIENT_SECRET first. 403 means a missing permission (boards:write for changes) or no access to that board: tick the permission in the app settings and authorize again. 404 means a wrong board or item id. 400 (invalidParameters) names the field that is wrong. 409 means the item changed at the same moment: read it again and retry. 429 means Miro is rate limiting this user: wait a minute. Creating a frame sometimes fails with 500 "Internal error occurred" for a few minutes; the same request works again after a short wait.
The connector does not handle images, documents and embeds (it only lists them), app cards, comments, mind maps, exports, or team and organization administration.
Step 2 — Install the adapter
curl -fsSL https://raw.githubusercontent.com/HelpCode-ai/anythingmcp/main/docker-compose.quickstart.yml -o docker-compose.yml
printf 'JWT_SECRET=%s\nENCRYPTION_KEY=%s\n' "$(openssl rand -hex 32)" "$(openssl rand -hex 32)" > .env
docker compose up -d
Step 3 — Add the connector in Cursor
Your server URL: in AnythingMCP, open MCP Servers → the server this connector is on, and copy its URL (
https://cloud.anythingmcp.com/mcp/…). Use it wherever this guide showsYOUR_SERVER_ID.
Cursor reads MCP servers from ~/.cursor/mcp.json. Add this entry:
{
"mcpServers": {
"anythingmcp": {
"url": "https://cloud.anythingmcp.com/mcp/YOUR_SERVER_ID",
"headers": { "X-API-Key": "YOUR_MCP_API_KEY" }
}
}
}
- Create an MCP API key in AnythingMCP under MCP Servers → your server → API keys, and paste it in place of
YOUR_MCP_API_KEY. - Save the file and restart Cursor.
- Open Cursor → Settings → MCP and check that
anythingmcpis listed and connected. - Start chatting: the agent can now call the
Mirotools.
Available tools
| Tool | What it does |
|---|---|
miro_get_token_info | Show who the connection belongs to: the Miro user, the team the app was installed in, the organization and the granted scopes |
miro_list_boards | Find boards the user can open: by text, owner, team or project |
miro_get_board | Get one board: name, description, owner, team, project, sharing and permission policies, viewLink, createdAt and modifiedAt |
miro_create_board | Create a board |
miro_update_board | Rename a board, change its description or its sharing policy |
miro_copy_board | Copy a board with all its content into a new board, optionally with a new name and in another team |
miro_delete_board | Delete a whole board with everything on it |
miro_list_items | List the items on a board: id, type, data (content, title ...), style, position, geometry, parent (frame) and who changed them when |
miro_get_item | Get one item of any type (sticky note, shape, text, card, frame, image ...): type, data, style, position, geometry and parent |
miro_move_item | Move any item: to a new position, into a frame (parent {"id": "<frame id>"}) or out of it back onto the board (parent {"id": null}) |
miro_delete_item | Delete an item of any type (sticky note, shape, text, card, frame, image ...) |
miro_create_sticky_note | Add a sticky note to a board |
miro_update_sticky_note | Change a sticky note's text, shape, color, position, size or frame |
miro_create_shape | Add a shape (rectangle, circle, flowchart symbol ...) with optional text to a board |
miro_update_shape | Change a shape's type, text, style, position, size or frame |
miro_create_text | Add a free text item to a board (a heading, a label, a paragraph) |
miro_update_text | Change a text item |
miro_create_card | Add a card (a task-like item with title, description, assignee and due date) to a board |
miro_update_card | Change a card's title, description, assignee, due date, color, position, size or frame |
miro_create_frame | Add a frame (a titled area that groups items) to a board |
miro_update_frame | Change a frame's title, background, position or size |
miro_list_connectors | List the connector lines on a board: id, startItem and endItem (item ids), shape, captions and style |
miro_get_connector | Get one connector line: the items it joins, its shape, captions and style |
miro_create_connector | Draw a connector line between two items (sticky notes, shapes, cards, texts; not frames), e.g. to link steps of a flowchart |
miro_update_connector | Change a connector line: its ends, shape, captions or style |
miro_delete_connector | Delete a connector line between two items; the items it joined stay where they are |
miro_list_board_members | List who has access to a board: member id (the user id), name, role (viewer, commenter, editor, coowner, owner) |
miro_get_board_member | Get one member of a board: user id, name and role (viewer, commenter, editor, coowner, owner) |
miro_share_board | Invite people to a board by email with a role; Miro emails them an invitation |
miro_update_board_member | Change a board member's role, e.g. from viewer to editor |
miro_remove_board_member | Remove someone's access to a board |
miro_list_tags | List the tags defined on a board: id, title and fillColor |
miro_get_tag | Get one tag of a board by its id: title and fillColor, as shown on cards and sticky notes |
miro_create_tag | Create a tag on a board, to attach to cards and sticky notes |
miro_update_tag | Rename a tag or change its color; every item carrying it changes too |
miro_delete_tag | Delete a tag from a board; it is removed from every item that carries it |
miro_attach_tag | Attach an existing tag to a card or sticky note (other item types cannot carry tags; at most 8 per item) |
miro_remove_tag_from_item | Take a tag off a card or sticky note; the tag itself stays on the board |
miro_get_item_tags | List the tags attached to one card or sticky note, each with id, title and fillColor |
miro_list_items_by_tag | List the cards and sticky notes that carry a tag |
Example prompts
- "Find our Q3 Retrospective board and summarise the sticky notes in each frame."
- "Who has access to the Checkout redesign board, and what role does each person have?"
- "On the Product roadmap board, add a frame called Next sprint with three yellow sticky notes: Login fix, Search filters and Onboarding emails."
- "Show me all cards tagged Blocked on the Sprint planning board, with their assignees and due dates."
FAQ
Does Cursor support custom MCP servers on the free tier? Yes, MCP is available on Hobby, Pro and Business plans.
Next steps
Was this guide helpful?