1 分でサーバーを起動#
pip install "docling-serve[ui]"
docling-serve run --enable-ui # API:http://127.0.0.1:5001 · ドキュメント:/docs · UI:/uidocker run -p 5001:5001 -e DOCLING_SERVE_ENABLE_UI=1 \
quay.io/docling-project/docling-serve-cpudocling-serve run はすべてのインターフェース(ホスト 0.0.0.0)で待ち受けます。docling-serve dev は 127.0.0.1 にバインドし、開発用に自動リロードします。イメージの選び方と GPU 版は Docker のページへ。
リクエストの流れ#
エンドポイント#
| メソッドとパス | 用途 |
|---|---|
POST /v1/convert/source | URL やクラウドのソースから変換し、結果を待つ |
POST /v1/convert/file | アップロードしたファイル(multipart)を変換し、結果を待つ |
POST /v1/convert/source/async・/v1/convert/file/async | ジョブを開始し、すぐに task_id を返す |
POST /v1/convert/source/batch | 複数のソースを 1 つのバッチとして送信 |
POST /v1/chunk/{hybrid|hierarchical}/{source|file}[/async] | 変換とチャンク化を 1 回の呼び出しで |
GET /v1/status/poll/{task_id} | ジョブの状態(pending・started・success・failure など) |
WS /v1/status/ws/{task_id} | WebSocket で状態の更新をプッシュ |
GET /v1/result/{task_id} | 完了した結果を取得 |
GET /health・/ready・/version・/v1/capabilities | ヘルス、準備状態、バージョン、有効な機能 |
GET /docs・/scalar・/ui | Swagger ドキュメント、Scalar ドキュメント、プレイグラウンド UI |
パスは 1.38.2 の docling_serve/app.py から取得。管理用エンドポイント(/v1/clear/*・/v1/memory/*)もありますが、DOCLING_SERVE_ENABLE_MANAGEMENT_ENDPOINTS を設定しない限り無効です。
URL を変換する#
curl -X POST http://localhost:5001/v1/convert/source \
-H 'Content-Type: application/json' \
-d '{
"sources": [{"kind": "http", "url": "https://arxiv.org/pdf/2408.09869"}],
"options": {"to_formats": ["md", "json"], "do_ocr": false}
}'レスポンスは ConvertDocumentResponse です:document(要求した形式に応じて md_content・json_content・html_content・text_content・doctags_content)、status・errors・processing_time・timings・confidence。
2.143.1 のリクエストモデルが受け付けるソースの種類:http・file(base64)・s3・azure_blob・google_cloud_storage・google_drive。
ファイルをアップロードする#
curl -X POST http://localhost:5001/v1/convert/file \
-F 'files=@report.pdf' \
-F 'to_formats=md' \
-F 'do_ocr=false' \
-F 'table_mode=fast'オプションは JSON 本体と同じ名前のフォームフィールドになります。リストはフィールドを繰り返します(-F to_formats=md -F to_formats=json)。設定ジェネレーターがこれらのリクエストを書いてくれます。
長い文書:非同期ジョブ#
import time, requests
BASE = "http://localhost:5001"
job = requests.post(f"{BASE}/v1/convert/source/async", json={
"sources": [{"kind": "http", "url": "https://arxiv.org/pdf/2408.09869"}],
"options": {"to_formats": ["md"]},
}).json()
task_id = job["task_id"]
while True:
status = requests.get(f"{BASE}/v1/status/poll/{task_id}").json()
if status["task_status"] in ("success", "partial_success", "failure"):
break
time.sleep(2)
result = requests.get(f"{BASE}/v1/result/{task_id}").json()
print(result["document"]["md_content"][:300])実際によく使うオプション#
JSON の options オブジェクトは ConvertDocumentsOptions です。2.143.1 でよく使うフィールドと既定値:
| フィールド | 既定値 | メモ |
|---|---|---|
to_formats | ["md"] | md・json・html・text・doctags など |
image_export_mode | placeholder | CLI の既定は embedded なので異なる |
do_ocr / force_ocr | true / false | |
ocr_preset / ocr_lang | auto / なし | プリセット ID は CLI のエンジン名と同じ。ocr_engine も動きますが非推奨です。pip でインストールしたサーバーには onnxruntime がないため rapidocr プリセットは失敗し、auto は動きます。tesseract では必ず ocr_lang を指定してください(eng と iso:en は動作、en だけでは不可)。 |
pipeline | standard | vlm は vlm_pipeline_preset と併用 |
table_mode | accurate | fast のほうが速い |
page_range | 全ページ | [1, 10] |
document_timeout | なし | 文書ごとの秒数 |
images_scale | 2.0 | サーバー側の上限は DOCLING_SERVE_MAX_IMAGES_SCALE(2.0) |
do_formula_enrichment・do_code_enrichment・do_picture_description・do_chart_extraction | false | 拡張モデル |
サーバー設定#
設定はすべて DOCLING_SERVE_ で始まる環境変数です(または DOCLING_SERVE_CONFIG_FILE で指定する YAML/JSON ファイル)。Uvicorn の設定は UVICORN_ を使います。
| 変数 | 既定値 | 効果 |
|---|---|---|
DOCLING_SERVE_ENABLE_UI | false | /ui でプレイグラウンドを提供 |
DOCLING_SERVE_API_KEY | 空(認証なし) | X-Api-Key を必須にする |
DOCLING_SERVE_MAX_SYNC_WAIT | 120 | 同期リクエストが待つ秒数 |
DOCLING_SERVE_ENG_KIND | local | local・rq(Redis キュー)・ray |
DOCLING_SERVE_ENG_LOC_NUM_WORKERS | 2 | ローカルエンジンの並列ジョブ数 |
DOCLING_SERVE_MAX_NUM_PAGES・…_MAX_FILE_SIZE | 無制限 | 大きすぎる文書を拒否 |
DOCLING_SERVE_MAX_SOURCES_PER_REQUEST | 3 | 1 回の呼び出しあたりのソース数 |
DOCLING_SERVE_LOAD_MODELS_AT_BOOT | true | 起動時にモデルを読み込む |
DOCLING_SERVE_ARTIFACTS_PATH | なし | 事前ダウンロードしたモデル(オフライン) |
DOCLING_SERVE_ENABLE_REMOTE_SERVICES | false | API ベースのモデルを許可 |
DOCLING_SERVE_SINGLE_USE_RESULTS・…_RESULT_REMOVAL_DELAY | true・300 | 取得後に結果を削除 |
DOCLING_SERVE_CORS_ORIGINS | ["*"] | ブラウザから使うなら絞り込む |
既定値は docling_serve/settings.py(1.38.2)から取得しました。
Python クライアント#
Docling には専用のクライアントが付属しています。DocumentConverter と同じ形なので、ローカル変換とリモート変換の切り替えは 1 行の変更で済みます。
from docling.datamodel.service.options import ConvertDocumentsOptions
from docling.service_client import DoclingServiceClient
with DoclingServiceClient(url="http://localhost:5001") as client: # 設定済みなら api_key="..."
result = client.convert(
"https://arxiv.org/pdf/2408.09869",
options=ConvertDocumentsOptions(do_ocr=False, to_formats=["md"]),
)
print(result.document.export_to_markdown()[:300])PyTorch なしで pip install "docling-slim[service-client]" としてインストールできます。同じエクストラで docling convert-remote コマンドも加わります(CLI リファレンス参照)。
MCP:AI エージェントのための Docling#
docling-mcp は変換と文書操作のツールを Claude Desktop や LM Studio などの MCP クライアントに提供します。3.x の既定の変換モードは remote なので、docling-serve インスタンスを指定するか、local エクストラを入れてください。
{
"mcpServers": {
"docling": {
"command": "uvx",
"args": ["--from=docling-mcp", "docling-mcp-server"],
"env": {
"DOCLING_MCP_CONVERSION_MODE": "remote",
"DOCLING_MCP_SERVICE_URL": "http://localhost:5001"
}
}
}
}uvx --from "docling-mcp[local]" docling-mcp-server --transport stdio
# 環境変数 DOCLING_MCP_CONVERSION_MODE=local を設定トランスポート:stdio(デスクトップクライアント)、sse と streamable-http(コンテナ)。docling-mcp 3.x は MCP SDK 2.x が必要です。移行していないクライアントでは docling-mcp<3.0.0 に固定してください。
本番運用チェックリスト#
DOCLING_SERVE_API_KEYを設定し、DOCLING_SERVE_CORS_ORIGINSを絞る。- 数ページを超える文書は非同期エンドポイントで。同期呼び出しは 120 秒が上限です。
DOCLING_SERVE_MAX_NUM_PAGESとDOCLING_SERVE_MAX_FILE_SIZEで入力を制限する。- モデルをイメージに事前ダウンロード(
DOCLING_SERVE_ARTIFACTS_PATH)して、Pod がインターネットなしで起動できるようにする。 - 1 台で足りなければ
DOCLING_SERVE_ENG_KIND=rqと Redis ワーカーでスケールアウト。
よくある質問
docling-serve のポートは?
既定は 5001 です。API は http://127.0.0.1:5001、対話的な API ドキュメントは /docs、--enable-ui または DOCLING_SERVE_ENABLE_UI=1 で有効にすると /ui にプレイグラウンド UI があります。
docling-serve に認証を付けるには?
DOCLING_SERVE_API_KEY に秘密の値を設定します。クライアントはそれを X-Api-Key ヘッダーで送る必要があります。
docling-serve の同期リクエストがタイムアウトするのはなぜ?
同期エンドポイントは最大 DOCLING_SERVE_MAX_SYNC_WAIT 秒(既定 120)待ちます。長い文書は /async エンドポイントを使って結果をポーリングするか、上限を上げてください。
docling-serve の結果を 2 回取得できる?
既定ではできません。DOCLING_SERVE_SINGLE_USE_RESULTS が true のため、結果は取得後(300 秒の猶予のあと)削除されます。クライアントが再試行する可能性があるなら false にします。
Docling を Claude Desktop などの MCP クライアントにつなぐには?
docling-mcp を使い、uvx --from docling-mcp docling-mcp-server を実行するサーバー設定を追加します。docling-mcp 3.x 以降は既定が remote モードなので、DOCLING_MCP_SERVICE_URL を docling-serve に向けるか、docling-mcp[local] を入れて DOCLING_MCP_CONVERSION_MODE=local を設定します。
出典
- docling-serve 1.38.2 ソース:app.py・settings.py・auth.py
- docling-serve ドキュメント
- docling 2.143.1:ConvertDocumentsOptions(docling/datamodel/service/options.py)
- docling-mcp 3.3.0 README