Skip to main content

Persistent cross-session memory for Claude Code and any MCP-compatible client.

Project description

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:

  1. Pick a database location (default: ~/.bloom/loom.db).
  2. Choose an embedder (none is recommended — works offline, no API key).
  3. Tune recall settings.
  4. Register Bloom with Claude Code automatically (if claude is 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:

  1. Each person installs Bloom locally (they get private memory).
  2. Run a second Bloom instance on a shared host with a team-only namespace.
  3. Use a small wrapper (not yet shipped — track issue #1) that fans out remember to 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


License

MIT — © 2026 Jonah Tebaa.

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

bloom_mcp-0.1.0.tar.gz (24.4 kB view details)

Uploaded Source

Built Distribution

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

bloom_mcp-0.1.0-py3-none-any.whl (21.6 kB view details)

Uploaded Python 3

File details

Details for the file bloom_mcp-0.1.0.tar.gz.

File metadata

  • Download URL: bloom_mcp-0.1.0.tar.gz
  • Upload date:
  • Size: 24.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for bloom_mcp-0.1.0.tar.gz
Algorithm Hash digest
SHA256 e13e4366f42b10b533d4237dc1c08ab593f867c18dcfc911e80acdf7a087b78a
MD5 6115f79d966a5104c92f35985f75c746
BLAKE2b-256 74f2186270761b924d8b5c80a12b1044029a5c86bc1a32d04fbb930a1f76f8dc

See more details on using hashes here.

File details

Details for the file bloom_mcp-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: bloom_mcp-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 21.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for bloom_mcp-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 c55146f06cec5c4caa5fb14dbc8fa99af9e00ba24ab1e403fc9f6aa62ba1e2de
MD5 4dda238f5cad0cfb6aada7e55cbcdc49
BLAKE2b-256 9b85dbf90a52de41e175d8401ba3837a1f77fcc2bde07f5afe595e65d35eac98

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