Esfis

Docs

How Esfis connects to your assistants and what you can build on it. Esfis is in private beta, so treat this as a preview of the shipping interface.

Early access

Esfis is not public yet. We are letting people in a few at a time while the retrieval pipeline settles and the store format is frozen.

Ask for an invite and tell us which assistants you use. We will write when your turn comes up, with the signed build and a short setup guide.

Everything below describes the interface as it stands today. It may still move before the public release; breaking changes go in the changelog.

Connect over MCP

Any MCP client can read and write memory. Claude Desktop and Claude Code:

claude mcp add esfis -- esfis mcp

Cursor, Windsurf and other clients with a JSON config:

{
  "mcpServers": {
    "esfis": { "command": "esfis", "args": ["mcp"] }
  }
}

Hosted agents that cannot reach your machine use the remote endpoint (Pro and above), protected with OAuth 2.1:

{ "mcpServers": { "esfis": { "url": "https://mcp.esfis.com/v1" } } }

The server exposes five tools: recall, remember, forget, profile and blocks. Assistants call recall on their own; you never type “remember this”.

CLI

esfis recall "where does Alex live"        # ranked facts with dates
esfis log --since 7d                        # commits: added · superseded · forgotten
esfis diff 2026-08-01 2026-09-01            # what changed between two states
esfis as-of 2026-06-15 "Alex"               # what you knew back then
esfis pin  <fact-id>                        # never decays
esfis export --format jsonl > memory.jsonl  # yours, always

HTTP API

The engine listens on localhost:7433. Same endpoints on the remote gateway with a bearer token.

EndpointPurpose
POST /documentsAdd raw input. Returns the memories extracted from it.
GET /recallq, budget (tokens), as_of, scope. Ranked facts.
GET /profile/:entityCurrent state of a person, project or place.
PATCH /memories/:idEdit, pin or forget a fact. Creates a commit.
GET /logCommit history with diffs.
import { Esfis } from "@esfis/sdk";

const memory = new Esfis();                       // local engine by default
await memory.add("Call with Alex: moved to Seattle, Capitol Hill.");

const facts = await memory.recall("where is Alex", { budget: 400 });
// [{ fact: "Alex lives in Capitol Hill, Seattle", asOf: "2026-09-04", score: 0.93 }]

Blocks

Blocks are Markdown files in ~/.esfis/blocks. They are injected ahead of recall, verbatim, on every request. Keep them short; they cost tokens every time.

# persona.md
- Answer in Catalan unless the conversation is in another language.
- Be direct. No preambles.
- I work in Europe/Madrid; convert times for me.

Self-hosting

The Enterprise binary bundles the engine, a local extraction model and embeddings. Point it at Postgres and an object store, or run it with the embedded SQLite for a single-node trial.

esfis-server --store postgres://esfis@db/esfis \
             --models /opt/esfis/models \
             --oidc https://sso.example.com \
             --no-egress

Full reference, Helm chart and hardening guide ship with the Enterprise package. Learn more.

Troubleshooting

The assistant doesn't seem to recall anything

Run esfis status. If the engine is running, check that the client lists the esfis MCP server and that it has been restarted since you added it.

Recall is slow

First recall after a large import builds the index and can take a few seconds. If it stays slow, run esfis doctor; it reports index health and model load times.

I want to start over

esfis reset --keep-blocks archives the store to ~/.esfis/archive and starts an empty one. Nothing is deleted until you purge the archive.