One file controls the engine: tekmerdb-server.conf. It's read once at startup — every change needs a restart, not a rebuild.
sudo nano /opt/tekmerdb/tekmerdb-server.conf
If this file is missing, the engine starts with built-in defaults. Nothing here is hot-reloaded — the process reads it once, on boot.
Every engine instance is locked to exactly one domain. Every PFO it stores is stamped with that domain regardless of what the caller declares, and claims that drift too far from it get rejected outright.
domain = "CriticalInfrastructure"
Valid values: Healthcare, LawEnforcement, CriticalInfrastructure, Employment, Education, Migration, LegalInterpretation, Finance, General.
domain on an engine that already has data invalidates its similarity centroid. Wipe data/ and restart after switching domains — don't just flip the value in place.
Controls how strictly claims are checked against the domain before they're accepted.
| Setting | Default | What it does | Impact of changing it |
|---|---|---|---|
domain_threshold |
0.70 | Minimum cosine similarity to the domain centroid required for acceptance (range 0.0–1.0). | Too low accepts off-domain claims; too high rejects valid edge cases. Tested working range for the energy domain: 0.65–0.80. |
cold_start_inserts |
10 | Number of inserts accepted unconditionally before domain enforcement kicks in, while the centroid is built. | Too low builds a weak centroid; too high delays enforcement. Don't set below 5. |
Controls how thoroughly each new claim is checked against existing ones.
| Setting | Default | What it does | Impact of changing it |
|---|---|---|---|
hnsw_top_k |
20 | Number of nearest-neighbour candidates evaluated per sweep after each insert. | Higher catches more conflicts/corroborations but slows inserts — noticeably above 50 once you're past ~100k PFOs. |
similarity_floor |
0.85 | Minimum cosine similarity between two PFOs before the NLI contradiction classifier is even invoked. | The primary gate against false conflicts between unrelated claims. Documented safe minimum is 0.85 — going lower causes false NLI conflicts between unrelated claims in the same domain. |
| Setting | Default | What it does | Impact of changing it |
|---|---|---|---|
flush_interval_secs |
10 | Seconds between Parquet flush cycles for PFOs and sources. | Every write is fsync'd to the crash-recovery buffer regardless, so this only controls how stale the Parquet checkpoint can get — not crash safety. Minimum recommended: 5. |
| Setting | Default | What it does | Impact of changing it |
|---|---|---|---|
engine_host |
127.0.0.1 | Interface the HTTP engine binds to. 0.0.0.0 exposes it to the network — needed for Docker/remote access. |
The engine's PATCH endpoint has no authentication. Only bind to 0.0.0.0 behind a firewall. |
engine_port |
3000 | Port the HTTP engine listens on. | The MCP server connects to localhost:{engine_port} — the two must match. |
mcp_host |
0.0.0.0 | Interface the MCP SSE server binds to when started with --sse. |
SSE mode has no authentication either — only expose it on trusted networks. |
mcp_port |
3001 | Port the MCP SSE server listens on. Remote agents connect to http://{server_ip}:{mcp_port}/sse. |
Must differ from engine_port. |
sudo systemctl restart tekmerdb-server # only if you changed mcp_host / mcp_port: sudo systemctl restart tekmerdb-mcp