Claude Media
ClaudeにDocling MCPでローカル文書変換を任せる設定手順

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-server

1つ目の並びは、手元で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で動きます。

Docling Serve

リモート変換

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つです。

  1. 変換モードは必ず明示する。localと書いておけば、既定値がどちらでも挙動は変わらない
  2. 接頭辞は、入れた版の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. 1

    文書を作る

    create_new_docling_documentを使います。

  2. 2

    タイトルと本文を足す

    add_title_to_docling_documentでタイトルを付け、見出しと段落を足していきます。

  3. 3

    リストを組む

    open_list_in_docling_documentで開き、add_list_items_to_list_in_docling_documentで項目を足し、close_list_in_docling_documentで閉じます。

  4. 4

    途中経過を確認する

    export_docling_document_to_markdownでMarkdownに書き出して見ます。

  5. 5

    保存する

    最後に保存して、ファイルパスを返させます。

リストを開いたら必ず閉じる、という順序の制約がある点が要点です。プロンプトでこの手順を明示しておくと、ツールの呼び出し順で迷いにくくなります。

よくある質問

Claude.aiのWeb版でも使えますか

利用ページが案内しているのは、Claude Desktopのclaude_desktop_config.jsonへの追記です。Web版からの利用方法は、公式の利用ページにもREADMEにも記載がありません。

変換できるのはPDFだけですか

READMEの機能一覧は、変換ツールの対象を「PDF文書」と書いています。ほかの形式の対応は、この一覧には載っていません。

この記事を共有:XはてブLinkedIn