index、search、read、grep、neighborsのツールセットを使用して、LLMエージェントが必要に応じてドキュメントの特定のセクションを取得できるようにします。
別名 mi2arun/contextpull
- スター
- 0
- ツール
- —
- ダウンロード数(30日間)
- 352
- 最新バージョン
- 0.2.1
- 最終コミット
- 2026年11月4日
- ライセンス
- MIT
ContextPull MCPとは
ContextPullはMCPサーバーです。 index、search、read、grep、neighborsのツールセットを使用して、LLMエージェントが必要に応じてドキュメントの特定のセクションを取得できるようにします。.
プロジェクトのREADMEから生成された概要
ContextPull MCP server について
ContextPullは、大量のドキュメントコレクションを扱う開発者が、LLMエージェントに対して必要なドキュメントのセクションをオンデマンドで提供することを可能にします。ファイル全体をプロンプトに投入する代わりに、このシステムでは、常に存在する軽量なインデックスを使用して、エージェントが必要なコンテンツのみをプルできます。このアプローチにより、モデルが不要なデータを受け取るのを防ぎ、トークン使用量をより効果的に管理できます。
ユーザーはPython、TypeScript、またはGoを使用してサーバーをローカルにセットアップでき、単一のSQLiteファイルを使用して完全にオフラインで動作します。Markdown、text、docx、xlsx、pptx、PDFを含むさまざまなファイル形式をサポートしています。システムは、index、search、read、grep、neighborsの5つのコアツールを提供します。これにより、エージェントは特定のセクションの検索、テキストの逐次読み取り、または特定の見出しの周囲のコンテキストの特定を通じて、コーパス内をナビゲートできます。
Claude Codeやその他のMCP互換ホストとの統合は簡単です。開発者はドキュメントのフォルダを取り込んで検索可能なストアを作成でき、それをstdio経由で提供するか、読み取り専用の共有HTTPサーバーとして提供できます。
できること
- 1特定のポリシー詳細の取得searchおよびreadツールを使用して、エージェントに大規模なポリシー文書内の特定の条項を検索して読み取るよう指示します。
プロジェクトの README から作成されています。すべてのユースケースは、その引用と照らし合わせて確認されています。
ContextPull MCPのインストール方法
フォーマット検証日 2026年11月10日Cursor に追加Gooseに追加Claude CodeにContextPull MCPをインストール
$ claude mcp add contextpull -- uvx contextpullCursorにContextPull MCPをインストール
~/.cursor/mcp.json
{
"mcpServers": {
"contextpull": {
"command": "uvx",
"args": [
"contextpull"
]
}
}
}VS CodeにContextPull MCPをインストール
.vscode/mcp.json
{
"servers": {
"contextpull": {
"type": "stdio",
"command": "uvx",
"args": [
"contextpull"
]
}
}
}VS Code CLIにContextPull MCPをインストール
$ code --add-mcp '{"name":"contextpull","type":"stdio","command":"uvx","args":["contextpull"]}'Claude DesktopにContextPull MCPをインストール
claude_desktop_config.json
{
"mcpServers": {
"contextpull": {
"command": "uvx",
"args": [
"contextpull"
]
}
}
}CodexにContextPull MCPをインストール
$ codex mcp add contextpull -- uvx contextpullCodex config.tomlにContextPull MCPをインストール
~/.codex/config.toml
[mcp_servers.contextpull] command = "uvx" args = ["contextpull"]
Gemini CLIにContextPull MCPをインストール
$ gemini mcp add -s user contextpull uvx -- contextpullGemini settings.jsonにContextPull MCPをインストール
~/.gemini/settings.json
{
"mcpServers": {
"contextpull": {
"command": "uvx",
"args": [
"contextpull"
]
}
}
}自動チェック
実行日 2026年11月13日完全なレポート →自動チェックに合格しました。これはセキュリティ監査ではありません。コードを読み、サーバーに必要最小限のアクセス権を与えてください。 チェックの仕組み
- ソースリポジトリがリンクされており、アクセス可能mi2arun/contextpull is public and reachablegithub.com/mi2arun/contextpull ↗合格
- パッケージがこのリポジトリをソースとして指定contextpull, contextpull name mi2arun/contextpull as sourcepypi.org/project/contextpull/ ↗合格
- ビルドの来歴 (Sigstore 証明)Sigstore attestation for contextpullpypi.org/project/contextpull/ ↗合格
- オープンソースライセンス (OSI)MITspdx.org/licenses/MIT.html ↗合格
- 過去1年以内にコミットまたはリリースありLast commit or release 2026-11-04github.com/mi2arun/contextpull ↗合格
- OpenSSF Scorecard未チェック
- パッケージ名が有名なパッケージに酷似していないNo popular package one edit away from contextpull, contextpull合格
- パッケージおよびその依存関係に重大な勧告なし1 resolved dependencies checked; no critical advisoryosv.dev ↗合格
- モデルへの隠れた指示がない0 tool descriptions and the README read; no override phrases, credential paths or hidden characters合格
- 破壊的なツールがラベル付けされている未チェック
- リモートエンドポイントが MCP ハンドシェイクに応答未チェック
README
GitHubで見るContextPull
Website: https://mi2arun.github.io/contextpull/ · demo · docs · MCP Registry io.github.mi2arun/contextpull
Pull, don't push. ContextPull turns a folder of documents into something an LLM agent can pull from the way Claude Code pulls from a codebase: a small index that is always in context, and five tools that return exact sections on demand. The model never receives content it did not ask for.
Zero runtime dependencies. One SQLite file. Works offline.
ContextPull ships with a companion, ragbisect (formerly stagewise): a neutral benchmark harness that builds an eval set from your corpus and scores ContextPull next to bm25, dense and hybrid pipelines. Two names, one project, kept apart so the measurement stays independent of the thing it measures.
Status
M1 to M3 are built: store, ingest, the five operations, CLI, conformance suite, MCP server, Claude Code integration, LLM summaries, protocol client examples, ragbisect adapters, and a TypeScript reader and server. See the roadmap.
Measured
uv documentation, 603 sections, 221 self-generated questions, recall@5, from docs/testing.md:
| config | recall@5 | ms/q | model tokens/q |
|---|---|---|---|
| hybrid push (dense + bm25) | 0.964 | 69 | 0 |
| bm25 push | 0.923 | 5 | 0 |
| pull, Claude Code (10-question sample) | 1.000 | 26,565 | 86,656 |
| pull, gpt-5.4-mini with reasoning off | 0.615 | 16,023 | 10,891 |
A strong agent reads the right section every time; a small no-reasoning model reads the right section when it reads (NDCG 0.96 given a hit) but misses the gold section on 38% of questions. Push retrieval is nearly free per query; pull costs tens of thousands of tokens. Both facts are in the table on purpose. The model's own searches surfaced the gold section on 88% of a sample, so most of the gap is snippets being answered from rather than read; a stricter prompt did not change that. An earlier version of this table showed 0.045 for the small model; that number came from a threading bug in the benchmark adapter and is retracted in docs/testing.md.
Try it
Fastest: ./scripts/demo.sh ingests the bundled fixture corpus and walks through index, search, read and grep, then prints the exact claude mcp add line. ./scripts/demo.sh ./your-docs does the same on your own folder.
uv tool install contextpull # or: pip install contextpull (PyPI: contextpull 0.2.0)
contextpull ingest ./docs # writes .contextpull/store.sqlite
contextpull index # the always-in-context table of contents
contextpull search "refund window" --in policy-2025.md
contextpull read policy-2025.md#3 --context 1
contextpull grep TX-4419
contextpull neighbours specs.md#1
contextpull export-chunks > chunks.jsonl # ragbisect-compatible sections
In Claude Code
claude mcp add contextpull -- uvx --from "contextpull[mcp]" contextpull serve ./docs
The server ingests ./docs into ./docs/.contextpull/store.sqlite, puts the index into its instructions so it is always in context, and exposes the five tools. Ask a question; the trace shows search, then read, then an answer with [path.md#3] citations. contextpull claude-md prints a CLAUDE.md snippet if you want to tell the model about it explicitly. Add --summarizer openai:gpt-5.4-mini for model-written one-line summaries in the index (cached by document hash).
Any other MCP host works the same way; see examples/clients/ for TypeScript, Go and Java protocol clients and examples/direct_api_loop.py for using the tools straight from a model API with no server.
More
uv sync --extra pdf # PDFs: headings inferred from font size
uv run contextpull ingest ./docs --embed-model openai:text-embedding-3-small # enables: search --mode hybrid
uv run contextpull serve ./docs --transport http --port 8765 # streamable HTTP at /mcp for a shared read-only server
As a library
Embedding it in your own product, with access control and air-gap notes: docs/embedding.md and examples/embed_with_acl.py.
from contextpull import Store, Ops
with Store.open(".contextpull/store.sqlite") as store:
ops = Ops(store)
print(ops.index())
hits = ops.search("refund window", in_=["policy-2024.md", "policy-2025.md"]).hits
for h in hits:
print(h.id, h.heading_path, h.snippet)
section = ops.read(hits[0].id).section
Tool definitions for any model API are in contextpull.tools.TOOLS (Anthropic shape) and openai_tools(); tools.json at the repo root is the same thing for other languages.
How it works
- Ingest parses Markdown, text, docx, xlsx, pptx and (with the
pdfextra) PDF into headings, paragraphs, tables and code, and cuts heading-aware sections with stable ids likepolicy-2025.md#3. Tables and code are never split mid-block; long tables are split by rows and every part carries the header. Unchanged files are skipped on re-ingest. - Store is one SQLite file with an FTS5 index whose tokenizer keeps identifiers whole (
--no-cache,UV_CACHE_DIR,TX-4419,3.12). - Index is a token-budgeted table of contents, one line per document, delivered into the model's context. It goes hierarchical when a corpus is too large for the budget.
- Tools:
index,search(ids and snippets, never bodies),read(verbatim),grep(exact matches),neighbours(the header row, the next clause).
Node
sdk/typescript/ is a store-native reader and MCP server in TypeScript over better-sqlite3: open the same store file, no Python at query time. Published to npm as contextpull.
npx contextpull serve /path/store.sqlite # npm: contextpull 0.1.0
claude mcp add contextpull -- npx -y contextpull serve /path/store.sqlite
It passes the same conformance suite as the Python reference and returns identical results over MCP. Ingest stays in Python (npx contextpull ingest delegates to uvx contextpull ingest).
Go
sdk/go/ is a store-native reader and a single static binary server, pure Go, no cgo: the shape for a shared read-only deployment.
cd sdk/go && go build -o contextpull-server ./cmd/contextpull-server
./contextpull-server serve /data/store.sqlite --http 0.0.0.0:8765 # or without --http for stdio
Same conformance suite, identical results to Python over MCP.
Other languages
The store file is the contract. docs/store-format.md says what a reader must do; conformance/ holds a fixture corpus, its store and expected results. An SDK in any language is done when check passes. See the SDK plan.
Docs
Start at docs/README.md: architecture, design, system design, tool reference, evaluation, roadmap, decision records.
Measured with ragbisect, which lives next door.
ContextPull MCPのよくある質問
ContextPull MCPをClaude Codeに追加するには
ターミナルでclaude mcp add contextpull -- uvx contextpullを実行します。すべてのプロジェクトで利用するには--scope userを追加します。
ContextPull MCPをCursorに追加するには
~/.cursor/mcp.jsonを開き、上記のインストールセクションに示すCursor設定を使ってmcpServersの下にサーバーを追加します。
ContextPullの動作にインターネット接続は必要ですか?
いいえ、単一のSQLiteファイルを使用してオフラインで動作し、実行時の依存関係もありません。
ContextPullが読み込めるファイル形式は何ですか?
Markdown、text、docx、xlsx、pptx、およびPDFファイルを解析できます。
大きなテーブルやコードブロックはどのように処理されますか?
テーブルやコードがブロックの途中で分割されることはありません。長いテーブルは行単位で分割され、すべての部分にヘッダーが付与されます。