MCP tools reference
Milanote MCP tools
11 tools for Milanote on the Cotlet MCP server. Your agent picks them from tools/list.
- MCP server
- https://cotlet.dev/mcp/v1
- Connects with
- Your own Milanote account (email and password, Google or Apple)
- Integration page
- Milanote
| Endpoint | Access | Description |
|---|---|---|
| milanote_list_boards | read | Your boards and nested sub-boards, with title, parent board and ID. |
| milanote_get_board | read | Every card on a board: notes, links, images, files, to-do lists and sub-boards. |
| milanote_search_boards | read | Find notes and boards by text across all your boards, like the in-app search. |
| milanote_export_board | read | Export a board in one of the formats Milanote offers. |
| milanote_create_board | write | New board, at the top level or nested inside another board. |
| milanote_add_note | write | Note card with text, placed on a board. |
| milanote_add_link | write | Link card for a web address, placed on a board. |
| milanote_upload_image | write | Image card from a file, placed on a board. |
| milanote_add_todo_list | write | To-do list card with tasks, each with an optional due date. |
| milanote_add_comment | write | Comment card on a board, or a reply in a comment thread, as you. |
| milanote_invite_editor | write | Invite someone by email to edit a board and its sub-boards. |
List boards
readMCP tool milanote_list_boards
Returns boards in the order they appear in Milanote, each with its parent so nesting is clear. Boards can sit inside boards, like folders, so use parent_board_id to walk down. Your Home board is not a regular board and is not listed.
Parameters
| Name | Type | Description |
|---|---|---|
| parent_board_id | string | Only boards inside this board. Default: your boards at the top level. |
| limit | integer | Number of boards to return. Default: 50. |
tools/call
JSON-RPC
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "milanote_list_boards",
"arguments": {}
}
} Example response
{
"content": [
{
"type": "text",
"text": "{ ... same JSON as structuredContent ... }"
}
],
"structuredContent": {
"boards": [
{
"id": "b_7Kq2Lm",
"title": "Brand refresh",
"parent_board_id": null
},
{
"id": "b_2Xn9Dc",
"title": "Novel outline",
"parent_board_id": null
},
{
"id": "b_5Hc3Wp",
"title": "Q1 campaign",
"parent_board_id": null
}
]
},
"isError": false
} Get board
readMCP tool milanote_get_board
Returns one entry per card with its type, text or URL, and ID, so other tools can point at it. To-do list cards include each task with its done state and due date. Sub-boards appear as cards with their own board_id; call get_board again to open one. Reads only, so it works on boards you can view as well as edit.
Parameters
| Name | Type | Description |
|---|---|---|
| board_id required | string | Board ID from list_boards or the board URL. |
| include_comments | boolean | Also return comment cards and their replies. Default: false. |
tools/call
JSON-RPC
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "milanote_get_board",
"arguments": {
"board_id": "board_8c41d2"
}
}
} Example response
{
"content": [
{
"type": "text",
"text": "{ ... same JSON as structuredContent ... }"
}
],
"structuredContent": {
"board_id": "b_5Hc3Wp",
"title": "Q1 campaign",
"cards": [
{
"id": "c_41aF",
"type": "note",
"text": "Palette: warm greys with one orange accent."
},
{
"id": "c_88bQ",
"type": "link",
"url": "https://example.com/type-specimen",
"title": "Type specimen"
},
{
"id": "c_12dK",
"type": "board",
"board_id": "b_5Hc3Xt",
"title": "Social assets"
}
]
},
"isError": false
} Search boards
readMCP tool milanote_search_boards
Searches the board you have open and the contents of every other board you have created, as the Search icon in Milanote does. Results are sorted by last viewed unless you ask for last modified. Use get_board on a hit to read its cards.
Parameters
| Name | Type | Description |
|---|---|---|
| query required | string | Text to look for. |
| sort | enum | last_viewed or last_modified. Default: last_viewed. |
tools/call
JSON-RPC
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "milanote_search_boards",
"arguments": {
"query": "query"
}
}
} Example response
{
"content": [
{
"type": "text",
"text": "{ ... same JSON as structuredContent ... }"
}
],
"structuredContent": {
"results": [
{
"board_id": "b_5Hc3Wp",
"board_title": "Q1 campaign",
"card_id": "c_41aF",
"snippet": "Palette: warm greys with one orange accent."
},
{
"board_id": "b_7Kq2Lm",
"board_title": "Brand refresh",
"card_id": "c_30pM",
"snippet": "Color palette v2 from the workshop"
}
]
},
"isError": false
} Export board
readMCP tool milanote_export_board
Runs the same export as the Export button on a board and returns the text, or a download link for word, pdf and png. Home boards cannot be exported. PDF and PNG are limited to a single page; Word spreads a large board over several pages.
Parameters
| Name | Type | Description |
|---|---|---|
| board_id required | string | Board ID from list_boards or the board URL. |
| format required | enum | markdown, plain_text, word, pdf or png. |
tools/call
JSON-RPC
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "milanote_export_board",
"arguments": {
"board_id": "b_2Xn9Dc",
"format": "markdown"
}
}
} Example response
{
"content": [
{
"type": "text",
"text": "{ ... same JSON as structuredContent ... }"
}
],
"structuredContent": {
"board_id": "b_2Xn9Dc",
"format": "markdown",
"content": "# Novel outline\n\n## Act one\n\n- Maya finds the letter\n- The ferry leaves without her\n"
},
"isError": false
} Create board
writeMCP tool milanote_create_board
Returns the new board ID for the tools that add cards. The board is private to you until you share it. It reaches no one, so it runs without asking; move it to the trash in Milanote to undo it.
Parameters
| Name | Type | Description |
|---|---|---|
| title required | string | Board title. |
| parent_board_id | string | Board to nest it in. Default: top level. |
tools/call
JSON-RPC
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "milanote_create_board",
"arguments": {
"title": "title"
}
}
} Example response
{
"content": [
{
"type": "text",
"text": "{ ... same JSON as structuredContent ... }"
}
],
"structuredContent": {
"board_id": "b_9Rt4Zy",
"title": "Location scout",
"parent_board_id": null,
"board_url": "https://app.milanote.com/b_9Rt4Zy"
},
"isError": false
} Add note
writeMCP tool milanote_add_note
Adds one note card and returns its ID. On the free plan a note counts toward the 100 notes, images or links total. Other editors of the board see the card, but nobody is notified, so it runs without asking; drag it to the trash to undo it.
Parameters
| Name | Type | Description |
|---|---|---|
| board_id required | string | Board ID from list_boards or the board URL. |
| text required | string | Note text. |
tools/call
JSON-RPC
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "milanote_add_note",
"arguments": {
"board_id": "board_8c41d2",
"text": "text"
}
}
} Example response
{
"content": [
{
"type": "text",
"text": "{ ... same JSON as structuredContent ... }"
}
],
"structuredContent": {
"card_id": "c_62tN",
"board_id": "b_5Hc3Wp",
"type": "note",
"text": "Kickoff moved to Tuesday."
},
"isError": false
} Add link
writeMCP tool milanote_add_link
Adds one link card and returns its ID and title. On the free plan a link counts toward the 100 notes, images or links total. Nobody is notified, so it runs without asking; drag the card to the trash to undo it.
Parameters
| Name | Type | Description |
|---|---|---|
| board_id required | string | Board ID from list_boards or the board URL. |
| url required | string | Web address to save. |
tools/call
JSON-RPC
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "milanote_add_link",
"arguments": {
"board_id": "b_7Kq2Lm",
"url": "https://example.com/type-specimen"
}
}
} Example response
{
"content": [
{
"type": "text",
"text": "{ ... same JSON as structuredContent ... }"
}
],
"structuredContent": {
"card_id": "c_77sW",
"board_id": "b_7Kq2Lm",
"type": "link",
"title": "Type specimen",
"url": "https://example.com/type-specimen",
"board_url": "https://app.milanote.com/b_7Kq2Lm"
},
"isError": false
} Upload image
writeMCP tool milanote_upload_image
Adds one image card per call and returns its ID. On the free plan an image counts toward the 100 notes, images or links total, and file uploads are capped at 10. Nobody is notified, so it runs without asking; drag the card to the trash to undo it.
Parameters
| Name | Type | Description |
|---|---|---|
| board_id required | string | Board ID from list_boards or the board URL. |
| file_base64 required | string | Image file contents, base64. |
| file_name | string | File name shown on the card, e.g. location-01.jpg. |
tools/call
JSON-RPC
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "milanote_upload_image",
"arguments": {
"board_id": "board_8c41d2",
"file_base64": "file base64"
}
}
} Example response
{
"content": [
{
"type": "text",
"text": "{ ... same JSON as structuredContent ... }"
}
],
"structuredContent": {
"card_id": "c_90uE",
"board_id": "b_9Rt4Zy",
"type": "image",
"file_name": "location-01.jpg"
},
"isError": false
} Add to-do list
writeMCP tool milanote_add_todo_list
Creates one to-do list with all its tasks and returns each task ID. A due date makes Milanote remind whoever set it, by email, phone push or browser notification, as their settings say. Nobody is notified when the list is created, so it runs without asking; drag it to the trash to undo it.
Parameters
| Name | Type | Description |
|---|---|---|
| board_id required | string | Board ID from list_boards or the board URL. |
| title | string | List title. |
| tasks required | object | Array of { text, due_date?, due_time? }; due_date is YYYY-MM-DD, due_time HH:MM for the reminder. |
tools/call
JSON-RPC
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "milanote_add_todo_list",
"arguments": {
"board_id": "b_5Hc3Wp",
"title": "Client call, 12 Oct",
"tasks": [
{
"text": "Shorten the intro",
"due_date": "2026-10-16"
},
{
"text": "Swap the hero image (Sam)",
"due_date": "2026-10-16",
"due_time": "10:00"
}
]
}
}
} Example response
{
"content": [
{
"type": "text",
"text": "{ ... same JSON as structuredContent ... }"
}
],
"structuredContent": {
"card_id": "c_55vG",
"board_id": "b_5Hc3Wp",
"title": "Call edits",
"task_count": 2,
"tasks": [
{
"id": "t_01",
"text": "Shorten the intro",
"due_date": "2026-10-16"
},
{
"id": "t_02",
"text": "Swap the hero image",
"due_date": "2026-10-16"
}
]
},
"isError": false
} MCP tool milanote_add_comment
Posts under your name; people in the thread and anyone you @mention are notified. A comment cannot be deleted from a thread afterwards, and only you can edit it. By default you confirm each call; you can switch that off for this tool.
Parameters
| Name | Type | Description |
|---|---|---|
| board_id required | string | Board ID from list_boards or the board URL. |
| text required | string | Comment text. @name tags a collaborator. |
| reply_to_id | string | Comment ID to reply to. |
tools/call
JSON-RPC
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "milanote_add_comment",
"arguments": {
"board_id": "board_8c41d2",
"text": "text"
}
}
} Example response
{
"content": [
{
"type": "text",
"text": "{ ... same JSON as structuredContent ... }"
}
],
"structuredContent": {
"comment_id": "m_31jB",
"board_id": "b_5Hc3Wp",
"text": "@Sam the new palette is on this board.",
"notified": [
"Sam"
]
},
"isError": false
} MCP tool milanote_invite_editor
Sends the invitee an email with a link; they need a free Milanote account to edit. Sharing also applies to sub-boards, and your Home board cannot be shared. By default you confirm each call; you can switch that off for this tool.
Parameters
| Name | Type | Description |
|---|---|---|
| board_id required | string | Board ID from list_boards or the board URL. |
| email required | string | Their email address. |
tools/call
JSON-RPC
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "milanote_invite_editor",
"arguments": {
"board_id": "board_8c41d2",
"email": "jane@example.com"
}
}
} Example response
{
"content": [
{
"type": "text",
"text": "{ ... same JSON as structuredContent ... }"
}
],
"structuredContent": {
"board_id": "b_7Kq2Lm",
"invited": "sam@example.com",
"role": "editor",
"status": "invited"
},
"isError": false
}