mindnode-mcp
Automatically discovers and accesses MindNode documents stored in the user's iCloud container, allowing reading, writing, and modifying mind maps directly within iCloud storage.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mindnode-mcpAdd a node 'Learn MCP' under 'Goals' in my mind map."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
mindnode-mcp
English | 日本語
An MCP server that lets an AI assistant
(Claude, etc.) read and write your MindNode mind maps
directly — by parsing the .mindnode file format itself. No AppleScript, no
Shortcuts, no export/import dance.
Ask your assistant to "read my project map", "add these three ideas under Marketing", "connect the API node to the Auth node", or "turn this outline into a new mind map" — and it operates on the real files MindNode syncs.
Why this exists: MindNode dropped its AppleScript dictionary, and its Shortcuts/URL-scheme automation is thin. But a
.mindnodedocument is just a package whosecontents.xmlis an Apple binary plist — a clean recursive node tree. Read/write that, and you get full programmatic control.
Requirements
macOS with MindNode installed (format version 9 — current MindNode releases)
Python 3.11+ and uv
An MCP client (e.g. Claude Code)
Related MCP server: xmind-mcp
Install
git clone https://github.com/masamitsu-konya/mindnode-mcp.git
cd mindnode-mcp
uv syncRegister it with Claude Code (user scope = available everywhere):
claude mcp add --scope user mindnode -- uv --directory "$PWD" run mindnode-mcpThen start a new session and run /mcp (or claude mcp list) to confirm it
shows mindnode ✔ Connected.
By default it finds your MindNode documents in the iCloud container
automatically. Point it elsewhere with the MINDNODE_DOCS_DIR environment
variable (a local library, or a fixture folder for testing).
Usage
Talk to your assistant in plain language — it picks the right tool. Examples:
You say | What happens |
"List my mind maps" |
|
"Read my Project Plan map" |
|
"Search all my maps for 'pricing'" |
|
"Add 'Hire a designer' under the Team node in Roadmap" |
|
"Connect 'Frontend' to 'API' with the label 'calls'" |
|
"Tag the 'Launch' node as #urgent" |
|
"Mark 'Ship v1' as done" |
|
"Attach ~/Desktop/wireframe.png to the Design node" |
|
"Make a new map 'Q3 Goals' with branches Sales, Product, Hiring" |
|
Nodes can be referenced by their text (a case-insensitive substring is enough)
or by their exact id (ids come back from read_document).
Tools
Tool | Kind | What it does |
| read | All |
| read | Mind maps as |
| read | Substring search over node text + notes, in one document or all |
| write | Add a node under a parent (by id or text), with optional note |
| write | Cross-link two existing nodes with an optional label and arrow direction |
| write | Tag / untag a node (tags are document-wide and auto-created) |
| write | Turn a node into a checkbox task and set done / todo |
| write | Attach a local image to a node (copied into the package's |
| write | Create a new |
Connections (cross-links)
Free links between any two nodes, independent of the parent/child tree (stored
at canvas.crossConnections[]). add_connection(document, start, end, label?, direction?) — direction ∈ forward (default) / backward / both / none.
read_document returns each as {id, start_id, end_id, start_text, end_text, direction, label?}.
Tags, tasks, attachments
read_document surfaces these per node (and lists all tag names at the top):
Tags — normalized:
canvas.tags[]defines{tagID, name, color},node.tags[]references tagIDs.add_tagauto-defines a tag of that name if it doesn't exist, then attaches it (idempotent).Tasks —
node.task = {state, uuids}, wherestate1 = todo, 2 = done.set_task(document, node, done)toggles it.Attachments (images) —
node.attachment = {fileName, size, tintKind, type}; image bytes live inresources/<fileName>.attach_imagecopies the file in and links it, clamping display width to 300px (matching MindNode).
How it works
A .mindnode document is a package directory. Its contents.xml — despite
the extension — is an Apple binary plist holding the mind map (format
version 9):
canvas.mindMaps[].mainNode # root node of each map
├─ nodeID # UUID
├─ title.text # the node's text, stored as small HTML
├─ note / task / tags / attachment
└─ subnodes[] # children (same shape, recursive)
canvas.crossConnections[] # free links between nodes
canvas.tags[] # tag definitionsThe server reads and writes this with Python's standard plistlib, so it needs
no third-party plist libraries. Node text round-trips through a minimal
HTML encode/decode (with proper escaping).
Write safety
These tools mutate your real files, so every write:
backs up
contents.xmlto a timestamped.bak-*first,writes to a temp file then atomically replaces it (no partial writes),
preserves keys it didn't author (styling, layout, print info), and
drops the stale QuickLook preview so it regenerates.
create_map clones an existing document as a structural skeleton (keeping all
opaque auxiliary files valid) and overwrites only the node tree.
Caveat — document open in MindNode. Writes go straight to disk. If MindNode (or another device via iCloud) has the same document open, its next autosave can clobber the change, or you may get an iCloud conflict copy. Close the document in MindNode before writing, or reopen it afterwards to pick up the edit. Backups make this recoverable, but it's cleaner to avoid.
Development
uv run python tests/smoke.pyThe smoke test exercises reads against your real documents (read-only) and all writes against throwaway temp copies — it never modifies your actual maps. It also asserts that generated structures (nodes, connections, tags, tasks, image attachments) match the schema of real MindNode files key-for-key.
Status & roadmap
Read — list / read / search
Write — add_node / create_map
Connections / cross-links — read + add_connection
Tags, tasks, image attachments — read + write
Non-image attachments (links, stickers)
Tag color palette / rename, task removal
Connection waypoint editing
License
MIT © 2026 Masamitsu Konya
This server cannot be deployed
Maintenance
Related MCP Connectors
Read, analyze, and safely edit Microsoft Project MPP files.
Turn outlines and hierarchical notes into interactive mind maps through a hosted remote MCP server.
Create, edit, restructure, import and export Atlas Red mind maps from any MCP client. Free.
MCP-native open-source Notion alternative: read & write pages, databases and kanban boards.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables incremental editing of XMind mind maps using atomic tools for reading, creating, and surgically editing .xmind files.8MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to read and write XMind mind map files, allowing generation, editing, and analysis of mind maps directly in XMind.MIT
- FlicenseNot gradedqualityDmaintenanceEnables AI assistants to read, search, and convert MindManager .mmap files without installing MindManager.-
- AlicenseNot gradedqualityBmaintenanceEnables LLMs to read and edit XMind mind maps, including OCR for images embedded in nodes.MIT