ClaudeにDocling MCPでローカル文書変換を任せる設定手順
Docling MCPをClaude CodeとClaude Desktopに登録し、PDFをローカルで構造化変換させる手順。リモート変換への切り替えと、公式2ページで食い違う環境変数も比べます。
Docling MCPは、文書変換ライブラリ「Docling」をMCPサーバーとして公開するものです。Claudeに「このPDFを構造化して」と頼むと、手元のファイルをDoclingで変換した結果が返ります。設定の本体は、設定ファイルに足すuvxで起動する1エントリです。
ただし、公式の利用ページとリポジトリのREADMEで、環境変数の接頭辞と既定の変換モードの書き方が食い違っています。ここを押さえずにリモート変換へ切り替えると、設定したつもりの値が効かない恐れがあります。
Docling MCPでClaudeにできること
DoclingのMCPサーバーは、PDFをDoclingDocumentという構造化JSONに変換するツールと、文書を組み立てて書き出す生成ツールを提供します。READMEの機能一覧には、次の項目が並びます。
- PDFの構造化JSON(DoclingDocument)への変換
- DoclingDocument形式での文書生成と、複数形式への書き出し
- ローカルファイルとURLを入力にできること
- 変換結果のローカルキャッシュと、大きな文書向けのメモリ管理
- Milvusへのアップロードと検索を使うRAG用途
変換を頼むときのプロンプト例もREADMEにあります。ファイルパスを渡して、DoclingDocumentへの変換とドキュメントキーの返却を求める形です。
Convert the PDF document at <ファイルパス> into DoclingDocument and return its document-key.返ってくるのはドキュメントキーです。以降の「Markdownに書き出して」といった依頼は、このキーで同じ変換結果を参照します。キャッシュは既定で10文書まで保持され、上限に達すると最も長く使われていない文書から捨てられます(DOCLING_MCP_CACHE_MAX_DOCUMENTS)。
登録に要るもの
必要なのはuvxだけです。公式の設定は、PyPIのパッケージdocling-mcpをuvx経由で都度起動する形をとります。READMEによれば、docling-mcpの3.0.0以降はMCP Python SDKのv2系が前提です。接続元のクライアントがSDK v2に未対応なら、pip install "docling-mcp<3.0.0"で3.0未満に固定する手順が案内されています。
Claude Desktopに登録する
Claude Desktopでは、設定ファイルclaude_desktop_config.jsonに次のエントリを足します。公式ページの記載と同じ内容です。
{
"mcpServers": {
"docling": {
"command": "uvx",
"args": [
"--from=docling-mcp",
"docling-mcp-server"
]
}
}
}転送方式は--transportで選べます。READMEはClaude for DesktopとLM Studioではstdio、Llama Stackではsse、コンテナ構成ではstreamable-httpという使い分けを挙げています。Claude Desktopに足すだけなら、引数の追加は要りません。
Claude Codeに登録する
Claude Codeでは、JSONを直接編集せずclaude mcp addで足せます。Docling側のJSONと同じ内容を渡すならadd-jsonが近道です。
claude mcp add-json --scope project docling \
'{"command":"uvx","args":["--from=docling-mcp","docling-mcp-server"]}'Claude Code v2.1.296で、空の設定ディレクトリに追加したところ、プロジェクト直下の.mcp.jsonに次のエントリが書き込まれました。
{
"mcpServers": {
"docling": {
"command": "uvx",
"args": [
"--from=docling-mcp",
"docling-mcp-server"
]
}
}
}JSONの中身はDoclingの公式例と同一で、そのまま通ります。--scope projectにすると.mcp.jsonをリポジトリに入れてチームで共有できます。ただし共有先のメンバー全員にuvxが要ります。ローカル起動のMCPを共有するときの考え方はローカルMCPとリモートMCP、Claude Codeでどちらを選ぶかにまとめています。
環境変数を渡す場合は、claude mcp addの引数の順序に落とし穴があります。サーバー名の直前に--envを置くと、名前まで環境変数として読まれて失敗します。
# 失敗する並び(--env の直後にサーバー名)
claude mcp add --scope project --env DOCLING_MCP_CONVERSION_MODE=local docling -- uvx --from 'docling-mcp[local]' docling-mcp-server
# → Invalid environment variable format: docling, ...
# 通る並び(--env と名前の間に別のオプションを挟む)
claude mcp add --scope project --env DOCLING_MCP_CONVERSION_MODE=local \
--transport stdio docling -- uvx --from 'docling-mcp[local]' docling-mcp-server1つ目の並びは、手元でInvalid environment variable format: docling, environment variables should be added as: -e KEY1=value1 -e KEY2=value2と拒否されました。Claude Codeの公式ドキュメントにも、--envの直後にサーバー名を置くと別のペアとして読まれる旨の注記があります。2つ目の並びでは、.mcp.jsonに"type": "stdio"とenvブロックが書かれました。
追加後はclaude mcp listか、セッション内の/mcpで接続状況を確認します。
変換をローカルにするか、リモートにするか
Doclingの変換は、手元のマシンで実行する方法と、Docling Serveという別のAPIサーバーに任せる方法があります。リモートのAPIは、自前でホストするdocling-serveでも、マネージドのサービスでも構いません。
変換の実行場所
ローカル変換
文書が手元から出ません。docling-mcp[local]でローカル変換の依存を入れます。図の説明生成(後述)のように重い処理は、手元のCPUで動きます。
リモート変換
pip install docling-mcpだけの軽い構成です。READMEはこちらを「Recommended - Lightweight」としています。URLとAPIキーを環境変数で渡します。
READMEには、リモートを主にしてローカルを予備にする「ハイブリッド」構成もあります。docling-mcp[local]を入れたうえでDOCLING_MCP_FALLBACK_TO_LOCAL=trueを足すと、サービスに届かないときだけローカルへ切り替わります。
契約書や社内資料のように文書を外に出したくない用途では、ローカル変換を明示します。リモートを主にした構成では、変換のたびに文書が接続先のサービスへ送られます。フォールバックは、そのサービスに届かないときだけ手元の処理へ切り替える仕組みです。手元のデータをMCPで読ませる別の例として、DuckDB / MotherDuck MCPサーバーがあります。
公式2ページで食い違う点
Docling公式の利用ページとリポジトリのREADMEは、同じ設定項目を別の書き方で説明しています。
| 項目 | 公式の利用ページ | リポジトリのREADME |
|---|---|---|
| 環境変数の接頭辞 | 公式の利用ページDOCLING_ | リポジトリのREADMEDOCLING_MCP_ |
| 接続先URL | 公式の利用ページDOCLING_SERVICE_URL | リポジトリのREADMEDOCLING_MCP_SERVICE_URL |
| 変換モード | 公式の利用ページDOCLING_CONVERSION_MODE=remote | リポジトリのREADMEDOCLING_MCP_CONVERSION_MODE |
| 既定の変換 | 公式の利用ページローカル | リポジトリのREADMEremote(要・接続先URL) |
| フォールバック | 公式の利用ページDOCLING_FALLBACK_TO_LOCAL=true | リポジトリのREADMEDOCLING_MCP_FALLBACK_TO_LOCAL(既定false) |
READMEは「すべての設定はDOCLING_MCP_接頭辞を使う」と明記し、変換モードの既定値をremoteと表に載せています。一方、利用ページは「既定ではローカルで変換する」と書いています。2つのページの記述からは、どちらが現行のバージョンの挙動なのかを決められません。
実務での避け方は2つです。
- 変換モードは必ず明示する。
localと書いておけば、既定値がどちらでも挙動は変わらない - 接頭辞は、入れた版のREADMEに合わせる。
docling-mcpの3.x系のREADMEはDOCLING_MCP_を前提にしている
接頭辞の効きは、envブロックに入れた値で変換の挙動が変わるかを、実際にファイルを1つ変換して確かめるのが確実です。Claude側の設定は次のようになります。
{
"mcpServers": {
"docling": {
"command": "uvx",
"args": ["--from=docling-mcp[local]", "docling-mcp-server"],
"env": {
"DOCLING_MCP_CONVERSION_MODE": "local"
}
}
}
}リモートに切り替えるときは、同じenvブロックにURLとキーを足します。キーをファイルに直書きするとリポジトリに混入しやすいので、.mcp.jsonを共有する構成では、個人の設定だけ--scope localか--scope userに置く運用が安全です。
"env": {
"DOCLING_MCP_CONVERSION_MODE": "remote",
"DOCLING_MCP_SERVICE_URL": "https://your-docling-service.example.com",
"DOCLING_MCP_SERVICE_API_KEY": "your-api-key-here"
}変換の挙動を環境変数で変える
READMEには、変換パイプラインを調整する変数が並びます。ローカル・リモートの両方に効くものを抜き出します。
| 変数 | 既定 | 効果 |
|---|---|---|
DOCLING_MCP_DO_OCR | 既定true | 効果OCRを実行する |
DOCLING_MCP_DO_TABLE_STRUCTURE | 既定true | 効果表の構造を検出する |
DOCLING_MCP_KEEP_IMAGES | 既定false | 効果ページ画像を出力に残す |
DOCLING_MCP_DO_PICTURE_DESCRIPTION | 既定false | 効果図に視覚言語モデルで説明文を付ける |
DOCLING_MCP_IMAGE_EXPORT_MODE | 既定placeholder | 効果Markdown内の画像の書き出し方 |
Markdownへの書き出しでは、画像は既定でプレースホルダーのコメント(<!-- image -->)になります。画像を含めたいときはembedded(base64のデータURI)かreferenced(ファイルパスまたはURL)を選びます。
図の説明生成を有効にすると、文書内の図1枚ごとに推論が走ります。READMEは、CPUで動かすノートPCでは変換時間が大きく伸びると注意しています。対策は2段あります。
- リモート変換では、
DOCLING_MCP_SERVICE_TIMEOUT(既定300秒)を延ばす - クライアント側にもタイムアウトがあるため、そちらも延ばす
Claude Code側のタイムアウトは、サーバーごとのtimeout(ミリ秒)で指定します。この値は1回のツール呼び出しの実時間の上限で、サーバーからの進捗通知では延びません。たとえば10分なら"timeout": 600000です。スキャンPDFの大量変換のように時間がかかる依頼は、先にこの2つの値を揃えておくと途中で切れにくくなります。
起動で詰まったときの切り分け
uvxは初回に依存を解決してからサーバーを起動します。Claude Codeにはサーバー起動のタイムアウトをMCP_TIMEOUTで延ばす仕組みがあり、たとえばMCP_TIMEOUT=10000 claudeで10秒を指定できます。Claude Desktopで「起動が間に合わない」旨のエラーが出る場合は、Not ready after 60 secondsエラーの原因の切り分けが参考になります。stdioサーバーを複数登録している場合の起動の並びは、MCP_SERVER_CONNECTION_BATCH_SIZEでstdio MCPの起動並列数を変えるで扱っています。
変換結果が大きいときは、出力の上限にも当たります。Claude Codeは、MCPツールの出力が10,000トークンを超えると警告を出し、既定では25,000トークンで切ります。長いPDFをMarkdownで丸ごと受け取るより、ドキュメントキーで保持させて節ごとに書き出させるほうが収まりやすい構成です。
文書を生成するツールの使い方
Doclingのもう1つの柱は、文書を組み立てるツール群です。READMEの例では、Claudeに次の順序を指示します。
- 1
文書を作る
create_new_docling_documentを使います。 - 2
タイトルと本文を足す
add_title_to_docling_documentでタイトルを付け、見出しと段落を足していきます。 - 3
リストを組む
open_list_in_docling_documentで開き、add_list_items_to_list_in_docling_documentで項目を足し、close_list_in_docling_documentで閉じます。 - 4
途中経過を確認する
export_docling_document_to_markdownでMarkdownに書き出して見ます。 - 5
保存する
最後に保存して、ファイルパスを返させます。
リストを開いたら必ず閉じる、という順序の制約がある点が要点です。プロンプトでこの手順を明示しておくと、ツールの呼び出し順で迷いにくくなります。
よくある質問
Claude.aiのWeb版でも使えますか
利用ページが案内しているのは、Claude Desktopのclaude_desktop_config.jsonへの追記です。Web版からの利用方法は、公式の利用ページにもREADMEにも記載がありません。
変換できるのはPDFだけですか
READMEの機能一覧は、変換ツールの対象を「PDF文書」と書いています。ほかの形式の対応は、この一覧には載っていません。