Get started

From nothing to a
searchable memory.

Five steps. Two dependencies. No database server, no vector service, and no model to download.

In development. Not on PyPI yet, so pip install hadano-ai-cabinet does not work today. These steps describe the flow the release will follow.

The machine-readable form is in /facts.json (installable: false).

01  /  Install

Install the package.

Python 3.11 or newer. The base install pulls in exactly two runtime dependencies: mcp, and the pydantic that mcp requires anyway. Everything the index needs comes with Python.

pip install hadano-ai-cabinet

Check that the module resolves before going further. If this prints a JSON object, the install is good.

python -c "import hadano; print(hadano.__version__, hadano.TOOL_NAMES)"

02  /  Register

Tell your AI client about it.

Hadano speaks MCP over stdio. Add this to your client's MCP configuration. Nothing listens on a port, and nothing starts until your client launches it.

{
  "mcpServers": {
    "hadano": {
      "type": "stdio",
      "command": "python",
      "args": ["-m", "hadano.server"],
      "env": { "HADANO_DB": "~/hadano.db" }
    }
  }
}

Where that file lives

clientconfiguration
Claude Codeclaude mcp add, or the mcpServers block in your settings
Claude Desktopclaude_desktop_config.json
Cursor.cursor/mcp.json
anything elsewhatever that client calls its MCP server list

The database file is created on first use. Point HADANO_DB at an absolute path — if you leave it out, the file lands in whatever the working directory happens to be, which is rarely what you want.

Two details save the most time here. Each client has its own config file — an entry added for Claude Desktop does not appear in Claude Code, and the other way round. And reload differs: Claude Desktop picks the entry up after an app restart, while Claude Code picks it up on the next new chat. To check the wiring, ask the assistant about the database status — a working setup answers with the file path and document count.

03  /  Store

Put something in it.

Ask your assistant to save something. It calls store_document for you — there is no separate command to learn.

# what you say
Save my deployment runbook to Hadano, tagged ops.

# what the client sends
store_document(
  title    = "Deployment runbook",
  content  = "...",
  tags     = ["ops"]
)

# what comes back
{ "id": "8abacdf04d1a49b28f84347cb1d94180",
  "chunks": 2,
  "sha256": "aea22d7f...",
  "request_id": "4f1c..." }

The document is split into overlapping chunks of 800 codepoints, indexed for full-text search, and hashed. The split is deterministic: the same text always produces the same chunks. Every call also returns a request ID and lands in the audit log.

05  /  Keep a copy

It is one file. Copy it.

The whole knowledge base is hadano.db. Moving it to another machine is a file copy, and copying the file is a backup. Close the client first for a sure copy; the server releases the file between calls, so a copy usually succeeds even mid-session.

# a backup is a file copy
copy hadano.db backups\hadano-2026-08-28.db

Snapshot and JSONL export commands are being rebuilt for the current storage engine and will return here when they land.

Optional  /  Vector search

Not in this version.

Stage 2 was designed to expand by meaning as well as by relations. That half was built against the storage layer that has since been replaced, and it has not been reconnected. There is nothing to turn on right now.

Setting HADANO_EMBEDDINGS=local is refused when the server starts, with the reason, rather than accepted and quietly ignored. Asking a search for vector expansion returns an error rather than an empty answer that looks like a real one.

It was never on by default, and the reason has not changed: 25 more packages, a 240 MB model download, and resident memory going from 22 MB to 604 MB on the layer where it was measured.

Keyword and graph search are unaffected. Stage 1 never touched a vector, so nothing about it changes when this comes back.

Next

Where to go from here.

you wantgo to
Every tool, parameter, limit, and error codenot published yet - the API surface is still changing, and this site lists only what has been verified
Why search works in two stagesmechanism
Whether this fits your case at allwhere this fits
Measured latency and memorymeasured