Cited Q&A over your own notes, plus drift detection when a cited source changes. Local-first CLI.
MCPpedia last refreshed this data
io.github.abm9111/chamber is an MCP server that cited Q&A over your own notes, plus drift detection when a cited source changes. Local-first CLI. Its tool list has not been published yet over stdio, sse and http, requires no API key, and scores 89/100 on MCPpedia's security, maintenance and efficiency rubric.
Config is the same across clients — only the file and path differ.
{
"mcpServers": {
"io-github-abm9111-chamber": {
"args": [
"-y",
"@bu7umaid/chamber"
],
"command": "npx"
}
}
}Are you the author?
Add this badge to your README to show your security score and help users find safe servers.
Ask questions about your own notes. Get answers that cite their sources — and a daily check that tells you when a source has changed underneath a conclusion you
Run this in your terminal to verify the server starts. Then let us know if it worked — your result helps other developers.
npx -y '@bu7umaid/chamber' 2>&1 | head -1 && echo "✓ Server started successfully"
After testing, let us know if it worked:
Five weighted categories — click any category to see the underlying evidence.
No known CVEs.
Checked @bu7umaid/chamber against OSV.dev.
Click any tool to inspect its schema.
Be the first to review
Have you used this server?
Share your experience — it helps other developers decide.
Sign in to write a review.
Others in other
Compress tool outputs, logs, files, and RAG chunks before they reach the LLM. 60-95% fewer tokens, same answers. Library, proxy, MCP server.
Transport for TMCP using STDIO
The graph based agentic IDE
Buddhist canon tools: search, passages, cross-canon parallels, dictionaries — all URN-cited.
MCP Security Weekly
Get CVE alerts and security updates for io.github.abm9111/chamber and similar servers.
Start a conversation
Ask a question, share a tip, or report an issue.
Sign in to join the discussion.
Ask questions about your own notes. Get answers that cite their sources — and a daily check that tells you when a source has changed underneath a conclusion you already trusted.
Zero runtime dependencies. Everything is node:sqlite and files on your disk.
No account, no cloud call unless you point it at one.
Requires Node 23.6+ — Chamber runs TypeScript directly, with no build step.
git clone <this repo> chamber && cd chamber
npm ci && node --experimental-strip-types src/cli.ts try
No config, no database, no model, no network. It builds a throwaway workspace,
runs the real code paths against it, and deletes it (--keep to look around).

That recording is scripted from assets/demo.tape rather
than hand-captured, so it is regenerated when the output changes instead of
quietly showing a version of Chamber that no longer exists. Everything below is
the same command's actual output, trimmed:
$ chamber believe belief "Customers may return any purchase within 30 days of delivery."
committed blf_ddcf4f3c9b2e81b8
an unsourced assertion is not refused — it mints citation debt.
$ chamber debts
dbt_18bd1c1171cdbfcb [pending]
$ chamber pay-debt
proposed 2 source(s), 2 pinned; best=0.694
$ chamber verify
blf_ddcf4f3c9b2e81b8 2/2 pins verified
That is the ordinary state: a belief standing on evidence that still holds. Then
someone edits the note it was built on — 30 days becomes 14 days:
$ chamber ingest ./notes
ingested 2 file(s) as 4 passage(s)
$ chamber verify
blf_ddcf4f3c9b2e81b8 1/2 pins verified
hash_mismatch: refunds.md#p0
Nobody asked it to re-examine that belief. The conclusion did not change; the ground under it did, and the exit code is non-zero, so a scheduled job can act on it. That is the whole product.
Four more scenarios — a rolled-back ledger caught by an outside anchor, a
sandbox that refuses rather than degrade, a hostile tool catalogue rejected —
are in demos/, and run in CI so they cannot drift from the code.
Everything Chamber does is rows in one SQLite file. Each term in the transcripts names a table or a hash:
| Word | What it actually is |
|---|---|
| passage | one chunk of one markdown file. refunds.md#p0 is file path + chunk index. |
| belief | a row in belief: one asserted sentence, linked to the passages it stands on. |
| pin | a sha-256 of a cited passage's stored title, body and ref, taken at the moment of citation and kept in belief_source. |
| verify | re-read every pinned passage, recompute the hash, compare. Any mismatch exits non-zero. No model involved. |
| citation debt | a row in citation_debt, created when an assertion commits with no source. The same claim cannot commit again until the debt is paid. |
| pay-debt | retrieval proposes passages for the indebted claim; accepting them pins them. |
| APORIA | the verdict when no retrieved passage supports an answer. The reply is "I don't know", recorded as that. |
| gate | a check and a write inside one SQLite transaction — both commit or neither does. |
| audit log | append-only audit_event; each row's hash covers the previous row's hash, so editing history breaks every hash after it. |
| anchor | the log's root hash stored outside the database, so truncating the log is detectable rather than silent. |
| the scheduler | a launchd/systemd job running ingest + verify, notifying only on drift. |
None of it is hidden machinery: sqlite3 ~/.local/share/chamber/chamber.sqlite '.tables' shows the whole thing.
With a model configured, chamber ask judges every sentence on its own
citations. Against the same two sample notes, on a local 30B:
$ chamber ask "summarise our r
... [View full README on GitHub](https://github.com/abm9111/chamber#readme)