Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
KEYMEM_RERANKNoSet to 'true' to enable cross-encoder reranking (optional).
OPENAI_API_KEYNoYour OpenAI API key for embeddings. Required if not using local embeddings.
KEYMEM_DATA_DIRNoDirectory for data storage (default: ~/.keymem).
EMBEDDING_BACKENDNoSet to 'local' to use local embeddings without API key.
KEYMEM_DIRECT_RECALLNoSet to 'true' to expose direct recall tool (optional).
LOCAL_EMBEDDING_MODELNoLocal embedding model (default: fast-multilingual-e5-large).fast-multilingual-e5-large
OPENAI_EMBEDDING_MODELNoOpenAI embedding model (default: text-embedding-3-small).text-embedding-3-small

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{}
prompts
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
recallA

Search long-term memory for what is already known about the user, project, or topic — call this before your first reply and whenever the topic shifts. Always pass the active namespace when known. Returns {status, query, namespace, keys, memories}: ranked key clusters plus one passive Top-1 memory selected under the top key. The memory includes validity, matched_key, and connected_keys, each with a relevance score (cosine of that key to your query/context, sorted high→low). recall answers a question: check whether the Top-1 memory actually answers it. If it only points elsewhere, is partial, or the highest-relevance connected key is not the one you arrived by, take one more hop — read_key(that key_id, query, namespace) then read_memory — and stop as soon as the answer is complete. Each hop is one call; the store never fans out for you. Passive recall never reinforces links or changes access, depth, aliases, or confirmation — except: when context is a strong restatement of the returned memory, it is auto-confirmed (memories[0].auto_confirmed: true) without a separate confirm_memory call. An empty result includes empty keys/memories and nearest_keys.

browse_keysA

Browse the vocabulary of one namespace when recall has no hit or you need an entry point. Returns active key clusters with hubs first, then by linked-memory count. This is index metadata only; continue with read_key(key_id, query, namespace) and read_memory(memory_id, via_key_id, namespace).

read_keyA

List the memories stored under one key (concept), ranked. Returns the canonical key, its aliases, and hub metadata plus ranked memory IDs, metadata, and validity — never memory content. Always pass the original focused query and active namespace when known: handles are then ranked by content relevance, which is essential for hubs. Each memory's score is content_relevance × link_weight × depth_factor × freshness_factor when query is passed (link_weight × depth_factor × freshness_factor otherwise); content_relevance is a cosine, comparable to recall's key relevance — both only meaningful within this one key's ranking. Call read_memory(memory_id, via_key_id=key_id, namespace) on the selected handle to inspect the fact and reinforce the path; reading does not confirm that its content is current. Use limit/offset to page without flooding context.

read_memoryA

Read the full content and validity of one stored memory (selected via read_key). Returns the memory and all connected key clusters so exploration can continue Key → Memory → Key. Pass via_key_id from the selected key: the read records access and only that traversed edge is Hebbian-reinforced. Reading does not change content depth or confirm that the content is current.

confirm_memoryA

Confirm that a memory is still current using explicit present evidence. Never call this merely because read_memory returned the content. Use only after a current user assertion, an authoritative current source, or direct observation. Refreshes validity but does not change content or key links. A strong restatement passed as recall's context is already auto-confirmed there (check memories[0].auto_confirmed) — this tool is for evidence recall can't see: read_memory results, authoritative sources, or direct observation.

rememberA

MANDATORY END-OF-TURN GATE: before replying, save every durable fact newly revealed this turn (names, preferences, decisions, corrections, project facts, goals). A durable fact left unsaved is a bug; save silently in the same turn. Save nothing only after consciously confirming that nothing durable appeared. Before writing, recall() the topic in the same namespace and reuse returned canonical concepts or aliases. Use 3-6 diverse ATOMIC concept keys of 1-2 words each, never memory-specific phrases (use 'Nexora' and 'portfolio', not 'Nexora portfolio'); 3+-word keys are flagged in hints.phrase_keys and are measurably 91% unreachable singletons. CROSS-LINGUAL: register both language forms together (for example '포트폴리오' and 'portfolio'). Shared broad keys become navigable hubs. namespace groups memories by project/context; ttl_seconds sets expiry; decay_profile selects transient, standard (the default), stable, or permanent confirmation freshness; related_to adds explicit memory links; source attaches provenance and is auto-stamped with the server session, a timestamp, and — when a host agent (Claude Code, Codex) transcript is active — host_session/host_agent/host_turn. The response may include hints.near_keys (existing concepts your keys nearly duplicate — prefer reusing those concepts) and hints.language_note (add the missing-language variants).

correctA

Update outdated information. Use when user corrects you or info changes (e.g. moved cities, changed job). Old version is preserved but weakened — never lost. Omit keys to keep the same search terms. Omit decay_profile and ttl_seconds to preserve the predecessor's policies; provide either to replace that policy. related_to links the updated memory to other memory IDs.

dismissA

Tell keymem a recalled memory was surfaced by the WRONG key — the fact may be fine, it just should not have come up for this query. Pass the memory_id and the key_id it arrived under (recall returns both). Weakens that one key->memory link so the pairing ranks lower next time, and cancels any pending alias learning for it. The memory itself, its other keys, and its content are untouched, and the link is floored rather than severed, so nothing becomes unreachable. Use correct() when the fact changed and forget() when it is simply wrong.

forgetA

Permanently delete a memory. Only use for completely wrong information. For outdated info, use correct() instead — it preserves history.

remember_batchA

MANDATORY END-OF-TURN GATE: when a turn reveals multiple durable facts, save them silently before replying. A durable fact left unsaved is a bug. Recall each topic first, reuse canonical concept-level keys (ATOMIC, 1-2 words each — never phrases), and register cross-lingual forms together. Each item: {content, keys, key_types?, namespace?, ttl_seconds?, decay_profile?, related_to?}; decay_profile defaults to standard. Returns saved IDs and is more efficient than multiple remember() calls.

Prompts

Interactive templates invoked by user choice

NameDescription
memory_system_promptSystem prompt for LLM agents using keymem. Include this in your system prompt.

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

A4.1/5.0

Scored across 10 tools

Disambiguation5/5

Each tool maps to a distinct operation: retrieval (browse_keys/read_key/read_memory/recall), writing (remember/remember_batch), updating (correct/confirm_memory), and deleting/decaying (forget/dismiss). The only close pair, remember vs remember_batch, is clearly separated by single vs multiple facts. Correct, forget, and dismiss are carefully differentiated with usage guidance.

Naming Consistency4/5

The toolkit uses imperative lowercase verbs throughout, with many verb_noun compounds like read_key, read_memory, browse_keys, and confirm_memory. However, several tools are standalone verbs without objects (recall, correct, dismiss, forget, remember), creating a slight inconsistency in naming shape.

Tool Count5/5

Ten tools is a well-scoped size for a memory server covering search, browsing, reading, writing, updating, and forgetting. Each tool has a clear role, and there is no redundant surface area. The batch variant of remember is justified by efficiency and does not feel like filler.

Completeness4/5

The core lifecycle is covered: recall/read for retrieval, remember/remember_batch for creation, correct/confirm_memory for updates, and forget for deletion, plus dismiss for link-level correction. Minor gaps exist around namespace enumeration and explicit alias/history management, but agents can complete normal workflows without dead ends.

Maintenance

ActivityActive
ResponsivenessNo issues