massive-context-mcp について
massive-context-mcpはRecursive Language Modelパターンに基づくMCPサーバーで、外部コンテキスト、分割、サブクエリを使って大規模な入力を分析します。結果を集約でき、Ollamaによるローカル推論とClaude SDKを状況に応じて選択します。
主な機能
- 01プロンプト外でのコンテキスト読み込みと確認
- 02行・文字・段落単位の分割
- 03並列サブクエリと結果の集約
- 04サンドボックス化したPythonで処理
- 05OllamaまたはClaude SDKの自動選択
活用シーン
- 01長い文書の分析と要点抽出
- 02大規模なコードやログの問題調査
- 03分割した内容のセキュリティ確認
- 04Pythonによる決定的なデータ抽出
MCP 対応
MCPサーバーとして、コンテキストの読み込み、確認、分割、フィルタリング、実行、サブクエリ、結果集約のツールをクライアントに提供します。Ollamaの状態確認とセットアップ用ツールも備えています。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
17掲載時のツール一覧 · 3 週間前に更新
このツールにパラメーターはありません。
詳細
Massive Context MCP
チャンク分割、サブクエリ、Ollama による無料のローカル推論を使って、巨大なコンテキスト(1,000万トークン以上)を処理します。
flowchart TD
A[Claude Code] --> B[RLM MCP Server]
B --> C{rlm_ollama_status}
C -->|cached 60s| D{provider = auto}
D -->|Ollama running| E[🦙 Ollama<br/>gemma3:12b]
D -->|Ollama unavailable| F[☁️ Claude SDK<br/>claude-haiku-4-5]
E --> G[["💰 $0<br/>Free local inference"]]
F --> H[["💰 ~$0.80/1M<br/>Cloud inference"]]
style A fill:#ff922b,color:#fff
style B fill:#339af0,color:#fff
style E fill:#51cf66,color:#fff
style F fill:#748ffc,color:#fff
style G fill:#51cf66,color:#fff
style H fill:#748ffc,color:#fff
Recursive Language Model パターンに基づいています。richardwhiteii/rlmに着想を得ています。
📸 スクリーンショット

基本的な考え方
巨大なコンテキストを LLM に直接入力するのではなく、次のように処理します。
- コンテキストを外部変数として読み込みます(プロンプトには含まれません)。
- プログラムで構造を調べます。
- 行、文字、段落単位で戦略的にチャンク分割します。
- チャンクに対して再帰的にサブクエリを実行します。
- 結果を集約して最終的な統合を行います。
クイックスタート
インストール
オプション 1:PyPI(推奨)
uvx massive-context-mcp
# or
pip install massive-context-mcp
オプションの追加機能を含める場合:
# With Code Firewall integration (security filter for rlm_exec)
pip install massive-context-mcp[firewall]
# With Claude Agent SDK (for programmatic Claude API access)
pip install massive-context-mcp[claude]
# With all extras
pip install massive-context-mcp[firewall,claude]
オプション 2:Claude Desktop のワンクリックインストール
Releasesから.mcpbをダウンロードし、ダブルクリックしてインストールします。
オプション 3:ソースからインストール
git clone https://github.com/egoughnour/massive-context-mcp.git
cd massive-context-mcp
uv sync
Claude Code / Claude Desktop に接続する
~/.claude/.mcp.json(Claude Code)またはclaude_desktop_config.json(Claude Desktop)に追加します。
{
"mcpServers": {
"massive-context": {
"command": "uvx",
"args": ["massive-context-mcp"],
"env": {
"RLM_DATA_DIR": "~/.rlm-data",
"OLLAMA_URL": "http://localhost:11434"
}
}
}
}
ツール
セットアップとステータスのツール
| ツール | 目的 |
|---|---|
rlm_system_check | システム要件を確認 — macOS、Apple Silicon、16GB 以上の RAM、Homebrew を検証します |
rlm_setup_ollama | Homebrew 経由でインストール — 管理対象サービス、自動更新、Homebrew が必要です |
rlm_setup_ollama_direct | 直接ダウンロードでインストール — sudo 不要、完全ヘッドレス、制限されたマシンでも動作します |
rlm_ollama_status | Ollama の利用可否を確認 — 無料のローカル推論が利用可能かどうかを検出します |
分析ツール
| ツール | 目的 |
|---|---|
rlm_auto_analyze | ワンステップ分析 — 種類の自動検出、チャンク分割、クエリの実行 |
rlm_load_context | コンテキストを外部変数として読み込む |
rlm_inspect_context | プロンプトに読み込まずに構造情報を取得する |
rlm_chunk_context | 行/文字/段落単位でチャンク分割する |
rlm_get_chunk | 特定のチャンクを取得する |
rlm_filter_context | 正規表現でフィルタリングする(一致する行を保持/削除) |
rlm_exec | 読み込み済みのコンテキストに対して Python コードを実行する(サンドボックス内) |
rlm_sub_query | チャンクに対してサブ LLM 呼び出しを行う |
rlm_sub_query_batch | 複数のチャンクを並列処理する |
rlm_store_result | 集約用にサブ呼び出しの結果を保存する |
rlm_get_results | 保存済みの結果を取得する |
rlm_list_contexts | 読み込み済みのコンテキストをすべて一覧表示する |
rlm_auto_analyze によるクイック分析
ほとんどの場合、rlm_auto_analyze を使うだけで、すべてが自動的に処理されます。
rlm_auto_analyze(
name="my_file",
content=file_content,
goal="find_bugs" # or: summarize, extract_structure, security_audit, answer:<question>
)
自動的に行う処理:
- コンテンツの種類を検出します(Python、JSON、Markdown、ログ、文章、コード)
- 最適なチャンク分割方法を選択します
- コンテンツの種類に合わせてクエリを調整します
- サブクエリを並列実行します
- 集約した結果を返します
サポートされている目標:
| 目標 | 説明 |
|---|---|
summarize | コンテンツの目的と要点を要約します |
find_bugs | エラー、問題、潜在的な不具合を特定します |
extract_structure | 関数、クラス、スキーマ、見出しを一覧表示します |
security_audit | 脆弱性とセキュリティ上の問題を見つけます |
answer:<question> | コンテンツに関するカスタム質問に回答します |
rlm_exec によるプログラム分析
決定論的なパターンマッチングやデータ抽出には、rlm_exec を使って、読み込み済みのコンテキストに対して Python コードを直接実行します。これは論文の REPL アプローチに近く、分析ロジックを完全に制御できます。
ツール:rlm_exec
目的:サンドボックス化されたサブプロセスで、読み込み済みのコンテキストに対して任意の Python コードを実行します。
パラメーター:
code(必須):実行する Python コードです。出力を取得するには、result変数に値を設定します。context_name(必須):以前に読み込んだコンテキストの名前です。timeout(任意、デフォルト 30):最大実行時間(秒)です。
機能:
- 読み取り専用の
context変数としてコンテキストを利用できます - 事前にインポート済みのモジュール:
re、json、collections - サブプロセスによる分離(サーバーがクラッシュしません)
- タイムアウトの適用
- Python が動作するあらゆるシステムで利用可能(Docker は不要です)
例 — 読み込み済みのコンテキスト内でパターンを検索する:
# After loading a context
rlm_exec(
code="""
import re
amounts = re.findall(r'\$[\d,]+', context)
result = {'count': len(amounts), 'sample': amounts[:5]}
""",
context_name="bill"
)
応答例:
{
"result": {
"count": 1247,
"sample": ["$500", "$1,000", "$250,000", "$100,000", "$50"]
},
"stdout": "",
"stderr": "",
"return_code": 0,
"timed_out": false
}
例 — 構造化データを抽出する:
rlm_exec(
code="""
import re
import json
# Find all email addresses
emails = re.findall(r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b', context)
# Count by domain
from collections import Counter
domains = [e.split('@')[1] for e in emails]
domain_counts = Counter(domains)
result = {
'total_emails': len(emails),
'unique_domains': len(domain_counts),
'top_domains': domain_counts.most_common(5)
}
""",
context_name="dataset",
timeout=60
)
rlm_exec と rlm_sub_query の使い分け:
| ユースケース | ツール | 理由 |
|---|---|---|
| すべての日付、ID、金額を抽出する | rlm_exec | 正規表現は決定論的で高速です |
| セキュリティ上の脆弱性を見つける | rlm_sub_query | 推論とコンテキストが必要です |
| JSON/XML 構造を解析する | rlm_exec | 標準ライブラリで十分に処理できます |
| テーマやトーンを要約する | rlm_sub_query | 自然言語の理解が必要です |
| 単語の出現頻度を数える | rlm_exec | 単純な計算で、AI は不要です |
| 「なぜ X が起きたのか?」に回答する | rlm_sub_query | 推論と論理的な考察が必要です |
ヒント:大きなコンテキストでは、両方を組み合わせます。rlm_exec でフィルタリング/抽出してから、フィルタリング済みの結果を意味的に分析するために rlm_sub_query を使います。
Code Firewall との統合(任意)
セキュリティを強化するには、実行前に危険なコードパターンをフィルタリングする code-firewall-mcp と統合します。
pip install massive-context-mcp[firewall]
インストールすると、rlm_exec は既知の危険なパターン(例:os.system()、eval()、shell=True を指定した subprocess)に照らしてコードを自動的にチェックできます。ファイアウォールは構造的類似性マッチングを使用し、コードを骨格に正規化して、埋め込み表現を介してブラックリストのパターンと比較します。
仕組み:
- コードを構文木に解析して正規化します(識別子 →
_、文字列 →"S") - 正規化された構造を Ollama で埋め込みます
- ChromaDB 内のブラックリストパターンと類似性を照合します
- 類似性がしきい値(デフォルト:0.85)を超えると、コードをブロックします
設定(環境変数):
RLM_FIREWALL_ENABLED=true— ファイアウォールのチェックを有効にします(パッケージのインストール時に自動的に有効になります)RLM_FIREWALL_MODE=warn|block— 一致した場合に警告するかブロックします(デフォルト:warn)
ブロックされるパターンの例:
os.system(user_input)— コマンドインジェクションeval(untrusted_data)— コードインジェクションsubprocess.Popen(..., shell=True)— シェルインジェクション
rlm_firewall_status を使用すると、ファイアウォールの利用可否と設定を確認できます。
プロバイダーと自動検出
RLM は利用可能な最適なプロバイダーを自動検出して使用します。
| プロバイダー | デフォルトモデル | コスト | ユースケース |
|---|---|---|---|
auto | (利用可能な最適なもの) | $0 または約$0.80/1M | デフォルト — 利用可能な場合は Ollama を優先します |
ollama | gemma3:12b | $0 | ローカル推論。Ollama が必要です |
claude-sdk | claude-haiku-4-5 | 入力100万トークンあたり約$0.80 | クラウド推論。常に利用可能です |
自動検出の仕組み
provider="auto"(デフォルト)を使用すると、RLM は次の処理を行います。
OLLAMA_URL(デフォルト:http://localhost:11434)で Ollama が実行中かどうかを確認します- gemma3:12b(または任意の gemma3 バリアント)が利用可能かどうかを確認します
- Ollama が利用可能な場合は使用し、それ以外の場合は Claude SDK にフォールバックします
ネットワークチェックの繰り返しを避けるため、ステータスは60秒間キャッシュされます。
Ollama のステータスを確認する
rlm_ollama_status を使用すると、利用可能なものを確認できます。
rlm_ollama_status()
Ollama の準備ができている場合のレスポンス:
{
"running": true,
"models": ["gemma3:12b", "llama3:8b"],
"default_model_available": true,
"best_provider": "ollama",
"recommendation": "Ollama is ready! Sub-queries will use free local inference by default."
}
Ollama が利用できない場合のレスポンス:
{
"running": false,
"error": "connection_refused",
"best_provider": "claude-sdk",
"recommendation": "Ollama not available. Sub-queries will use Claude API. To enable free local inference, install Ollama and run: ollama serve"
}
透過的なプロバイダー選択
すべてのサブクエリのレスポンスには、実際に使用されたプロバイダーが含まれます。
{
"provider": "ollama",
"model": "gemma3:12b",
"requested_provider": "auto",
"response": "..."
}
自律的な使用
手動で呼び出さなくても、Claude が RLM ツールを自動的に使用できるようにします。
1. CLAUDE.md との統合
CLAUDE.md.example の内容をプロジェクトの CLAUDE.md(グローバルに設定する場合は ~/.claude/CLAUDE.md)にコピーし、Claude が必要に応じて RLM ツールを自動的に使用するように設定します。
2. フックのインストール
.claude/hooks/ ディレクトリをプロジェクトにコピーして、10KB を超えるファイルを読み取る際に RLM を自動的に提案します。
cp -r .claude/hooks/ /Users/your_username/your-project/.claude/hooks/
フックはガイダンスを提供しますが、読み取りをブロックすることはありません。
3. スキルのリファレンス
包括的な RLM ガイダンスを利用するには、.claude/skills/ ディレクトリをコピーします。
cp -r .claude/skills/ /Users/your_username/your-project/.claude/skills/
これらを設定すると、Claude は大きなファイルをコンテキストに直接読み込む代わりに、RLM を使用すべきタイミングを自律的に検出します。
Ollama のセットアップ(無料のローカル推論)
RLM は Apple Silicon 搭載の macOS で Ollama を自動的にインストールして設定できます。インストール方法は2つあり、それぞれ異なるトレードオフがあります。
インストール方法の選択
| 項目 | rlm_setup_ollama(Homebrew) | rlm_setup_ollama_direct(直接ダウンロード) |
|---|---|---|
| sudo が必要か | Homebrew がインストールされていない場合のみ | ❌ 不要 |
| Homebrew が必要か | ✅ はい | ❌ いいえ |
| 自動更新 | ✅ はい(brew upgrade) | ❌ 手動 |
| サービス管理 | ✅ brew services(launchd) | ⚠️ ollama serve(フォアグラウンド) |
| インストール先 | /opt/homebrew/ | ~/Applications/ |
| 制限の厳しいマシン | ⚠️ 失敗する場合があります | ✅ 動作します |
| 完全なヘッドレス環境 | ⚠️ sudo を求められる場合があります | ✅ はい |
推奨事項:
- Homebrew がインストールされており、更新を管理したい場合は、Homebrew 方式を使用してください
- 自動化、制限の厳しいマシン、または管理者アクセス権がない場合は、直接ダウンロードを使用してください
方法 1:Homebrew によるインストール(Homebrew がある場合に推奨)
# 1. Check if your system meets requirements
rlm_system_check()
# 2. Install via Homebrew
rlm_setup_ollama(install=True, start_service=True, pull_model=True)
実行内容:
- Homebrew 経由で Ollama をインストールします(
brew install ollama) - 管理されたバックグラウンドサービスとして Ollama を起動します(
brew services start ollama) - gemma3:12b モデルをダウンロードします(約 8GB)
要件:
- Apple Silicon(M1/M2/M3/M4)搭載の macOS
- 16GB 以上の RAM(gemma3:12b の実行には約 8GB が必要です)
- Homebrew がインストールされていること
方法 2:直接ダウンロード(完全なヘッドレス環境、sudo 不要)
# 1. Check system (Homebrew NOT required for this method)
rlm_system_check()
# 2. Install via direct download - no sudo, no Homebrew
rlm_setup_ollama_direct(install=True, start_service=True, pull_model=True)
実行内容:
- https://ollama.com/download/Ollama-darwin.zip から Ollama をダウンロードします
~/Applications/Ollama.appに展開します(ユーザーディレクトリのため、管理者権限は不要です)ollama serve経由で Ollama を起動します(バックグラウンドプロセス)- gemma3:12b モデルをダウンロードします
要件:
- Apple Silicon(M1/M2/M3/M4)搭載の macOS
- 16GB 以上の RAM
- 特別な権限は必要ありません!
PATH に関する注意: 直接インストールした場合、CLI は次の場所にあります:
~/Applications/Ollama.app/Contents/Resources/ollama
必要に応じて、シェルの設定に追加してください:
export PATH="$HOME/Applications/Ollama.app/Contents/Resources:$PATH"
RAM が少ないシステムの場合
どちらのインストール方法でも、より小さなモデルを使用できます:
rlm_setup_ollama(install=True, start_service=True, pull_model=True, model="gemma3:4b")
# or
rlm_setup_ollama_direct(install=True, start_service=True, pull_model=True, model="gemma3:4b")
手動セットアップ
手動でインストールする場合、または別のプラットフォームを使用している場合:
-
https://ollama.ai から、または Homebrew 経由で Ollama をインストールします:
brew install ollama -
サービスを起動します:
brew services start ollama # or: ollama serve -
モデルをダウンロードします:
ollama pull gemma3:12b -
動作を確認します:
rlm_ollama_status()
プロバイダーの選択
RLM は、利用可能な場合に Ollama を自動的に使用します。特定のプロバイダーを指定することもできます:
# Auto-detection (default) - uses Ollama if available
rlm_sub_query(query="Summarize", context_name="doc")
# Explicitly use Ollama
rlm_sub_query(query="Summarize", context_name="doc", provider="ollama")
# Explicitly use Claude SDK
rlm_sub_query(query="Summarize", context_name="doc", provider="claude-sdk")
使用例
基本的なパターン
# 0. (Optional) First-time setup on macOS - choose ONE method:
# Option A: Homebrew (if you have it)
rlm_system_check()
rlm_setup_ollama(install=True, start_service=True, pull_model=True)
# Option B: Direct download (no sudo, fully headless)
rlm_system_check()
rlm_setup_ollama_direct(install=True, start_service=True, pull_model=True)
# 0b. (Optional) Check if Ollama is available for free inference
rlm_ollama_status()
# 1. Load a large document
rlm_load_context(name="report", content=<large document>)
# 2. Inspect structure
rlm_inspect_context(name="report", preview_chars=500)
# 3. Chunk into manageable pieces
rlm_chunk_context(name="report", strategy="paragraphs", size=1)
# 4. Sub-query chunks in parallel (auto-uses Ollama if available)
rlm_sub_query_batch(
query="What is the main topic? Reply in one sentence.",
context_name="report",
chunk_indices=[0, 1, 2, 3],
concurrency=4
)
# 5. Store results for aggregation
rlm_store_result(name="topics", result=<response>)
# 6. Retrieve all results
rlm_get_results(name="topics")
2MB のドキュメントを処理する
H.R.1 法案(2MB)でテスト済み:
# Load
rlm_load_context(name="bill", content=<2MB XML>)
# Chunk into 40 pieces (50K chars each)
rlm_chunk_context(name="bill", strategy="chars", size=50000)
# Sample 8 chunks (20%) with parallel queries
# (auto-uses Ollama if running, otherwise Claude SDK)
rlm_sub_query_batch(
query="What topics does this section cover?",
context_name="bill",
chunk_indices=[0, 5, 10, 15, 20, 25, 30, 35],
concurrency=4
)
結果:トピックを包括的に抽出できます。費用は 0 ドル(Ollama 使用時)、または約 0.02 ドル(Claude 使用時)です。
『戦争と平和』(3.3MB)を分析する
Project Gutenberg のトルストイの大作を文学的に分析します:
# Download the text
curl -o war_and_peace.txt https://www.gutenberg.org/files/2600/2600-0.txt
# Load into RLM (3.3MB, 66K lines)
rlm_load_context(name="war_and_peace", content=open("war_and_peace.txt").read())
# Chunk by lines (1000 lines per chunk = 67 chunks)
rlm_chunk_context(name="war_and_peace", strategy="lines", size=1000)
# Sample 10 chunks evenly across the book (15% coverage)
sample_indices = [0, 7, 14, 21, 28, 35, 42, 49, 56, 63]
# Extract characters from each sampled section
rlm_sub_query_batch(
query="List major characters in this section with brief descriptions.",
context_name="war_and_peace",
chunk_indices=sample_indices,
provider="claude-sdk", # Haiku 4.5
concurrency=8
)
結果:小説全体を通じた登場人物の変遷を完全に追跡できます。理想主義者から囚人を経て夫となるピエールの歩み、ナターシャの成長、兵士から地主となるニコライ・ロストフの歩みを、すべて約 0.03 ドルで分析できます。
| 指標 | 値 |
|---|---|
| ファイルサイズ | 3.35 MB |
| 行数 | 66,033 |
| チャンク数 | 67 |
| サンプリング数 | 10(15%) |
| 費用 | 約 0.03 ドル |
データの保存
graph TD
A[("$RLM_DATA_DIR")] --> B["📁 contexts/"]
A --> C["📁 chunks/"]
A --> D["📁 results/"]
B --> B1[".txt files"]
B --> B2[".meta.json"]
C --> C1["by context name"]
D --> D1[".jsonl files"]
style A fill:#339af0,color:#fff
style B fill:#51cf66,color:#fff
style C fill:#51cf66,color:#fff
style D fill:#51cf66,color:#fff
コンテキストはセッションをまたいで保持されます。チャンク化されたコンテキストは、再利用できるようにキャッシュされます。
学習用プロンプト
これらのプロンプトを Claude Code で使用して、コードベースを調べ、RLM のパターンを学習してください。コードが唯一の信頼できる情報源です。
ツールを理解する
Read src/rlm_mcp_server.py and list all RLM tools with their parameters and purpose.
Explain the chunking strategies available in rlm_chunk_context.
When would I use each one?
What's the difference between rlm_sub_query and rlm_sub_query_batch?
Show me the implementation.
アーキテクチャを理解する
Read src/rlm_mcp_server.py and explain how contexts are stored and persisted.
Where does the data live?
How does the claude-sdk provider extract text from responses?
Walk me through _call_claude_sdk.
What happens when I call rlm_load_context? Trace the full flow.
実践的な学習
Load the README as a context, chunk it by paragraphs,
and run a sub-query on the first chunk to summarize it.
Show me how to process a large file in parallel using rlm_sub_query_batch.
Use a real example.
I have a 1MB log file. Walk me through the RLM pattern to extract all errors.
RLM の拡張
Read the test file and explain what scenarios are covered.
What edge cases should I be aware of?
How would I add a new chunking strategy (e.g., by regex delimiter)?
Show me where to modify the code.
How would I add a new provider (e.g., OpenAI)?
What functions need to change?
ライセンス
MIT
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。