mem-port

Tools

The MCP tool surface

Every connected copilot gets the same 19 tools, reading and writing the same AI memory graph.

save_memory

Save a fact/preference/decision/task/reference, optionally linked to entities

search_memory

Semantic (vector) search over memories

save_episode

Record a raw interaction/event that memories can be derived from

list_episodes

List recorded episodes, filterable by time range/source

save_skill

Save a reusable procedure, optionally linked to entities

search_skills

Semantic (vector) search over skills, by task/situation (descriptions only)

list_skills

List saved skills, filterable by tag/source (descriptions only)

get_skill

Look up a skill by exact name or id

forget_skill

Soft-archive (default) or permanently delete a skill

save_adr

Record an architectural decision, optionally superseding an earlier one

search_adrs

Semantic (vector) search over ADRs, by problem or area

list_adrs

List the ADR log, filterable by status/tag/source

get_adr

Look up one ADR in full, by number or id

forget_adr

Soft-archive (default) or permanently delete an ADR

get_entity

Look up an entity plus everything that mentions or relates to it

relate_entities

Create a graph relation between two entities

forget_memory

Soft-archive (default) or permanently delete a memory

export_library

Export this library to a portable .memport.json bundle

import_library

Import a .memport.json bundle, merging or overwriting

The nine read tools — search_memory, list_episodes, search_skills, list_skills, get_skill, search_adrs, list_adrs, get_adr, get_entity — render their results as cards in hosts that support MCP Apps, instead of showing you the JSON your copilot reads. Lists come back as result cards, get_* as a detail view, paginated five at a time. The panel reads the host's own style variables and fonts, so its colors and typeface come from the client rather than an approximation of it. Claude Desktop, VS Code Copilot, Cursor and Goose render them; Claude Code isn't an MCP Apps host, so results stay as text there. The text block is unchanged and always first, so a host that doesn't render MCP Apps behaves exactly as it did. It's on by default; turn it off per client with an mcp-apps: 0 header next to library-id, or daemon-wide with MCP_APPS=0. The table itself hasn't changed since the ADR log brought it to 19, and it doesn't change with the storage engine either: a cross-driver test seeds the same fixture through embedded SurrealDB and through Postgres and asserts every read tool returns byte-identical output.

Configuration

MEM_PORT_PORT
8787
HTTP port
MEM_PORT_HOST
127.0.0.1
Interface to bind. Loopback is a security boundary, not a preference — binding anything else turns authentication on
MEM_PORT_DATA_DIR
OS app-data dir
Where the embedded store and cached embedding model live
MEM_PORT_DB_URL
surrealkv://<data-dir>
Embedded by default. A ws:// or wss:// URL selects hosted SurrealDB (server 3.0+); a postgres:// URL selects Postgres with pgvector
MEM_PORT_DB_USER / MEM_PORT_DB_PASS
none
Credentials for a hosted SurrealDB server, which must be a root- or namespace-level user
MEM_PORT_AUTH
follows the bind
off or required. Unset, it tracks MEM_PORT_HOST: off on loopback, required on any other interface
MEM_PORT_ADMIN_USER / MEM_PORT_ADMIN_PASSWORD
none
Creates the first admin, and only while no admin exists. These are the credentials you sign in to /admin with
MEM_PORT_PUBLIC_URL
the Host header
The URL the admin panel's docs page hands out in client config, for when a proxy rewrites Host to something internal
MEM_PORT_EMBEDDING_MODEL
Xenova/all-MiniLM-L6-v2
Local embedding model id (reserved for future use)
MEM_PORT_MODEL_CACHE_DIR
<data-dir>/models
Override the embedding model cache location
MCP_APPS / MEM_PORT_MCP_APPS
on
Set to 0 to stop the read tools declaring an MCP Apps UI