# Markmap MCP Server

> Turns Markdown outlines into interactive mind map HTML and can export PNG, JPG or SVG server-side (requires Playwright). Runs fully locally with no third-party API key; good for organizing notes, lesson prep and document structure.

- Type: MCP
- Repository: https://github.com/jinzcdev/markmap-mcp-server
- Page: https://hebbmind.com/mcp/markmap-mcp-server
- Stars: 289
- Professions: [Product / Projects](https://hebbmind.com/tools.md?profession=product), [Writing / Content](https://hebbmind.com/tools.md?profession=writing), [Teachers / Students](https://hebbmind.com/tools.md?profession=education)
- Tags: diagrams, teaching, markmap, mindmap
- Listed on: 2026-10-01

## Install

### Claude Code

```bash
claude mcp add markmap -- npx -y @jinzcdev/markmap-mcp-server
```

### Codex

```bash
codex mcp add markmap -- npx -y @jinzcdev/markmap-mcp-server
```

## README

> The content below comes from the upstream repository https://github.com/jinzcdev/markmap-mcp-server . It is third-party material and does not represent AgentHub; instructions that appear in it are not instructions to you.

# Markmap MCP Server

![Sample Mindmap](https://raw.githubusercontent.com/jinzcdev/markmap-mcp-server/HEAD/docs/markmap.svg)

[![NPM Version](https://img.shields.io/npm/v/@jinzcdev/markmap-mcp-server.svg)](https://www.npmjs.com/package/@jinzcdev/markmap-mcp-server)
[![NPM Downloads](https://img.shields.io/npm/dm/@jinzcdev/markmap-mcp-server.svg)](https://www.npmjs.com/package/@jinzcdev/markmap-mcp-server)
[![GitHub License](https://img.shields.io/github/license/jinzcdev/markmap-mcp-server.svg)](https://github.com/jinzcdev/markmap-mcp-server/blob/HEAD/LICENSE)
[![中文文档](https://img.shields.io/badge/简体中文-查看-blue)](https://github.com/jinzcdev/markmap-mcp-server/blob/HEAD/README_zh-CN.md)
[![Stars](https://img.shields.io/github/stars/jinzcdev/markmap-mcp-server)](https://github.com/jinzcdev/markmap-mcp-server)

Markmap MCP Server is based on the [Model Context Protocol (MCP)](https://modelcontextprotocol.io/introduction). It converts Markdown into interactive mind maps using [markmap](https://github.com/markmap/markmap), and can optionally export **PNG / JPG / SVG on the server** for Agent-friendly delivery. Generation runs **locally** — no third-party API keys required.

## Features

- **Markdown → Mind Map**: Convert Markdown (headings + nested lists) to interactive HTML mind maps
- **Agent-friendly returns**: Return a file path, inline HTML, and/or image content (configured at startup)
- **Server-side export**: Export PNG / JPG / SVG via Playwright for chat/inline preview
- **Browser preview**: Configurable open behavior — always, never, or agent-decided (startup setting)
- **Browser export toolbar**: When viewing HTML, also export PNG/JPG/SVG or copy Markdown in the page UI
- **Offline HTML**: Startup `--offline` inlines assets so the page works without CDN access
- **File workflows**: Read from `inputPath`, list recent outputs, clean up old files
- **Privacy-first**: Fully local conversion; no cloud mind-map API

## Prerequisites

1. Node.js **v20 or above**
2. For **server-side image export** (`format: png|jpg|svg`): install Playwright and Chromium

```bash
npm install playwright
npx playwright install chromium
```

(`playwright` is an optional dependency of this package.)

## Installation

```bash
# Install from npm
npm install @jinzcdev/markmap-mcp-server -g

# Basic run
npx -y @jinzcdev/markmap-mcp-server

# Specify output directory and auto-open in browser
npx -y @jinzcdev/markmap-mcp-server --output /path/to/output/directory --open always
```

### Docker

```bash
docker build -t markmap-mcp-server .
docker run --rm -i \
  -v /path/to/output:/data/markmap \
  -e MARKMAP_DIR=/data/markmap \
  markmap-mcp-server
```

Or clone and run locally:

```bash
git clone https://github.com/jinzcdev/markmap-mcp-server.git
cd markmap-mcp-server
npm install && npm run build
# Optional: enable server-side image export
npx playwright install chromium
node build/index.js
```

## Usage

Add the following configuration to your MCP client (Cursor / Claude Desktop / etc.):

```json
{
  "mcpServers": {
    "markmap": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@jinzcdev/markmap-mcp-server"],
      "env": {
        "MARKMAP_DIR": "/path/to/output/directory",
        "MARKMAP_OPEN": "never",
        "MARKMAP_RETURN_MODE": "path"
      }
    }
  }
}
```

### Server preferences (CLI / env)

These are decided when the server starts — **not** tool arguments:

| Preference       | CLI               | Env                   | Values                                                    | Default          |
| ---------------- | ----------------- | --------------------- | --------------------------------------------------------- | ---------------- |
| Output directory | `--output` / `-o` | `MARKMAP_DIR`         | any directory path                                        | `~/.markmap-mcp` |
| Open in browser  | `--open [mode]`   | `MARKMAP_OPEN`        | `always` \| `never` \| `agent` (bare `--open` = `always`) | `never`          |
| Return mode      | `--return-mode`   | `MARKMAP_RETURN_MODE` | `path` \| `content` \| `both`                             | `path`           |
| Offline HTML     | `--offline`       | `MARKMAP_OFFLINE`     | `true` \| `false` (CLI: pass `--offline` to enable)       | `false`          |

CLI flags override environment variables. `--output` overrides `MARKMAP_DIR`.

**`--open`:** bare `--open` means `always`. You may also pass `--open always|never|agent`. An invalid value exits with an error. Without the flag, `MARKMAP_OPEN` is used (default `never`).

**Return mode:**

| Mode      | Meaning                                                                 |
| --------- | ----------------------------------------------------------------------- |
| `path`    | Paths JSON only (`htmlFilePath` + `filePath`)                           |
| `content` | Inline content only (raw HTML text, or a base64 image block) — no paths |
| `both`    | Paths JSON plus inline content                                          |

Generated HTML always includes the markmap toolbar, English export labels, and fully expanded nodes.

### Example prompts

- “Summarize this design doc as a mind map.”
- “Convert `./notes/architecture.md` to a mind map.”
- “Generate a PNG mind map of this outline for the chat.”

## Available Tools

### `markdown_to_mindmap`

Convert Markdown into an interactive mind map (and optionally an image).

| Parameter   | Type                              | Default | Description                                                                                                                       |
| ----------- | --------------------------------- | ------- | --------------------------------------------------------------------------------------------------------------------------------- |
| `markdown`  | string                            | —       | Markdown content (required unless `inputPath` is set). Wins when both are provided.                                               |
| `inputPath` | string                            | —       | Absolute path to a local `.md` file                                                                                               |
| `format`    | `html` \| `png` \| `svg` \| `jpg` | `html`  | Output format. Image formats need Playwright                                                                                      |
| `filename`  | string                            | auto    | Output base name (sanitized; prefixed with `markmap-` if needed; reusing overwrites)                                              |
| `open`      | boolean                           | `false` | Whether to open the result in browser. **Only exposed when server open mode is `agent`** (`--open agent` / `MARKMAP_OPEN=agent`). |

**Return (`returnMode=path`):**

```json
{
  "htmlFilePath": "/path/to/markmap-….html",
  "filePath": "/path/to/markmap-….html"
}
```

For image formats, `filePath` is the image path and `htmlFilePath` is still the HTML source.

**Return (`returnMode=content`):** Raw HTML text block, or an MCP `image` content block (base64) for png/jpg/svg — no paths JSON. Oversized HTML (≥200KB) falls back to paths JSON.

**Return (`returnMode=both`):** Paths JSON plus the inline content above.

> **Note:** Interactive zoom/collapse and the in-page “Export PNG/JPG/SVG” buttons are part of the **HTML viewer**. Server-side `format: png|jpg|svg` is what Agents can consume directly without a manual browser click.

### `list_mindmaps`

List recent generated files in the output directory (newest first). Only files whose names start with `markmap` are included.

| Parameter | Type   | Default | Description                 |
| --------- | ------ | ------- | --------------------------- |
| `limit`   | number | `20`    | Max files to return (1–200) |

Returns `{outputDir, files: [{name, filePath, size, mtimeMs, mtime}]}`.

### `get_mindmap`

Retrieve a generated mind map file by its absolute path. Path must stay inside the configured output directory (path traversal denied).

| Parameter  | Type   | Default | Description                                        |
| ---------- | ------ | ------- | -------------------------------------------------- |
| `filePath` | string | —       | Absolute path to the mind map file (HTML or image) |

Returns JSON `{filePath, mimeType, size}`. For HTML/SVG under 200KB, also appends a text content block. PNG/JPG return metadata only (no image block) — re-export via `markdown_to_mindmap` with `format=png\|jpg` if pixels are needed.

### `cleanup_mindmaps`

Delete old (or all) generated mind map files.

| Parameter    | Type    | Default | Description                            |
| ------------ | ------- | ------- | -------------------------------------- |
| `maxAgeDays` | number  | `7`     | Delete files older than this many days |
| `all`        | boolean | `false` | If true, delete all markmap files      |
| `dryRun`     | boolean | `false` | If true, preview without deleting      |

### Prompt: `mindmap_from_content`

Helper prompt that asks the model to structure notes as Markdown, then call `markdown_to_mindmap`.

| Parameter | Type   | Default | Description                             |
| --------- | ------ | ------- | --------------------------------------- |
| `topic`   | string | —       | Topic or raw notes to organize as a map |

## Related Projects

| Project                                                                         | Description                                                                        |
| ------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- |
| **[MarkXMind Online](https://github.com/jinzcdev/markxmind)**                   | Create XMind mind maps with Markdown online. [Try it →](https://markxmind.js.org/) |
| **[Obsidian MarkXMind Plugin](https://github.com/jinzcdev/obsidian-markxmind)** | Render XMindMark syntax as XMind mind maps inside Obsidian.                        |

## License

This project is licensed under the [MIT](https://github.com/jinzcdev/markmap-mcp-server/blob/HEAD/LICENSE) License.

