Bloom
Persistent cross-session memory for Claude Code and any MCP-compatible client.
Bloom is a single-file SQLite memory that survives between sessions. Ask Claude Code "what did we decide about X last week" and it can actually answer — by searching every prior turn it has saved.
$ pipx install bloom-mcp
$ bloom-mcp init
$ # Bloom is now wired into Claude Code. Open a new session and ask it to recall.
- Works offline. Default scoring is keyword + recency — no API key, no network.
- Optional embeddings. OpenAI, Voyage (Anthropic-recommended), or local sentence-transformers.
- Six MCP tools.
recall,remember,recent,sessions,forget,stats. - One file, one process. SQLite at
~/.bloom/loom.db. No daemon, no Docker, no cloud. - MIT-licensed. Use it however you want.
Note — Bloom is an independent open-source project, not affiliated with Anthropic. "Claude" and "Claude Code" are trademarks of Anthropic PBC.
Quickstart
1. Install
The recommended way is pipx (isolates Bloom from your system Python):
pipx install bloom-mcp
Or if you prefer plain pip / uv:
pip install bloom-mcp
# or
uv tool install bloom-mcp
2. Set up
bloom-mcp init
The wizard will:
- Pick a database location (default:
~/.bloom/loom.db). - Choose an embedder (
noneis recommended — works offline, no API key). - Tune recall settings.
- Register Bloom with Claude Code automatically (if
claudeis on your PATH).
3. Use it
In Claude Code, the assistant now has six new tools available. Try:
"Search Bloom for what we said about the postgres migration."
Claude will call recall("postgres migration") and surface relevant past turns.
What Bloom does
Bloom solves one problem: Claude Code forgets every session. Even with --resume, you lose context across days/weeks/projects. Bloom adds a tiny memory layer:
remember— store a turn (decision, learning, summary) so future sessions can find it.recall— search by query; get the top-k most relevant past turns ranked by keyword overlap, recency, and (optionally) semantic similarity.recent— pull the last N turns of a specific session.sessions— list known sessions and their turn counts.forget— delete a single turn by id.stats— DB size, schema version, embedder.
You can use it as a Python library too:
from bloom.config import Config
from bloom.db import Database
from bloom.tools import tool_remember, tool_recall
cfg = Config.load()
db = Database(cfg.db_path)
tool_remember(db, cfg, content="we picked Postgres SKIP LOCKED for the queue", session="proj-x", tags="decision")
print(tool_recall(db, cfg, query="queue choice"))
Embedders (optional)
Bloom's default none embedder uses keyword + recency scoring. It's fast, offline, and good enough for most use cases.
If you want semantic search ("find turns about that thing we discussed" without needing the exact words), pick one of:
| Provider | Install | Auth | Cost |
|---|---|---|---|
none |
(default) | — | Free |
openai |
pip install bloom-mcp[openai] |
OPENAI_API_KEY |
~$0.02 / 1M tokens |
anthropic (Voyage AI) |
pip install bloom-mcp[anthropic] |
VOYAGE_API_KEY |
~$0.02 / 1M tokens |
local |
pip install bloom-mcp[local] |
— (downloads model) | Free, ~80 MB |
Set in ~/.bloom/config.toml or via bloom-mcp init:
[embedder]
provider = "openai"
model = "text-embedding-3-small"
Configuration
~/.bloom/config.toml:
[storage]
db_path = "/home/you/.bloom/loom.db"
[recall]
top_k = 5
max_chars = 4000
snippet_max_chars = 600
[embedder]
provider = "none"
[logging]
level = "INFO"
All values can also be set via env vars: BLOOM_DB_PATH, BLOOM_EMBEDDER, BLOOM_LOG_LEVEL.
Sharing Bloom with a team
Bloom is per-user, local-first by design. Every install gets its own SQLite file. There is no cloud component, no telemetry, no shared backend. Your conversations live on your machine.
If you want a shared team memory, the right approach is:
- Each person installs Bloom locally (they get private memory).
- Run a second Bloom instance on a shared host with a team-only namespace.
- Use a small wrapper (not yet shipped — track issue #1) that fans out
rememberto both.
A first-party "team Bloom" mode is on the roadmap but not in v0.1.
How it compares
- vs mem0 — Bloom is local-first, single-file, MCP-native. Mem0 is hosted/cloud-first with richer extraction.
- vs raw vector DBs (Qdrant, pgvector) — Bloom is the application, not the storage layer. You get tools, scoring, CLI, and Claude Code integration out of the box.
- vs Claude Code's
--resume— Resume is one session. Bloom is every session, searchable.
Roadmap
- v0.2 — embedding-augmented recall (hybrid keyword + cosine)
- v0.3 — multi-tenant team mode (shared host, per-user namespaces)
- v0.4 — pruning + compaction (auto-summarize old turns to save space)
- v0.5 — alternative backends (Postgres, DuckDB)
Documentation
- Onboarding — 2-minute setup guide for new users
- Architecture
- Configuration reference
- Claude Code integration
- Security & data handling
- Contributing
License
MIT — © 2026 Jonah Tebaa.
Metadata
Release files for bloom-mcp 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| bloom_mcp-0.2.0.tar.gz | 28.8 kB | Without provenance | Details for bloom_mcp-0.2.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| bloom_mcp-0.2.0-py3-none-any.whl | Python 3 | none | any | Details for bloom_mcp-0.2.0-py3-none-any.whl |
Total release size: 52.0 kB
Release files / bloom_mcp-0.2.0.tar.gz
| Download URL | bloom_mcp-0.2.0.tar.gz |
|---|---|
| Size | 28.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e4f3866c2f650ed819584df984027c5b699909e77484d2405b6a4d845e6d22b9
|
|
BLAKE2b-256 checksum How to use checksums |
ca412bbca764b592377739721f2368fc96cf5ddd5ff5ba0aefc572838c889100
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.3
|
Release files / bloom_mcp-0.2.0-py3-none-any.whl
| Download URL | bloom_mcp-0.2.0-py3-none-any.whl |
|---|---|
| Size | 23.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
f97e7d5a43fbb66178ad6c666d7bb6ac2f0c75dceb0fd7bbc41e14e5759cbcbd
|
|
BLAKE2b-256 checksum How to use checksums |
737060f6ee2a619814d75e804de66ff738a8ec554f187c69d1082271cc8caa72
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.3
|
Security for bloom-mcp 0.2.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.