Memlord
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| MEMLORD_PORT | No | Server port | 8000 |
| MEMLORD_DB_URL | No | PostgreSQL connection URL | postgresql+asyncpg://postgres:postgres@localhost/memlord |
| MEMLORD_BASE_URL | No | Public URL for OAuth | http://localhost:8000 |
| MEMLORD_OAUTH_JWT_SECRET | No | JWT signing secret | memlord-dev-secret-please-change |
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
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| logging | {} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| extensions | {
"io.modelcontextprotocol/ui": {}
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| store_memoryA | Save a new memory. Idempotent: returns existing if content already stored. name: human-readable name, unique within the workspace. workspace: name of the workspace to store into. Omit to store as a personal memory. force: skip near-duplicate check and store unconditionally. expires_at: optional UTC expiry; after it passes the memory is hidden from reads. |
| retrieve_memoryA | Hybrid semantic + full-text search. Returns names + metadata only. Use get_memory(name=...) to fetch full content of a specific result. Pass workspace= to search only within a specific workspace. |
| recall_memoryA | Search memories by time expression + semantics. Returns names + metadata only. Examples: "last week", "yesterday", "about Python last month". Use get_memory(name=...) to fetch full content of a specific result. Pass workspace= to search only within a specific workspace. |
| get_memoryA | Fetch full content of a single memory by name. Use only when you already know the name — e.g. after retrieve_memory() or recall_memory() which return names in their results alongside compact snippets. Do NOT use for search — use retrieve_memory() for semantic/text search or recall_memory() for time-based queries like 'last week'. Unlike search, this also returns expired memories (expires_at in the past) — check expires_at to tell; extend it via update_memory to bring one back. |
| list_memoriesA | Browse all memories ordered by creation date (newest first). Returns full content (not snippets). Use to enumerate or audit without a specific query. |
| search_by_tagA | Find memories by exact tag match. Returns all results (no pagination). operation="AND" (default): memory must have ALL specified tags. operation="OR": memory must have AT LEAST ONE of the specified tags. Tags are case-insensitive. Use retrieve_memory() for semantic/text search or list_memories(tag=...) to browse a single tag with pagination. |
| delete_memoryA | Delete a memory by name. Pass workspace to disambiguate if the name exists in multiple workspaces. |
| update_memoryB | Update an existing memory identified by name. Only provided fields are changed. new_name: rename the memory to this name. workspace: disambiguate if the name exists in multiple workspaces. expires_at: set or extend the UTC expiry; omit to leave it unchanged. |
| move_memoryA | Move a memory to a different to_workspace. name: name of the memory to move. workspace: name of the target workspace (must be a member with write access). from_workspace: disambiguate source if the name exists in multiple workspaces. |
| list_workspacesA | List all workspaces you are a member of (personal + shared). |
| dream_reportA | Candidates for memory consolidation: similar pairs, expired and expiring memories. Read-only. The report only proposes candidates — reviewing and acting on them
(merge, supersede, extend, delete) is done via the regular memory tools.
Similar pairs are always within a single workspace, ordered by similarity.
Use the |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| dream | Guided memory consolidation pass: review similar, conflicting and expiring memories. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 11 tools
Retrieval tools (retrieve_memory, recall_memory, get_memory, list_memories, search_by_tag) overlap in purpose, but descriptions clearly distinguish semantic/text search, time-based search, direct name lookup, browsing, and exact tag search. CRUD, workspace, and consolidation tools are clearly separate.
Almost all tools follow a consistent snake_case verb_noun pattern (store_memory, update_memory, retrieve_memory, etc.). The one outlier is dream_report, which is noun-based rather than verb-based, but the set remains predictable overall.
11 tools is well-scoped for a memory management server. Each tool appears to cover a distinct operation, and the count sits comfortably within the typical 3-15 range without obvious bloat.
Core memory lifecycle is covered: store, get, update, delete, move, search, list, and expiry handling. Notable gaps remain: there is no create/delete workspace tool despite list_workspaces, and no tool to add or remove tags despite search_by_tag, which could leave agents unable to set up tag-based searches.