Universal Context Pipeline
About
Local-first MCP server that indexes folders, PDFs, code, and past AI conversations — and exposes them as a single grounded-search tool. Runs fully offline.
Details
- Author
- akshay2211
- Downloads
- 260
- Categories
- File Management, Other, Search, Knowledge Base
Jump to
- Indexes folders, PDFs, code, and past AI conversations
- Exposes indexed content as a single grounded-search tool
- Runs fully offline
- Local-first architecture
Setting up with Highlight
This MCP is not yet compatible with Highlight’s one-click setup. However, you can still use it with Highlight by following these steps:
- Download and install Highlight from highlightai.com/download
- Navigate to the plugins tab and select "Add Custom Plugin"
-
Configure the plugin with the settings below
Plugin Name
Universal Context PipelineCommand (node, npx, python, etc.)Please refer to the README for specific instructions on how to obtain API keys or other required environment variables.
- Enable "Start Automatically" if you want the plugin to start when Highlight launches
From the repository
—
Claude Desktop / Cursor
Paste into your MCP client config file to install this server.
{
"mcpServers": {
"universal context pipeline": {
"ucp-local": {
"command": "/full/path/to/ucp-local",
"args": [
"serve"
]
}
}
}
}
McpServers
{
"ucp-local": {
"command": "/full/path/to/ucp-local",
"args": [
"serve"
]
}
}
A local-first MCP server that grounds LLMs in your own files.
UCP indexes folders on your machine — notes, code, conversation exports — and exposes them to any MCP-compatible client (Claude Desktop, Cursor, LM Studio, and other local-agent runtimes) as a single tool:search_local_context. Hybrid retrieval (BM25 + vector), tree-sitter-aware code chunking, full citations, content-hash embedding cache. Single binary. No telemetry. No cloud.
Paired with a local model in LM Studio (or Ollama viaucp-local ask), the whole stack — indexing, embeddings, retrieval, and the chat model — runs fully offline. Works on a plane, in an air-gapped facility, or anywhere a cloud LLM isn't an option.
Conversation memory — make every past Claude chat searchable across every future session.
Air-gap RAG — local Ollama + local index, zero network traffic.
Quick start — install, index, ask, in under a minute.
Full audience analysis, competitive comparison, and the two wedges UCP is explicitly built to win on: seePOSITIONING.md.
v0.1, headless. Track scope inROADMAP.md.
- Hybrid search: SQLite FTS5 (BM25) ⨉sqlite-vec(ANN) merged via reciprocal-rank fusion.
- Tree-sitter chunking for Rust, Python, TypeScript/JavaScript. Heading-aware Markdown. Sentence-bounded prose fallback.
- Conversation memory: ingest your Claudeconversations.jsonexport and search across past chats.
- PII masking on by default — email, OpenAIsk-, AWS keys, GitHub PATs, JWT.
- Content-hash embedding cache: re-indexing unchanged content makes zero Ollama calls.
- Filesystem watcher: edit a file, the index updates in ~500ms.
- Desktop UI / tray (deferred — was in original spec, now in ROADMAP tier 2+).
- OS hotkey injector and HTTP proxy interceptor (cut from the original spec).
- OpenAI / Anthropic embedding providers (Ollama only for now).
- Cursor and ChatGPT export formats (Claude only; others later).
UCP needs three things on your machine: Rust (to build), Ollama (to embed and optionally chat), and Poppler (for robust PDF text extraction — recommended).
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
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
sudo dnf install poppler-utils curl -fsSL https://ollama.com/install.sh | sh ollama pull nomic-embed-text
choco install poppler ollama # or install each manually ollama pull nomic-embed-text
Rust (stable, edition 2024) is needed only to build from source. If you install a pre-built UCP binary, skip the Rust install.
Poppler is optional but recommended.Without it, UCP only uses the bundledpdf-extractfor PDFs, which struggles with PDFs whose body fonts lack a ToUnicode CMap (you'll see headings extract but body text go missing). Withpdftotextfrom Poppler on PATH, UCP falls back to it automatically.
Note on the name.The crate is published asucp-localon crates.io — the bareucpname was taken. The binary on yourPATHis alsoucp-local(that's what you type on the command line), and the library is imported asuse ucp_local::....
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
UCP speaks MCP over stdio, so any client that launches MCP servers can use it. Sameservecommand, different config file per client.
Add to~/Library/Application Support/Claude/claude_desktop_config.jsonon macOS (%APPDATA%\Claude\claude_desktop_config.jsonon Windows):
{ "mcpServers": { "ucp-local": { "command": "/full/path/to/ucp-local", "args": ["serve"] } } }
Restart Claude Desktop. Thesearch_local_contexttool will be available — ask something grounded in your indexed files and it'll cite them inline.
Cursor reads MCP servers from~/.cursor/mcp.json(or per-project.cursor/mcp.json):
{ "mcpServers": { "ucp-local": { "command": "/full/path/to/ucp-local", "args": ["serve"] } } }
Reload Cursor. The chat sidebar will surfacesearch_local_contextas a tool — useful for grounding the agent in repos and docs Cursor's own@codebaseindexer can't reach (private notes, conversation history, sibling repos).
LM Studio 0.3.17+ supports MCP. Open the chat settings, find theMCP serverssection, and add:
{ "mcpServers": { "ucp-local": { "command": "/full/path/to/ucp-local", "args": ["serve"] } } }
Pair UCP with any local model you've downloaded in LM Studio (Llama, Qwen, Mistral, etc.). Now your indexing, embeddings, retrieval, and chat model all run on the same machine — no cloud, no network — and the LLM can still callsearch_local_contextto ground its answers in your files.
Any client following the MCP spec (Zed, Continue.dev, Goose, custom Agent SDK apps, etc.) takes the samecommand+argsshape. If your client expects a JSON-RPC stdio server, point it atucp-local serveand you're done.
~/.config/ucp/config.toml(or the platform equivalent —ucp-local statusprints the resolved path). All fields optional; defaults shown:
[ollama] host = "http://localhost:11434" embedding_model = "nomic-embed-text" [chunking] max_tokens = 512 overlap_sentences = 1
By extension:md,markdown,txt,rs,py,ts,tsx,js,jsx,mjs,go,pdf.
PDFs:text is extracted viapdf-extractand chunked as prose. Works well for digitally generated PDFs (papers, docs, exported notes). Falls down on scanned image-only PDFs — those need OCR (v0.2+). Citation line numbers reference the extracted plaintext, not PDF page numbers; page-aware citations are on the v0.2 list.
Skipped directories:.git,.idea,.vscode,target,node_modules,__pycache__,.venv,venv,dist,build,.next,.nuxt,coverage,.pytest_cache,.mypy_cache. Dotfiles are skipped.
SeeCLAUDE.mdfor the developer-facing architecture summary, andUniversal Context Pipeline Specification.mdfor the original (now narrower in scope) design doc.
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
Release history and notes live inCHANGELOG.md. The current published version is0.1.0(crates.io).
An intelligent structured document management system designed for large language models.
Production-ready RAG out of the box to search and retrieve data from your own documents.
Vectorize MCP server for advanced retrieval, Private Deep Research, Anything-to-Markdown file extraction and text chunking.
Codicil indexes a repo's Markdown/YAML/TOML docs into a local Chroma store and exposes query_docs/reindex_docs over MCP. Uses Ollama embeddings when available; with zero infra beyond that, it degrades to live keyword search off disk instead of failing.
An MCP server for document ingestion, chunking, semantic search, and note management.
Creates a personal, always-current knowledge base for AI by indexing documentation from websites, GitHub, npm, PyPI, and local files.
Local RAG system for Claude Code with hybrid search (semantic + BM25), cross-encoder reranking, markdown-aware chunking, 9 file formats, file watcher, and 12 MCP tools. Zero external servers. pip install knowledge-rag
A local server to query and interact with Markdown knowledge bases by tags, text, slug, or date.
A server for document management and semantic search using AI embeddings, with local JSON storage.
A knowledge base server that processes local documents (PDF, DOCX, TXT, HTML) and answers questions based on their content using similarity search.
Sign in to leave a review
Use Google, GitHub, or an email account so ratings stay tied to real people.
No reviews posted yet.



