docsift について
DocSiftは、ファイルをクラウドサービスに送らず、エージェントに出典付きの文章を検索させたい人向けのローカル文書変換・検索ツールです。変換済み文書をインデックス化し、ページ番号と見出しを添えて関連箇所を返します。
主な機能
- 01文書をMarkdownに変換
- 02後続検索用に文書を索引化
- 03出典付きの関連箇所を返す
- 04DoclingでPDFを処理
- 05MarkItDownで他形式を処理
活用シーン
- 01長いPDFから条項を探す
- 02レポートを貼り付けずに質問する
- 03ローカル文書から引用可能な節を取得
MCP 対応
DocSiftはstdio経由のMCPサーバーとして、`search_document`と`convert_document`ツールを提供します。MCPクライアントからローカルファイルを検索・索引化できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
DocSift
ドキュメントを一度変換するだけ。エージェントには必要な情報だけを渡します。
mcp-name: io.github.anishmoncivarghese/docsift
300 ページの PDF は LLM のコンテキストウィンドウに収まりません。仮に収まったとしても、そのまま貼り付けるとコストがかかります。DocSift はドキュメントを一度きれいな Markdown に変換してインデックスを作成し、質問に答える箇所だけをページ番号とセクション見出し付きで返すため、回答の出典を示せます。
お使いのマシン上で動作します。PDF は Docling、それ以外は MarkItDown で処理し、どちらも同じインターフェースから利用できます。クラウド API、アカウント、テレメトリーは不要です。
節約できる理由: 変換ではなく検索です。Docling はレイアウトモデルでヘッダーとフッターをすでに取り除くため、PDF のトークン数はクリーニングだけではほとんど減りません。コストを変えるのは、質問をして、ドキュメント全体ではなく関連するチャンクを 3 つ受け取ることです。
クイックスタート
必要なエンジンを選んでください。Word、Excel、PowerPoint、HTML、CSV、EPUB には markitdown、PDF には docling(ダウンロードサイズが大きく、ML レイアウトモデルを含みます)、両方のエンジンと HTTP API、MCP サーバーには all を使用します。
pip install "docsift[markitdown]"
pip install "docsift[docling]"
pip install "docsift[all]"
docsift convert report.pdf
これにより、クリーニング済みの Markdown、トークン数に応じて分割したチャンク、JSON サマリーが ./output/ に出力されます。pip install docsift だけでは CLI はインストールされますが、エンジンはインストールされません。その場合、変換時に原因がわかりにくいエラーになるのではなく、その旨が通知されます。
Office 形式は最新の形式を指します。 .docx、.xlsx、.pptx が対象です。2007 年より前のバイナリ形式である .doc、.xls、.ppt はサポートされていません。DocSift は途中で失敗するのではなく、ファイル名を示して受け付けません。PowerPoint、Keynote、LibreOffice、Google Slides のいずれかでファイルを開き、まず .pptx 形式で保存してください。
Claude、Codex、その他の MCP クライアントから使う
このツールの目的を手早く体験する方法です。ドキュメントをどこかに貼り付けずに、アシスタントから自分のドキュメントを検索できます。
対応クライアント
DocSift は stdio 経由で MCP を利用します。クライアントが、お使いのマシン上のプログラムとして起動します。この方法に対応していれば利用できます。
| クライアント | 対応 | 方法 |
|---|---|---|
| Claude Code | はい | claude mcp add — 手順 2 |
| Claude Desktop | はい | claude_desktop_config.json |
| VS Code(Copilot エージェントモード) | はい | .vscode/mcp.json |
| Codex CLI | はい | ~/.codex/config.toml |
| Cursor | はい | VS Code と同じ形式の JSON 設定 |
| ブラウザー版 claude.ai | いいえ | リモートサーバーが必要です |
| ChatGPT(ウェブ版またはデスクトップ版) | いいえ | リモートサーバーが必要です |
インストールを始める前に、最後の 2 つについては明確にしておく必要があります。これらのコネクター機能が受け付けるのは、公開 HTTPS URL の リモート MCP サーバーだけです。DocSift はリモートトランスポートに対応していないため、ローカルのサーバーをこれらのインターフェースで使えるようにする設定はありません。
これは見落としではなく、意図的な方針です。これらのサービスから利用するには、DocSift をサーバー上で動かしてドキュメントをアップロードする必要があります。それは、このツールの目的とは正反対です。セルフホスト可能なリモートトランスポートを将来追加するのは妥当ですが、自分のファイルを他人のマシンに送ることはしません。
1. プロジェクトではなく、コマンドとしてインストールする
MCP クライアントは DocSift をプログラムとして起動するため、仮想環境の外に存在する必要があります。スタンドアロンツールとしてインストールしてください。
uv tool install --python 3.12 "docsift[mcp,docling,markitdown]"
または、pipx を使います。
pipx install --python python3.12 "docsift[mcp,docling,markitdown]"
DocSift には Python 3.11 以降が必要です。デフォルトのバージョンがそれより古い場合は、上記のバージョン指定によって要件を満たせないというエラーを回避できます。大容量のダウンロードが発生します。docling には PyTorch とレイアウトモデルが含まれるためです。
Linux では、--torch-backend auto を追加してください。 デフォルトでは PyTorch の CUDA ビルドが選択されます。インストール後のサイズは 5.3 GB で、そのうち約 2 GB は、NVIDIA GPU のないマシンでは読み込まれない nvidia-* ホイールです。auto はドライバーを検出して適切なビルドを選び、GPU のないマシンでは 1.6 GB になり、GPU のあるマシンでは CUDA がそのまま使われます。
uv tool install --python 3.12 --torch-backend auto "docsift[mcp,docling,markitdown]"
macOS のホイールはすでに CPU 専用なので、このフラグを指定しても変わりません。これは uv の機能です。CPU ビルドは別のインデックスにあり、公開済みのパッケージではインストーラーの取得先を変更できないため、pipx や pip には同等の機能がありません。この方法で CPU 専用の Linux マシンにインストールした場合、DocSift は、使われない数 GB を黙ってダウンロードさせるのではなく、初回の変換後にその旨を知らせます。
インストールされたことを確認します。次のコマンドを一度にひとつずつ実行してください。2 つ目は実行ファイルのパスを表示します。次の手順で必要になります。
docsift --version
which docsift
2. クライアントに登録する
使用しているものをひとつ選んでください。必要なのはひとつだけです。
Claude Code
$(which docsift) がパスを自動で補完するため、以下をそのまま実行できます。
claude mcp add --scope user docsift -- "$(which docsift)" mcp
次に、起動したことを確認します。docsift ... ✔ Connected と表示されていることを確認してください。
claude mcp list
--scope user を指定すると、すべてのプロジェクトで利用できます。指定しない場合、サーバーは現在のディレクトリにのみ登録されます。
Claude Code の設定はこれで完了です。 以下のほかのクライアントの手順は飛ばして、手順 3 に進んでください。
VS Code
Copilot エージェントモードは、ひとつのプロジェクトでは .vscode/mcp.json を、すべてのプロジェクトでは MCP: Open User Configuration コマンドに対応するファイルを読み込みます。
{
"servers": {
"docsift": {
"type": "stdio",
"command": "/replace/with/the/path/from/which/docsift",
"args": ["mcp"]
}
}
}
Codex CLI
~/.codex/config.toml:
[mcp_servers.docsift]
command = "/replace/with/the/path/from/which/docsift"
args = ["mcp"]
startup_timeout_sec = 60
表示されているとおりにタイムアウトを延長してください。Codex のデフォルトは 10 秒ですが、DocSift は起動時に PyTorch を読み込むため、起動処理中であるにもかかわらず、デフォルト設定ではサーバーの起動に失敗したと報告されます。
Claude Desktop、Cursor
これらのクライアントは、代わりに JSON 設定ファイルを読み込みます。macOS の Claude Desktop の場合は、~/Library/Application Support/Claude/claude_desktop_config.json です。ファイルが存在しない場合は作成してください。
ファイルが空、または新規の場合は、これがファイルの全内容です。コマンドは、手順 1 で which docsift が表示したパスに置き換えてください。
{
"mcpServers": {
"docsift": {
"command": "/replace/with/the/path/from/which/docsift",
"args": ["mcp"]
}
}
}
すでにほかのサーバーが登録されている場合は、ファイルを置き換えずに、それらの項目の隣に docsift を追加してください。前の項目の後にコンマが必要です。
{
"mcpServers": {
"something-you-already-had": {
"command": "..."
},
"docsift": {
"command": "/replace/with/the/path/from/which/docsift",
"args": ["mcp"]
}
}
}
docsift だけではなく、絶対パスを使用してください。これらのクライアントはシェルの PATH を確実に引き継ぐわけではないため、パスが間違っている場合や、パスを指定せず docsift のみを指定した場合は、ENOENT: no such file or directory エラーが発生します。
次に、アプリを再起動してください。設定は起動時に読み込まれます。
docsift だけではなく、which docsift が表示した絶対パスを使用してください。 MCP クライアントはシェルの PATH を確実に引き継ぐわけではありません。ローカルサーバーが気付かれないまま起動に失敗する原因として、これが最もよくあります。
3. 質問する
覚えるコマンドはありません。知りたいことを説明してください。
~/Documents/contract.pdf で解約条項を検索して
report.pdf には第3四半期の売上について何と書かれていますか?
新しいファイルについて最初に質問すると、ファイルが変換されます。PDFの場合は時間がかかり、約3分かかります。これはページ数ではなく、起動時のコストです。Doclingは初回の変換時に、レイアウトモデルとテーブルモデルをHuggingFaceからダウンロードし、その後PyTorchを読み込みます。3ページのテストファイルでも、30ページのレポートとほぼ同じ時間がかかるため、「手早く試す」ために小さなファイルを選んでも効果はありません。
これは一度だけ起こります。その後はファイルの内容で認識され、ファイルを移動したり名前を変更したりしても、すぐに回答が返ってきます。
長いPDFの場合は、先に変換してから質問してください:
docsift convert big-report.pdf
これにより、MCP サーバーが読み取るものと同じキャッシュが作成されるため、最初の質問にも、その後の質問と同じ速さで答えられます。また、実際に存在する制限を回避できます。MCP クライアントはツール呼び出しに独自のタイムアウトを適用するため、変換に時間がかかるとタイムアウトを超え、処理が完了するはずだったとしてもエラーとして表示されることがあります。
4. 動作を確認する
実際のPDFを指定する前に、すぐに変換できるファイルを使って接続を確認してください。次のように作成します。
printf '# Test\n\nDocSift returns only the passages that match a question.\n' > /tmp/docsift-check.md
次に、ツール名を指定してアシスタントに尋ねます。
docsift search_document ツールを使って /tmp/docsift-check.md の "passages" を検索してください
ツール名を明示し、実際にどのツールが実行されるか確認してください。 何気なく尋ねると、アシスタントは独自のファイル読み取りツールで小さなファイルを開き、その内容から回答することがよくあります。正しい回答は得られますが、DocSiftは一度も使われていません。そのため、設定が壊れていても動作しているように見えてしまいます。アシスタントが docsift を呼び出さず、ファイルを読み取ったと報告した場合、この確認では何も分かりません。
初回の呼び出しでは、ツールの実行許可を求められます。許可し、クライアントに「次回から確認しない」オプションがあれば選択してください。そうすれば、後で質問した際に考えの途中で中断されません。
成功すると、トランスクリプトに docsift ツールの呼び出しが表示され、その1文が返されます。PDFもモデルの重みも必要ないため、ここで失敗する場合は設定の問題です。コマンドが PATH にない、またはサーバーが登録されていないなどが考えられ、変換の問題ではありません。
次に、自分のPDFを試してください。最初の質問には1分ほどかかると見込んでください。その程度のサイズの文書なら、どちらを選ぶかは明白です。文書全体を読むのはコストがかかるため、検索するのが自然な選択になります。
意図的に実行する価値のあるテストが1つあります。文書に記載されていない内容について質問してください。 もっともらしい回答ではなく、何も返ってこないはずです。検索は語句ベースなので、テキストに含まれない単語は何にも一致しません。この挙動を一度確認すれば、成功した検索を何十回も行うより、何を信頼できるかがよく分かります。
利用できる機能
ツールは2つです。
search_document— 重要なツールです。ファイルパスと質問を渡すと、そのファイルを初回に変換し、該当する箇所だけをページ番号とセクション見出しとともに返します。convert_document— ファイルを変換してインデックスを作成し、テキストではなく概要(ページ数、トークン数の推定値、チャンク数)を返します。
期待できること
Apple シリコン搭載の MacBook Air で、34 ページ、1.7 MB の PDF を使って測定しました。対象は BusinessEurope の経済見通しです。このツールが必要とされる、扱いにくい種類の文書だからです。密度の高い表、脚注、複数列のページが続きます。
| 文書全体 | 約21,000トークン、42チャンク |
| 質問1件への回答 | 約4,000トークン、5つの箇所と引用用のページ情報 |
| 初回の変換 | 約3分 — ほとんどが一度限りのモデルのダウンロードです |
| 2件目以降のファイルの初回変換 | ファイルサイズに応じて数秒から1分 |
| その後の質問 | すぐに回答 |
トークン数の差こそが重要で、文書が長くなるほど差は広がります。
3分かかる処理の内訳を明確にしておきます。「大きな文書は処理が遅い」と誤解されやすいためです。その大半は、Docling が初回実行時にレイアウトモデルと表モデルを取得する時間と、PyTorch の読み込み時間です。まっさらな Linux マシンでは、3ページ、1.8 KB の PDF に186秒かかりました。34ページのレポートとほぼ同じです。初回実行後はモデルがディスクに保存されるため、変換時間は文書のサイズに応じて変わります。docsift convert は処理中ずっとスピナーを表示するので、推測することなく進行状況を確認できます。
search_document では limit と max_tokens も指定でき、回答を増やしたり減らしたりするよう頼むと、モデルがこれらの値を設定します。デフォルトでは、5,000トークンの上限内で5つの箇所を返します。密度の高い文書ではチャンクが大きくなり、上記のレポートでは1つあたり約1,000トークンでした。回答が途中で切れるようなら、max_tokens を大きくしてください。同じ質問をモデルに何度もさせるより低コストです。
数値からはわからない注意点が1つあります。検索は語句ベースであり、意味ベースではありません。 DocSift はチャンクを SQLite FTS5 にインデックス化し、BM25 で順位付けします。検索に使った語句には一致しますが、類義語、言い換え、意味には対応しません。「termination clause」と尋ねても、「ending the agreement」としか書かれていない節は見つかりません。このレポートに「energy prices」について尋ねたところ、該当語句が含まれていたため、海運費用と肥料費用についての節が見つかりました。一方、「transport costs rose なぜ?」という聞き方では、まったく見つからなかったかもしれません。
これは見落としではなく、意図的なトレードオフです。ダウンロードする埋め込みモデルも、再構築するインデックスも、GPU も必要ありません。データがマシンの外に出ることもなく、初回実行は数十分ではなく数分で済みます。意味ベースの検索が必要な場合、DocSift が生成する Markdown とチャンク JSON は、ベクトルストアに入力するデータとして適しています。それを望むのはもっともですが、現時点でこのツールが行う処理ではありません。既知の制限をご覧ください。
PowerPoint の回答にはスライド番号が付きます。 デッキは1スライドずつチャンク化されるため、該当箇所には元のスライド番号とタイトルが示されます。PDF の箇所にページ番号が付くのと同じです。どちらもフィールド名は pages ですが、プレゼンテーションの場合はスライドを意味します。発表者ノートも抽出され、検索できます。
デッキからは得られないもの、それは図です。 3つのボックスと2本の矢印があるスライドは、3つのラベルとして抽出されます。テキストは残りますが、関係性は残らないため、2つのボックスをつなぐ矢印の意味を DocSift が判断することはできません。スライド内の画像は一切読み取られないため、スクリーンショット内のテキストは検索できません。
すべての処理は、そのプロセス内でお使いのマシン上で行われます。ポートをリッスンすることはなく、文書の内容がネットワークを介して送られることもありません。サーバーがアクセスできるファイルシステムは、起動したユーザーがアクセスできる範囲とまったく同じです。
claude.ai のコネクタディレクトリには掲載されておらず、掲載することもできません。 claude.ai はクラウド上で動作するため、お使いのコンピューター上でプログラムを起動できません。ローカル MCP サーバーは、お使いのマシン上で動作するアプリ(Claude Code、Claude Desktop、Codex、Cursor)で利用できます。ウェブアプリのコネクタ一覧を検索しても、DocSift は見つかりません。
コマンドライン
docsift convert report.pdf --max-tokens 800 --overlap 100
docsift convert report.pdf --engine markitdown
docsift inspect report.pdf
docsift compare report.pdf
docsift search doc_xxxxxxxxxxxx "operational risk"
docsift search doc_xxxxxxxxxxxx '"operational risk"' --limit 5 --context 1
docsift cache info
docsift cache clear
inspect は、ファイルを変換せずに、DocSift がそのファイルに対して行う処理(エンジン、識別情報、キャッシュの状態)を報告します。compare は同じドキュメントを両方のエンジンで処理し、結果の差分を書き出します。
変換時には、繰り返されるヘッダーとフッター、ページ番号、画像参照を除去した後、見出しのコンテキストを引き継ぐよう、トークン数の上限に合わせてテキストを分割します。--keep-furniture と --keep-image-refs を指定すると、これらのクリーニング処理が無効になります。
結果はキャッシュされるため、ファイルと設定に変更がなければ、すぐに結果が返されます。--no-cache を指定すると、再実行を強制します。
検索では、引用符で囲んだフレーズにも対応する、ローカルの SQLite FTS5 によるキーワードランキングを使用します。HTTP サービスと MCP サーバーが書き込むストアを読み取ります。docsift convert は出力ディレクトリにスタンドアロンファイルを書き込みますが、ストアには追加しません。--context は隣接するチャンクを含め、--max-tokens は応答全体の上限を設定します。表示されるのは選択されたチャンクだけです。スコアは同じ応答内で結果の順序を決めるためのものであり、リクエスト間で比較することはできません。
HTTP API
pip install "docsift[all]"
docsift serve
変換は常にバックグラウンドで実行されます。長い PDF の処理には数分かかることがあり、同期応答を想定するクライアントはタイムアウトするためです。
ファイルをアップロードすると、ジョブ ID とドキュメント ID とともに 202 が返されます。
curl -sS -F [email protected] http://127.0.0.1:8000/v1/documents
ステータスが succeeded または failed になるまでポーリングします。
curl -sS http://127.0.0.1:8000/v1/jobs/job_xxxxxxxxxxxxxxxx
その後、ドキュメント全体を取得します。
curl -sS http://127.0.0.1:8000/v1/documents/doc_xxxxxxxxxxxx/markdown
curl -sS http://127.0.0.1:8000/v1/documents/doc_xxxxxxxxxxxx/chunks
または、質問を送信して、関連するチャンクだけを取得します。
curl -sS --get --data-urlencode 'q=operational risk' \
--data 'limit=5' --data 'max_tokens=5000' \
http://127.0.0.1:8000/v1/documents/doc_xxxxxxxxxxxx/search
DELETE /v1/documents/{id} は、ドキュメント、その検索インデックス、キャッシュされた変換結果を削除します。処理中の変換もキャンセルするため、削除後にワーカーの処理が完了しても、削除が取り消されることはありません。OpenAPI ドキュメントは /openapi.json にあります。
ほかからアクセス可能になる前に、DOCSIFT_API_KEY を設定してください。 その後、すべての /v1/* ルートで X-API-Key ヘッダーが必要になります。一方、/health、/version、API ドキュメントは、ヘルスチェックとコネクターのインポート用に認証なしで利用できます。これはサービス全体で共有する 1 つのシークレットであり、ユーザーごとの ID 管理ではなく、ネットワーク制御の代わりにもなりません。サービスは受け取ったファイルをすべて変換するため、自分で管理するインフラストラクチャ上で実行してください。
Power Platform、Copilot Studio、n8n
DOCSIFT_PUBLIC_URL=https://docsift.example docsift openapi --format swagger2 -o connector.json
これを Power Platform のカスタムコネクターとしてインポートします。サービス独自の /openapi.json は OpenAPI 3.1 であり、カスタムコネクターでは拒否されます。このコマンドは、カスタムコネクターが受け付ける Swagger 2.0 を生成します。実際のテナントで検証済みです。ファイルをインポートして認証し、スキーマに準拠した応答を受け取れます。
実用例は
examples/
にあります。インポート可能な n8n ワークフロー、Copilot Studio コネクターの手順、変換の完了を待つ Power Automate の Do until フローが含まれています。詳しいガイドは
docs/USING_DOCSIFT.md
をご覧ください。
詳細
| 既知の制限事項 | DocSift ができないことを率直に記載しています。利用する前に確認することをおすすめします。 |
| 設定 | すべての環境変数を説明します。 |
| Docker | コンテナーでサービスを実行する方法です。 |
| Azure へのデプロイ | ホスト型デプロイの手順を最初から最後まで説明します。 |
| プライバシー | ディスクに保存される内容と、ネットワークにアクセスする 3 つのタイミングについて説明します。 |
| セキュリティ | 脅威モデルと、脆弱性の報告方法について説明します。 |
| コントリビュート | セットアップ、チェック項目、レビューで確認する内容について説明します。 |
| 変更履歴 | リリース内容とリリース時期を記載しています。 |
ライセンス
MIT
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。