mcpField
S
Section Anything

Section Anything

ローカル
omniwot.github.ioメモリ・ナレッジ02 日前に更新

Section Anything について

Section Anything は、PDF の見出し階層、ページ範囲、セクション本文を抽出し、文書ツールや RAG パイプラインで利用できます。MCP サーバーは読み取り専用の分割ツールを提供し、無料のルール方式と、文書ごとの費用上限を設けられるモデル方式に対応します。

主な機能

  1. 01見出しツリーとセクション本文の抽出
  2. 02指定した PDF セクションの読み取り
  3. 03モデル方式の費用見積もり
  4. 04無料のルール方式の利用
  5. 05有料実行の費用上限設定

活用シーン

  1. 01RAG に構造化 PDF テキストを渡す
  2. 02エージェントに選択したセクションを読ませる
  3. 03モデル処理前に費用を確認

MCP 対応

MCP サーバーは section_pdf、read_sections、estimate_cost の3つの読み取り専用ツールを公開します。既定の無料モードはモデルを使わず、有料モードは設定した API キーを使い、費用上限が適用されます。

設定

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

mcp.json · 共通設定
{
"mcpServers": {
"omniwot-section-anything": {
"command": "uvx",
"args": [
"section-anything-mcp"
],
"env": {
"OPENAI_API_KEY": "<OPENAI_API_KEY>",
"ANTHROPIC_API_KEY": "<ANTHROPIC_API_KEY>"
}
}
}
}
起動コマンドuvx section-anything-mcp
設定が必要な環境変数
OPENAI_API_KEYシークレットOnly for the paid quick and standard modes with OpenAI models
ANTHROPIC_API_KEYシークレットOnly for the paid modes with a Claude model

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

パッケージ
pypisection-anything-mcp0.1.0

ツール

3

掲載時のツール一覧 · 1 週間前に更新

パラメーター型必須説明
modestringいいえ
pathstringはい
modelanyいいえ
max_usdanyいいえ

詳細

Section Anything

PyPI CI License: Apache-2.0 Open in Colab Open in Spaces

PDFの実際のセクションを見つけます。すべての見出し、その階層、またがるページ、見出し以下の正確な本文を抽出します。構造を必要とするRAGパイプラインやドキュメントツール向けに設計されており、無料のルールベースから文書全体を読むLLMまで選択でき、有料実行ごとに厳格なコスト上限を設定できます。

Python session: section_anything.section("paper.pdf", mode="quick") prints the paper's heading tree and the run's summary; then one section, 4.1 Architecture, as a chunk: its number, title, level, pages and character span, and its text, sliced from tree.text by that span

Visual Instruction Tuning(Liu ほか、arXiv:2304.08485、CC BY 4.0)に対するsection-anything 0.1.3、Quickモード(gpt-6-luna)の実際の出力です。実行の待ち時間は短縮されています(キャプチャ、スクリプト)。 Quickモードの出力は実行ごとに多少異なる場合があります。Colabノートブック(Freeモード、キー不要)でこの論文を試すか、ブラウザーからHugging Face Spaceを試してください(任意のPDFでFreeモードを利用できるほか、3つの論文のQuickチェックとStandard実行が保存されています。機密文書はアップロードしないでください)。

プレリリース(0.1)。 APIは1.0より前に変更される場合があります。

ウェブサイト: https://omniwot.github.io/section-anything/(仕組み、ベンチマーク、例)

import section_anything

tree = section_anything.section("paper.pdf", mode="quick")
print(tree.to_markdown())
# # A Study of Sectioning
# ## 1 Introduction
# ### 1.1 Scope
# ## 2 Methods
print(tree.summary())  # mode, model, pages, sections, calls, tokens, cost_usd, seconds

エージェントからの利用

エージェントはまずPDFのアウトラインを取得し、その後、必要なセクションだけを読み込めます(0.1.6以降)。

Claude Code、Claude Desktop、CursorなどのMCPホスト向けMCP サーバーです。読み取り専用のツールを3つ備えています。section_pdf(見出しツリー。デフォルトはFreeモードで、モデルを使わず$0)、read_sections(選択したセクションの本文)、estimate_cost(quickおよびstandardの費用)。

claude mcp add --transport stdio section-anything -- uvx --from "section-anything[mcp]" section-anything-mcp

ほかのホストでも、同じコマンドをmcpServers JSONに指定します。

{"mcpServers": {"section-anything": {"command": "uvx",
  "args": ["--from", "section-anything[mcp]", "section-anything-mcp", "--max-usd", "0"]}}}

有料モードでは、サーバーの環境変数に設定されたAPIキー(claude mcp add --env OPENAI_API_KEY=...)を使用し、文書ごとに--max-usd(デフォルトは0.50。0にするとすべての実行が無料になります)で上限を設定します。--root DIRを指定すると、サーバーが読み取れるフォルダーを制限できます。

エージェントスキル: skills/section-anythingをエージェントのスキルフォルダー(Claude Codeの場合は~/.claude/skills/)にコピーすると、エージェントは同じようにコマンドラインを使い、まずアウトラインを取得してから必要なセクションを読み込みます。

シェル: section-anything paper.pdf --format json --bodyを実行すると、すべてのセクションについてheading_path、parent、ページ、本文が出力されます。

その理由

PDFコンバーターは主に行の見た目から見出しを推定するため、論文のタイトル、著者名、キャプション、定理の記述がセクションとして扱われたり、実際のサブセクションが誤った階層になったりします。見出しを使って分割や移動を行うものは、こうした誤りをそのまま引き継ぎます。Section Anythingは、PDF独自のアウトライン(ブックマーク)と印刷された目次、書体や番号付けのルールを組み合わせ、必要に応じてモデルがテキストをレビューまたは読み込みます。

結果

READocでの見出しツリーの類似度(TEDS、0~100、数値が高いほど良好)。READoc 独自のスコアリングコードを使用し、2026年10月に測定しました。Docling と MinerU は文書全体(レイアウト、表、図、数式、OCR)を変換しますが、ここで比較するのは見出しツリーのみです。手法の開発には使用していない論文で評価しています。

READoc arXiv 論文(学習時未使用)文書数TEDS
Section Anything standard(gpt-6-luna)90570.0
Section Anything quick(gpt-6-luna)90568.0
Section Anything free(モデルなし)90560.0
Docling 2.140(見出し階層を有効化)90549.4

quick はリリース 0.1.2、free はリリース 0.1.5 です。0.1.1 では、要旨の見出しを検出するようになりました(学術誌では小さな文字や太字で書かれたり、最初の行に続けて書かれたりすることがよくあります)。事前登録した学習時未使用データでのテストでは、free が +2.4、quick が +3.7 向上しました(0.1.0:54.8、63.9)。0.1.2 では、PDF 抽出器がタイトルから分離したセクション番号(「1」|「Introduction」)を保持します。2回目の事前登録テストでは、free が +0.7(95% CI +0.5~+1.0)、quick が +0.5(95% CI +0.4~+0.8、変更があった291本では +1.7)向上しました(0.1.1:57.2、67.4)。 0.1.5 では、後付け部分(参考文献、謝辞、付録)と付録のセクションを、番号付きセクションと同じ階層にします。これらの論文を対象にした4回目の事前登録テストでは、free が +2.1(95% CI +1.7~+2.4、136本で改善、4本で悪化)向上しました(0.1.4:57.9)。README に変更はありません。 standard はこれらの変更を一切使用しません。変更履歴を参照してください。

同じ905本の論文に対する MinerU のクラウド版(3.4.4、VLM)との比較:当方の standard は70.0、当方の quick は68.0、MinerU とその独自 LLM によるタイトル階層(gpt-6.1-sol)は64.8(対応のある差:standard は +5.1、95% CI +4.0~+6.2。ただし、そのステップを当方が gpt-6.1-sol で実行した際に解析可能な階層が返されず、MinerU の生の階層を保持した154本を除くと +2.8。quick は +3.1、95% CI +2.1~+4.1。ただし、それらの論文を除いた階層の差は +1.0、95% CI −0.03~+2.0)、 MinerU のみでは53.9、Docling は49.4です。

GitHub の README では、free は Docling より高いスコアです。開発に使用していない READoc のブックマーク済み README 1,112件では81.9対75.5です。また、上流に提案したオプトインのアウトラインチェック(docling#5002)を使うと Docling は79.7に達します。これは free のアウトラインチェックと同じ考え方です。 開発に一切使用していない英国政府の報告書27件(各報告書のHTML版から作成した正解データ)では、アウトラインチェックにより free が +5.7(95% CI +0.4~+12.2、43.1 → 48.8)向上しました。測定対象は0.1.0です。

他のツールが優位な点: 学習時未使用の READoc README 1,124件では、当方の quick と standard は Docling と同程度(約75)にとどまります。学習時未使用の論文905本では、Docling は103本で standard より高いスコアを記録し、773本で低いスコアを記録しました(0.5ポイントを超える差)。arXiv で学習した OCR モデルの Nougat は、公開済みの READoc arXiv スコアで最高値(READoc 論文では88.5、旧バージョンのツール)を記録しています(当方では実行していません)。Docling と MinerU は OCR でスキャンページも読み取れますが、Section Anything にはテキストレイヤーが必要です。見出しの改善により、当方のQasper テストでは RAG の検索性能が向上しましたが、回答の品質は向上しませんでした。

設定とコスト

モード実行内容モデルに送信されるもの1,000 ページあたりのコスト
free(デフォルト)ブックマークまたは印刷された目次をアウトラインとして使い、タイポグラフィと番号付けのルールを適用します。完全なアウトラインに見えるものに記載されていない見出しは除外されますなし$0
quickルールで見出し候補の行を提案し、小型モデルが実際の見出しを選んで階層レベルを設定します見出し候補の行のみ約 $0.07(gpt-6-luna)
standardフォントのヒントを使ってモデルがすべての行を読み、セクションの開始位置と終了位置を判定します文書のテキスト約 $0.16(デフォルトの gpt-6-luna);gpt-6.1-sol では $2.90
local:<model>quick をローカルの Ollama モデルで実行しますマシンの外部に送信されるものはありません$0
autofree を実行し、Free が見出しを確定できない文書に限って quick を実行しますなし、または quick が送信する内容Free が確定できる文書は $0。それ以外は quick のコスト

有料実行はすべて事前に見積もられ、上限が設定されます(デフォルトでは文書ごとに $0.50)。上限を超える場合は、選択に応じてより低コストのモード(standard → quick → free)に切り替わるか、処理に失敗します。

同じ種類の長い文書を多数処理する場合、standard ではオプションのコレクション調整を利用できます。これは、その種類のセクションの見た目に関する短いガイダンステキストです。ライブラリが少数のサンプル PDF から作成できます(write_guidance、または section-anything guidance samples/*.pdf -o sheet.md)。作成したテキストはモデルへの指示に追加されます(Settings(heading_guidance=...))。デフォルトでは無効です。テストではガイダンスシートによって実際のセクションが除外されたため、quick はこれを無視します。事前登録テストでは、少数のサンプル文書からモデルが作成したシートにより、セクション F1 が Claude Haiku 5.5 で 0.081 向上し(95% CI +0.037 ~ +0.127、4 種類の文書 39 件)、gpt-6-luna で 0.028 向上しました(CI +0.006 ~ +0.053、文書 40 件)。代表性のないサンプルから作成したシートでは、スコアが低下することがあります。パッケージ READMEを参照してください。

quick と standard のデフォルトモデルは、上記の READoc スコアを記録した gpt-6-luna です。standard は、代わりに gpt-6.1-sol でも実行できます(SECTIONANY_STANDARD_MODEL=gpt-6.1-sol または model="gpt-6.1-sol")。コストは約 18 倍です。開発用文書のみ(READoc 論文 98 件と README 100 件、コードは同一)での評価では、README で 5.8 ポイント高く(95% CI +2.1 ~ +9.6)、論文で 0.9 ポイント高い結果でした(CI -0.3 ~ +2.1、統計的に有意ではありません)。この結果は、保留した文書では確認されていません。

インストール

Python 3.11 以降:

pip install section-anything
pip install "section-anything[anthropic]" # optional: Claude models on Anthropic's own API
pip install "section-anything[docling]"   # optional: tree.to_docling_document()
pip install "section-anything[langfuse]"  # optional Langfuse tracing
pip install "section-anything[mcp]"       # optional MCP server: section-anything-mcp
# latest from GitHub:
pip install "git+https://github.com/Omniwot/section-anything#subdirectory=packages/section-anything"

コマンドライン:

section-anything paper.pdf                                # free, Markdown headings
section-anything paper.pdf --mode quick --format json     # JSON with spans and cost
section-anything paper.pdf --mode standard --max-usd 0.5  # cap this document at $0.50

API キーは環境変数からのみ取得します(SECTIONANY_API_KEY、または OpenAI のエンドポイントでは OPENAI_API_KEY)。OpenAI 互換のエンドポイントであれば、どれでも動作します。Claude モデルは anthropic エクストラと ANTHROPIC_API_KEY を使って Anthropic 独自の API で実行します。開発用文書では、Claude Haiku 5.5 はデフォルトと同等の結果を約 3 倍のコストで達成しました(プロバイダー)。すべてのオプション、出力形式、信頼できない PDF に対するセキュリティモデルについては、packages/section-anything/README.mdを参照してください。

統合

セクションごとに1つのドキュメントを作成し、見出し階層、ページ、文字範囲をメタデータとして保持します。各パッケージの依存先は、section-anything とフレームワークのコアパッケージのみです。

pip install langchain-section-anything
pip install llama-index-readers-section-anything
pip install lightrag-section-anything
フレームワークパッケージ用途
LangChainlangchain-section-anythingSectionAnythingLoader("paper.pdf", mode="free").load()
LlamaIndexllama-index-readers-section-anythingSectionAnythingReader(mode="free").load_data("paper.pdf")、または SimpleDirectoryReader の .pdf リーダーとして使用
LightRAGlightrag-section-anythingLightRAG の見出しベースのチャンカー用パーサーエンジン(sectionany_free、sectionany_quick、…)。MinerU や Docling のサービスは不要です

これらの見出しに Docling の HybridChunker または Unstructured の chunk_by_title を実行するには、tree.to_docling_document() または tree.to_unstructured_elements() でツリーをエクスポートします(方法)。すでに Docling を使用している場合は、section("report.pdf", docling=doc) でレイアウトラベルをヒントとして利用でき、section(doc) では Docling のテキストからスキャン済み PDF のセクションを作成できます(方法)。

制限事項

  • PDF のテキストレイヤーを読み取ります。スキャン済み PDF は、事前に OCR を実行するか、Docling の出力を使用する必要があります (Docling との併用、オプトイン)。
  • 表、図、数式は構造化されず、テキストはセクションのテキスト内に残ります。
  • free は、PDF にブックマークまたは印刷された目次がある場合に最適です。ブックマークが完全に見える場合、そこに記載されていない見出しは除外されます。ブックマークが最上位の階層までしかない場合、実際の下位の見出しが失われます(README の約6%で5ポイントを超える損失が発生します)。SECTIONANY_DEMOTE_UNLISTED_HEADINGS='[]' でこの動作を無効にできます。
  • quick と standard は、設定したプロバイダーにテキストを送信します。

リポジトリ

パス内容
packages/section-anything/ライブラリと CLI(Apache-2.0)
packages/langchain-section-anything/LangChain ドキュメントローダー
packages/llama-index-readers-section-anything/LlamaIndex リーダー
packages/lightrag-section-anything/LightRAG パーサープラグイン
backend/、frontend/デモ用ウェブアプリ:PDF をアップロードして、強調表示されたセクションを確認できます(ドキュメント)
site/プロジェクトのウェブサイトとベンチマーク表(site/data/results.js)
corpus/テストコーパス:解答キー、結果、再構築用ツール(PDF は保存されません)
docs/解説:Qasper での RAG、Docling への貢献、計画、論文の草稿

データとクレジット

  • ベンチマークには READoc(データセットは MIT、Hugging Face)を使用し、READoc 独自のスコアリングコードを利用しています。このコードはここには含まれていません。
  • 未知の文書でのチェックには、HiPS の法律書の注釈(CC BY-NC 4.0)、英国政府の報告書(Open Government Licence v3)、カナダ連邦法(Justice Laws ウェブサイト)を使用します。
  • すべてのコーパスのソースとライセンスについては、corpus/DATA-LICENSES.md を参照してください。
  • このプロジェクトの引用方法については、CITATION.cff を参照してください。

ライセンス

コード:Apache-2.0(LICENSE、NOTICE)。corpus/ 内のデータには各ソースのライセンスが適用されます。詳細はcorpus/DATA-LICENSES.mdを参照してください。

コメント

MCP は初めてですか?

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

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