The Whimsical MCP connector routes your AI agent's tool calls to Whimsical's own MCP server through Scalekit. Each user signs in to Whimsical once, and Scalekit stores and refreshes their tokens, so your agent never handles credentials. It comes with 18 tools.
- Tools
- 18
- What they doRead · write · destructive
- 8 · 5 · 58 read5 write5 destructive
- Users sign in with
- OAuth
- OAuth app
- Scalekit's or your own
What you can do
- Generate diagrams: create flowcharts, mind maps, and sequence diagrams from structured data, markdown, or Mermaid
- Design wireframes: generate and edit wireframes with containers, buttons, inputs, and other UI elements
- Create and edit files: make boards, docs, and folders, edit their contents, auto-layout flowcharts, and move files to trash
- Find and read content: search the workspace, browse folders, and fetch boards or docs with an optional image snapshot
- Work with comments: read, create, reply to, edit, resolve, and delete comment threads on boards and docs
Setup
Install the SDK
Terminal window npm install @scalekit-sdk/node dotenvTerminal window pip install scalekit-sdk-python python-dotenvSet your credentials
Add your Scalekit credentials to your
.envfile. Find values in app.scalekit.com > Developers > API Credentials..env SCALEKIT_ENVIRONMENT_URL=<your-environment-url>SCALEKIT_CLIENT_ID=<your-client-id>SCALEKIT_CLIENT_SECRET=<your-client-secret>Create the Whimsical MCP connection
In AgentKit > Connections, create a Whimsical MCP connection. The name you give it is the
connection_nameyour code passes. See Configure connections.Scalekit credentials are available for Whimsical MCP server, so you don't need to register an OAuth app.
Authorize a user and make your first call
quickstart.mts import { ScalekitClient } from '@scalekit-sdk/node'import 'dotenv/config'import { createInterface } from 'node:readline/promises'const scalekit = new ScalekitClient(process.env.SCALEKIT_ENVIRONMENT_URL,process.env.SCALEKIT_CLIENT_ID,process.env.SCALEKIT_CLIENT_SECRET,)const actions = scalekit.actionsconst connector = 'whimsicalmcp'const identifier = 'user_123'// Generate an authorization link for the userconst { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })console.log('Authorize Whimsical MCP:', link)const rl = createInterface({ input: process.stdin, output: process.stdout })await rl.question('Press Enter after authorizing...')rl.close()// Make your first callconst result = await actions.executeTool({connector,identifier,toolName: 'whimsicalmcp_file_tree',toolInput: {},})console.log(result)Terminal window npx tsx quickstart.mtsquickstart.py import osfrom scalekit import ScalekitClientfrom dotenv import load_dotenvload_dotenv()scalekit_client = ScalekitClient(env_url=os.getenv("SCALEKIT_ENVIRONMENT_URL"),client_id=os.getenv("SCALEKIT_CLIENT_ID"),client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"),)actions = scalekit_client.actionsconnection_name = "whimsicalmcp"identifier = "user_123"# Generate an authorization link for the userlink_response = actions.get_authorization_link(connection_name=connection_name,identifier=identifier,)print("Authorize Whimsical MCP:", link_response.link)input("Press Enter after authorizing...")# Make your first callresult = actions.execute_tool(tool_input={},tool_name="whimsicalmcp_file_tree",connection_name=connection_name,identifier=identifier,)print(result)Terminal window python quickstart.pyEach user signs in once. See Authorize a user for the full flow and statuses.
Tools
Pass the exact name toexecute_toolwhimsicalmcp_comment_readRead all comment threads on a board item, including author, timestamp, and thread content.Read-onlyComment Read
Read all comment threads on a board item, including author, timestamp, and thread content.
Inputs
item_idstringrequired- Board, doc, board-object, doc-block, or table-row id (short-id, base58, or UUID).
cell_idstring- Optional column id (short-id of the table column) to narrow results to a single cell. Only meaningful alongside a table-row `item_id`. Reuse the `:cell` value from a previous comment_read response.
limitinteger- Maximum number of threads to return (default 50).
whimsicalmcp_fetchFetch the content of a Whimsical board, doc, or folder by ID, optionally returning a PNG snapshot.Read-onlyFetch
Fetch the content of a Whimsical board, doc, or folder by ID, optionally returning a PNG snapshot.
Inputs
idstringrequired- File or object ID (6-char short-id, UUID, or base58) from search results or a previous tool call
board_idstring- Parent board ID — required when fetching a table object. The table_id goes in 'id'.
crop_idsarray- Specific object IDs to crop the image to (image mode only).
detailstring- Detail level (boards only). "simple" (default): type, id, text only. "detailed": includes x, y, width, height, color, and the board's color palette. Task rows surface assignee, tags, and description-present as inline markers in the text column: `[@name, #tag, 📝]`.one of
simpledetailed expand_groupsboolean- Show all objects flat instead of collapsing groups into summaries (boards only).
grep_textarray- Filter to items whose text contains any of these terms (boards and docs, case-insensitive).
imageboolean- Return a rendered PNG image instead of text (boards only). Use scope, crop_ids, or viewport to crop.
limitinteger- Max objects/blocks to return (default: 50 for boards, 200 for docs, max: 200)
scopestring- IMPORTANT for editing: ID of a compound diagram (flowchart, mindmap, sequence diagram) to drill into. Returns the actual node/shape text instead of the board overview summary. You MUST use scope before find_replace — board overview shows summaries like 'Root (5 nodes)' that won't match actual text.
select_idsarray- Return only items with these IDs (boards and docs)
select_kindsarray- Filter by type (boards and docs). For boards: shape, note, text, icon, frame, link, task, table, attachment, image, w-annotation, sd-actor. Groups: flowchart, mindmap, wireframe, sequence-diagram, stack, section. For docs: block element tags (p, h1, h2, ul, ol, etc.).
spatialboolean- Include spatial annotations (boards only, requires detail: detailed). Default: false.
viewportobject- Bounding box in board coordinates to crop the image to (image mode only).
whimsicalmcp_file_treeBrowse the workspace file hierarchy to list folders, boards, and docs with optional depth and type filtering.Read-onlyFile Tree
Browse the workspace file hierarchy to list folders, boards, and docs with optional depth and type filtering.
Inputs
depthinteger- How many levels deep to show (default 2, max 5)
filterstring- Set to "teams" to list only the workspace's teams (name + id) without descending into files — use it to resolve a team name like "Trips" to its id. Ignored when folder_id is set.one of
teams folder_idstring- Folder, section, or team id (base58 or UUID) to browse — returns the file tree below it. Team ids come from filter="teams" or list_workspaces. Omit to see the whole workspace tree.
workspace_idstring- Target workspace ID. Defaults to most recently active workspace. Use list_workspaces to see options.
whimsicalmcp_get_board_itemsFetch board objects by file ID for rendering in the Whimsical widget.Read-onlyGet Board Items
Fetch board objects by file ID for rendering in the Whimsical widget.
Inputs
fileIdstringrequired- Board file ID (base58 or UUID)
fieldsarray- Object fields to include (omit for all). Lightweight: rect, objectType, text, fillColor, parentId, url. Heavy: gfx, rgfx, overlayGfx, hitboxes, shadowPathD.
limitinteger- Max objects per page (omit for all)
offsetinteger- Object offset for pagination (default 0)
whimsicalmcp_get_theme_dataFetch the board theme's dark color map for Whimbed rendering in the widget.Read-onlyGet Theme Data
Fetch the board theme's dark color map for Whimbed rendering in the widget.
Inputs
fileIdstringrequired- Board file ID (base58 or UUID)
whimsicalmcp_how_toLook up Whimsical-specific syntax, examples, and guides for creating diagrams and wireframes.Read-onlyHow To
Look up Whimsical-specific syntax, examples, and guides for creating diagrams and wireframes.
Inputs
domainstring- Structured lookup that returns JSON (vs `topic` which returns markdown). Use {type:'icon', query:'database'} for ranked icon names with aliases, {type:'color', query?} for the canonical palette with aliases and descriptions, {type:'font-size'} for valid font sizes, {type:'kinds'} for the canonical add-op type list used by edit. When `domain` is provided, `topic` is ignored.
topicstring- Topic keyword (e.g. 'flowchart', 'table', 'colors') or search query
whimsicalmcp_list_workspacesList all workspaces the authenticated user belongs to, including team IDs and member roles.Read-onlyList Workspaces
List all workspaces the authenticated user belongs to, including team IDs and member roles.
Inputs
This tool takes no inputs.
whimsicalmcp_searchSearch workspace files and content by name or full-text query.Read-onlySearch
Search workspace files and content by name or full-text query.
Inputs
querystringrequired- Search text
modestring- "all" (default) ranks titles and content together. "files" narrows to file/folder/section titles only — use when you need to pick a board to open and want to filter out object/text matches.one of
filesall workspace_idstring- Target workspace ID. Defaults to most recently active workspace. Use list_workspaces to see options.
whimsicalmcp_createCreate a new Whimsical board, diagram, folder, or doc in the specified workspace or folder.WriteCreate
Create a new Whimsical board, diagram, folder, or doc in the specified workspace or folder.
Inputs
typestringrequired- What to create. Use 'board' for freeform/sketch layouts where you control absolute positions (ideal for recreating hand-drawn notes, whiteboards, or any visual layout). Use 'flowchart', 'mindmap', 'sequence_diagram', 'sticky_notes', or 'wireframe' for semantic diagrams that auto-layout.one of
boardfolderdocflowchartmindmapsequence_diagramsticky_notestablewireframestamp board_idstring- Add to existing board. Omit to create new board. Required for wireframe.
datastring- Content payload. Board (freeform layout): {items: [{type:"text"|"shape"|"note"|"conn"|"icon"|"link", text, x, y, ...}], groups?: [...]}. Field names are snake_case: shape_type, from_id, to_id, temp_id, font_size, icon_name (NOT camelCase). For board items the `text` field accepts markdown (**bold**, *italic*, `code`, - bullet, 1. numbered, [label](url), # heading). URLs to Linear issues or GitHub issues/PRs render as inline badges; custom labels ([label](url)) aren't kept for these — use a bare URL. Keep one item per entity (one Linear issue, one card); put the formatting inside that item's text rather than splitting it across several items. Only emit conn items for arrows actually present in the source — do not invent connectors. Call how_to('board') for the full schema and examples. Mindmap: {markdown: "Root\n- Child\n - Grandchild"} (indented bullets). Flowchart/sequence_diagram: call how_to(type) for syntax. Wireframe: call how_to('wireframe') for flexbox DSL. Table: {markdown: "| A | B |\n|---|---|\n| 1 | 2 |"} or {columns: ["A","B"], rows: [["1","2"]]}.
parent_idstring- Folder or team id (base58) to create in. Find folder ids with file_tree, team ids with file_tree({filter:'teams'}), search, or list_workspaces. Defaults to the Private section.
placementobject- Position relative to a previous diagram's bbox (returned in every creation response). Use direction 'right' or 'below' to build grids. Mutually exclusive with x/y.
titlestring- Title or name for the created item
workspace_idstring- Workspace ID (UUID). Use list_workspaces to see options. Defaults to most recently active workspace.
xnumber- X position on board. Mutually exclusive with placement.
ynumber- Y position on board. Mutually exclusive with placement.
whimsicalmcp_doc_createCreate a new Whimsical document with optional markdown content.WriteDoc Create
Create a new Whimsical document with optional markdown content.
Inputs
datastring- Document content as a markdown string.
parent_idstring- Folder or team section ID to create in. Defaults to Private section.
titlestring- Document title
workspace_idstring- Workspace ID (UUID). Use list_workspaces to see options. Defaults to most recently active workspace.
whimsicalmcp_generate_diagramGenerate a Whimsical flowchart, mind map, or sequence diagram from structured data or Mermaid syntax.WriteGenerate Diagram
Generate a Whimsical flowchart, mind map, or sequence diagram from structured data or Mermaid syntax.
Inputs
typestringrequired- Diagram type to generateone of
flowchartmindmapsequence_diagramsticky_notes board_idstring- Add to existing board. Omit to create a new board.
datastring- Content data — format varies by type. Use how_to(type) for syntax.
parent_idstring- Folder or team section ID to create in. Defaults to Private section.
titlestring- Title for the board
workspace_idstring- Workspace ID (UUID). Use list_workspaces to see options. Defaults to most recently active workspace.
whimsicalmcp_generate_mind_mapGenerate a Whimsical mind map from indented markdown, where the first line is the root and children are bulleted.WriteGenerate Mind Map
Generate a Whimsical mind map from indented markdown, where the first line is the root and children are bulleted.
Inputs
board_idstring- Add to existing board. Omit to create a new board.
datastring- Mind map content as {"markdown": "Root Topic\n- Child 1\n - Grandchild\n- Child 2"}. First line is root, children use '- ' bullets, indent 2 spaces per level.
parent_idstring- Folder or team section ID to create in. Defaults to Private section.
titlestring- Title for the board
workspace_idstring- Workspace ID (UUID). Use list_workspaces to see options. Defaults to most recently active workspace.
whimsicalmcp_generate_wireframeGenerate a Whimsical wireframe with flexbox layout using containers, buttons, inputs, and other UI elements.WriteGenerate Wireframe
Generate a Whimsical wireframe with flexbox layout using containers, buttons, inputs, and other UI elements.
Inputs
board_idstring- Add to existing board. Omit to create a new board.
datastring- Content data — format varies by type. Use how_to(type) for syntax.
parent_idstring- Folder or team section ID to create in. Defaults to Private section.
titlestring- Title for the board
workspace_idstring- Workspace ID (UUID). Use list_workspaces to see options. Defaults to most recently active workspace.
whimsicalmcp_auto_layoutRe-arrange shapes on a Whimsical flowchart using the auto-layout engine, with connectors re-routed automatically.DestructiveAuto Layout
Re-arrange shapes on a Whimsical flowchart using the auto-layout engine, with connectors re-routed automatically.
Inputs
board_idstringrequired- Board file ID
orientationstring- Layout direction (td=top-to-bottom, lr=left-to-right, bt=bottom-to-top, rl=right-to-left). Inferred from connector flow when omitted.one of
tdlrbtrl parent_idstring- Optional: scope layout to descendants of this object id (e.g. a group/container). Omit to lay out all root-level shapes on the file.
spacingstring- Spacing preset; defaults to 'default'.one of
compactdefault
whimsicalmcp_comment_editCreate, reply to, edit, resolve, or delete comment threads on a Whimsical board or doc.DestructiveComment Edit
Create, reply to, edit, resolve, or delete comment threads on a Whimsical board or doc.
Inputs
actionstringrequired- Which comment operation to perform.one of
createreplyeditresolveunresolvedelete cell_idstring- For create on a table cell: the column id (short-id of the table column). Combined with a table-row `item_id` to target a single cell. Reuse a `:cell` short-id from a previous comment_read response.
comment_idstring- For edit/delete: id of the specific comment to modify.
contentstring- For create/reply/edit: markdown content for the comment.
item_idstring- For create: id of the board, doc, board object, or table row to attach the thread to.
thread_idstring- For reply/resolve/unresolve: id of the root comment of the thread.
whimsicalmcp_deleteMove a Whimsical file, folder, or doc to trash, restoring it later from the Whimsical UI.DestructiveDelete
Move a Whimsical file, folder, or doc to trash, restoring it later from the Whimsical UI.
- Idempotent
Inputs
idstringrequired- Id of the file, folder, or doc to delete. Accepts UUID or base58 form (as returned by file_tree or search).
whimsicalmcp_editEdit a Whimsical board or doc by applying an array of add, update, or delete operations to its objects.DestructiveEdit
Edit a Whimsical board or doc by applying an array of add, update, or delete operations to its objects.
Inputs
idstringrequired- Board or doc ID (from create, fetch, or a previous tool response)
operationsarrayrequired- Array of operations to perform
whimsicalmcp_wireframe_editReflow or edit Whimsical wireframe elements using operations or a flexbox layout tree.DestructiveWireframe Edit
Reflow or edit Whimsical wireframe elements using operations or a flexbox layout tree.
Inputs
board_idstringrequired- Board file ID
target_idstringrequired- Wireframe frame ID to edit (from board_read or create)
frame_typestring- Override frame type if auto-detection fails. Valid: plain, desktop, iphone-14, iphone-x, iphone-8, ipad, android, android-tablet, apple-watch
layoutarray- Layout mode: JSON layout tree for structural changes with flexbox reflow. Cannot be used with operations.
operationsarray- Operations mode: direct property edits and deletes. Cannot be used with layout.
titlestring- Frame title (preserves existing if omitted)
No tools match.