freeplane-mcp
freeplane-mcp
一个 MCP 服务器,允许 Claude Desktop、Cursor 和 opencode 等 AI 智能体通过 freeplane_plugin_grpc gRPC 插件读取和修改正在运行的 Freeplane 思维导图。
与一次性“Markdown → 图片”MCP 服务器不同,更改会实时应用到当前打开的 Freeplane 思维导图。
架构
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
环境要求
Python 3.10+
已安装 gRPC 插件并正在运行的 Freeplane
Freeplane 默认 gRPC 端口:
50051
安装
cd ~/spaces/freeplane-mcp
python -m venv .venv
.venv/bin/pip install -e .运行
stdio
Claude Desktop、Cursor、opencode 等默认传输方式:
.venv/bin/freeplane-mcpStreamable HTTP
.venv/bin/freeplane-mcp --transport http --port 8000配置
环境变量 | CLI 选项 | 默认值 |
|
|
|
|
|
|
| — |
|
|
|
|
|
|
|
|
|
|
MCP 工具
export_map
将当前思维导图导出为规范 JSON。
支持的字段包括:
text、id、children、note、detail、link、tags、icons、attributes、background_color、folded 和 relationships。
import_map
从规范 JSON 导入思维导图。
支持的 insert_mode 值:
root— 在思维导图根节点下方插入;默认值node— 在insert_node_id下方插入selected— 在当前选中节点下方插入
测试
导出当前思维导图:
.venv/bin/python -c "
import sys; sys.path.insert(0, '.')
from freeplane_mcp.freeplane_grpc import FreeplaneGrpcClient
c = FreeplaneGrpcClient()
print(c.export_map())
"导入思维导图并再次导出:
.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 客户端配置
stdio 配置示例:
{
"mcpServers": {
"freeplane": {
"command": "/home/bebebeka/spaces/freeplane-mcp/.venv/bin/freeplane-mcp"
}
}
}HTTP 配置:
{
"mcpServers": {
"freeplane": {
"url": "http://127.0.0.1:8000/mcp"
}
}
}JSON 格式说明
规范 JSON 格式由插件的 JsonHelper.java 定义。
导入支持 _fp_import_root_node:
{"_fp_import_root_node": "root", "mindmap": {...}}在思维导图根节点下方插入。
{"_fp_import_root_node": "ID_...", "mindmap": {...}}在特定节点下方插入。
如果没有包装器,思维导图将插入到当前选中节点下方。
也支持旧版格式:
{"node text": {"child node": "note"}}许可证
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