ledring.dev

Note

Mind maps for me, Markdown for my agents

I plan in mind maps. My agents read text.

A .xmind file is a zip with JSON inside. A Yuque .lakeboard file is JSON too. An agent can open either one, but it has to wade through IDs, styles and layout data before it reaches the ideas. So I wrote lakeboard-converter. It turns a mind map into Markdown: the root becomes a heading, each topic becomes a list item, and the nesting follows the tree.

What it keeps

  • Text, hierarchy and order.
  • Notes, as a quote under their topic.
  • Links, as [Title](url).
  • Labels, as code spans after the title.
  • Every XMind sheet. With more than one, each sheet gets its own heading.

What it drops

  • Styling, colour and layout.
  • Floating topics, summaries and relationship lines. Only the attached tree is read.
  • XMind 8 files. The old XML format has no content.json, so the converter stops with an error instead of guessing.

A mind map is a picture of a tree. The Markdown keeps the tree and loses the picture. For an agent, the tree is usually the part that matters.

Three ways to run it

In the browser: convert.ledring.dev. The file is parsed on your machine. Nothing is uploaded and the page makes no third-party requests.

From a terminal (Node 20.12+):

npx -y lakeboard-converter read ./map.xmind --format md

read prints to stdout. convert writes files, and won't overwrite an existing one unless you pass --overwrite.

As an MCP server:

npx -y lakeboard-converter mcp
{
  "mcpServers": {
    "lakeboard-converter": {
      "command": "npx",
      "args": ["-y", "lakeboard-converter", "mcp"]
    }
  }
}

The server has one read-only tool: convert(path, format, sheet?, maxNodes?, maxDepth?). format is md, json (a topic tree) or outline.

Limits, on purpose

A big map can flood a context window. Reads stop at 2,000 topics by default (maxNodes, up to 50,000), and maxDepth cuts the tree at a level, with the root at depth 0. When anything is cut, the result says so: truncated is true and the text ends with a > Note: line.

$ npx -y lakeboard-converter read launch-plan.xmind --format md --max-depth 1
# Side project launch
- Scope
- Checks
- Docs
- Feedback
> Note: Output truncated at maxDepth 1. Pass a higher maxDepth to include deeper topics.

I'd rather the agent know it's looking at part of the map than assume it saw all of it.

Use absolute paths with MCP. A relative path resolves against the server's working directory, which is often not the folder you're in. A leading ~ is expanded.

The code is MIT: github.com/FelixFangX/lakeboard-converter. If a file converts wrong, open an issue with a sample I can reproduce.

← All notes