Memory MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| MEMMCP_DATA_DIR | No | Directory where index and audit logs reside. | ./.memmcp_data |
| MEMMCP_PII_POLICY | No | PII handling policy: redact, block, flag, or off. | redact |
| MEMMCP_VECTOR_BACKEND | No | Vector backend: numpy (offline) or chroma. | numpy |
| MEMMCP_WEIGHT_RECENCY | No | Weight for freshness in hybrid ranking. | 0.25 |
| MEMMCP_WEIGHT_RELEVANCE | No | Weight for semantic similarity in hybrid ranking. | 0.60 |
| MEMMCP_WEIGHT_IMPORTANCE | No | Weight for caller-assigned importance in hybrid ranking. | 0.15 |
| MEMMCP_EMBEDDING_PROVIDER | No | Embedding provider: hash (offline), sentence-transformers, or openai. | hash |
| MEMMCP_EXTRACTION_PROVIDER | No | Fact extraction provider: rule (offline patterns), openai, or anthropic. | rule |
| MEMMCP_RECENCY_HALFLIFE_DAYS | No | Days until recency score decreases by 50%. | 30 |
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": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| rememberA | Store ONE durable fact about the user or project for future recall. When to use this toolUse Call it in real time as the conversation progresses. You do NOT need to wait for the user to explicitly ask you to save something. If the user confirms a plan you proposed (e.g. "ok, let's go with that"), save the key decisions from your proposal immediately. When NOT to use this toolIf you just generated (or the user pasted) a dense block of text containing
many facts (architecture docs, meeting notes, large plans), use
What to save (not just tech stack!)Save ALL categories of durable knowledge:
How to write a good factWrite a concise, third-person, present-tense, self-contained sentence. Good: "Project uses PostgreSQL as primary database." Bad: "they said postgres" (not self-contained, ambiguous) How to resolve the project_name (Session Locking & Ambiguity)
Args: content: The fact, e.g. "Project uses PostgreSQL as primary database." project_name: Project name to associate this fact with. If omitted (None), the fact is stored as a global memory visible to all projects. If provided, the fact is scoped to that project but still visible alongside global memories when querying that project. importance: 0..1 estimate of long-term value. - 0.85–0.95: identity, architecture, core decisions - 0.75–0.85: module descriptions, workflows - 0.70–0.80: stack choices - 0.65–0.80: domain terms, status - 0.50–0.65: preferences, dislikes - 0.40–0.50: ephemeral observations key: Optional conflict slot (e.g. "user:database"). A new fact with the same key supersedes the old one, so beliefs stay current. Common keys: user:name, user:language, user:framework, user:database, user:cloud, user:editor, user:current_project, project:architecture, project:deployment, project:purpose, project:status. For modules/workflows/decisions use dynamic keys like project:module:, project:workflow:, project:decision:. tags: Optional labels for filtering. ttl_days: Optional expiry in days for facts that go stale on their own. tool: Name of the calling tool (recorded for audit). Returns a summary including the resulting action: created, merged (a duplicate already existed), superseded (an older conflicting fact was retired), or blocked (PII policy refused it). |
| ingest_conversationA | Distill a raw conversation or dense text into clean facts and store them. When to use this toolUse this when a large block of text needs to be turned into memory:
What happens internallyMemory MCP's backend uses a dedicated extraction LLM to read the full text (both user and assistant turns), extract only the durable conclusions, standardise them into clean facts with conflict keys, and deduplicate against existing memory. Dead ends, chit-chat, and corrected mistakes are discarded automatically. How to resolve the project_nameSame as Args: conversation: The raw text to distill — can be a chat transcript, your own generated response, meeting notes, or any unstructured text. project_name: Project name. If provided, facts are stored under that project. If omitted, stored as global. tool: Calling tool name (for audit + provenance). Returns counts of extracted/created/merged/superseded facts. |
| recallA | Retrieve only the most relevant remembered facts for the current task. Call this at the start of a task instead of asking the user to re-explain context. Returns the top facts ranked by relevance + recency + importance, trimmed to a token budget so you never overflow the context window. Cross-project discoveryWhen How to resolve the project_nameSame as Args: query: What you need context about (the user's request/topic). project_name: Project name to search within. When given, searches that project's memories plus global memories. When omitted (None), searches across ALL projects (cross-project discovery). top_k: Maximum number of facts to return. token_budget: Optional cap on total tokens of returned facts. tool: Calling tool name (for audit). Returns a ready-to-inject |
| get_project_contextA | Get a structured snapshot of everything known about the project. Call this at the START of a session to load the full project model into
your context — purpose, architecture, modules, workflows, decisions,
domain terms, and status — grouped by category. Much richer than How to resolve the project_nameSame as Args: project_name: Project name to search within. Also includes global memories. Omit for global-only. categories: Optional filter — only include specific categories. Valid values: "identity", "stack", "project", "module", "workflow", "decision", "domain", "status". Pass null/omit for all categories. detail_level: "full" (complete content) or "summary" (first sentence only, for lightweight injection when context is tight). tool: Calling tool name (for audit). Returns a dict keyed by category, each containing a list of facts with their content, key, and importance. Only non-empty categories appear. |
| ingest_codebase_summaryA | Bootstrap project memory from a high-level codebase description. Pass a description of the project — what it does, its architecture, the main modules and their responsibilities, key decisions, deployment setup, domain terminology. Memory MCP will extract structured facts and store them. Ideal for onboarding: describe your project once, and every future session (across all connected tools) will already have the context. How to resolve the project_nameSame as Args: summary: A description of the codebase/project. Can be multi-paragraph. Include as much detail as useful: what the project is, its modules, architecture, tech stack, deployment, key decisions, domain terms. project_name: Project name. Facts will be stored under this project. If omitted, stored as global. tool: Calling tool name (for audit + provenance). Returns counts of extracted/created/merged/superseded facts. |
| list_projectsA | List all known projects that have stored memories. When to use this toolCall this FIRST when you are unsure which project the user is working on:
In IDE-based clients (Cursor, Windsurf, VS Code) you usually already know the workspace folder name, but calling this is still useful to confirm the exact project name used in memory. Returns a list of projects, each with:
|
| list_memoriesA | List stored memories, optionally filtered to a project. Set How to resolve the project_nameSame as |
| update_memoryB | Edit an existing memory by id (re-embeds if the content changes). |
| forgetB | Permanently delete a memory by id. |
| consolidateB | Merge near-duplicate memories within a project to keep memory clean. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| stats_resource | Current memory statistics and active configuration. |
| audit_resource | The most recent audit-log entries (what was stored/recalled and by whom). |
TDQS
Scored across 10 tools
Most tools map to clearly distinct memory operations: store one fact, ingest bulk text, query, get a project snapshot, list, update, delete, and consolidate. The only notable overlap is between ingest_conversation and ingest_codebase_summary, which both extract facts from text and could be confused despite usage guidance.
All names use snake_case and are action-oriented, making the tool set readable and predictable. Consistency is slightly reduced by mixing bare verbs (remember, recall, forget) with verb_noun forms (list_projects, update_memory).
Ten tools are well-scoped for a memory service, covering storage, retrieval, maintenance, and lifecycle operations without obvious bloat. Each tool appears to earn its place.
The surface covers the full memory lifecycle: create/store, bulk ingest, recall/read, project context, list, update, delete, and consolidation. No obvious CRUD or maintenance operation is missing for the stated purpose.