Universal Context Pipeline について
Universal Context Pipelineは、個人ファイルや過去のClaude会話をインデックス化するローカル優先のMCPサーバーです。単一のツールでハイブリッド検索と引用を提供し、オフラインでインデックス作成と検索を実行できます。
主な機能
- 01BM25とベクトルのハイブリッド検索
- 02コード構造を考慮した分割
- 03過去のClaude会話のインデックス化
- 04デフォルトの個人情報マスキング
- 05フォルダー変更の監視
- 06検索結果への引用付与
活用シーン
- 01ノート、コード、PDFの検索
- 02過去のClaude会話からの情報取得
- 03ローカルのプライベートファイルに基づく回答
- 04オフライン環境でのファイル検索
MCP 対応
MCP stdio経由で互換クライアントに`search_local_context`ツールを公開し、引用付きの検索結果を返します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
UCP — Universal Context Pipeline
LLM をお使いのファイルに基づかせる、ローカルファーストの MCP サーバーです。
UCP はお使いのマシン上のフォルダー(メモ、コード、会話のエクスポートなど)をインデックス化し、MCP 対応クライアント(Claude Desktop、Cursor、LM Studio、その他のローカルエージェント実行環境)から、単一のツール search_local_context として利用できるようにします。ハイブリッド検索(BM25 + ベクトル)、tree-sitter を活用したコードのチャンク分割、完全な引用、コンテンツハッシュによる埋め込みキャッシュを備えています。単一バイナリです。テレメトリーなし。クラウドなし。
LM Studio のローカルモデル(または ucp-local ask 経由の Ollama)と組み合わせると、インデックス化、埋め込み、検索、チャットモデルを含むスタック全体が完全オフラインで動作します。飛行機内、ネットワークから隔離された施設、あるいはクラウド LLM を利用できない場所でも使えます。
デモ
会話メモリ — 過去の Claude とのチャットをすべて、今後の各セッションから検索できるようにします。

エアギャップ RAG — ローカル Ollama + ローカルインデックスで、ネットワーク通信はゼロです。

クイックスタート — インストール、インデックス化、質問まで、1 分以内です。

対象ユーザー
| 該当する方… | UCP でできること… |
|---|---|
| Claude / Cursor / LM Studio のヘビーユーザー | 過去の AI との会話をすべて検索可能なアーカイブにし、今後のどのセッションからも search_local_context ツールとして呼び出せます。 |
| ソフトウェアエンジニア | コード、非公開ドキュメント、関連リポジトリ、過去の Claude とのチャットを 1 つの MCP ツールにまとめ、Cursor や Claude Code 内で、それぞれに組み込まれたインデクサーと併用できます。 |
| 研究者、ライター、学術関係者 | PDF とメモのコーパスを対象に、行単位の引用付きで根拠に基づく質問ができます。データがマシンの外に出ることはありません。 |
| プライバシー規制のあるワークフロー(法律、医療、防衛、NDA の対象となる知的財産)に携わる方 | テレメトリーもクラウドも一切ない、単一の Rust バイナリを利用できます。LM Studio と組み合わせれば、完全オフラインのエンドツーエンド RAG スタックを構築できます。 |
| 個人事業主やコンサルタント | folder_filter によってフォルダーごとにクライアントを分離でき、クライアント A のコンテキストがクライアント B のセッションに漏れる心配がありません。 |
対象ユーザーの詳細な分析、競合比較、そして UCP が明確に強みを発揮する 2 つの領域については、POSITIONING.md をご覧ください。
ステータス
v0.1、ヘッドレスです。ROADMAP.md で対応範囲を確認してください。
提供機能:
- ハイブリッド検索:SQLite FTS5(BM25)⨉
sqlite-vec(ANN)を逆順位融合で統合します。 - Rust、Python、TypeScript/JavaScript の tree-sitter によるチャンク分割。見出しを考慮した Markdown 分割。文境界で区切るプレーンテキストのフォールバック。
- 会話メモリ:Claude の
conversations.jsonエクスポートを取り込み、過去のチャットを横断検索できます。 - デフォルトで PII をマスキングします — メールアドレス、OpenAI の
sk-、AWS キー、GitHub PAT、JWT。 - コンテンツハッシュによる埋め込みキャッシュ:変更のないコンテンツを再インデックス化しても、Ollama の呼び出しは発生しません。
- ファイルシステムウォッチャー:ファイルを編集すると、インデックスが約 500ms で更新されます。
v0.1 に含まれない機能:
- デスクトップ UI / トレイ(延期 — 当初の仕様にはありましたが、現在は ROADMAP の Tier 2 以降に移動しています)。
- OS ホットキーインジェクターと HTTP プロキシインターセプター(当初の仕様から削除しました)。
- OpenAI / Anthropic の埋め込みプロバイダー(現時点では Ollama のみ)。
- Cursor と ChatGPT のエクスポート形式(Claude のみ。その他は後日対応予定)。
前提条件
UCP の利用には、マシン上に 3 つのものが必要です。Rust(ビルド用)、Ollama(埋め込み用および任意でチャット用)、Poppler(高精度な PDF テキスト抽出用。推奨)。
macOS
brew install ollama poppler
ollama serve & # or use the menu-bar app
ollama pull nomic-embed-text
# Optional, for `ucp-local ask`: ollama pull llama3.2
Linux(Debian/Ubuntu)
sudo apt install poppler-utils
curl -fsSL https://ollama.com/install.sh | sh
ollama pull nomic-embed-text
# Optional, for `ucp-local ask`: ollama pull llama3.2
Linux(Fedora/RHEL)
sudo dnf install poppler-utils
curl -fsSL https://ollama.com/install.sh | sh
ollama pull nomic-embed-text
Windows
choco install poppler ollama # or install each manually
ollama pull nomic-embed-text
ソースからビルドする場合に限り、Rust(stable、edition 2024)が必要です。ビルド済みの UCP バイナリをインストールする場合は、Rust のインストールを省略してください。
Poppler は任意ですが、推奨します。 Poppler がない場合、UCP は PDF の処理に同梱の
pdf-extractだけを使用します。この方法は、本文フォントに ToUnicode CMap がない PDF の処理が苦手です(見出しは抽出されても、本文が欠落することがあります)。Poppler のpdftotextが PATH にあれば、UCP は自動的にそれを代わりに使用します。
インストール
名前に関する注意。 crates.io ではクレートが
ucp-localとして公開されています。ucpという名前はすでに使用されていたためです。PATH 上のバイナリ名もucp-local(コマンドラインで入力する名前)で、ライブラリはuse ucp_local::...としてインポートします。
crates.io から
cargo install ucp-local
# Puts the `ucp-local` binary on your PATH
ソースから
git clone <repo-url> ucp-local
cd ucp-local
cargo build --release
# Binary at target/release/ucp-local
cargo install --path . # optional, to put `ucp-local` on your PATH
使い方
# Index one folder
ucp-local index ~/Documents/notes
# Index multiple folders into the same store
ucp-local index ~/Documents/notes ~/code/my-project ~/research
# Watch a folder and re-index on changes (initial pass runs first)
ucp-local watch ~/code/my-project
# Clear the index — soft (keeps the embedding cache so re-index is fast)
ucp-local clear
# Clear only one folder's chunks
ucp-local clear ~/Documents/notes
# Hard reset — also wipes the embedding cache, forces re-embed on next index
ucp-local clear --hard --yes
# Ingest a Claude conversations.json export
ucp-local ingest-conversations ~/Downloads/claude-export/conversations.json
# Show config + index status
ucp-local status
# Run the MCP server over stdio (this is what MCP clients launch)
ucp-local serve
# Search the index from the terminal (no LLM) — best for debugging "did indexing actually capture this?"
ucp-local search "your query here"
ucp-local search "rate limiting" --folder ~/code/my-project --limit 10
# Ask a question — runs search internally, then a local chat model answers with citations
ucp-local ask "what does the rate limiter do when a token bucket runs out?"
ucp-local ask "summarize my Q3 plan" --model qwen2.5
MCP クライアントの接続
UCP は stdio 経由で MCP を使用するため、MCP サーバーを起動するクライアントであれば利用できます。serve コマンドは共通で、クライアントごとに設定ファイルが異なります。
Claude Desktop
macOS では ~/Library/Application Support/Claude/claude_desktop_config.json(Windows では %APPDATA%\Claude\claude_desktop_config.json)に追加します。
{
"mcpServers": {
"ucp-local": {
"command": "/full/path/to/ucp-local",
"args": ["serve"]
}
}
}
Claude Desktop を再起動します。search_local_context ツールが利用可能になります。インデックス化したファイルに基づいて質問すると、回答内に引用が表示されます。
Cursor
Cursor は MCP サーバーを ~/.cursor/mcp.json(またはプロジェクトごとの .cursor/mcp.json)から読み込みます。
{
"mcpServers": {
"ucp-local": {
"command": "/full/path/to/ucp-local",
"args": ["serve"]
}
}
}
Cursor を再読み込みします。チャットのサイドバーに search_local_context がツールとして表示されます。これは、Cursor 自身の @codebase インデクサーでは参照できないリポジトリやドキュメント(プライベートなメモ、会話履歴、隣接するリポジトリなど)をエージェントが参照するのに便利です。
LM Studio(完全オフライン)
LM Studio 0.3.17 以降は MCP に対応しています。チャット設定を開き、MCP servers セクションを見つけて、次の内容を追加します。
{
"mcpServers": {
"ucp-local": {
"command": "/full/path/to/ucp-local",
"args": ["serve"]
}
}
}
UCP を、LM Studio にダウンロード済みの任意のローカルモデル(Llama、Qwen、Mistral など)と組み合わせます。これで、インデックス化、埋め込み、検索、チャットモデルのすべてが同じマシン上で動作します。クラウドもネットワークも不要で、LLM は引き続き search_local_context を呼び出して、回答の根拠としてファイルを参照できます。
その他の MCP クライアント
MCP 仕様に準拠したクライアント(Zed、Continue.dev、Goose、カスタム Agent SDK アプリなど)であれば、同じ command と args の形式を使用できます。クライアントが JSON-RPC stdio サーバーを必要とする場合は、ucp-local serve を指定するだけで使えます。
設定
~/.config/ucp/config.toml(またはプラットフォームに応じたパス。解決されたパスは ucp-local status で表示されます)。すべてのフィールドは省略可能です。デフォルト値は次のとおりです。
[ollama]
host = "http://localhost:11434"
embedding_model = "nomic-embed-text"
[chunking]
max_tokens = 512
overlap_sentences = 1
インデックス化の対象
拡張子で判定します:md、markdown、txt、rs、py、ts、tsx、js、jsx、mjs、go、pdf。
PDF: テキストは
pdf-extractで抽出され、散文としてチャンク化されます。デジタル生成された PDF(論文、ドキュメント、エクスポートしたメモなど)では良好に動作します。スキャンされた画像のみの PDF には対応できません。その場合は OCR が必要です(v0.2 以降)。引用の行番号は PDF のページ番号ではなく、抽出したプレーンテキストを参照します。ページを考慮した引用は v0.2 の予定リストにあります。
スキップされるディレクトリ:.git、.idea、.vscode、target、node_modules、__pycache__、.venv、venv、dist、build、.next、.nuxt、coverage、.pytest_cache、.mypy_cache。ドットファイルはスキップされます。
アーキテクチャ
| モジュール | 役割 |
|---|---|
ingestion | マスキング+形式ごとのチャンク化(散文/Markdown/tree-sitter によるコード)+ディスパッチャー |
storage | rusqlite+sqlite-vec+FTS5。RRF によるハイブリッド検索 |
embeddings | OllamaClient+EmbeddingCache::hash によるコンテンツハッシュキャッシュ |
indexer | 走査+読み込み+チャンク化+埋め込み+挿入。単一ファイルと一括チャンクの処理経路 |
watcher | notify ベースのデバウンス付き再インデックス化 |
mcp | JSON-RPC 2.0 stdio サーバー。ツールは search_local_context の 1 つ |
開発者向けのアーキテクチャ概要は CLAUDE.md を、元の(現在は対象範囲がより狭くなっている)設計ドキュメントは Universal Context Pipeline Specification.md を参照してください。
開発
cargo test # full test suite
cargo test --lib ingestion # one module
cargo run -- index <path> # iterate against the dev build
RUST_LOG=ucp_local=info cargo run -- watch <path> # verbose
変更履歴
リリース履歴と注記はCHANGELOG.mdに記載されています。現在公開されているバージョンは0.1.0(crates.io)です。
ライセンス
Apache-2.0 の下で提供されています。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。