freeplane-mcp
freeplane-mcp
Un servidor MCP que permite a agentes de IA como Claude Desktop, Cursor y opencode leer y modificar un mapa mental de Freeplane en ejecución a través del plugin gRPC Claude_plugin_grpc.
A diferencia de los servidores MCP de una sola pasada «Markdown → imagen», los cambios se aplican en tiempo real al mapa de Freeplane que esté abierto actualmente.
Arquitectura
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
Requisitos
Python 3.10+
Freeplane ejecutándose con el plugin gRPC instalado
Puerto gRPC predeterminado:
50051
Instalación
cd ~/spaces/freeplane-mcp
python -m venv .venv
.venv/bin/pip install -e .Ejecución
stdio
Transporte predeterminado para Claude Desktop, Cursor, opencode, etc.:
.venv/bin/freeplane-mcpStreamable HTTP
.venv/bin/freeplane-mcp --transport http --port 8000Configuración
Variable de entorno | Opción de CLI | Valor predeterminado |
|
|
|
|
|
|
| — |
|
|
|
|
|
|
|
|
|
|
Herramientas MCP
export_map
Exporta el mapa is actual a JSON canónico.
Los campos admitidos incluyen:
text, id, children, node, note, detail, link, tags, icons, attributes, background_color, folded y relationships.
import_map
Importa un mapa mental from JSON canónico.
Valores admitidos de insert_mode:
root— inserta debajo de la raíz del mapa; predeterminadonode— inserta debajo deinsert_node_idselected— inserta debajo del nodo seleccionado actualmente
Pruebas
Exporta el mapa actual:
.venv/bin/python -c "
import sys; sys.path.insert(0, '.')
from freeplane_mcp.freeplane_grpc import FreeplaneGrpcClient
c = FreeplaneGrpcClient()
print(c.export_map())
"Importa un mapa y expórtalo de nuevo:
.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())
"Configuración del cliente MCP
Ejemplo de configuración con stdio:
{
"mcpServers": {
"freeplane": {
"command": "/home/bebebeka/spaces/freeplane-mcp/.venv/bin/freeplane-mcp"
}
}
}Configuración HTTP:
{
"mcpServers": {
"freeplane": {
"url": "http://127.0.0.1:8000/mcp"
}
}
}Notas sobre el formato JSON
El formato JSON canónico está definido por el JsonHelper.java del plugin.
La importación admite _fp_import_root_node:
{"_fp_import_root_node": "root", "mindmap": {...}}inserta debajo de la raíz del mapa.
{"_fp_import_root_node": "ID_...", "mindmap": {...}}inserta debajo de un nodo específico.
Sin el contenedor, el mapa se inserta debajo del nodo seleccionado actualmente.
El formato heredado también se admite:
{"node text": {"child node": "note"}}Licencia
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