Skip to main content

A local-first multi-source RAG MCP server — search across Obsidian vaults, Git repos, and PDFs from Claude / Cursor / Claude Desktop.

Project description

Bob

Bobrain

The answer you're searching for — you already wrote it, years ago.

CI

A local-first hybrid RAG MCP server that indexes your Obsidian vault and your Git repos together. Hybrid BM25 + e5 retrieval with a Japanese tokenizer in the default install, MCP-native for Claude, Cursor, Claude Desktop, and any other MCP-compatible client.

Status: early prototype. Markdown-only today; PDF and code-AST chunking are on the roadmap. APIs and storage layout may change.

Landing page: https://0916shokichi-blip.github.io/bobrain/ — also browsable locally via python3 -m http.server from the repo root → http://localhost:8000/docs/.

What it is

Bobrain indexes multiple local directories into a single hybrid search layer (BM25 + dense embeddings, combined via Reciprocal Rank Fusion) and exposes a search_docs MCP tool so your AI client can retrieve relevant chunks across all of your personal knowledge sources at once.

Unlike existing RAG servers that focus on a single directory tree or require cloud embeddings, Bobrain:

  • runs fully local with in-process ONNX embeddings (multilingual-e5-large)
  • supports multiple independent root directories with namespace isolation
  • ships Japanese-aware BM25 out of the box (MeCab via fugashi + unidic-lite)
  • is designed for people whose knowledge lives in more than one place — an Obsidian vault and the README/docs folder of every active repo

Killer use case

Ask your AI:

"Where did I write about MCP chunking strategies — either in my notes or the code?"

and get a single ranked list spanning your Obsidian vault and your ~/code/ directory, cited by file path.

Install

Requires Python 3.12+.

# Recommended: install once, run from anywhere
pipx install bobrain

# Or run a one-shot without installing (uv 0.5+)
uvx bobrain --help

Or clone and develop locally:

git clone https://github.com/0916shokichi-blip/bobrain.git
cd bobrain
uv sync

First indexing run downloads the multilingual-e5-large ONNX weights (~2.2 GB) into the fastembed cache. Subsequent runs reuse it.

Quickstart

# index a directory under a namespace
bobrain index ~/Documents/notes -n notes

# index a second namespace (they live side by side)
bobrain index ~/code/my-project -n code

# index multiple roots into one namespace in a single pass
bobrain index ~/vault ~/code/my-project -n combined

# quick CLI search (BM25 + vector hybrid)
bobrain search "how did I chunk markdown" -k 5

# cross-namespace filter
bobrain search "mcp server" --ns notes --ns code

# keep the index live while you edit (Ctrl+C to stop)
bobrain watch ~/Documents/notes -n notes

Excluding files with .bobrainignore

Drop a .bobrainignore at any indexed root (gitignore syntax) to exclude private notes, scratch files, or whole subtrees:

# private/
private/
drafts/

# everything ending in .scratch.md
*.scratch.md

# negation re-includes a single file
!drafts/ship-this-one.md

Patterns from a .bobrainignore apply only inside its own directory subtree (same semantics as .gitignore), so you can place a narrower one in a subfolder. The built-in skip list (.venv, node_modules, .git, ...) is always active and cannot be re-enabled via .bobrainignore.

(If you cloned the repo instead of installing, prefix every command with uv run.)

MCP client setup

Point your MCP client at the stdio server. If you installed via pipx:

{
  "mcpServers": {
    "bobrain": {
      "command": "bobrain",
      "args": ["serve"]
    }
  }
}

The bobrain command on PATH works the same way whether you installed from PyPI or from the git URL above.

Or, from a local clone:

{
  "mcpServers": {
    "bobrain": {
      "command": "uv",
      "args": ["run", "bobrain", "serve"],
      "cwd": "/absolute/path/to/bobrain"
    }
  }
}

Then from Claude / Cursor / Claude Desktop you can call the MCP tools directly.

MCP tools

Tool What it does
search_docs(query, top_k=5, namespaces=None) Hybrid (BM25 + vector) search across the local index. namespaces is an optional allow-list.
list_namespaces() Lists each indexed namespace with its chunk and document counts. Use it to discover what's available before filtering search_docs.

Roadmap

  • Japanese-aware BM25 via MeCab (fugashi + unidic-lite)
  • Upgrade embeddings to multilingual-e5-large (query/passage prefix aware)
  • Incremental indexing with watchdog (bobrain watch)
  • Indexing progress + per-phase wall times (scan / embed / db-write / bm25)
  • Multi-root bobrain index (combine vault + repo in one namespace)
  • .bobrainignore (gitignore-style per-project exclusions)
  • PDF chunker via pymupdf (dependency already in)
  • Markdown heading-aware chunker (today: fixed character window)
  • Code AST-aware chunker (tree-sitter)
  • LLM Wiki auto-detection (directories containing CLAUDE.md + log.md + index.md)
  • Reranker integration (Voyage / Cohere)
  • Pro tier with cloud sync and team sharing

License

MIT. See LICENSE.


Made by Bob — Avatar by Nano Banana Pro.

This is 1 of 8 tools by Bob. → other tools

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

bobrain-0.2.0.tar.gz (19.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

bobrain-0.2.0-py3-none-any.whl (24.0 kB view details)

Uploaded Python 3

File details

Details for the file bobrain-0.2.0.tar.gz.

File metadata

  • Download URL: bobrain-0.2.0.tar.gz
  • Upload date:
  • Size: 19.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for bobrain-0.2.0.tar.gz
Algorithm Hash digest
SHA256 9d828c7d4db232ae7f8450e97471517044c3625c38fb75f4e406e2a7281d281c
MD5 60716a6f8311e68a186305876168381d
BLAKE2b-256 0706fcfa74c60cce8f39c2c5c4989ffe95f275a6f7fada6413508ca4902fed9f

See more details on using hashes here.

File details

Details for the file bobrain-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: bobrain-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 24.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for bobrain-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 481cdaecc8b24fb412be3a3d956c231605684c768a8dc153e33937bbbee6bd4c
MD5 b2032a2b700472976900c32db24b7112
BLAKE2b-256 fcd8ab40fd210771032388f727d7c2b6bac896b8faba58b2c2e3328fd67bc3f3

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page