mcpField
D
docsift

docsift

ローカル
github.com/anishmoncivargheseメモリ・ナレッジ711 週間前に更新

docsift について

DocSiftは、ファイルをクラウドサービスに送らず、エージェントに出典付きの文章を検索させたい人向けのローカル文書変換・検索ツールです。変換済み文書をインデックス化し、ページ番号と見出しを添えて関連箇所を返します。

主な機能

  1. 01文書をMarkdownに変換
  2. 02後続検索用に文書を索引化
  3. 03出典付きの関連箇所を返す
  4. 04DoclingでPDFを処理
  5. 05MarkItDownで他形式を処理

活用シーン

  1. 01長いPDFから条項を探す
  2. 02レポートを貼り付けずに質問する
  3. 03ローカル文書から引用可能な節を取得

MCP 対応

DocSiftはstdio経由のMCPサーバーとして、`search_document`と`convert_document`ツールを提供します。MCPクライアントからローカルファイルを検索・索引化できます。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"anishmoncivarghese-docsift": {
"command": "uvx",
"args": [
"docsift"
]
}
}
}
起動コマンドuvx docsift

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
pypidocsift0.5.7

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

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

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。