Prerequisites
Pick one way to run Calame:
| Runtime | Requires |
|---|---|
| Desktop app (easiest) | Windows 10/11 x64, nothing else to install |
| Docker (servers, teams) | Docker Desktop or Docker Engine + Compose |
| Node.js (dev mode) | Node ≥ 20, pnpm ≥ 9 |
You also need:
- A database to expose (PostgreSQL, MySQL, or SQLite). For testing, Calame ships a demo SQLite generator; see step 04.
- Optional: an LLM API key if you want the built-in chat (Anthropic, OpenRouter, or a local Ollama install).
Install & launch
Option A · Desktop app (Windows)
Download the installer and run it: no admin rights needed, Calame opens on http://localhost:4567 and keeps serving from the system tray when you close the window. Updates install silently at startup.
Option B · Docker (servers, teams)
$ git clone https://github.com/Calame-Tech/calame.git
$ cd calame
$ docker compose upWait for:
calame-1 | Calame is running on http://localhost:4567/calame-data is created: your admin account, profiles, tokens and audit log survive restarts.Option C · Node.js (dev)
$ git clone https://github.com/Calame-Tech/calame.git
$ cd calame
$ pnpm install
$ pnpm devSame target: http://localhost:4567.
Create the admin account
Open http://localhost:4567. On first launch you land on the Setup page:
- Choose an admin email and password (12+ chars recommended).
- Submit. You are now logged in as the workspace admin.
users table inside calame.db (or remove the entire DB file in CALAME_DATA_DIR for a full reset), restart.Connect a database
In the Sources panel, click New source. Three SQL engines are supported in the core:
- PostgreSQLport 5432
- MySQLport 3306
- SQLitefile path
Test SQLite, no setup
Want to try without touching real data? Use the bundled generator:
$ node scripts/generate-demo-db.jsThis creates demo-logistique-v2.db at the repo root, a fictional logistics dataset (~5 MB, ~30 tables, fake personal data). Use ./demo-logistique-v2.db in the SQLite connection form.
SET TRANSACTION READ ONLY on Postgres, --readonly on SQLite). Even a malicious LLM cannot mutate your data through a profile unless you explicitly enable the write queue.Create a profile
A profile is a published view of your database, with its own auth, masking and permissions. One DB, many profiles.
5.1 · Tables & columns
Pick which tables to expose. For each table, pick which columns are visible. Untick anything you do not want the LLM to see.
5.2 · PII masking
Calame auto-detects likely PII (email, phone, address, card, SSN…). Per-column or global rules: full redaction, hash, partial mask, or custom regex.
5.3 · Row-level scoping (optional)
Restrict the profile to rows matching a condition, e.g. client_email = "<authenticated user email>". Used for per-user data isolation.
5.4 · Auth mode
Pick one: open · Bearer token · password · OIDC SSO · OAuth 2.1 with Dynamic Client Registration · external validation URL.
Test in the built-in chat
You don't need an external client to validate the profile.
- Settings → AI Provider → choose your provider (Anthropic, OpenRouter, or a custom OpenAI-compatible endpoint like a local Ollama).
- Pick a model (e.g.
claude-sonnet-4-5,llama3.1:8b). - Open Chat → pick the profile → ask: “How many tables in this DB? Show a sample row of each.”
Generate a user token
For external AI clients with Bearer-token auth:
- Users panel → New user
- Email, name, assigned profiles
- Generate token. Calame shows it once. Copy it now.
For OAuth / SSO modes, no token is needed; the client handles the flow.
Connect an AI client
The MCP endpoint URL is always http://localhost:4567/mcp/<profile-name>.
Claude Desktop · one click
Open your MCP server's page and hit Connect to Claude Desktop. Calame mints a dedicated revocable token, merges the entry into claude_desktop_config.json (a timestamped .bak is kept), and the profile shows up in Claude's tools after a restart. Nothing else to install on the machine.
Cursor · VS Code · OAuth clients
For profiles in OAuth 2.1 mode, just paste the endpoint URL into the client's MCP settings: Calame supports Dynamic Client Registration, so the client registers itself and prompts the user in the browser. No token to copy.
Copilot · ChatGPT · cloud assistants
Microsoft and OpenAI only reach MCP servers over public HTTPS. On the server's page, hit Expose for Copilot / ChatGPT: an embedded Cloudflare tunnel gives your local Calame a public token-gated URL (no account needed), with step-by-step guides for Copilot Studio and ChatGPT connectors. The URL rotates per session and dies with the tunnel.
Manual fallback (any MCP client)
Edit claude_desktop_config.json (Mac: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\), or your client's equivalent:
{
"mcpServers": {
"calame": {
"transport": {
"type": "http",
"url": "http://localhost:4567/mcp/sales",
"headers": {
"Authorization": "Bearer <your-token>"
}
}
}
}
}For OAuth profiles, drop the headers block; the client prompts the user via browser.
Sanity check with curl
$ curl -X POST http://localhost:4567/mcp/sales \
-H "Authorization: Bearer <your-token>" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'You should get a JSON response listing the tools auto-generated for your profile (one per table + a query tool).
What's next
- Deploy in production: Caddy / nginx templates live in
docs/Caddyfileanddocs/nginx.conf. - Audit log: every query, who, when, with what scope. Filter and export from the Audit panel.
- Multiple users + SSO: Settings → Single Sign-On; plug Calame to Google, Okta, Keycloak, Azure AD. (Pro or Enterprise)
- Secrets in Vault: Calame can fetch DB credentials from HashiCorp Vault instead of storing them locally.
Found a gap or hit a wall?
Open an issue on GitHub or message us; we usually reply within a business day.