One MCP, many parsers について
parse-mcpは、ファイルやURLの解析先をmarkitdown、Docling、LlamaParseの間で振り分けるMCPサーバーです。解析結果のノート化や検索向け分割に加え、テキストをClaudeに渡して解釈できます。
主な機能
- 013つのバックエンドで解析を振り分け
- 02失敗・空結果時のフォールバック
- 03解析結果をVaultのノートに保存
- 04解析テキストをClaudeで解釈
- 05文書種別に応じたテキスト分割
- 06出力と処理時間の比較
活用シーン
- 01スキャンPDFの解析をDoclingに切り替え
- 02文書をMarkdownノートに変換
- 03検索用に文書テキストを分割
- 04同じ入力でパーサーを比較
MCP 対応
解析、変換、解釈、分割、診断のツールをMCPクライアントに公開します。任意のバックエンドはルーターが選択または切り替え、利用できないものはスキップします。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
parse-mcp
1つのMCPで、さまざまなパーサーを利用できます。デフォルトはmarkitdown(無料、高速、MIT)です。markitdownの品質が十分でない場合は、Docling(表の多い文書、スキャン済みPDF)やLlamaParse(クラウド、BYOK)に切り替えられます。さらに、解析したMarkdownをClaudeに渡して「要約/Xを抽出」するinterpretツールも用意されているため、パーサーやanthropicのスキルを使い分ける手間がなくなります。
インストール
Claude Codeを開き、次のコマンドを貼り付けます。
/plugin marketplace add adelaidasofia/parse-mcp
/plugin install parse-mcp@parse-mcp
旧方式でのインストール
手動インストール(プラグインマーケットプレイス導入前の方式)です。詳細はSETUP.mdを参照してください。
pip3 install --break-system-packages -r requirements.txt
pip3 install --break-system-packages 'markitdown[pdf,docx,pptx,xlsx]'
次に、クライアントの.mcp.jsonにサーバーを登録します。
{
"mcpServers": {
"parse": {
"command": "python3",
"args": ["/absolute/path/to/parse-mcp/server.py"]
}
}
}
ツール
| ツール | 機能 |
|---|---|
parse(source, backend?, hints?) | ファイルパスまたはhttp(s) URLをMarkdownに変換します。ルーターがバックエンドを選択し、結果が空、またはエラーの場合はフォールバックします。試行したすべてのバックエンドの履歴とMarkdownを返します。 |
parse_url(url, backend?) | HTTP(S)入力用のショートカットです。戻り値の形式はparseと同じです。 |
parse_to_vault(source, vault_folder?, backend?, overwrite?) | 解析した結果をVaultのMarkdownノートとして書き込みます。デフォルトのフォルダーは<VAULT_ROOT>/📥 Inbox/Converted/です。フロントマターにはsource、format、backend、latency、bytes_inが記録されます。単独のmarkitdown_to_vault.pyシェルスクリプトを置き換えます。 |
interpret(source, instruction, backend?, model?, max_tokens?) | まず解析し、解析済みのMarkdownをClaudeに渡して指示を実行します。キャッシュにヒットした場合、解析済みテキストが再利用されるため、入力トークンは無料です。 |
list_backends() | インストール済みおよび未インストールのバックエンドを表示します。診断用です。 |
benchmark(source) | 利用可能なすべてのバックエンドで同じ入力を処理します。レイテンシーと出力を並べて比較できます。 |
chunk_text(text, doc_type?, target_tokens?, max_tokens?, min_tokens?) | 文書タイプに応じたチャンク分割器を使って、解析済みMarkdownを検索向けのチャンクに分割します。doc_type="auto"(デフォルト)では構造を検出し、paper/book/manual/qa/resume/table/defaultから適切なタイプを選びます。各分割器は文書の形状を考慮します(例:paperはabstract全体を1つにまとめ、manualは番号付きセクションをまたいで結合せず、qaは各質問と回答をペアにします)。チャンクと解決済みのdoc_typeを返します。chunkers/パッケージを参照してください。 |
detect_doc_type(text) | 診断用です。Markdownに対して構造的ヒューリスティックを実行し、chunk_textが選択するdoc_typeを返します。 |
バックエンド(優先順位順)
- markitdown(デフォルト、MIT、基本インストールに含まれます)。PDF、DOCX、PPTX、XLSX、HTML、CSV、JSON、XML、EPub、ZIPに対応します。高速で決定論的です。
- docling(オプション、
pip install docling)。複雑な表(ベンチマークで97.9%)やスキャン済みPDFに最適です。初回実行時にモデルの重みをダウンロードします。 - llamaparse(オプション、BYOK、
pip install llama-cloud-services+LLAMA_CLOUD_API_KEY)。クラウド型で、視覚的に複雑なPDFを最もきれいに出力します。
ルーティング戦略
backend引数なしでparse(source)を呼び出すと、ルーターがファイル形式に基づいてバックエンドを選びます。バックエンドでエラーが発生するか、空の結果が返された場合はフォールバックします。parse(source, backend="docling")のように呼び出すと、特定のバックエンドを強制的に使用し、フォールバックは行いません。診断モードです。- 利用できないバックエンドはスキップされ(チェーン内にログとして記録されます)、エラーにはなりません。
パース忠実度の評価
上記のルーティングテーブルは、以前は推測に基づいていました。tests/eval/ では、合成フィクスチャコーパス(デジタル PDF、スキャン/画像のみの PDF、表が多い文書、複数段組み、ラスター画像の各クラスにまたがる16件の文書)と、そこから作成したグラウンドトゥルースの Markdown を使って、これをデータで検証します。各バックエンドの出力を、OmniDocBench/PubTabNet の3つの指標(テキスト編集距離、表の TEDS(木編集距離の類似度)、読み取り順序)で評価します。すべてのスコアは品質を [0, 1] で表し、値が高いほど良好です。
主な結果(全表は tests/eval/parse_fidelity_matrix.md):
| 文書クラス | markitdown(テキスト) | docling(テキスト) |
|---|---|---|
| digital_pdf | 0.95 | 0.97 |
| table_heavy | 0.93 | 0.89 |
| scanned_pdf | 0.00 | 0.87 |
| image | 0.00 | 0.90 |
| multicolumn | 0.35 | 1.00 |
markitdown は、デジタル形式のきれいなテキストや表の処理に優れています(無料、高速、決定論的)。しかし OCR は行わないため、スキャンされた PDF や画像のスコアはゼロで、複数段組みのレイアウトも入り交じってしまいます。docling はモデルの重みのダウンロードが必要ですが、OCR とレイアウト分析によりすべてのクラスで優れています。これが、形式優先のチェーン(画像、スキャン、複数段組みの文書では docling を優先する)の根拠です。
実行方法:
pip install docling # the escalation backend under test
python tests/eval/generate_fixtures.py # rebuild the corpus (needs fpdf2 + Pillow)
make eval # -> parse_fidelity_matrix.{md,json}
このマトリックスには 来歴(バックエンド、Python のバージョン、フィクスチャセットのハッシュ)が記録されるため、結果が古くなっていることが分かります。パースバックエンドをアップグレードまたは再調整した場合は、make eval で再生成してください。また、バックエンドごとの 中央値レイテンシ(コストの指標)も報告されます。忠実度が最も高いバックエンド(docling)はデフォルトよりはるかに遅いため、ルーターはこれをデフォルトにはせず、必要に応じて切り替えます。
スコアラーの指標テストは純粋な Python で実装され、バックエンドに依存しないため、pytest tests/ では基本インストール(markitdown のみ)で CI のゲートを実行できます。「markitdown には OCR がない」という前提を崩すルーティングのリグレッションがあると、ビルドは失敗します。
アーキテクチャ
FastMCP v3.2.3 以降、stdio トランスポート、Python 3.13 以降を使用します。[VAULT_ROOT]/.mcp.json に登録します。デーモンやリスナーはなく、デフォルトではモデルの重みもダウンロードされません。
インストールとバックエンドごとのオプトインについては、SETUP.md を参照してください。
関連する MCP
同じ作者、同じアーキテクチャパターン(FastMCP、書き込み時のドラフト+確認、該当する場合は Vault への自動エクスポート):
- slack-mcp — 複数の Slack ワークスペース
- imessage-mcp — macOS の iMessage
- whatsapp-mcp — whatsmeow 経由の WhatsApp
- apollo-mcp — Apollo.io の CRM とシーケンス
- google-workspace-mcp — Gmail/Calendar/Drive/Docs/Sheets
- substack-mcp — Substack の執筆と分析
テレメトリー
このプラグインは、あるマシン上で Claude Code のセッションに初めて読み込まれたとき、匿名のインストールシグナルを1回だけ myceliumai.co に送信します。
送信される情報:
- プラグイン名(例:
slack-mcp) - プラグインのバージョン(例:
0.1.0)
送信されない情報:
- ユーザー識別子、氏名、メールアドレス、トークン、API キーは送信されません
- ファイルパス、メッセージ内容、業務に関する情報は送信されません
- 重複排除処理後に IP アドレスが保存されることはありません
目的: メンテナーが実際にインストールされているプラグインを把握し、使われているプラグインに注力できるようにします。
オプトアウト: Claude Code を起動する前に、環境変数 MYCELIUM_NO_PING=1 を設定してください。フックはネットワーク呼び出しを完全にスキップします。すでにシグナルが送信されたインストール環境では、~/.mycelium/onboarded-<plugin> にセンチネルファイルが作成されます。状態をリセットする場合は削除してください。
ライセンス
MIT。LICENSE を参照してください。
インストール全体版またはチーム版については、diazroa.com をご覧ください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。