mindlm-mcp について
mindlm-mcp は、テキスト、ウェブページ、ローカル PDF を編集可能なアウトラインとインタラクティブな HTML マインドマップに変換する MCP サーバー兼 CLI です。既定では API キーなしでクライアントの LLM が草案を仕上げ、ルールベースや設定済みモデルも利用できます。
主な機能
- 01テキスト、ウェブページ、PDF の処理
- 02Markdown アウトラインの生成
- 03単体 HTML マインドマップへの出力
- 04クライアント、ルール、LLM の生成モード
- 05MCP サーバーと CLI の提供
活用シーン
- 01記事やメモをマインドマップに整理
- 02PDF の内容を階層的なアウトラインに変換
- 03Markdown アウトラインを編集してオフライン HTML に出力
- 04コマンドラインで資料を処理
MCP 対応
テキスト、ウェブページ、PDF のアウトライン化ツール、HTML エクスポートツール、mindmap_outline プロンプトを MCP クライアントに提供します。既定モードでは草案とソーステキストを返し、API キーなしでクライアントの LLM が仕上げます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
npx -y mindlm-mcpMINDMAP_OUTPUT_DIRDirectory for exported HTML mind maps. Defaults to ./mindmaps.ANTHROPIC_API_KEYシークレットOptional. Set it to let the server write outlines with a model itself instead of handing a draft back to the client.OPENAI_API_KEYシークレットOptional. Same as ANTHROPIC_API_KEY, for any OpenAI-compatible endpoint.OPENAI_BASE_URLOptional. OpenAI-compatible endpoint. Defaults to https://api.openai.com/v1.MINDMAP_LLM_MODELOptional. Model name. Required when using an OpenAI-compatible endpoint.MINDMAP_ALLOW_PRIVATE_HOSTSOptional. Set to true to let url_to_mindmap reach loopback and private addresses. Off by default.ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
4掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| mode | enum | いいえ | auto(デフォルト):API キーが設定されていればそれを使用し、なければ "client" を使用します。client:草稿とソーステキストを取得し、自分でアウトラインを作成します。llm:サーバーが ANTHROPIC_API_KEY / OPENAI_API_KEY で設定されたモデルを呼び出します。heuristic:ルールベースのみで、モデルは使用しません。auto | client | llm | heuristic |
| text | string | はい | マッピングするテキストまたは Markdown。MINDMAP_MAX_INPUT_CHARS による上限があります(デフォルトは 200k)。 |
| title | string | いいえ | ルートノードのタイトル。省略するとソースから生成されます。 |
| export | boolean | いいえ | アウトラインをスタンドアロン HTML ファイルにもレンダリングし、そのパスを返します。 |
| language | string | いいえ | ノードラベルの言語。例:"English" または "中文"。デフォルトはソースの言語です。 |
| maxDepth | integer | いいえ | ルートを含む階層数(デフォルトは 4)。 |
| outputPath | string | いいえ | export が true の場合に HTML を書き込む場所です。ディレクトリを指定すると、ファイル名が自動生成されます。デフォルトは $MINDMAP_OUTPUT_DIR または ./mindmaps/ です。 |
| maxChildren | integer | いいえ | 各ノードに残す子ノードの数。超過分は "…(+N)" に折りたたまれます(デフォルトは 8)。 |
詳細
mindlm-mcp
テキスト、ウェブページ、PDFをインタラクティブなマインドマップに変換します。MCP サーバー であり コマンドラインツールでもあり、API キーは不要です。

npx -y mindlm-mcp demo
組み込みのサンプルを描画して開きます。ビルド手順もアカウントもキーも不要で、HTMLファイル1つだけです。
- 入力は3種類。 プレーンテキストまたはMarkdown、http(s)ページ、ローカルPDFです。
- 出力は2種類。 編集可能なMarkdownアウトラインと、オフラインで動作する単独のHTMLマインドマップ(markmap)です。すべてのスクリプトがインライン化されています。
- キーは不要。 MCP経由では、サーバーが下書きと整形済みのソーステキストをお使いのモデルに渡し、最終的なアウトラインの作成を任せます。サーバー自身にモデルを呼び出させたい場合に限り、ご自身のAPIキーを設定してください。アウトラインの作成方法をご覧ください。
ドキュメントとライブデモ:https://qingchejun.github.io/mindlm-io/ · ソース:https://github.com/qingchejun/mindlm-io
クイックスタート
どのクライアントでも同じコマンド npx -y mindlm-mcp serve を実行します。環境変数は不要です。以下の MINDMAP_OUTPUT_DIR は任意で、エクスポートしたファイルの保存先を指定します。
Claude Code
claude mcp add mindlm -- npx -y mindlm-mcp serve
--scope project を指定すると1つのプロジェクトに適用されます。環境変数は -e で渡します。
claude mcp add mindlm -e MINDMAP_OUTPUT_DIR=~/Documents/mindmaps -- npx -y mindlm-mcp serve
claude mcp list またはセッション内で /mcp を実行して確認します。
Claude Desktop
以下を claude_desktop_config.json に追加し、アプリを再起動します。
{
"mcpServers": {
"mindlm": {
"command": "npx",
"args": ["-y", "mindlm-mcp", "serve"],
"env": {
"MINDMAP_OUTPUT_DIR": "~/Documents/mindmaps"
}
}
}
}
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
Cursor
同じ設定ブロックを ~/.cursor/mcp.json(すべてのプロジェクト)または .cursor/mcp.json(1つのプロジェクト)に追加します。
{
"mcpServers": {
"mindlm": {
"command": "npx",
"args": ["-y", "mindlm-mcp", "serve"]
}
}
}
3種類すべての設定例は examples/configs/ にあり、そのままコピーできます。
続けて、「このPDFのマインドマップを作って」「https://example.com/article をマップして」のように普通の言葉で依頼すると、クライアントが適切なツールを選びます。
ツール
ツールは4つあり、常にこの順番で公開されます。3つの *_to_mindmap ツールはMarkdownアウトラインを返し、export_mindmap はアウトラインをHTMLファイルに変換します。すべての結果には、読みやすいテキストブロックと structuredContent の両方が含まれます。
text_to_mindmap
すでにあるテキストやMarkdownのアウトラインを処理します。下書き、メモ、文字起こし、貼り付けた章などが対象です。
| フィールド | 型 | 備考 |
|---|---|---|
text | string, required | マッピングする内容です。MINDMAP_MAX_INPUT_CHARS による上限があります。 |
mode | auto | client | llm | heuristic | デフォルトは auto です。 |
title | string | ルートノードのタイトルです。省略するとソースから取得します。 |
maxDepth | int 2–6 | ルートを含む階層数です。デフォルトは4です。 |
maxChildren | int 3–15 | ノードごとに保持する子ノードの数です。デフォルトは8です。 |
language | string | 例:"English"、"中文"。デフォルトではソースの言語を使用します。 |
export | boolean | HTMLファイルもレンダリングし、そのパスを返します。 |
outputPath | string | ファイルの保存先です。 |
入力:
{
"text": "# Tides\n\nSpring tides are the largest of the month.\n\n## Neap\n\nNeap tides are the smallest.\n"
}
structuredContent(APIキーなしのデフォルトの auto モード、つまり client モード):
{
"title": "Tides",
"markdown": "# Tides\n\n## Spring tides are the largest of the month.\n\n### Neap\n- Neap tides are the smallest.\n",
"mode": "client",
"stats": { "inputChars": 79, "nodes": 4, "depth": 4, "truncated": false },
"sourceText": "# Tides\n\nSpring tides are the largest of the month.\n\n## Neap\n\nNeap tides are the smallest.",
"instructions": "This is a DRAFT outline produced by a rule-based algorithm. …"
}
"mode": "heuristic" を指定した場合(またはAPIキーによって "llm" になった場合)、結果から sourceText と instructions が除かれます。アウトラインは完成済みで、そのままエクスポートできます。
url_to_mindmap
ページを取得し、主な内容をアウトラインにまとめます。記事のテキストは
Readability で抽出し、ナビゲーション、フッター、定型文は
除外されます。ページ上の付随要素も除外されます。参照マーカー([1])、「[編集」リンク、記事の上にある注記、画像のキャプション、ナビゲーションボックス、末尾の 関連項目/参考文献/注記/
さらに読む/外部リンク/書誌情報 の各セクションは、内容ではなくリンク一覧のため除外されます。
PDF を配信する URL は、自動的に PDF パイプラインに渡されます。
| フィールド | 型 | 備考 |
|---|---|---|
url | 文字列、必須 | http(s) のみ。プライベートアドレスとループバックアドレスは拒否されます。 |
| … | text_to_mindmap のすべてのオプションも指定できます。 |
入力:
{ "url": "https://example.com/tide-tables", "mode": "heuristic" }
structuredContent には、テキストの取得元を説明する source ブロックが追加されます。
{
"title": "Tide tables",
"markdown": "# Tide tables\n\n## Spring tides …\n\n## Neap tides …\n",
"mode": "heuristic",
"stats": { "inputChars": 1042, "nodes": 9, "depth": 3, "truncated": false },
"source": {
"url": "https://example.com/tide-tables",
"finalUrl": "https://example.com/tide-tables",
"title": "Tide tables",
"siteName": "Example",
"fetchedAt": "2026-09-27T10:21:04.512Z",
"contentType": "text/html"
}
}
pdf_to_mindmap
ローカル PDF を読み込み、しおりがある場合は、それを骨組みとして使用します。PDF は段落ではなく位置情報付きの行を保存するため、文を分割する前に、段落内で折り返された行を結合します。そうしないと、ブラウザーの「PDF に印刷」で「酸素を 放出する。」のように、文全体ではないノードが生成されます。
| フィールド | 型 | 備考 |
|---|---|---|
path | 文字列、必須 | ローカル PDF へのパス。~ は展開されます。 |
pages | 文字列 | 1 始まりのページ指定:「1-20」、「3」、「1-5,9」。デフォルトではすべてのページが対象です。 |
| … | text_to_mindmap のすべてのオプションも指定できます。 |
入力:
{ "path": "~/papers/attention.pdf", "pages": "1-12", "mode": "heuristic" }
structuredContent:
{
"title": "mindlm-mcp PDF fixture",
"markdown": "# mindlm-mcp PDF fixture\n\n## 1. Introduction\n\n### Mind maps turn a wall of prose into something you can scan…\n",
"mode": "heuristic",
"stats": { "inputChars": 769, "nodes": 12, "depth": 4, "truncated": false },
"source": { "path": "/home/you/papers/attention.pdf", "totalPages": 3, "hasOutline": true }
}
export_mindmap
Markdown のアウトラインを、単独で使用できる HTML マインドマップに変換します。あなた(またはモデル)がアウトラインを作成した後に呼び出してください。指定しない限り、既存のファイルは上書きされません。
| フィールド | 型 | 備考 |
|---|---|---|
markdown | 文字列、必須 | ルートは # を 1 つ、その後に ##/### と - の箇条書きを指定します。 |
title | 文字列 | ページタイトル。デフォルトではアウトラインのルートが使用されます。 |
outputPath | 文字列 | ファイル、またはファイル名を生成するディレクトリ。 |
offline | 真偽値 | すべてのスクリプトをインライン化します。デフォルトは true です。 |
toolbar | 真偽値 | ズーム/全体表示/展開ツールバー。デフォルトは true です。 |
initialExpandLevel | 整数 −1–6 | 開いたときに展開するレベル。-1 はすべて展開します。 |
colorFreezeLevel | 整数 0–6 | このレベルより下では枝の色を変更しません。 |
maxWidth | 整数 0–2000 | ノードの最大幅(ピクセル)。0 は無制限です。 |
overwrite | 真偽値 | ファイルが存在する場合に置き換えます。デフォルトは false です。 |
returnHtml | 真偽値 | 結果にドキュメント全体を含めます。デフォルトは false です。 |
branding | 真偽値 | 小さな「Made with mindlm-mcp」フッターリンクを追加します。デフォルトは false です。 |
入力:
{
"markdown": "# Tides\n\n## Spring\n\n- Sun and moon in line\n\n## Neap\n\n- At right angles\n"
}
structuredContent:
{
"path": "/home/you/mindmaps/tides-20260927-183322.html",
"fileUrl": "file:///home/you/mindmaps/tides-20260927-183322.html",
"bytes": 344349,
"nodes": 5,
"offline": true
}
プロンプト
サーバーは mindmap_outline というプロンプトも 1 つ公開します。このプロンプトは、(指定された language があればその言語で)アウトラインのルールを返し、その後に export_mindmap を呼び出すよう指示します。
コマンドライン
クライアントを使わずに同じパイプラインを実行します。引数を指定せず、ターミナルにも接続されていない場合、mindlm-mcp
は MCP サーバーを起動します。これは MCP クライアントが求める動作です。
mindlm-mcp demo # render a built-in example and open it
mindlm-mcp text notes.md -o notes.html # a file, or "-" to read stdin
mindlm-mcp url https://example.com/article --open
mindlm-mcp pdf paper.pdf --pages 1-20
mindlm-mcp export outline.md -o map.html # an outline you wrote yourself
mindlm-mcp serve # MCP server on stdio
mindlm-mcp doctor # runtime, LLM config, output directory
| コマンド | 動作 |
|---|---|
serve | stdio で MCP サーバーを起動します。 |
demo | 組み込みのサンプルをレンダリングします(ブラウザーを開かない場合は --no-open を指定します)。 |
text <file> | .txt/.md ファイル、または標準入力の場合は - のアウトラインを作成します。 |
url <url> | ページを取得し、主要な内容のアウトラインを作成します。 |
pdf <file> | ローカルの PDF のアウトラインを作成します。 |
export <outline> | 既存の Markdown アウトラインをレンダリングします。 |
doctor | 設定内容とファイルの書き込み先を表示します。 |
変換コマンドのオプション:
| オプション | 意味 |
|---|---|
-o, --output <path> | 指定した場所に書き込みます。.md パスにはアウトラインを、.html パスにはマインドマップを書き込みます。 |
--title <title> | ルートノードのタイトルとページタイトルを指定します。 |
--md | Markdown アウトラインを標準出力に表示します。 |
--mode <auto|llm|heuristic> | アウトラインの作成方法を指定します。 |
--depth <n> / --max-children <n> | ツリーの形状を指定します。 |
--lang <language> | ノードラベルの言語を指定します。 |
--provider <anthropic|openai> / --model <name> | LLM の設定を上書きします。 |
--no-offline | CDN アセットをインライン化せず、リンクします。 |
--no-toolbar | マインドマップのツールバーを非表示にします。 |
--open | 結果をブラウザーで開きます。 |
--overwrite | 出力ファイルが存在する場合、置き換えます。 |
--branding | 「Made with mindlm-mcp」のフッターリンクを追加します。 |
-q, --quiet | 結果のみを表示し、進行状況は表示しません。 |
--env-file <path> | 最初にファイルから環境変数を読み込みます。 |
スクリプトで利用する結果(ファイルパスやアウトラインなど)は標準出力に、進行状況と診断情報は標準エラー出力に送られます。終了コード:0 正常、1 使用方法のエラー、2 入力エラー、3 LLM エラー。
小規模なプログラム用 API もあります。パッケージのルートから textToOutline、urlToOutline、pdfToOutline、renderMindmapHtml、exportMindmap をエクスポートしています。
アウトラインの作成方法
ツリーに何を含めるかを決めるのが難しい部分で、その方法は 3 つあります。どの方法でも、キーを用意する必要はありません。
| モード | 使用される条件 | 動作 |
|---|---|---|
client | キーがない場合のMCP のデフォルト | サーバーはルールベースの下書き、整形済みのソーステキスト、指示を返します。クライアントのモデル、つまりすでに会話に使っているモデルがアウトラインを書き直し、export_mindmap を呼び出します。クライアントがすでに参照している情報以外は、何もマシンの外に送信されません。 |
heuristic | キーがない場合のCLI のデフォルト | ルールのみを使い、ネットワークには接続しません。見出しを枝に、スコア付けした文を葉にします。高速で決定的に動作し、オフラインで利用できます。 |
llm | ANTHROPIC_API_KEY または OPENAI_API_KEY が設定されている場合 | サーバー自身が、お客様のキーとお客様のエンドポイントを使い、通常の fetch で該当するモデルを呼び出します。呼び出しに失敗した場合は、ヒューリスティックによる下書きにフォールバックします。 |
mode: "auto"(すべての場所でのデフォルト)は、該当する行のモードを選択します。MCP では mode、CLI では --mode を指定して、いつでもモードを強制できます。mindlm-mcp doctor を実行すると、現在 auto がどのモードに解決されるかを確認できます。
これらの機能の背後にホスト型サービスはありません。テレメトリー、更新確認、ホームへの通信もありません。
設定
すべての変数は任意です。.env.example を .env にコピーし、--env-file .env を明示的に指定して渡してください。自動的に読み込まれることはありません。または、MCP クライアントの env ブロックに変数を設定してください。
| 変数 | デフォルト | 説明 |
|---|---|---|
MINDMAP_OUTPUT_DIR | ./mindmaps | エクスポートした HTML ファイルの保存先です。~ は展開されます。 |
MINDMAP_LLM_PROVIDER | 自動検出 | anthropic または openai です。設定されているキーに基づいて推定されます。 |
ANTHROPIC_API_KEY | — | auto を llm モードに切り替えます。 |
OPENAI_API_KEY | — | OpenAI 互換エンドポイントの場合も同様です。 |
OPENAI_BASE_URL | https://api.openai.com/v1 | OPENAI_API_KEY とともに使用するエンドポイントです。 |
MINDMAP_LLM_MODEL | Anthropic の場合は claude-sonnet-5-5 | モデル名です。OpenAI 互換エンドポイントでは、汎用的に使えるモデル名がないため、必須です。 |
MINDMAP_ALLOW_PRIVATE_HOSTS | false | url_to_mindmap が localhost およびプライベートネットワークにアクセスできるようにします。 |
MINDMAP_MAX_INPUT_CHARS | 200000 | 1 つの入力から読み取る文字数の上限です。 |
MINDMAP_CLIENT_MAX_CHARS | 60000 | client モードで返されるソーステキストの文字数の上限です。 |
エクスポートされる HTML
ダブルクリックで開ける単一のファイルです。デフォルトでは、すべてのスクリプトとスタイルシート(d3、markmap-view、ツールバー)がインライン化されるため、ネットワークに接続できない環境や、CDN が移転した 5 年後でもマップは動作します。ファイル 1 つあたり約 340 KB になります。CDN のコピーをリンクする場合は、offline: false(--no-offline)を指定してください。
KaTeX と highlight.js の markmap プラグインは意図的に無効にしています。どちらも CDN からスタイルシートを読み込むため、「オフライン」エクスポートが気づかないうちに機能しなくなる可能性があります。アウトライン内の生の HTML はレンダリングされません(markdown-it は html: false で実行されるため)。そのため、悪意のあるページから抽出したテキストが、開いたファイルにスクリプトを注入することはできません。
エクスポートには、デフォルトで帰属表示はありません。必要であれば、--branding / branding: true を指定すると、フッターに短い行が追加されます。
制限事項
- JavaScript のみで表示されるページ。
url_to_mindmapはサーバーから送信された HTML を読み取ります。クライアント側でコンテンツをレンダリングするシングルページアプリは、空またはほぼ空の結果になります。その場合はテキストをコピーして、代わりにtext_to_mindmapを使用してください。ヘッドレスブラウザーはありません。 - スキャンされた PDF。 PDF には実際のテキストレイヤーが必要です。スキャン画像や画像のみのエクスポートは、明確なエラーとともに拒否されます。OCR 機能はありません。
- 長いドキュメントは分割されず、
MINDMAP_MAX_INPUT_CHARSで切り捨てられます。 長い PDF ではpagesを使用するか、セクションごとにマップを作成してください。 - ヒューリスティックによる結果は下書きです。 文の位置と用語の頻度に基づいて文を順位付けします。安定していて高速ですが、誤った文を選ぶこともあります。まさにそのために
clientモードがあります。 - ペイウォール、ログイン、robots。 フェッチャーは Cookie を送信せず、ログインもしません。
セキュリティ
- SSRF ガード。
url_to_mindmapは最初にホストを名前解決し、MINDMAP_ALLOW_PRIVATE_HOSTS=trueを設定しない限り、ループバック、プライベート、リンクローカル(169.254.169.254のクラウドメタデータアドレスを含む)、CGNAT、マルチキャストの各範囲へのアクセスを拒否します。http:とhttps:のみ受け付けます。 - 制限。 フェッチするレスポンスは最大 5 MB、タイムアウトは 15 秒、リダイレクトは最大 5 回です。PDF は最大 50 MB/300 ページで、すべての入力に文字数上限があります。
- テレメトリーなし、更新チェックなし、ホスト型バックエンドなし。 ネットワーク通信は、指定した URL と、キーを設定した場合に限り、ご自身の LLM エンドポイントとの通信だけです。
- エクスポートに生の HTML は含まれず、インライン化された JSON 内の
</script>はエスケープされます。 - 脆弱性の報告と、既知の DNS リバインディングに関する注意事項:SECURITY.md。
公開用素材とディレクトリへの掲載
このセクションは、アウトリーチ責任者が管理するプレースホルダーです。 告知文、awesome-list への掲載項目、MCP ディレクトリへの登録(mcp.so、Glama、Smithery、PulseMCP、公式 MCP Registry)は docs/launch.md で管理しており、このファイルでは意図的に空欄にしています。
コントリビューション
Issue やプルリクエストを歓迎します。CONTRIBUTING.md をご覧ください。Node ≥ 22.12 が必要です。
npm ci && npm run lint && npm run typecheck && npm test && npm run build
フル機能のエディターが必要ですか?
mindlm-mcp は、意図的にシンプルに作られています。アウトラインを入力すると、HTML ファイルが 1 つ出力されます。その後もマップを編集したい場合(ノードの移動、ブランチのスタイル変更、共同作業、マップのライブラリの管理など)は、mindlm.io をご利用ください。このパッケージは単独で完全に動作し、mindlm.io と通信することはありません。
ライセンス
MIT © 2026 青澈君
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。