freeplane-mcp
freeplane-mcp
Ein MCP-Server, der KI-Agenten wie Claude Desktop, Cursor und opencode das Lesen und Ändern einer laufenden Freeplane-Mindmap über das freeplane_plugin_grpc gRPC-Plugin ermöglicht.
Im Gegensatz zu einmaligen „Markdown → Bild“-MCP-Servern werden Änderungen live auf die aktuell geöffnete Freeplane-Mindmap angewendet.
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: mindmapio-mcp
Requirements
Python 3.10+
Freeplane mit installiertem und laufendem gRPC-Plugin
Standard-freeplane-gRPC-Port:
50051– (standard Freeplane gRPC port, im Kontext: Freeplane mit installiertem und laufendem gRPC-Plugin).
Installation
cd ~/spaces/freeplane-mcp
python -m venv .venv
.venv/bin/pip install -e .Ausführen
stdio
Standardtransport für Claude Desktop, Cursor, opencode usw.:9;
.venv/bin/freeplane-mcpStreamable HTTP
.venv/bin/freeplane-mcp --transport http --port 8000Konfiguration
Umgebungsvariable | CLI-Option | Standard |
|
|
|
`FREEPLANE_GRPC_GAP» |
|
|
| — |
|
|
|
|
|
|
|
|
|
|
MCP-Werkzeuge
export_map
Exportiert die aktuelle Mindmap als kanonisches JSON.
Die unterstützten Felder umfassen:
text, id, children, note, detail, link, tags, icons, attributes, background_color, folded und relationships.
import_map
Importiert eine Mindmap aus kanonischem JSON.
Unterstützte insert_mode-Werte:
root— fügt unterhalb des Wurzelknotens der Mindmap ein; Standard? Punktnode— fügt unterhalb voninsert_node_ideinselected— fügt unterhalb des aktuell ausgewählten Knotens ein
Test
Aktuelle Mindmap exportieren:
.venv/bin/python -c "
import sys; sys.path.insert(0, '.')
from freeplane_mcp.freeplane_grpc import FreeplaneGrpcClient
c = FreeplaneGrpcClient()
print(c.export_map())
"Eine Mindmap importieren und erneut exportieren:
.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-Konfiguration
Beispielkonfiguration für stdio:
{
"mcpServers": {
"freeplane": {
"command": "/home/bebebeka/spaces/freeplane-mcp/.venv/bin/freeplane-mcp"
}
}
}HTTP-Konfiguration:
{
"mcpServers": {
"freeplane": {
"url": "http://127.0.0.1:8000/mcp"
}
}
}Hinweise zum JSON-Format
Das kanonische JSON-Format wird durch JsonHelper.java des Plugins definiert.
Der Import unterstützt _fp_import_root_node:
{"_fp_import_root_node": "root", "mindmap": {...}}fügt unterhalb des Wurzelknotens der Mindmap ein.
{"_fp_import_root_node": "ID_...", "mindmap": {...}}fügt unterhalb eines bestimmten Knotens ein.
Ohne den Wrapper wird die Mindmap unterhalb des aktuell ausgewählten Knotens eingefügt.
Auch das Legacy-Format wird unterstützt:
{"node text": {"child node": "note"}}Lizenz
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
- 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
- AlicenseNot gradedqualityAmaintenanceA local MCP server that combines a browser mind map UI with a Streamable HTTP MCP endpoint, letting AI agents create, edit, and manage mind maps in real time through tools like mindmap_apply_op.8 npmMIT