freeplane-mcp
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., "@freeplane-mcpExport the current mind map to JSON"
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.
freeplane-mcp
An MCP server that allows AI agents such as Claude Desktop, Cursor, and opencode to read and modify a running Freeplane mind map through the freeplane_plugin_grpc gRPC plugin.
Unlike one-shot “Markdown → image” MCP servers, changes are applied live to the currently opened Freeplane map.
Architecture
MCP client (Claude / Cursor / opencode)
│
│ stdio or Streamable HTTP (MCP SDK)
▼
freeplane-mcp (Python, FastMCP)
│
│ gRPC (grpcio)
▼
Freeplane + org.freeplane.plugin.grpc
(port 50051)Related MCP server: xmind-mcp
Requirements
Python 3.10+
Freeplane running with the gRPC plugin installed
Default Freeplane gRPC port:
50051
Installation
cd ~/spaces/freeplane-mcp
python -m venv .venv
.venv/bin/pip install -e .Running
stdio
Default transport for Claude Desktop, Cursor, opencode, etc.:
.venv/bin/freeplane-mcpStreamable HTTP
.venv/bin/freeplane-mcp --transport http --port 8000Configuration
Environment variable | CLI option | Default |
|
|
|
|
|
|
| — |
|
|
|
|
|
|
|
|
|
|
MCP Tools
export_map
Exports the current map to canonical JSON.
Supported fields include:
text, id, children, note, detail, link, tags, icons, attributes, background_color, folded, and relationships.
import_map
Imports a mind map from canonical JSON.
Supported insert_mode values:
root— insert below the map root; defaultnode— insert belowinsert_node_idselected— insert below the currently selected node
Testing
Export the current map:
.venv/bin/python -c "
import sys; sys.path.insert(0, '.')
from freeplane_mcp.freeplane_grpc import FreeplaneGrpcClient
c = FreeplaneGrpcClient()
print(c.export_map())
"Import a map and export it again:
.venv/bin/python -c "
import sys; sys.path.insert(0, '.')
from freeplane_mcp.freeplane_grpc import FreeplaneGrpcClient
c = FreeplaneGrpcClient()
c.import_map('{\"text\": \"Hello from MCP\", \"children\": [{\"text\": \"child 1\"}]}')
print(c.export_map())
"MCP Client Configuration
Example stdio configuration:
{
"mcpServers": {
"freeplane": {
"command": "/home/bebebeka/spaces/freeplane-mcp/.venv/bin/freeplane-mcp"
}
}
}HTTP configuration:
{
"mcpServers": {
"freeplane": {
"url": "http://127.0.0.1:8000/mcp"
}
}
}JSON Format Notes
The canonical JSON format is defined by the plugin's JsonHelper.java.
Import supports _fp_import_root_node:
{"_fp_import_root_node": "root", "mindmap": {...}}inserts below the map root.
{"_fp_import_root_node": "ID_...", "mindmap": {...}}inserts below a specific node.
Without the wrapper, the map is inserted below the currently selected node.
The legacy format is also supported:
{"node text": {"child node": "note"}}License
MIT
Available Tools
2 toolsexport_mapA
Export the current Freeplane mind map to canonical JSON.
Returns the whole map as a JSON string. Each node has at least "text" and "id"; optional fields include "children", "note", "detail", "link", "tags", "icons", "attributes", "background_color", "folded" and "relationships".
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden and does well by disclosing that the return value is a complete JSON string representation of the map and listing node fields. It implicitly signals a read-only operation through the word 'export' but does not explicitly state that nothing is modified, which is a minor omission.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured: a single purpose-defining first sentence followed by concise details about output shape and optional fields. No redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is complete for a zero-parameter export tool: it states the action, the object, the output format, and the node shape. An output schema exists to further document return values. It could briefly relate to import_map or confirm non-destructiveness, but nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema coverage is 100%, so there is no parameter documentation burden. The description appropriately notes the operation applies to the current map, which supplies the only relevant context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: "Export the current Freeplane mind map to canonical JSON." This clearly distinguishes it from the sibling import_map, and the following details about JSON structure leave no doubt about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies when to use this tool (whenever the current mind map needs to be exported as JSON), and the sibling tool name import_map makes the alternative obvious. However, it does not explicitly call out import_map or state conditions for choosing one over the other, so it stops short of full guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
import_mapA
Import a mind map (canonical JSON) into the running Freeplane instance.
| Name | Required | Description | Default |
|---|---|---|---|
| map_json | Yes | Canonical JSON of the mind map root node (see export_map for the format). Accepts either a JSON string or, on clients that support structured arguments, the object itself. | |
| insert_mode | No | Where to attach the imported subtree. One of "root" (attach under the map root), "node" (attach under insert_node_id) or "selected" (attach under the currently selected node). Defaults to "root". | root |
| insert_node_id | No | Node ID required when insert_mode="node". |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the behavioral burden. It says 'Import', which implies mutation, but it does not disclose whether importing replaces, appends, or merges the current map; it also does not mention prerequisites, response shape, or potential side effects. The description adds only the 'running instance' context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence with no filler. The verb, object, format, and destination are all front-loaded, making it instantly scannable by an agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is overall simple enough to be called correctly from the description plus the comprehensive input schema and presence of an output schema. The main gap is the lack of behavioral context around import side effects, but this is not essential for basic invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% parameter coverage and already explains map_json, insert_mode, and insert_node_id in detail. The description adds little beyond repeating 'canonical JSON', so the schema is doing the heavy lifting. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('Import'), resource ('mind map'), and target ('running Freeplane instance'). It also distinguishes itself from the sibling export_map by making the directionality explicit: this tool brings data in through canonical JSON, while export_map would presumably produce it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context that this tool is for injecting a canonical JSON mind map into a live Freeplane instance. It does not explicitly say when to use export_map instead or mention exclusions, but the import/export contrast is strongly inferable from the sibling name and the mention of the canonical JSON format.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
2 tool updates
v0.1.0- First observed
export_map - First observed
import_map
TDQS
Scored across 2 tools
export_map and import_map have clearly opposite purposes and there is no overlap. An agent can unambiguously determine which to call based on the direction of data transfer.
Both tool names follow the same verb_noun pattern: export_map and import_map. The naming is simple, predictable, and perfectly matches the server's purpose.
Two tools is a very minimal set, but each covers one half of the map exchange workflow. It feels slightly thin for a general MCP server, though the scope is focused.
The two tools provide a complete round-trip: export the map as JSON and import it back. For this server's apparent purpose of whole-map synchronization, there are no obvious gaps.
Maintenance
Related MCP Connectors
Create, edit, restructure, import and export Atlas Red mind maps from any MCP client. Free.
Turn outlines and hierarchical notes into interactive mind maps through a hosted remote MCP server.
Create, edit, and organize MindMeister mind maps from your AI assistant.
Create and edit roadmaps with JSON or markup; share edit and view links from AI agents.
Related MCP Servers
- AlicenseAqualityCmaintenanceA Model Context Protocol server that enables LLMs to interact with MindManager mind maps, allowing retrieval of mind map structures and export to formats like Mermaid, Markdown, and JSON.1111MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to read and write XMind mind map files, allowing generation, editing, and analysis of mind maps directly in XMind.MIT
- AlicenseAqualityBmaintenanceEnables AI agents to build and interact with mind maps on mindmap.io. Agents can create, read, update, and delete maps and nodes, run prompts on nodes, and auto-expand topics into follow-up questions.13MIT
- AlicenseNot gradedqualityBmaintenanceEnables LLMs to read and edit XMind mind maps, including OCR for images embedded in nodes.MIT