Skip to main content
Glama
MK-986123

server-memory

by MK-986123

Overview

server-memory is an open-source Model Context Protocol server for durable AI-agent memory. It stores project facts, decisions, observations, relations, preferences, and activity in local SQLite databases, then returns compact, scoped context when an agent needs continuity across sessions.

It is designed for agents that repeatedly work on the same repositories, systems, incidents, or long-running tasks and need to remember what was already learned without replaying an entire conversation or loading the full knowledge graph every turn.

It is intentionally boring where memory should be boring: local storage, explicit tools, inspectable data, bounded output, and predictable failure modes.

Data remains local unless it is explicitly exported. The default transport is stdio. An optional shared HTTP daemon binds to localhost and uses local bearer-token authentication by default.

Related MCP server: tartarus-mcp

Why server-memory

LLM agents commonly lose useful state between sessions. Common workarounds have real costs:

  • repeating repository discovery and diagnostics

  • pasting large handoff summaries into every new session

  • consuming context with stale or irrelevant history

  • forgetting accepted decisions, constraints, and unresolved work

  • mixing user preferences with project-specific facts

  • depending on hosted memory services for data that should stay local

server-memory addresses those problems with durable, queryable memory that can be read selectively instead of replayed wholesale.

The project is intended to improve:

  • Cross-session continuity: retain facts and decisions after the original conversation ends.

  • Context efficiency: return compact, relevant snippets instead of the entire stored graph.

  • Task completion: help agents continue prior work without rediscovering established state.

  • Reduced repeated work: preserve attempted commands, known failures, file locations, and next steps.

  • Safer scope separation: keep workspace memory distinct from optional global preference memory.

  • Local control: use inspectable SQLite databases without requiring external service credentials.

These are design goals, not performance claims. Verified results will be published only after controlled benchmark runs are complete.

How it works

Memory model

The server stores:

  • Entities: projects, files, modules, services, people, configurations, incidents, and other named objects.

  • Observations: durable facts, decisions, preferences, paths, dependencies, code snippets, and configuration details.

  • Relations: typed links between entities.

  • Tags: project scopes, pinned items, preferences, and workflow labels.

  • Activity: decisions, changes, fixes, and other events worth carrying into later sessions.

Retrieval path

Routine recall uses memory_context:

  1. Scope the lookup to the active workspace and optional global preference database.

  2. Collect candidates through FTS5, optional embeddings, activity links, and fallback matching.

  3. Rank candidates using exact-name, lexical, semantic, importance, confidence, pinned, activity, access-recency, and staleness signals.

  4. Suppress duplicate or low-value matches.

  5. Return bounded snippets plus conflict and stale-state indicators.

The goal is to return the smallest useful memory slice for the current task, not to place the entire database in model context.

At a glance

Capability

Implementation

Storage

SQLite with WAL mode and FTS5 search

Memory model

Entities, observations, relations, tags, and activity

MCP interface

20 tools; no MCP resources or prompts

Routine recall

Compact memory_context output

Broader recall

memory_context_full, graph reads, node search, and timeline queries

Retrieval

FTS5, ranking signals, fuzzy fallback, and optional embeddings

Scopes

Workspace memory and optional global preference memory

Default transport

stdio

Shared mode

Localhost HTTP daemon with a stdio proxy

Data paths

Platform-native user data and runtime directories through platformdirs

License

MIT

Design principles

  • Local-first: core operation requires no hosted database or external service credential.

  • Selective recall: query relevant memory rather than replaying all stored history.

  • Bounded context: token budgets and compact formatting limit retrieval output.

  • Explicit durability: agents choose what to store through MCP tools.

  • Inspectable state: memory remains readable, exportable, and testable.

  • Scope safety: destructive operations reject scope="all".

  • Graceful degradation: lexical retrieval remains available without embeddings.

Architecture

Default stdio mode

┌────────────┐         stdio         ┌─────────────────────┐
│ MCP client │ ────────────────────> │    server-memory    │
└────────────┘                       │    FastMCP server   │
                                     ├─────────────────────┤
                                     │ Workspace SQLite DB │
                                     │                     │
                                     │ Global preferences  │
                                     │ DB, when enabled    │
                                     └─────────────────────┘

Optional shared mode

┌────────────┐      stdio       ┌─────────────────────┐
│ MCP client │ ───────────────> │ server-memory-proxy │
└────────────┘                  └──────────┬──────────┘
                                         │
                                         │ HTTP
                                         │ 127.0.0.1:8765/mcp
                                         ▼
                              ┌─────────────────────┐
                              │ server-memory-serve │
                              │ FastMCP daemon      │
                              └─────────────────────┘

Use shared mode when multiple local clients should access one database process rather than opening the same database independently.

Requirements

  • Python 3.10 or newer

  • SQLite with FTS5 enabled

  • Git and pip for installation from the repository

Check FTS5 support:

python -c "import sqlite3; c=sqlite3.connect(':memory:'); c.execute('CREATE VIRTUAL TABLE t USING fts5(content)'); c.close(); print('FTS5 available')"

No hosted CI status is used as proof of compatibility. Validate the package locally on the operating system and Python version where it will run.

Installation

Core installation

python -m pip install "server-memory @ git+https://github.com/MK-986123/server-memory.git"

Installation with embeddings

python -m pip install "server-memory[embeddings] @ git+https://github.com/MK-986123/server-memory.git"

Embeddings are optional. Core storage and FTS5 retrieval work without them.

Development checkout

git clone https://github.com/MK-986123/server-memory.git
cd server-memory

python -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install -e ".[dev]"

On Windows PowerShell:

.venv\Scripts\Activate.ps1

Install development and embedding dependencies together:

python -m pip install -e ".[dev,embeddings]"

AI coding agents working in this repository should follow AGENTS.md. Contributors should also read CONTRIBUTING.md.

Quick start

Run the stdio server

server-memory

Equivalent module form:

python -m server_memory

Use a dedicated project database

MEMORY_DB_PATH=<PROJECT_ROOT>/memory.db server-memory

Use the equivalent environment-variable syntax for your shell on Windows.

Run the shared localhost daemon

server-memory-serve \
  --host 127.0.0.1 \
  --port 8765 \
  --transport streamable-http

Connect a stdio-only client to the daemon

server-memory-proxy --url http://127.0.0.1:8765/mcp

MCP client configuration

Direct stdio server

{
  "mcpServers": {
    "server-memory": {
      "command": "server-memory",
      "env": {
        "MEMORY_PROJECT": "<PROJECT_NAME>"
      }
    }
  }
}

Shared daemon proxy

Start server-memory-serve separately, then configure the MCP client to launch the proxy:

{
  "mcpServers": {
    "server-memory": {
      "command": "server-memory-proxy",
      "args": [
        "--url",
        "http://127.0.0.1:8765/mcp"
      ]
    }
  }
}

Use memory only when prior state may materially improve the task.

  • Call memory_context(hint="current topic", limit=3-5) when earlier decisions, project facts, preferences, or unresolved work may matter.

  • Skip memory lookup for one-off answers or tasks already fully grounded in the current context.

  • Store durable facts and decisions, not routine conversation.

  • Use log_activity after meaningful changes, fixes, or decisions.

  • Tag only facts that must remain prominent as pinned.

  • Use explicit workspace or global scope for destructive operations.

Tool reference

server-memory registers MCP tools only. It does not register resources or prompts.

Scope behavior

Scope

Behavior

workspace

Operates on the current workspace database and is the default for project memory

global

Operates on the global preference database

all

Combines supported workspace and global results with source labels

Preference-tagged writes can automatically route to the global database when global preference routing is enabled.

IMPORTANT

Destructive operations require an explicitworkspace or global scope. They reject scope="all" to prevent accidental cross-database deletion, merging, or tag removal.

Tool

Purpose

Main inputs

memory_context

Compact scoped recall for ordinary agent context

hint, project, limit, scope

memory_context_full

Larger bootstrap context with pinned and recent items

project, budget, scope

create_entities

Add entities and optional initial observations

entities, scope

add_observations

Add observations to existing entities

observations, scope

create_relations

Connect existing entities

relations, scope

read_graph

Read graph data, compressed by default

tags, entity_types, limit, include_deleted, compress, scope

search_nodes

FTS5 search with filters

query, tags, entity_types, time_range, limit, compress, scope

open_nodes

Open named entities and optional neighbors

names, depth, scope

log_activity

Record a durable development or session event

action, summary, entity_names, tags, metadata, scope

query_timeline

Query activity history

time_range, start, end, actions, entity_name, session_id, limit, scope

manage_tags

List, create, delete, apply, remove, or clean tags

action, name, entity_name, tag_name, scope

merge_entities

Merge one entity into another

source, target, strategy, scope

export_graph

Export graph as JSON or JSONL

format, scope

import_graph

Import JSON or JSONL graph data

data, scope

memory_stats

Return counts and storage statistics

scope

backup_memory

Copy a SQLite database

dest_path, scope

get_observation_history

Show observation versions for an entity

entity_name, content_prefix, scope

delete_entities

Soft-delete or hard-delete entities

entityNames, hard, scope

delete_observations

Delete selected observations

deletions, scope

delete_relations

Delete relations

relations, scope

Write tools modify the selected SQLite database. backup_memory writes a database backup. export_graph may expose sensitive memory content, so review exports before sharing them.

Configuration

Configuration is environment-driven. Empty path overrides in .env.example use platform defaults.

Storage and scope

Variable

Default

Meaning

MEMORY_DB_PATH

Platform user-data directory, workspace-namespaced when detected

Workspace SQLite database

MEMORY_PROJECT

Empty

Default project scope

MEMORY_GLOBAL_DB_ENABLED

true

Enable the global preference database

MEMORY_GLOBAL_DB_PATH

Platform user-data directory

Global preference database

MEMORY_GLOBAL_PREFERENCE_ROUTING_ENABLED

true

Route preference-tagged writes to global memory

MEMORY_WORKSPACE_ROOT

Unset

Explicit workspace root for default database placement

MEMORY_WORKSPACE_ID

Unset

Explicit workspace identifier for default database placement

Retrieval and compression

Variable

Default

Meaning

MEMORY_COMPRESSION_LEVEL

4

Compression level from 0 through 4; 4 is automatic

MEMORY_TOKEN_BUDGET

2000

Maximum approximate token budget for compressed graph output

MEMORY_EMBEDDING_MODEL

all-MiniLM-L6-v2

Optional embedding model

MEMORY_EMBEDDING_ENABLED

true

Enable embedding search and backfill when dependencies are available

MEMORY_WRITE_EMBEDDING_BUDGET_MS

10000

Write-path embedding time budget

MEMORY_DEDUP_THRESHOLD

0.92

Semantic deduplication threshold

Runtime and shared daemon

Variable

Default

Meaning

MEMORY_IMPORT_JSONL

Unset

Import JSONL on startup

MEMORY_SESSION_ID

Unset

Session identifier for activity logging

MEMORY_HTTP_AUTH_ENABLED

true

Require bearer authentication for the shared HTTP daemon

MEMORY_AUTH_TOKEN_PATH

Platform runtime directory

Local HTTP daemon token file

Evaluation

The repository includes deterministic retrieval scenarios for memory_context, including exact-name lookup, importance ranking, pinned facts, access recency, activity links, file-path hints, stale-fact demotion, lexical fallback, and duplicate suppression.

Those tests validate expected ranking behavior, but they do not establish real-world improvements in agent completion rate or token use.

A separate controlled protocol is provided in docs/BENCHMARK_PROTOCOL.md. It compares:

  1. fresh sessions with no memory

  2. fresh sessions with a token-matched manual handoff summary

  3. fresh sessions using server-memory

The protocol measures:

  • task completion rate

  • durable-fact recall and contradiction rate

  • total tokens and tokens to first correct action

  • repeated work

  • tool-call efficiency

  • hit@1, hit@3, and reciprocal rank

  • memory latency and end-to-end duration

  • stale-memory, leakage, duplicate, and incorrect-write failures

NOTE

No performance numbers are claimed in this README yet. Verified results should include raw run records, exact model revisions, repository commits, configurations, task fixtures, evaluator rubrics, acceptance-test logs, and confidence intervals.

Local validation

Hosted GitHub Actions are not currently treated as an active validation source for this repository. Workflow definitions may remain under .github/workflows for future use, but this README does not claim that those jobs are running or passing.

Install development dependencies:

python -m pip install -e ".[dev]"

Run the required local checks:

python -m compileall -q src tests scripts
python -m ruff check .
python -m pytest -q

Run the full package and supply-chain checks before a release or substantial pull request:

rm -rf dist build
python -m build
python -m twine check dist/*
python scripts/inspect_wheel.py dist
python -m pip_audit
python scripts/smoke_stdio.py server-memory
server-memory-serve --help
server-memory-proxy --help

On PowerShell, remove build artifacts with:

Remove-Item -Recurse -Force dist, build -ErrorAction SilentlyContinue

The stdio smoke test sends an MCP initialize request to the installed entry point and fails if stdout contains non-protocol output.

When reporting validation, include the exact commands, Python version, operating system, and full failure output. Do not describe a check as passing unless it was actually executed.

See CONTRIBUTING.md for contribution guidance and AGENTS.md for repository-specific agent instructions.

Security and privacy

IMPORTANT

Memory databases, exports, backups, and activity logs can contain sensitive user data.

  • The stdio server writes protocol data to stdout. Diagnostics should go to stderr or logs.

  • The shared HTTP daemon defaults to 127.0.0.1 and local bearer-token authentication.

  • The bearer token is generated locally and stored under a platform-native runtime directory unless MEMORY_AUTH_TOKEN_PATH is set.

  • No external service credentials are required for the core server.

  • Optional embeddings may load local or cached model files depending on the environment and installed extras.

  • Review exported graph content before sharing it.

  • Do not commit live memory databases, token files, or backups.

Report vulnerabilities through GitHub private vulnerability reporting when available. Do not include secrets or private memory exports in public issues.

See SECURITY.md for the project security policy.

Troubleshooting

Symptom

Check

no such module: fts5

Use a Python build linked against SQLite with FTS5 enabled.

MCP client hangs at startup

Run python scripts/smoke_stdio.py server-memory and inspect stderr.

Multiple clients lock the database

Run one server-memory-serve process and connect clients through server-memory-proxy.

Proxy returns an authentication failure

Restart the daemon and client so both read the same MEMORY_AUTH_TOKEN_PATH.

Memory is stored in an unexpected location

Set MEMORY_DB_PATH, MEMORY_WORKSPACE_ROOT, or MEMORY_WORKSPACE_ID explicitly.

License

Licensed under the MIT License.

Available Tools

20 tools
add_observationsA

Add observations to existing entities.

Each item needs: entityName (str), contents (list[str]). Optional: source (str), confidence (float 0-1), tags (list[str]), importance (float 0-1, default 0.5 — higher survives compression), obs_type (str: fact, decision, preference, api_endpoint, dependency, file_path, code_snippet, config, schema). Deduplicates by exact match and semantic similarity. Protected obs_types (api_endpoint, dependency, file_path, code_snippet, config, schema) always survive compression.

ParametersJSON Schema
NameRequiredDescriptionDefault
observationsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided; description compensates by disclosing deduplication, semantic similarity matching, protected obs_types, and importance affecting compression. Missing failure behavior.

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?

Well-structured with bullet points listing parameters and behaviors. Slightly verbose but each sentence adds value.

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?

Output schema exists, so return values not needed. Description covers dedup, compression, and obs_types. Lacks entity existence handling or error scenarios.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has 0% description coverage and a vague 'additionalProperties: true' array. Description adds critical detail: expected fields (entityName, contents, optional source, confidence, tags, importance, obs_type) and their semantics.

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?

Clear verb+resource: 'Add observations to existing entities.' Distinguishes from sibling tools like create_entities which create new entities.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit when-to-use or alternatives among siblings (e.g., delete_observations). Usage is implied but not guided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

backup_memoryA

Create a backup of the memory database.

Default destination: ~/.local/share/server-memory/backups/memory-YYYYMMDD-HHMMSS.db Provide dest_path to override the backup location.

ParametersJSON Schema
NameRequiredDescriptionDefault
dest_pathNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Describes the default backup location and parameter override, but does not disclose potential effects (e.g., whether it overwrites, locks database, or success/failure behavior). Without annotations, more detail would be beneficial.

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, front-loaded with the purpose, no unnecessary words. Efficient and clear.

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?

For a simple tool with one optional parameter, the description covers essential behavior and parameter usage. Output schema exists but its absence in the description is acceptable.

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?

With 0% schema coverage, the description adds meaning to the only parameter (dest_path) by explaining its purpose ('override the backup location') and providing the default path. Lacks format constraints but suffices.

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 ('Create a backup') and the resource ('the memory database'). It distinguishes itself from sibling tools by being the only backup operation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives, or when not to use it. Since backup is unique, it's less critical, but still no explicit usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_entitiesA

Create new entities in the knowledge graph.

Each entity needs: name (str), entityType (str). Optional: observations (list[str]), tags (list[str]), metadata (dict). Skips duplicates by name.

ParametersJSON Schema
NameRequiredDescriptionDefault
entitiesYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry the burden. It discloses one behavioral trait: skipping duplicates by name. However, it does not mention permissions, error handling, or what happens on duplicate (overwrite vs. skip). More context on side effects is needed.

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 concise sentences with no fluff. The first sentence states the purpose, the second details parameters, and the third provides a key behavior. Information is front-loaded and easy 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 presence of an output schema, the description does not need to detail return values. It covers the essentials: what is needed, what is optional, and duplication behavior. It could mention the return format or success/failure signals, but the output schema likely handles that. The description is adequate for a creation tool.

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?

The input schema has 0% description coverage, leaving the agent with only property names. The description compensates by listing required (name, entityType) and optional fields (observations, tags, metadata) with their types. This adds significant meaning beyond the bare schema, though the nested structure is not fully detailed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it creates new entities in the knowledge graph and specifies the required and optional fields. However, it does not explicitly differentiate from sibling tools like 'create_relations' or 'add_observations', which limits its ability to help an agent choose among them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for creating entities with specific fields, but it provides no guidance on when to use this tool versus alternatives (e.g., when to use 'create_entities' vs. 'add_observations' separately). It lacks explicit when-to-use or when-not-to-use instructions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_relationsA

Create relations between entities.

Each relation needs: from (str), to (str), relationType (str). Optional: weight (float), tags (list[str]). Both entities must exist. Use active voice for relationType.

ParametersJSON Schema
NameRequiredDescriptionDefault
relationsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description adds moderate value by detailing required fields and constraints, but lacks details on side effects, failure modes, or idempotency.

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 (3 sentences), front-loaded with the purpose, and every sentence adds distinct value: action, field details, constraints.

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 an output schema exists, the description covers purpose, parameter structure, and key constraints. It omits behavioral details like idempotency, but is largely complete for a simple creation tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and the schema uses additionalProperties: true, making it vague. The description fully compensates by listing all required and optional fields with types, providing essential meaning.

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 creates relations between entities, using the verb 'create' and resource 'relations'. It distinguishes from sibling tools like create_entities and delete_relations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description specifies a prerequisite ('Both entities must exist') and a style guideline ('Use active voice for relationType'), but does not provide explicit when-to-use or alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_entitiesA

Delete entities (soft delete by default, cascades to relations).

Set hard=true for permanent deletion.

ParametersJSON Schema
NameRequiredDescriptionDefault
entityNamesYes
hardNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses soft delete default, cascading, and hard delete option, but lacks details on reversibility, required permissions, or side effects beyond cascading. Some transparency but not comprehensive.

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 two sentences, front-loaded with the main action, and contains no redundant words. Every word adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the absence of annotations and the complexity of a delete tool with cascading, the description lacks details on error cases, return values (despite output schema existence), and specific side effects on related data. It feels incomplete for safe usage.

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 has 0% description coverage. The description clarifies the 'hard' parameter's function (soft default, hard permanent) but does not add meaning to 'entityNames' beyond the parameter name, leaving ambiguity about format or constraints. Partial compensation.

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 'Delete entities' with a specific verb and resource, and adds detail about soft delete default and cascading to relations, distinguishing it from sibling tools like create_entities and merge_entities.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides guidance on using the 'hard' parameter for permanent deletion, but does not explicitly state when to use this tool over others or when not to use it, nor does it mention prerequisites or consequences of cascading.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_observationsA

Delete specific observations from entities.

Each item needs: entityName (str), observations (list[str] of content to delete).

ParametersJSON Schema
NameRequiredDescriptionDefault
deletionsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided; description does not disclose behavioral traits such as reversibility, side effects, or authorization requirements. Only states the delete action without further 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 efficient sentences: first states purpose, second explains parameter format. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers parameter structure but omits output format, error handling, and behavior when observations don't exist. Sufficient for basic use but incomplete for a delete operation without annotations.

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 has 0% description coverage for the 'deletions' parameter; the description adds critical structure details (entityName and observations list), compensating for schema opacity.

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?

Description clearly states the action 'delete' and resource 'observations from entities', distinguishing it from siblings like delete_entities and delete_relations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides necessary parameter structure (entityName, observations list) but lacks explicit guidance on when to use vs alternatives or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_relationsB

Delete relations from the knowledge graph.

Each item needs: from (str), to (str), relationType (str).

ParametersJSON Schema
NameRequiredDescriptionDefault
relationsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description lacks disclosure of behavioral traits such as permanence, cascading effects, or error handling. It only states the action and parameter format, which is insufficient for a mutation tool.

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 very concise, consisting of two sentences that first state the purpose and then explain the parameter format. No unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is fairly complete for the parameter structure but lacks context about behavioral aspects like error states or idempotency. The presence of an output schema reduces the need to explain return values, but behavioral transparency is missing.

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?

The schema provides an open array of objects with no property definitions. The description adds the required structure (from, to, relationType), compensating for the 0% schema coverage. However, it does not specify whether these are required or optional.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (delete) and resource (relations from the knowledge graph). However, it does not differentiate from sibling tools like create_relations or delete_entities, which could be clarified.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. There is no mention of prerequisites, edge cases, or conditions for use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

export_graphA

Export the full knowledge graph.

format: 'json' or 'jsonl' (compatible with old @modelcontextprotocol/server-memory).

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNojson

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided; description carries full burden. States it exports data, but fails to disclose if it is read-only, any side effects, or performance implications.

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 with no wasted words. Front-loaded with the core action, then provides format detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Output schema exists, so return values are partially covered. However, the description omits details on what the export returns (e.g., file, stream, data structure) and any size/performance considerations.

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 has 0% description coverage for the 'format' parameter, but the description explains valid values ('json' or 'jsonl') and their compatibility, adding necessary context.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states 'Export the full knowledge graph,' specifying verb and resource. Distinguishes from sibling 'import_graph' and 'read_graph' by implying full export, but could be more specific about the action.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Mentions compatibility with old server-memory, but does not explicitly state when to use this vs. siblings like 'read_graph' or when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_observation_historyA

Get observation version history for an entity.

Shows current content, version number, importance, obs_type, and all previous versions with timestamps. Use content_prefix to filter to specific observations.

ParametersJSON Schema
NameRequiredDescriptionDefault
entity_nameYes
content_prefixNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description reveals full behavior: shows current content, version number, importance, obs_type, and all previous versions with timestamps. No mention of auth or limits though.

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 concise sentences that front-load the purpose and add necessary detail without waste.

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 output schema existence, description is complete enough for a history retrieval tool, though could mention result ordering or pagination.

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 coverage is 0%, but description adds meaning by explaining entity_name context and the filtering use of content_prefix beyond schema definitions.

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 'Get observation version history for an entity' and details what information is returned, distinguishing it from sibling tools that add, delete, or manage observations.

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?

Provides guidance on using 'content_prefix' to filter observations, but lacks explicit when-not-to-use or alternative tool recommendations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

import_graphA

Import knowledge graph data. Auto-detects JSON or JSONL format.

Compatible with old @modelcontextprotocol/server-memory JSONL files. Skips duplicate entities. Skips relations to missing entities.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It discloses auto-format detection, compatibility, and skip behaviors (duplicates, missing entities). However, it does not mention whether the import is destructive (overwrites), what happens on error, or return value details (output schema exists but not described).

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 very concise, with two short paragraphs. All sentences add value: main purpose first, then compatibility and behaviors. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (import with auto-format detection, skip logic) and the lack of annotations or parameter descriptions, the description covers key behaviors but misses details like expected data structure, success/error handling, and performance implications. Output schema exists, so return value documentation is not required, but more context would be helpful.

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?

With 0% schema description coverage, the description adds some meaning by stating the data parameter expects JSON or JSONL format. But it does not specify the expected structure (e.g., entities and relations array) or provide examples, leaving ambiguity.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it imports knowledge graph data and specifies auto-detection of JSON/JSONL formats. It also mentions compatibility and skip behaviors. However, it does not explicitly differentiate from sibling tools like create_entities, which also creates entities but individually.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides context about compatibility with old server-memory files and mentions skip behaviors, implying usage. But it lacks explicit when-to-use/when-not-to-use guidance and does not name alternatives like create_entities for bulk vs individual imports.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

log_activityA

Record what happened this turn. Auto-creates missing entities.

Common actions: file_changed, decision_made, bug_fixed, feature_added, refactored, investigated, discussed, preference_set.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYes
summaryNo
entity_namesNo
tagsNo
metadataNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses the side effect of auto-creating missing entities, which is a key behavioral trait. However, it does not mention other important aspects like idempotency, overwrite behavior, or required permissions.

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 extremely concise (three short sentences) and front-loaded with the core purpose. Every sentence adds unique value: the first states the primary function, the second reveals a side effect, and the third provides actionable examples.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/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 and no annotations, the description is somewhat incomplete. It does not explain the role of most parameters or how they interact. The existence of an output schema mitigates the need to describe return values, but the description lacks depth for proper usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description only adds context for the 'action' parameter by listing common values. The other four parameters (summary, entity_names, tags, metadata) receive no elaboration, leaving their semantics unclear despite the schema titles.

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 with a specific verb-resource combination: 'Record what happened this turn.' It also lists common actions, which distinguishes it from sibling tools that focus on entity manipulation or memory queries.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage through the list of common actions, but does not explicitly state when to use this tool versus alternatives like add_observations or create_entities. No guidance on when not to use it is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

manage_tagsA

Manage tags. Actions: list, create, delete, tag, untag, cleanup.

list: show all tags. create: new tag (name required, optional description/color/auto_expire_hours). delete: remove a user tag (cannot delete system tags). tag: apply tag_name to entity_name. untag: remove tag_name from entity_name. cleanup: remove expired ephemeral items.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionNolist
nameNo
descriptionNo
colorNo
auto_expire_hoursNo
entity_nameNo
tag_nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden. It discloses that delete cannot remove system tags and cleanup removes expired ephemeral items, but does not mention other side effects, permissions, or state changes beyond what is obvious.

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 concise and uses a bullet-like list for actions. It front-loads the purpose and action summary, though some sentences could be more terse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 7 parameters and an output schema, the description covers action semantics but lacks details on default behavior, accepted values for color, and response structure. It is adequate but not comprehensive.

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?

The description adds meaning to parameters: name is required for create, entity_name and tag_name for tag/untag, and optional fields for create. This compensates for the 0% schema description 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 manages tags and lists specific actions (list, create, delete, tag, untag, cleanup), each with a brief explanation. This distinguishes it from sibling tools focused on entities, relations, or observations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage by listing actions but does not explicitly state when to use this tool over alternatives or provide exclusions. It lacks guidance on prerequisites or context for each action.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memory_contextA

Lightweight context snapshot (~200-500 tokens) for scoped durable recall.

Returns: pinned entities, recent activity, hint-matched entities, and graph stats. Call when prior sessions, stable project facts, or cross-session continuity may matter. Skip for one-off answers or tasks already fully grounded in the current context. Pass hint='current topic' to get relevant entities surfaced. Pass project='name' to scope results to a specific project tag. Pass limit to control how many hint matches are included; prefer 3-5 unless deeper recall is justified.

ParametersJSON Schema
NameRequiredDescriptionDefault
hintNo
projectNo
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Describes returns and token size, but with no annotations, lacks full disclosure on side effects, determinism, or limitations beyond the brief overview.

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?

Efficiently organized, front-loaded with definition, then returns, usage, parameters. No unnecessary words.

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?

Covers key aspects for a read tool with optional params and an output schema, though could address error cases or output format more.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Despite 0% schema coverage, the description fully explains each parameter's purpose and usage, adding significant meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it is a lightweight context snapshot for durable recall, listing returns. It is specific but could more explicitly differentiate from siblings like memory_context_full.

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?

Explicitly tells when to call (prior sessions, cross-session continuity) and when to skip (one-off answers), plus parameter usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memory_context_fullA

Rich context snapshot for rare deep bootstrap (~500-1500 tokens).

Returns all pinned entities with full observations, recent activity (last 10), and recently changed entities. Use only when compact recall is insufficient for a cross-session task. Prefer memory_context for ordinary scoped recall.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNo
budgetNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses the output content (pinned entities, last 10 recent activities, recently changed entities) and the expected token cost (~500-1500 tokens). However, it does not explicitly state whether the operation is read-only or has side effects, which would improve transparency.

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 extremely concise: three sentences with no fluff. The most important information (purpose and when to use) is front-loaded. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that an output schema exists, return values are covered. However, the description lacks parameter explanations, which are essential for correct usage. The tool's purpose and usage context are well covered, but the missing parameter semantics reduces completeness significantly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0% description coverage, meaning descriptions are entirely absent from the schema. The tool description fails to explain the 'project' and 'budget' parameters, leaving the agent without guidance on how they affect the output (e.g., does 'budget' control the token limit?). This is a critical gap.

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 explicitly states it returns a rich context snapshot with pinned entities, full observations, recent activity, and recently changed entities. It distinguishes itself from 'memory_context' by specifying a different use case (deep bootstrap vs ordinary scoped recall). The verb 'returns' clarifies the action.

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 clear guidance: 'Use only when compact recall is insufficient for a cross-session task' and 'Prefer memory_context for ordinary scoped recall.' This explicitly tells when to use this tool and when to use an alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memory_statsA

Get memory statistics: entity/relation/observation counts, tag distribution, DB size, orphan entities, deleted items.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description lists the specific statistics returned, providing good transparency about the output, though it does not mention any potential costs or side effects (which may be minimal for a stat retrieval).

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 a single concise sentence with the main action front-loaded, followed by a clear list of statistics, containing no extraneous words.

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 output schema exists (not shown) and no parameters, the description provides a complete overview of what the tool returns, making it fully understandable for selection and invocation.

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?

No parameters exist, so the description does not need to add parameter information. Schema coverage is 100%, and the description is sufficient for a parameterless tool.

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 retrieves memory statistics and enumerates specific types (entity/relation/observation counts, tag distribution, DB size, orphan entities, deleted items), distinguishing it from sibling tools like read_graph or memory_context.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool versus alternatives; however, the purpose is straightforward and implied for obtaining memory usage stats.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

merge_entitiesA

Merge source entity into target. Source is soft-deleted.

strategy: 'combine' (move all observations) or 'dedupe' (skip duplicates). Relations and tags are transferred. Self-relations are removed.

ParametersJSON Schema
NameRequiredDescriptionDefault
sourceYes
targetYes
strategyNocombine

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses key behaviors: source is soft-deleted, strategy affects observations, relations/tags are transferred, and self-relations are removed. However, no annotations are present, and it lacks clarity on reversibility, permissions, or failure cases.

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 extremely concise (four sentences) and front-loaded with the core action. Every sentence adds value without unnecessary words.

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 presence of an output schema, the description covers the essential behavior: merge logic, soft-delete, strategy options, and transfer of relations/tags. It is complete enough for an AI agent to understand the tool's effect, though it could mention ordering or error handling.

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?

With 0% schema description coverage, the description fully explains all three parameters: source, target, and strategy (with values 'combine' and 'dedupe'). It adds meaning beyond the bare schema by specifying strategy effects and the soft-delete outcome.

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 merges a source entity into a target entity, with the source being soft-deleted. This immediately distinguishes it from sibling tools like create_entities or delete_entities, as it involves combining two entities.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives (e.g., delete_entities + create_entities). It does not specify prerequisites or scenarios where merging is preferred over other operations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

open_nodesA

Open specific entities by name.

depth=0: exact entities only. depth=1: include direct neighbors via relations. depth=2+: BFS expansion.

ParametersJSON Schema
NameRequiredDescriptionDefault
namesYes
depthNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/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. It explains depth parameter behavior (exact, neighbors, BFS), but does not disclose whether the operation is read-only, any side effects, auth requirements, or data limits. The word 'open' could imply loading or fetching, but mutability isn't addressed.

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 extremely concise, using a few sentences to convey purpose and depth behavior. It is front-loaded with the main purpose. Every sentence is meaningful with no waste.

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 an output schema (not shown), the description need not detail return values. However, it does not address how this tool relates to siblings like 'search_nodes' or 'read_graph', nor typical use cases. It adequately covers the core behavior for a focused tool.

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 coverage is 0%, so the description must add meaning. It clearly explains the depth parameter with specific values. The 'names' parameter is only described as 'entities by name' without further detail on format, case sensitivity, or uniqueness. Depth gets thorough treatment; names could benefit from more precision.

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 opens specific entities by name, with detailed depth parameter behavior. It differentiates from siblings like 'search_nodes' and 'read_graph' by focusing on targeted entity opening.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies use for opening specific entities with optional expansion, but lacks explicit guidance on when-to-use vs alternatives (e.g., search_nodes) and when-not-to-use. No prerequisites or context are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

query_timelineB

Query activity timeline.

time_range: relative like "2h", "7d", "30m". Or use start/end with ISO datetime strings. Filter by actions, entity_name, session_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
time_rangeNo
startNo
endNo
actionsNo
entity_nameNo
session_idNo
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It mentions filters but does not disclose ordering, pagination, default limits (though schema shows limit default 50), whether it is read-only, or if results are chronological. The existence of an output schema is not leveraged in description.

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 extremely concise, two sentences with no fluff. It front-loads the purpose and immediately provides key parameter usage details. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 7 parameters and no annotations or output schema details, the description is insufficient. It does not explain return structure, ordering, or the limit parameter. It lacks depth for a tool with moderate complexity.

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 0%, so description must compensate. It explains time_range format and lists filter options but omits the limit parameter entirely. The descriptions for actions, entity_name, and session_id are just names with no additional semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool queries an activity timeline, with specific filters. It is distinct from sibling tools which focus on entities, relations, and observations. However, it could specify what kind of activity (e.g., system actions, user actions) for even greater clarity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains how to specify time range (relative or ISO) and lists filter parameters, implying usage. However, it provides no guidance on when to use this tool versus alternatives, nor are there exclusions or prerequisites mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_graphC

Read the knowledge graph (compressed by default).

Filter by tags, entity_types. Set compress=false for full JSON.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNo
entity_typesNo
limitNo
include_deletedNo
compressNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must disclose behavioral traits. It mentions compression by default but does not explicitly state it is read-only, nor does it cover the behavior of limit or include_deleted parameters. Safety and side effects are not addressed.

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 very concise with two sentences that front-load the main purpose. Every sentence adds information with minimal waste, though it could be slightly expanded to cover all parameters without losing conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 5 parameters and no annotations, the description is incomplete. It explains only 3 of 5 parameters (tags, entity_types, compress) and does not mention limit or include_deleted. The presence of an output schema reduces the need to describe return values, but parameter coverage is insufficient.

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 0%, so the description must add meaning. It explains tags, entity_types, and compress, but omits limit and include_deleted. It adds value over the bare schema for three parameters, but fails to document two.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action 'Read' and the resource 'knowledge graph', specifying that it returns the graph compressed by default. While it distinguishes from write tools, it does not differentiate from other read tools like search_nodes or query_timeline.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It lacks explicit context for use cases, prerequisites, or exclusions, leaving the agent to infer from the tool name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_nodesA

Full-text search with BM25 ranking.

Supports prefix search, phrases ("exact match"), boolean (AND/OR/NOT). Filter by tags, entity_types, time_range ([start, end] ISO strings).

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
tagsNo
entity_typesNo
time_rangeNo
limitNo
compressNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It discloses BM25 ranking, prefix search, phrase search, boolean operators, and filter options. However, it does not mention output format, pagination, result ordering, or behavior on empty results. The 'limit' and 'compress' parameters are not described.

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?

Three sentences front-loaded with the core purpose. Each sentence adds value without redundancy. The list format for advanced features is efficient. No unnecessary wording.

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 presence of an output schema (handling return values) and the tool's moderate complexity, the description covers search mechanics well. Missing details about 'limit' and 'compress' parameters prevent a perfect score, but overall it provides sufficient context for an agent to use the tool effectively.

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 coverage is 0%, so description must compensate. It explains the 'query' parameter's syntax (prefix, phrases, boolean) and describes 'tags', 'entity_types', and 'time_range' with format. It omits 'limit' and 'compress', but covers most parameters with meaningful usage details beyond the schema.

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 explicitly states 'Full-text search with BM25 ranking', clearly identifying the tool's purpose. The name 'search_nodes' reinforces the resource being searched. This distinguishes it from sibling tools like 'read_graph' (graph traversal) and 'open_nodes' (node retrieval by ID).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for full-text search with filtering capabilities but does not explicitly state when to use this tool over alternatives. No direct comparison with siblings like 'query_timeline' or 'read_graph' is provided. The agent must infer context from the tool's name and capabilities.

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. Dates show when Glama detected each change.

  1. 20 tool updatesv1.0.0
    • First observedadd_observations
    • First observedbackup_memory
    • First observedcreate_entities
    • First observedcreate_relations
    • First observeddelete_entities
    • First observeddelete_observations
    • First observeddelete_relations
    • First observedexport_graph
    • First observedget_observation_history
    • First observedimport_graph
    • First observedlog_activity
    • First observedmanage_tags
    • First observedmemory_context
    • First observedmemory_context_full
    • First observedmemory_stats
    • First observedmerge_entities
    • First observedopen_nodes
    • First observedquery_timeline
    • First observedread_graph
    • First observedsearch_nodes

TDQS

A3.9/5.0
Disambiguation5/5

Each tool addresses a distinct operation: entity CRUD, observation management, relation management, tag management, context retrieval, search, timeline, backup, import/export, statistics, merging, and graph reading. No two tools overlap significantly in purpose; even similar tools like memory_context and memory_context_full are clearly differentiated by scope and token usage.

Naming Consistency5/5

All tool names follow a consistent verb_noun snake_case pattern (e.g., create_entities, search_nodes, manage_tags), making the tool surface predictable and easy for an agent to infer actions.

Tool Count5/5

With 20 tools covering CRUD, search, context, backup, import/export, statistics, merging, and timeline querying, the count is well-scoped for a memory server. Each tool serves a clear purpose, and no tool feels redundant or superfluous.

Completeness5/5

The tool set provides comprehensive coverage for a knowledge graph memory system: create/read/delete entities, observations, and relations; tag management; search; context snapshots; activity timeline; backup/restore; import/export; statistics; and entity merging. The only minor gap is lack of a direct update_entity tool, but merging and observation manipulation cover most use cases.

Maintenance

ActivitySlowing
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    MCP server providing persistent memory management for AI agents using SQLite and FTS5, enabling storage, full-text search, and recall of memories with namespace isolation.
    1
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    A local-first MCP memory server providing persistent, searchable memory for AI agents, powered by SQLite.
    6
    1
    Apache 2.0
  • A
    license
    Not graded
    quality
    D
    maintenance
    A SQLite-backed MCP memory server providing persistent memory storage with full-text search and knowledge graph capabilities for AI assistants.
    60
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    MCP server providing persistent AI memory with four-tier retrieval (SQLite FTS5, graph, vector, LLM agent) to give AI assistants structured, long-term memory without RAG.
    1
    Apache 2.0

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/MK-986123/server-memory'

If you have feedback or need assistance with the MCP directory API, please join our Discord server