evermemos-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@evermemos-mcpremember we chose PostgreSQL for relational data"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
evermemos-mcp
Long-term memory for AI coding assistants. Remember once, recall forever.

You spent thirty minutes explaining your architecture, naming conventions, and why you dropped MongoDB. Next session — gone. You explain it all over again.
evermemos-mcp fixes this. One remember call stores it. One briefing call brings it back — across any session, any client.
Benchmark: 60/60 recall vs 0/60 baseline. Zero attribution errors. P95 < 2s. (evidence)
Intro video: Watch on Bilibili
Demo video: Watch on Bilibili
Quick Start
Get your API key from EverMemOS Cloud, then add to your MCP client config:
{
"mcpServers": {
"evermemos-mcp": {
"type": "stdio",
"command": "uvx",
"args": ["evermemos-mcp@latest"],
"env": {
"EVERMEMOS_API_KEY": "your-key-here"
}
}
}
}Or run directly:
uvx evermemos-mcp@latestWorks with Claude Code, Cursor, Cline, Cherry Studio, OpenClaw, Gemini CLI, Aider, and any MCP-compatible client or agent. See docs/05-client-integrations.md for client-specific setup.
git clone https://github.com/tt-a1i/everos-mcp.git
cd everos-mcp
cp .env.example .env # set EVERMEMOS_API_KEY
uv run evermemos-mcpMCP client config for source installs:
{
"mcpServers": {
"evermemos-mcp": {
"type": "stdio",
"command": "uv",
"args": ["run", "--directory", "/path/to/evermemos-mcp", "evermemos-mcp"],
"env": { "EVERMEMOS_API_KEY": "your-key-here" }
}
}
}Related MCP server: evermemos-mcp-server
What You Get
7 Tools
Tool | What it does |
| Discover available memory spaces |
| Store context into long-term memory. Auto-detects sensitive content (API keys, passwords) and checks for conflicting memories |
| Check if a queued write has been extracted |
| Search memories with 6 retrieval strategies (keyword / hybrid / vector / RRF / agentic / auto) |
| One-call session-start context restore: profile + episodes + facts + foresights |
| Targeted deletion with verification workflow |
| Paginate through memory timeline by type |
Key Capabilities
Space isolation —
coding:my-app,chat:preferences,study:ml-notes— memories never bleed across projectsMulti-space search — Query up to 10 spaces in one
recallcall with automatic source attributionSensitive content guard — Blocks API keys, passwords, tokens, private keys before storing. Asks user to confirm
Memory conflict detection — Auto-checks for similar memories in
chat:*spaces. Surfaces conflicts so the agent can decideLifecycle tracking — Every result labeled
queued,provisional,fallback, orsearchableacross all toolsTraceable citations —
memory_type,snippet,timestamp,score,source_message_idon every resultGit auto-detection — Omit
space_idand it inferscoding:<repo-name>from git remoteRobust error handling — Retry with backoff (429/5xx); legacy v0 GET-body proxy/WAF fallback (default v1 fetch/search use POST bodies); structured error codes
Use Cases
Persistent architecture context:
You: remember we chose PostgreSQL because our data is highly relational
[space_id: coding:my-saas]
-- next day, new session --
You: what database did we choose and why?
→ "Chose PostgreSQL — highly relational data model"Personal preferences that stick:
You: remember I prefer dark mode, vim keybindings, and concise responses
[space_id: chat:preferences]
-- any future session --
You: recall my UI preferences
→ "dark mode, vim keybindings, concise responses"Cross-session learning notes:
You: remember bias-variance tradeoff — high bias = underfitting, high variance = overfitting
[space_id: study:ml-notes]
-- later --
You: briefing for study:ml-notes
→ profile + recent episodes + key facts + foresightsWhy evermemos-mcp
There are other memory MCP servers. Here's what makes this one different:
evermemos-mcp | Mem0 MCP | Letta/MemGPT | Official MCP memory | |
Space isolation |
| No | No | No |
Lifecycle tracking | queued → provisional → fallback → searchable | No | No | No |
Sensitive content guard | API keys, passwords, tokens blocked | No | No | No |
Conflict detection | Auto for chat spaces | No | No | No |
Multi-space search | Up to 10 spaces in one call | No | No | No |
Retrieval strategies | 6 methods + auto merge | Semantic only | Semantic only | None |
Benchmark verified | 60/60 recall, 0 errors | — | — | — |
Setup |
| Cloud or self-host | Self-host required |
|
Benchmark
Tested on a fixed 60-query set across coding, chat, and study spaces.
Metric | With memory | Without memory |
Hit rate | 60/60 (100%) | 0/60 (0%) |
Attribution errors | 0 | — |
P95 latency | 1958 ms | — |
Evidence:
How It Works
MCP Client (Claude Code / Cursor / Cline / Cherry Studio / OpenClaw / any agent)
│
│ MCP stdio
▼
┌─────────────────────────────┐
│ evermemos-mcp server │
│ ┌───────────────────────┐ │
│ │ 7 Tool Handlers │ │
│ └──────────┬────────────┘ │
│ ┌──────────▼────────────┐ │
│ │ Memory Service │ │ Content guard → Conflict check → Cloud write → Lifecycle tracking
│ └──────────┬────────────┘ │
│ ┌──────────▼────────────┐ │
│ │ Space Catalog Service │ │ Space registry, metadata sync, cross-session recovery
│ └──────────┬────────────┘ │
│ ┌──────────▼────────────┐ │
│ │ EverMemOS HTTP Client│ │ Auth, retries, rate-limit backoff, error normalization
│ └──────────┬────────────┘ │
└─────────────┼───────────────┘
│ HTTPS
▼
EverMemOS Cloud APICloud-first — All memories live in EverMemOS Cloud. No local state to lose.
Async extraction —
rememberqueues content for AI extraction. Userequest_statusto track progress.Not a thin wrapper — 2500+ lines of orchestration: fallback hierarchies, multi-method search merging, identity mirroring, partial failure recovery.
Space Templates
Template | Use it for |
| Durable personal preferences, names, tone, UI likes |
| Ongoing chat context that shouldn't leak into projects |
| Architecture decisions, conventions, bugs, project context |
| Learning notes, topic progress, revision context |
Which Tool When
Goal | Tool | Why |
Start a new session |
| Fastest way to restore context in one call |
Find a specific fact |
| Relevance-ranked search across spaces |
Review what happened |
| Chronological timeline > ranked search for audits |
Verify before/after delete |
| Stable timeline for pre/post-delete checks |
Configuration
Variable | Default | Description |
| (required) | EverMemOS Cloud API key |
|
| Default user identity |
| (auto) | Default space. Auto-detected from git remote as |
|
| API endpoint |
|
| Timezone for metadata |
|
| Sync conversation metadata |
Variable | Default | Description |
|
| API version ( |
| — | Custom LLM extraction settings |
| — | User profile details for conversations |
flush Rules
Scenario |
|
Mid-conversation, more messages coming |
|
End of session / topic switch / summary |
|
Uncertain |
|
State | Meaning |
| Write accepted, extraction not yet confirmed |
| Answer from |
| Answer from |
| Answer from formal extracted memories |
All 7 tools expose compatible lifecycle blocks so agents always know memory maturity.
Cloud deletion is async and best-effort. evermemos-mcp provides a verification-first workflow:
Confirm target
memory_idviafetch_historyorrecallCall
forget(memory_ids=[...], space_id=...)Verify with
fetch_historyIf target persists, the lifecycle model surfaces this transparently
This is deliberate: expose real state to the agent rather than pretend deletion is instant.
Development
uv sync --group dev # Install dev dependencies
uv run ruff check # Lint
uv run pytest # Tests (285 pass)Documentation
Document | Description |
Technical architecture | |
Client setup guides | |
Auto-memory prompt templates | |
Benchmark protocol | |
Version history |
Also Check Out
MCO — Agent orchestration CLI. Let your main agent (Claude Code, Cursor, Aider) dispatch tasks to multiple coding agents in parallel. Pairs well with evermemos-mcp: MCO handles parallel execution, evermemos-mcp handles persistent memory.
License
Available Tools
7 toolsbriefingA
Get a structured context briefing for a memory space. Call this at the start of a new session to restore high-value context quickly. Returns: user profile, recent episodes, key facts, and foresights. When formal profile memories are unavailable, briefing may surface explicit fallback metadata and label it as such. This is the fastest way to catch up on the most important currently available context in a space.
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | No | Optional user ID to filter memories. Defaults to the MCP client's identity. | |
| end_time | No | ISO 8601 end time for filtering (naive values default to UTC) | |
| space_id | Yes | Memory space to summarise | |
| max_items | No | Max items per section | |
| start_time | No | ISO 8601 start time for filtering (naive values default to UTC) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It does well by detailing what the tool returns (user profile, recent episodes, key facts, foresights) and explicitly mentions a fallback behavior: 'When formal profile memories are unavailable, briefing may surface explicit fallback metadata and label it as such.' This goes beyond a simple read tool description, though it does not explicitly state whether the operation is read-only or if there are side effects. It is transparent about its output and edge-case handling, so a 4 is warranted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, with about four sentences, each adding necessary information: core purpose, usage timing, return contents, and fallback behavior. It is front-loaded with the primary action and avoids filler. Every sentence earns its place, making it efficient for an agent to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 5 parameters, no output schema, and no annotations, the description does a good job of covering essential context. It explains the return structure (user profile, episodes, facts, foresights) and notes the fallback scenario, which is important for agent expectations. It does not elaborate on time-range parameters or max_items, but these are well-documented in the schema. Minor gaps like error behavior or performance limitations are not addressed, but overall the description is sufficient for an agent to use this tool effectively, earning a 4.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers 100% of the parameters with descriptions, so the baseline is 3. The tool description does not add meaningful parameter-specific semantics beyond what the schema already provides. It implies a 'memory space' maps to space_id, but this is already evident from the schema. Since the description does not compensate or elaborate on parameter usage, a 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Get a structured context briefing for a memory space.' It specifies the resource (memory space) and the output type (structured briefing), and distinguishes it from sibling tools like recall or fetch_history by framing it as a session-start summary. The phrase 'restore high-value context quickly' makes the intent unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Call this at the start of a new session to restore high-value context quickly,' providing a clear use case. It also claims it is 'the fastest way to catch up on the most important currently available context,' which helps an agent decide when to use it. It does not name specific alternatives or exclusions, but the guidance is strong enough to warrant a 4.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fetch_historyA
Page through historical memories in a space by memory_type. Useful for chronological timeline review when recall's relevance ranking is not sufficient, or when you need to browse all memories of a type. This is the primary tool for timeline review, pre-delete verification, and post-delete re-checks.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size (1-100) | |
| offset | No | Pagination offset (0-based) | |
| user_id | No | Optional user ID to filter memories. Defaults to the MCP client's identity. | |
| end_time | No | ISO 8601 end time with timezone (naive values default to UTC) | |
| space_id | Yes | Memory space to fetch. Use the same space you would brief or recall when reviewing a timeline. | |
| start_time | No | ISO 8601 start time with timezone (naive values default to UTC) | |
| memory_type | No | Memory type to page through. Cloud v1 supports episodic_memory, profile, agent_case, and agent_skill. event_log and foresight are legacy v0-only and return UNSUPPORTED_UPSTREAM on Cloud v1. | episodic_memory |
| include_metadata | No | Whether to include metadata in each item |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden of behavioral disclosure. It communicates that the tool returns historical memories in chronological order and supports pagination, but it does not explicitly state that this is a read-only operation free of side effects, nor does it mention error behavior for unsupported memory types. The schema covers some of these details, but the description itself lacks explicit safety/reversibility language.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences and front-loaded with the primary action, but it repeats 'timeline review' twice ('Useful for chronological timeline review' and 'primary tool for timeline review'), which is slightly redundant. Despite that, it is concise and efficiently communicates the tool's purpose and usage.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 8 parameters, no output schema, and no annotations, the description provides clear usage context and differentiates the tool from recall. It covers the main use cases but doesn't explicitly describe the return format or pagination behavior details, although the schema already describes limit/offset and memory_type constraints. Overall, the description is sufficiently complete for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with each parameter already having a detailed description. The tool description adds little beyond restating 'memory_type' and 'space' and provides no additional context that is not already in the schema. A baseline score of 3 is appropriate because the description does not need to compensate for schema gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Page through historical memories') and the resource ('in a space by memory_type'), and it distinguishes this tool from recall by framing it as a chronological timeline review versus relevance ranking. It also explicitly names the tool as the primary choice for timeline review, pre-delete verification, and post-delete re-checks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly provides when to use this tool ('when recall's relevance ranking is not sufficient' and 'when you need to browse all memories of a type') and lists the main use cases. It implies an alternative (recall) and gives context for choosing fetch_history over other siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
forgetA
Request deletion of specific memories from a space. Use fetch_history or recall to identify targets first — results may include a parent_id (memcell ID) which is the effective delete key used by EverMemOS Cloud. The server resolves parent_id automatically when available (recent 100 items per type). Verify deletion afterwards with fetch_history; some IDs may remain unmatched if the memory was already deleted or outside the resolution window.
| Name | Required | Description | Default |
|---|---|---|---|
| reason | No | Optional reason for deletion | |
| user_id | No | Optional user ID for input validation. Note: not sent to Cloud DELETE due to upstream compatibility. | |
| space_id | Yes | Memory space containing the memories | |
| memory_ids | Yes | Memory identifiers to delete. Can be either the memory id or the parent_id (memcell ID) from fetch_history/recall results. The server attempts to resolve to the correct memcell ID for deletion; if resolution fails (e.g. old memory beyond the 100-item scan window), the original id is sent as-is. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully carries the burden of behavioral disclosure. It reveals the parent_id resolution mechanism, the 100-item scan window limitation, and the possibility of unmatched IDs if the memory was already deleted or outside the window. It also advises verification, making the deletion process and its potential failure modes transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loaded with the core purpose, then provides procedural details and caveats. Every sentence contributes value: purpose, prerequisites, and failure/verification guidance. No waste or redundancy, making it easily digestible for an AI agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has no output schema and no annotations, yet the description covers all necessary context: deletion request, identification of targets, resolution mechanics, limitations, and post-deletion verification. It is complete enough for an agent to select and invoke the tool correctly and to anticipate outcomes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema's descriptions cover 100% of parameters, including detailed semantics for memory_ids (memory id vs. parent_id, resolution failure behavior). The description adds little new parameter-level meaning; it reinforces the workflow but relies on the schema for exact semantics. Baselines at 3 given high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Request deletion of specific memories from a space.' It uses a specific verb ('request deletion') and resource ('memories'), and distinguishes itself from siblings by explicitly directing users to fetch_history or recall for identification, and fetch_history for verification. This makes it unambiguous which tool to use for deletion.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit workflow guidance: use fetch_history or recall to identify targets first, and verify deletion afterwards with fetch_history. It also explains when IDs may remain unmatched, giving users a clear expectation of when to retry or confirm. This goes beyond simple purpose and offers actionable alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_spacesA
List MCP-visible memory spaces that this server can route and recover. Call this first to discover which space_id values are available before using other memory tools. Each space isolates memories by project or topic (e.g. coding:my-app, study:ml-notes, chat:preferences). Note: some native EverMemOS Cloud spaces created outside the MCP naming and catalog flow may not appear here. If no spaces exist yet, create one by calling remember with a new space_id and description.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of MCP-visible spaces to return | |
| query | No | Optional keyword to filter spaces |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It discloses a limitation: some native EverMemOS Cloud spaces may not appear. It also clarifies the memory space concept and gives examples. It doesn't mention return structure or error scenarios, but for a list-only operation this is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and every sentence adds value: main function, usage order, naming examples, caveat, fallback instruction. It's slightly long but not wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is complete for a simple listing tool: it explains what spaces are, how to use the tool, what to watch out for, and what to do if empty. The lack of an output schema is mitigated by the clear 'List' semantics.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Both parameters (limit, query) are fully described in the schema with 100% coverage. The description doesn't add syntax details, but it reinforces the purpose of discovering space IDs, which indirectly helps understand the query parameter. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'List' and identifies the resource 'MCP-visible memory spaces.' It explicitly distinguishes from siblings by positioning it as the first call to discover space_id values before using other memory tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear guidance: 'Call this first to discover which space_id values are available before using other memory tools.' It also explains the naming convention and gives a fallback action if no spaces exist, making usage boundaries clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recallA
Search for relevant memories in one or more spaces. Use this when you need context about prior decisions, preferences, conventions, or anything discussed in previous sessions. Returns matching memories with traceable citations (memory_type, snippet, timestamp, relevance score). Also reports whether current results are searchable, provisional, or fallback. Pending signals depend on upstream pending_messages support and may be absent even while extraction is still in progress. If you need chronological review, delete verification, or a complete timeline, prefer fetch_history instead of relying on relevance-ranked recall alone. If space_id and space_ids are both omitted, auto-detected from git remote (coding:).
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | What to search for | |
| top_k | No | Max number of results (-1 means all, capped by upstream at 100) | |
| radius | No | Cosine similarity threshold (0-1). Effective for vector and hybrid retrieval, default from upstream is 0.6 | |
| user_id | No | Optional user ID to filter memories. Defaults to the MCP client's identity. | |
| end_time | No | ISO 8601 end time with timezone (naive values default to UTC). For search results, this only filters episodic_memory items. | |
| space_id | No | Single memory space to search | |
| space_ids | No | Optional multi-space search scope (max 10 unique). Can be used alone or together with space_id. | |
| start_time | No | ISO 8601 start time with timezone (e.g. 2024-01-01T00:00:00+00:00, naive values default to UTC). For search results, this only filters episodic_memory items. | |
| current_time | No | ISO 8601 current time with timezone for upstream relevance filtering | |
| memory_types | No | Optional memory type filter override. Cloud search currently supports: profile and episodic_memory. | |
| retrieve_method | No | Search strategy. auto is an MCP-layer strategy that runs hybrid+keyword in parallel and merges results | hybrid |
| include_metadata | No | Whether to include memory metadata in results |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It reveals return format (citations with memory_type, snippet, timestamp, relevance score), result status ('searchable, provisional, or fallback'), dependence on upstream pending_messages, and auto-detection from git remote. This is thorough, though it does not explicitly state that the operation is read-only, which would have been useful. However, the verb 'search' strongly implies no mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured, front-loading the purpose and usage, then providing return details, caveats, alternative tool guidance, and auto-detection behavior. Each sentence adds meaningful information—no filler or redundancy. It is appropriately sized for a complex search tool with 12 parameters and no output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (12 parameters, no output schema, no annotations), the description provides a complete picture. It explains what results look like, how to interpret status flags, when to use an alternative, and how space selection works. The schema covers parameter syntax, and the description fills the behavioral and contextual gaps, making the tool fully usable by an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds value by explaining that when both space_id and space_ids are omitted, the tool auto-detects from git remote, and by summarizing the meaning of the relevance-ranked results. It also notes that pending signals may be absent even if extraction is in progress, which indirectly informs the interpretation of parameters like current_time. This goes beyond the schema's straightforward descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Search for relevant memories in one or more spaces.' It distinguishes itself from sibling tools like fetch_history by stating that recall is for retrieving context about prior decisions, preferences, and conventions, while fetch_history is for chronological review. This clearly articulates the tool's unique role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use the tool: 'Use this when you need context about prior decisions, preferences, conventions, or anything discussed in previous sessions.' It also provides exclusion guidance by recommending fetch_history for chronological review or delete verification, and clarifies auto-detection behavior when space identifiers are omitted. This is exemplary usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rememberA
Store information in long-term memory within a specific space. Use this proactively to save architecture decisions, user preferences, project conventions, bug solutions, and key context. Content is scanned for sensitive patterns (API keys, passwords, tokens) before sending to Cloud. If detected, the write is blocked and findings are returned with a hint on how to proceed. For chat:* spaces, similar existing memories are checked automatically and surfaced as conflicts in the response. Use check_conflicts to override. Content is queued for AI extraction and becomes searchable only after upstream processing completes. For important writes, prefer remember(include_status=true) so the write-after status check runs immediately. Use request_status, recall, or briefing to distinguish queued, provisional, fallback, and searchable states. Set flush=true at end of session or topic switch; flush=false during ongoing work. Provide a description when creating a new space for the first time.
| Name | Required | Description | Default |
|---|---|---|---|
| role | No | Message role: 'user' or 'assistant' | |
| flush | No | Whether to trigger immediate extraction. Default true. Set false only when sending multiple messages in a batch | |
| sender | No | Backward-compatible alias. Use 'user'/'assistant' as role alias, or pass a sender user_id | user |
| content | Yes | The information to remember | |
| user_id | No | Optional sender user_id override (API sender field) | |
| space_id | No | Target memory space in <domain>:<slug> format (e.g. coding:my-app, chat:preferences, chat:daily, study:ml). Use chat:preferences for durable personal preferences, chat:daily for ongoing chat context, coding:<repo> for project decisions, and study:<topic> for learning notes. If omitted, the server may use EVERMEMOS_DEFAULT_SPACE or auto-detect from the current git remote (coding:<repo-name>). | |
| refer_list | No | Optional referenced message ID list | |
| description | No | Human-readable description of this space (recommended when creating a new space) | |
| include_status | No | Whether to also query request status once after queuing the memory write. Recommended for important writes and write-after checks | |
| check_conflicts | No | Check for similar existing memories before storing. Default: auto (enabled for chat:* spaces, disabled for others). When conflicts are found, the new memory is still stored and conflicts are returned for the agent to decide. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so thoroughly. It discloses sensitive-pattern scanning and blocking, automatic conflict checking for chat:* spaces, queued extraction and searchability delays, status-check behavior with include_status, and flush semantics. This goes well beyond a basic 'store information' statement.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but dense with actionable information. Every sentence introduces a distinct behavioral or usage detail—no filler or redundancy. It is front-loaded with the core purpose and then branches into security, conflict handling, processing states, and operational flags, making it easy to locate key points.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (10 parameters, no annotations, no output schema), the description is highly complete. It covers all critical aspects: what to store, space selection, sensitive data handling, asynchronous processing, conflict checking, flush behavior, and status verification. It even guides on when to use sibling tools for state distinction. The lack of a return-value description is mitigated by the detailed write/status behavior described.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds meaningful context beyond the schema: it explains space_id domain semantics (coding:<repo>, chat:preferences, etc.), recommends when to set flush=false and include_status=true, and clarifies check_conflicts default behavior. This adds value above the schema's property descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Store information in long-term memory within a specific space.' It uses a specific verb and resource, and the proactive use cases (architecture decisions, user preferences, project conventions, etc.) distinguish it from sibling tools like recall, briefing, forget, and list_spaces.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use guidance and alternatives. It says 'Use this proactively to save...' and directs users to related tools: 'Use check_conflicts to override,' 'use request_status, recall, or briefing to distinguish states.' It also gives contextual advice on flush behavior, include_status, and space selection, making it clear when and how to use the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
request_statusA
Check the async processing status for a prior remember request. Use this when remember returned a request_id and you need to know whether extraction is still queued or has been reported complete by upstream. Check success/error first, then interpret lifecycle.state.
| Name | Required | Description | Default |
|---|---|---|---|
| request_id | Yes | Queued remember request_id returned by remember |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It discloses the response interpretation order: 'Check success/error first, then interpret lifecycle.state,' and implies a read-only status poll. It doesn't elaborate on possible errors or side effects, but provides meaningful behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: the first states the purpose, the second gives when-to-use and interpretation guidance. Every sentence earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (one param, no output schema), and the description covers usage context and key response fields. It doesn't detail all lifecycle states or error formats, but the provided guidance is sufficient for a basic status-check tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with the request_id parameter already described as 'Queued remember request_id returned by remember.' The description reinforces this provenance but adds no new semantic detail, so it meets the baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Check' and clearly identifies the resource: async processing status for a prior remember request. It distinguishes itself from sibling tools by focusing on status checking of a remember request_id.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use: 'when remember returned a request_id and you need to know whether extraction is still queued or has been reported complete by upstream.' It gives clear context but doesn't explicitly list alternatives or when-not-to-use scenarios, hence a 4.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
7 tool updates
v0.5.7- First observed
briefing - First observed
fetch_history - First observed
forget - First observed
list_spaces - First observed
recall - First observed
remember - First observed
request_status
TDQS
Scored across 7 tools
Each tool has a specific role: discovery, storage, status check, search, briefing, deletion, and history. The retrieval tools (recall, fetch_history, briefing) overlap somewhat, but their descriptions clearly distinguish relevance search, chronological paging, and structured summaries.
Most tool names follow a verb or verb_noun pattern (list_spaces, remember, request_status, recall, forget, fetch_history). 'briefing' is a noun-only deviation, breaking the otherwise consistent style.
Seven tools is well-scoped for a memory management server, covering discovery, write, status, search, summary, delete, and history without being bloated.
Core operations are covered (create, read, search, delete, list), but there is no explicit update tool, and 'remember' references a nonexistent 'check_conflicts' tool. Minor gaps exist around memory editing and conflict handling.
Maintenance
Related MCP Connectors
Shared memory for coding agents. Stop re-explaining your codebase every session.
- memoryOAuthcom.leapmemory
Long-term memory for AI assistants. Isolated per-user storage, recall across conversations.
Shared memory for AI coding agents. Save once, reuse from Cursor, Claude Code, Codex.
Persistent cross-session memory shared by Codex, Claude Code, ChatGPT, and other AI agents.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceProvides AI coding assistants with persistent, context-rich memory of a codebase, including documentation and git history, enabling recall across sessions.104Apache 2.0
- AlicenseAqualityDmaintenanceEnables AI coding assistants to store and retrieve persistent long-term memory across sessions, remembering project preferences, build steps, and architecture decisions.4MIT
- AlicenseNot gradedqualityCmaintenancePersistent memory for AI coding tools, enabling AI assistants to store and recall project decisions, conventions, and context across sessions.82MIT
- AlicenseNot gradedqualityCmaintenanceProvides persistent memory for AI coding tools, allowing them to remember corrections, decisions, and preferences across sessions and different tools.602MIT