The Intelligence Layer
Between Your Data and Your AI
Give your AI the right data, not all the data. CameoDB turns your enterprise data into a curated intelligence engine that keeps your information organized and governed, so your AI systems work from data that is current and relevant.
Built for agents
An MCP endpoint agents call directly, answered at query speed, with every answer explaining itself.
Built for operators
One self-contained binary, embedded storage, no coordinator to babysit. Signed releases with SBOMs attached.
Your index is always
a little bit wrong
The classic stack writes to the database, then asynchronously updates a search index. Between those two moments, search results disagree with the data. An agent reading during that window gets an answer that was never true.
Traditional stack
- Two clusters to scale and operate independently.
- Eventual-consistency lag between write and searchability.
- Distributed transactions and messy failure recovery.
CameoDB
- One self-contained binary with embedded storage.
- One write path: the search index follows the store at every commit.
- Shared-nothing design: nodes join without an election or a coordinator.
One write path,
one source of truth
Redb for key-value durability, a flexible document model, and Tantivy for full-text search, behind one write path in one process. A document is readable by id the moment the write returns and searchable after the next commit, and Redb carries every write safely through a restart.
Sequence & WAL
A monotonic sequence ID is issued and logged in the same Redb transaction as the document.
KV insert
The document body lands in the Redb data table, giving O(log N) point retrieval by ID.
Tantivy indexing
Fields are parsed and handed to the in-memory index writer for full-text availability.
Dual commit
Redb commits with fsync; Tantivy commits on a steady clock, and each commit records exactly how far it has read, so recovery picks up right where it left off.
A Unified Architecture for AI
CameoDB fuses an ACID key-value store, a document model, and a full-text search engine into a single Rust binary. Agents query over MCP for grounded answers: no separate system to sync, no pipeline to keep alive, no guessing.
Point your agent at it.
That is the integration
CameoDB speaks MCP natively. Add it to your agent and your data becomes a first-class tool in Claude Code, Claude Desktop, Cursor or Windsurf.
# Claude Code claude mcp add --transport http cameodb \ http://localhost:9480/mcp # Claude Desktop, Cursor, Windsurf: # the entry for each is on the Build page
- Ingest your data once: documents, logs, catalogs, tickets.
- Connect the agent with the command on the left, or its config entry.
- Ask. Every answer is anchored to a retrievable document.
Iteration at query speed
A lookup by id is a single Redb B-tree read, about 0.1 ms inside the engine, with no search index involved. An agent can probe, refine and re-query many times inside a single reasoning step.
Every answer explains itself
A search tells you how it went: how many shards answered, which schema version it ran under, and any clause it set aside, by name. An agent always knows exactly what it was told.
Every column is
a searchable column
One syntax across key-value, document and full-text data: expressive enough for operators, predictable enough for agents to generate.
field:valueExact term match on a field.field:quick*Term prefix: matches quickstart, not qui.field:IN [ab cd ef]Term set, optimized for large value lists.field:"looks good to me"Exact phrase across a positional field.body:"looks good"~2Slop: allows N extra words between terms. A swapped pair costs 2.ip:[127.0.0.1 TO 127.0.0.50]Inclusive range over IPs, numbers or dates.date:>=2024-01-01Open-ended bound with natural ordering.These are the clauses in common use. The full grammar is generated from the engine’s own reference: ranges, boolean composition, result shaping, sorting and what is refused.
Quick on every query
A one-letter prefix or a bare word across hundreds of fields can cost far more than it looks. CameoDB keeps both quick with a sensible prefix floor and a cap on default fields, and tells you whenever it narrowed a search. Every limit is a setting.
Stemming in seven languages
A text field can name a language analyzer, so a search for one form of a word finds the others. Italian, German, French and Spanish use Snowball stemmers, with accent-folding variants. Croatian has its own: a lexicon of 1.7 million word forms built from an open corpus, scoring 97% F1 against hand-checked text.
No leader. No quorum.
No coordinator to lose
Consistent hashing places data, a Kademlia DHT discovers peers, and scatter-gather fans queries out across the mesh. Nodes join and leave without an election.
Consistent hashing
Placement without coordination: every node computes a key's owner from the same ring of virtual nodes.
Kademlia DHT
Point a node at one seed and it learns the rest of the mesh from its peers.
Scatter-gather
Queries fan out in parallel and merge on return, so no node becomes the bottleneck.
Production posture
not a promise
End-to-end figures from cameodb-bench,
the harness in the repository: client-observed over HTTP, not engine
micro-benchmarks. Every release ships with the artifacts an enterprise review asks for.
wal_sync off.The harness is closed-loop: each worker waits for its answer before issuing the next request, so these are service times at a fixed concurrency. Measured on a 15-core Apple M5 Pro and an eight-core Linux node, with settings tuned for throughput.
Verifiable, not just claimed
Every artifact ships cosign-signed with a published SHA-256, and both SPDX and CycloneDX SBOMs accompany each release. Check a build yourself →
Licensing
An Apache-2.0 core and MIT clients; the server is FSL-1.1-Apache-2.0 and converts to Apache-2.0 two years after release. Built on Rust 2024 with an actor-based runtime for fault isolation.
Download, run, query
Six commands from an empty directory to a query answered. The MCP endpoint comes up with the server, so an agent can ask the same question without another step.
# macOS: grab the binary curl -sSO https://dl.cameodb.com/mac/cameodb chmod +x ./cameodb # start the server on :9480 ./cameodb # in a second terminal, open the client ./cameodb client -i # load a public dataset, schema inferred cameodb@localhost ▶ data load books https://dl.cameodb.com/examples/data/booksummaries.tsv # search what you just indexed cameodb@localhost ▶ search books title:"Harry Potter" limit 7