06. Docs
Everything in
one place.
Reference documentation for every asanaDB component — server, CLI, MCP server, Admin UI, and the Compository document store.
01
asanadb
The graph database server. TinkerPop3-compliant, LMDB-backed, no JVM required. Accepts connections on a configurable TCP port and a Unix domain socket (UDS) for local-process communication.
Quick Start
# start with defaults (port 8080, data in ./data/)
asanadb
# custom config file
asanadb --config /etc/asanadb/config.yaml
# named instance (multi-tenant)
asanadb --instance production Flags
--config, -c <path> Path to YAML config file --instance <name> Named instance for multi-tenant deployments --map-size <bytes> LMDB map size (supports KB/MB/GB suffixes, e.g. 4GB) --uds-path <path> Unix domain socket path (default: /tmp/asanadb.sock) --no-uds Disable the Unix domain socket --no-wal Disable write-ahead log (not recommended in production) -v, --version Print version and exit Config File (YAML)
bind_address: "127.0.0.1"
port: 8080
map_size: "4GB" 02
asanadb-admin
Command-line administration tool. Connects to a running asanadb instance via the Unix domain socket (UDS) by default — no network port required.
Commands
# verify database integrity
asanadb-admin check
# export all data to GraphSON
asanadb-admin export --output backup.json
# import from GraphSON
asanadb-admin import --input backup.json
# bulk import from CSV
asanadb-admin import_file --file data.csv
# import from Apache GraphSON (APOC format)
asanadb-admin import_file --file export.apoc.json 03
asanadb-mcp
The MCP (Model Context Protocol) server. Bridges AI tools — Claude, Gemini,
Cursor, any MCP-capable client — to the asanaDB graph store. Runs locally
on 127.0.0.1 by default. Supports federated deployment via
--central (client) and
--public (server) modes,
both secured with automatic mTLS.
Local
Default mode. AI tools on the same machine connect to 127.0.0.1. No certs, no config.
--central
Connect this MCP instance to a remote central server. mTLS certs auto-provisioned via Sigil on first run.
--public
Run as a federation server on 0.0.0.0. Requires mTLS — refuses to start without certs. Server-to-server only; AI tools never connect here directly.
Quick Start
# local mode — AI tools point to http://localhost:8080
asanadb-mcp
# connect to a central (remote) MCP server — Developer license required
asanadb-mcp --central tcp://10.0.0.1:8443
# run as a federation server — mTLS is mandatory
asanadb-mcp --public --http-port 8443 Flags
--http-port <port> HTTP port for local AI tool connections (default: 8080) --db-name <name> Database name / tenant to connect to --db-path <path> Path to the asanadb Unix domain socket --remote <path> Proxy to a standalone asanadb engine daemon instead of a local database — UDS path or tcp://host:port (Developer license required for tcp://) --central <tcp://host:port> Connect to a remote central MCP server (Developer license required) --public Enable federation server mode on 0.0.0.0 (mTLS required) --cert-dir <path> Directory for mTLS certs (default: ~/.asanasoft) --sigil-url <url> Sigil endpoint for automatic cert provisioning A Note on --remote
--remote is unrelated to federation — it proxies this
MCP instance straight to a standalone asanadb engine
daemon over its own wire protocol, not to another asanadb-mcp
instance.
A Unix domain socket connection needs no TLS — it's local and filesystem-permission-scoped.
A tcp:// connection is plaintext by design: asanadb
does not implement TLS for this link itself. We strongly recommend putting a TLS-terminating
reverse proxy (e.g. Caddy) in front of the engine daemon's TCP port if it crosses an untrusted
network — but it isn't required. If you're fine connecting over a trusted network, or just
want to use a UDS path, that's a supported choice too.
Federation Architecture
AI Tool ──MCP (HTTP, plain)──► asanadb-mcp (local, 127.0.0.1)
│
--central tcp:// (mTLS)
│
▼
asanadb-mcp --public (remote MCP Server, 0.0.0.0)
AI tools never connect to a --public instance directly.
The public port is server-to-server only, always mTLS.
Trust on this link comes from the mTLS client certificate and its Sigil-issued license binding, not from hostname matching — federation peers are known by license identity, not by DNS name, so the connection address is not checked against the certificate's subject.
04
Admin UI
A native desktop application for browsing and managing your asanaDB graph.
Built with Flutter. Connect it to a running
asanadb-mcp instance.
Graph Explorer
Browse vertices and edges with a live graph view. Resizable split between list and detail panels.
Node Management
Create, edit, and delete nodes with confirm dialogs. Accent colors for node type distinction.
Import / Export
Bulk import from CSV, GraphSON, and APOC format. Export the full graph to JSON.
Connecting
The Admin UI connects to asanadb-mcp.
Start the MCP server first, then open the Admin UI and enter
http://localhost:8080 (or your configured port).
The Admin UI is available for macOS. Linux and Windows versions are coming soon.
05
Compository
asanaDB's document store, built directly into the graph engine. Store rich nested documents — objects, arrays, primitives — as first-class graph vertices. The Compository reconstructs them on read via recursive edge traversal, so you get back exactly what you stored.
Nested Objects
Property values prefixed object: are stored as linked child vertices. Deep or shallow reads — your choice.
Ordered Arrays
Arrays are stored as array: edges with seq properties. Reconstruction sorts by seq, preserving insertion order.
Shallow / Deep
ls returns shallow stubs (_id, _class, key). retrieve returns the fully reconstructed document including all nested objects and arrays.
Wire Protocol
The Compository speaks newline-delimited JSON over a plain TCP connection
(default 127.0.0.1:8080).
Requests are a JSON object on one line; responses are
{"status":"ok","message":...}.
See client libraries
for ready-made SDKs.
// store (omit "_id" — the server assigns one and returns it)
→ {"op":"store","label":"Article","entity":{"slug":"hello-world","title":"Hello World"}}
← {"status":"ok","message":1}
// retrieve by id
→ {"op":"retrieve","id":1}
← {"status":"ok","message":{"_id":1,"_class":"Article","slug":"hello-world","title":"Hello World"}}
// retrieve by key (when a key field is registered)
→ {"op":"retrieve","key":"slug","value":"hello-world"}
← {"status":"ok","message":{"_id":1,"_class":"Article","slug":"hello-world","title":"Hello World"}}
// list (shallow)
→ {"op":"ls"}
← {"status":"ok","message":[{"_id":1,"_class":"Article"},...]}
// delete
→ {"op":"delete","id":1}
← {"status":"ok","message":"Vertex deleted"} Internal Fields
_id Integer vertex ID. Always assigned by the server on store and returned in the response, even if omitted from the request. _class Vertex label / document type (e.g. Article, Person). Set automatically from the store label. _key Name of the user-defined key field, if registered. asanaDB v0.16.0