Skip to main content
Glama
tt-a1i
by tt-a1i

evermemos-mcp

PyPI Python CI License: MIT

English | 简体中文

Long-term memory for AI coding assistants. Remember once, recall forever.

evermemos-mcp overview

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@latest

Works 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-mcp

MCP 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

list_spaces

Discover available memory spaces

remember

Store context into long-term memory. Auto-detects sensitive content (API keys, passwords) and checks for conflicting memories

request_status

Check if a queued write has been extracted

recall

Search memories with 6 retrieval strategies (keyword / hybrid / vector / RRF / agentic / auto)

briefing

One-call session-start context restore: profile + episodes + facts + foresights

forget

Targeted deletion with verification workflow

fetch_history

Paginate through memory timeline by type

Key Capabilities

  • Space isolationcoding:my-app, chat:preferences, study:ml-notes — memories never bleed across projects

  • Multi-space search — Query up to 10 spaces in one recall call with automatic source attribution

  • Sensitive 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 decide

  • Lifecycle tracking — Every result labeled queued, provisional, fallback, or searchable across all tools

  • Traceable citationsmemory_type, snippet, timestamp, score, source_message_id on every result

  • Git auto-detection — Omit space_id and it infers coding:<repo-name> from git remote

  • Robust 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 + foresights

Why 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

domain:slug per project/topic

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

uvx evermemos-mcp

Cloud or self-host

Self-host required

npx


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 API
  • Cloud-first — All memories live in EverMemOS Cloud. No local state to lose.

  • Async extractionremember queues content for AI extraction. Use request_status to 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

chat:preferences

Durable personal preferences, names, tone, UI likes

chat:daily

Ongoing chat context that shouldn't leak into projects

coding:<repo>

Architecture decisions, conventions, bugs, project context

study:<topic>

Learning notes, topic progress, revision context

Which Tool When

Goal

Tool

Why

Start a new session

briefing

Fastest way to restore context in one call

Find a specific fact

recall

Relevance-ranked search across spaces

Review what happened

fetch_history

Chronological timeline > ranked search for audits

Verify before/after delete

fetch_history

Stable timeline for pre/post-delete checks


Configuration

Variable

Default

Description

EVERMEMOS_API_KEY

(required)

EverMemOS Cloud API key

EVERMEMOS_USER_ID

mcp-user

Default user identity

EVERMEMOS_DEFAULT_SPACE

(auto)

Default space. Auto-detected from git remote as coding:<repo>

EVERMEMOS_BASE_URL

https://api.evermind.ai

API endpoint

EVERMEMOS_DEFAULT_TIMEZONE

UTC

Timezone for metadata

EVERMEMOS_ENABLE_CONVERSATION_META

true

Sync conversation metadata

Variable

Default

Description

EVERMEMOS_API_VERSION

v1

API version (v0 legacy)

EVERMEMOS_LLM_CUSTOM_SETTING_JSON

Custom LLM extraction settings

EVERMEMOS_USER_DETAILS_JSON

User profile details for conversations

flush Rules

Scenario

flush

Mid-conversation, more messages coming

false

End of session / topic switch / summary

true

Uncertain

true (safer)


State

Meaning

queued

Write accepted, extraction not yet confirmed

provisional

Answer from pending_messages while extraction is in progress

fallback

Answer from pending_messages and/or metadata fallback while formal memories are not searchable yet; on Cloud v1, only limited Groups metadata (name/description) is durably mirrored

searchable

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:

  1. Confirm target memory_id via fetch_history or recall

  2. Call forget(memory_ids=[...], space_id=...)

  3. Verify with fetch_history

  4. If 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

docs/02-architecture.md

Technical architecture

docs/05-client-integrations.md

Client setup guides

docs/auto-memory-prompt.md

Auto-memory prompt templates

docs/06-benchmark.md

Benchmark protocol

CHANGELOG.md

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

MIT

Available Tools

7 tools
briefingA

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_idNoOptional user ID to filter memories. Defaults to the MCP client's identity.
end_timeNoISO 8601 end time for filtering (naive values default to UTC)
space_idYesMemory space to summarise
max_itemsNoMax items per section
start_timeNoISO 8601 start time for filtering (naive values default to UTC)

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoPage size (1-100)
offsetNoPagination offset (0-based)
user_idNoOptional user ID to filter memories. Defaults to the MCP client's identity.
end_timeNoISO 8601 end time with timezone (naive values default to UTC)
space_idYesMemory space to fetch. Use the same space you would brief or recall when reviewing a timeline.
start_timeNoISO 8601 start time with timezone (naive values default to UTC)
memory_typeNoMemory 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_metadataNoWhether to include metadata in each item

TDQS

A4.1/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
reasonNoOptional reason for deletion
user_idNoOptional user ID for input validation. Note: not sent to Cloud DELETE due to upstream compatibility.
space_idYesMemory space containing the memories
memory_idsYesMemory 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

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of MCP-visible spaces to return
queryNoOptional keyword to filter spaces

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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:).

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesWhat to search for
top_kNoMax number of results (-1 means all, capped by upstream at 100)
radiusNoCosine similarity threshold (0-1). Effective for vector and hybrid retrieval, default from upstream is 0.6
user_idNoOptional user ID to filter memories. Defaults to the MCP client's identity.
end_timeNoISO 8601 end time with timezone (naive values default to UTC). For search results, this only filters episodic_memory items.
space_idNoSingle memory space to search
space_idsNoOptional multi-space search scope (max 10 unique). Can be used alone or together with space_id.
start_timeNoISO 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_timeNoISO 8601 current time with timezone for upstream relevance filtering
memory_typesNoOptional memory type filter override. Cloud search currently supports: profile and episodic_memory.
retrieve_methodNoSearch strategy. auto is an MCP-layer strategy that runs hybrid+keyword in parallel and merges resultshybrid
include_metadataNoWhether to include memory metadata in results

TDQS

A4.7/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
roleNoMessage role: 'user' or 'assistant'
flushNoWhether to trigger immediate extraction. Default true. Set false only when sending multiple messages in a batch
senderNoBackward-compatible alias. Use 'user'/'assistant' as role alias, or pass a sender user_iduser
contentYesThe information to remember
user_idNoOptional sender user_id override (API sender field)
space_idNoTarget 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_listNoOptional referenced message ID list
descriptionNoHuman-readable description of this space (recommended when creating a new space)
include_statusNoWhether to also query request status once after queuing the memory write. Recommended for important writes and write-after checks
check_conflictsNoCheck 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

A4.9/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
request_idYesQueued remember request_id returned by remember

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

  1. 7 tool updatesv0.5.7
    • First observedbriefing
    • First observedfetch_history
    • First observedforget
    • First observedlist_spaces
    • First observedrecall
    • First observedremember
    • First observedrequest_status

TDQS

A4.2/5.0

Scored across 7 tools

Disambiguation4/5

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.

Naming Consistency4/5

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.

Tool Count5/5

Seven tools is well-scoped for a memory management server, covering discovery, write, status, search, summary, delete, and history without being bloated.

Completeness3/5

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

ActivityStale
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides AI coding assistants with persistent, context-rich memory of a codebase, including documentation and git history, enabling recall across sessions.
    104
    Apache 2.0
  • A
    license
    A
    quality
    D
    maintenance
    Enables AI coding assistants to store and retrieve persistent long-term memory across sessions, remembering project preferences, build steps, and architecture decisions.
    4
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Persistent memory for AI coding tools, enabling AI assistants to store and recall project decisions, conventions, and context across sessions.
    82
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Provides persistent memory for AI coding tools, allowing them to remember corrections, decisions, and preferences across sessions and different tools.
    60
    2
    MIT