server-memory
A local-first, durable knowledge graph MCP server backed by SQLite+FTS5, providing structured memory for AI agents across sessions. Key capabilities:
Entity & Relation Management
Create, delete (soft/hard), and merge entities with types, observations, tags, and metadata
Create and delete typed, weighted relations between entities (e.g.,
depends_on,implements)
Memory Recall & Search
memory_context— lightweight (~200–500 token) recall snapshot with pinned entities and recent activitymemory_context_full— richer bootstrap context (~500–1500 tokens) for deep recallsearch_nodes— BM25-ranked FTS5 full-text search with prefix, phrase, and boolean operators; filterable by tags, entity types, and time rangeread_graph— browse the full graph (compressed or full JSON), optionally filteredopen_nodes— retrieve specific entities by name with optional BFS neighbor expansion
Observations & Versioning
Add observations with
source,confidence,importance, and typedobs_type(fact, decision, api_endpoint, file_path, config, schema, etc.); protected types survive compressionView full observation version history per entity
Activity Logging & Timeline
log_activity— record events (file changes, bugs fixed, decisions, etc.) with entity links, tags, and session metadataquery_timeline— query history by relative time (e.g.,"2h","7d"), ISO ranges, action types, entity name, or session ID
Tag Management
List, create, delete, apply, remove, and clean up tags; supports ephemeral tags with auto-expiry
Import / Export / Backup
Export graph as JSON or JSONL (compatible with
@modelcontextprotocol/server-memory)Import JSON/JSONL, skipping duplicates and invalid relations
Backup SQLite database to a timestamped file
Statistics
View entity/relation/observation counts, tag distribution, DB size, orphan entities, and deleted item counts
Memory Scoping & Deployment
Operate on
workspace(default) orglobalpreference memory; combine results with source labelsRun as a direct stdio server or as a shared localhost HTTP daemon with stdio proxy for multi-client access
Optional embedding-assisted semantic retrieval
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@server-memoryremember that Alice likes programming in Python"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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:
Scope the lookup to the active workspace and optional global preference database.
Collect candidates through FTS5, optional embeddings, activity links, and fallback matching.
Rank candidates using exact-name, lexical, semantic, importance, confidence, pinned, activity, access-recency, and staleness signals.
Suppress duplicate or low-value matches.
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 |
Broader recall |
|
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 |
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
pipfor 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.ps1Install 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-memoryEquivalent module form:
python -m server_memoryUse a dedicated project database
MEMORY_DB_PATH=<PROJECT_ROOT>/memory.db server-memoryUse 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-httpConnect a stdio-only client to the daemon
server-memory-proxy --url http://127.0.0.1:8765/mcpMCP 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"
]
}
}
}Recommended agent behavior
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_activityafter 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 |
| Operates on the current workspace database and is the default for project memory |
| Operates on the global preference database |
| 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.
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 |
| Compact scoped recall for ordinary agent context |
|
| Larger bootstrap context with pinned and recent items |
|
| Add entities and optional initial observations |
|
| Add observations to existing entities |
|
| Connect existing entities |
|
| Read graph data, compressed by default |
|
| FTS5 search with filters |
|
| Open named entities and optional neighbors |
|
| Record a durable development or session event |
|
| Query activity history |
|
| List, create, delete, apply, remove, or clean tags |
|
| Merge one entity into another |
|
| Export graph as JSON or JSONL |
|
| Import JSON or JSONL graph data |
|
| Return counts and storage statistics |
|
| Copy a SQLite database |
|
| Show observation versions for an entity |
|
| Soft-delete or hard-delete entities |
|
| Delete selected observations |
|
| Delete relations |
|
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 |
| Platform user-data directory, workspace-namespaced when detected | Workspace SQLite database |
| Empty | Default project scope |
|
| Enable the global preference database |
| Platform user-data directory | Global preference database |
|
| Route preference-tagged writes to global memory |
| Unset | Explicit workspace root for default database placement |
| Unset | Explicit workspace identifier for default database placement |
Retrieval and compression
Variable | Default | Meaning |
|
| Compression level from |
|
| Maximum approximate token budget for compressed graph output |
|
| Optional embedding model |
|
| Enable embedding search and backfill when dependencies are available |
|
| Write-path embedding time budget |
|
| Semantic deduplication threshold |
Runtime and shared daemon
Variable | Default | Meaning |
| Unset | Import JSONL on startup |
| Unset | Session identifier for activity logging |
|
| Require bearer authentication for the shared HTTP daemon |
| 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:
fresh sessions with no memory
fresh sessions with a token-matched manual handoff summary
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
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 -qRun 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 --helpOn PowerShell, remove build artifacts with:
Remove-Item -Recurse -Force dist, build -ErrorAction SilentlyContinueThe 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
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.1and local bearer-token authentication.The bearer token is generated locally and stored under a platform-native runtime directory unless
MEMORY_AUTH_TOKEN_PATHis 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 |
| Use a Python build linked against SQLite with FTS5 enabled. |
MCP client hangs at startup | Run |
Multiple clients lock the database | Run one |
Proxy returns an authentication failure | Restart the daemon and client so both read the same |
Memory is stored in an unexpected location | Set |
License
Licensed under the MIT License.
Available Tools
20 toolsadd_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.
| Name | Required | Description | Default |
|---|---|---|---|
| observations | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| dest_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| entities | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| relations | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| entityNames | Yes | ||
| hard | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| deletions | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| relations | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | json |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| entity_name | Yes | ||
| content_prefix | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| data | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | ||
| summary | No | ||
| entity_names | No | ||
| tags | No | ||
| metadata | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| action | No | list | |
| name | No | ||
| description | No | ||
| color | No | ||
| auto_expire_hours | No | ||
| entity_name | No | ||
| tag_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| hint | No | ||
| project | No | ||
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | ||
| budget | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| source | Yes | ||
| target | Yes | ||
| strategy | No | combine |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| names | Yes | ||
| depth | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden. 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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| time_range | No | ||
| start | No | ||
| end | No | ||
| actions | No | ||
| entity_name | No | ||
| session_id | No | ||
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | ||
| entity_types | No | ||
| limit | No | ||
| include_deleted | No | ||
| compress | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| tags | No | ||
| entity_types | No | ||
| time_range | No | ||
| limit | No | ||
| compress | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
20 tool updates
v1.0.0- First observed
add_observations - First observed
backup_memory - First observed
create_entities - First observed
create_relations - First observed
delete_entities - First observed
delete_observations - First observed
delete_relations - First observed
export_graph - First observed
get_observation_history - First observed
import_graph - First observed
log_activity - First observed
manage_tags - First observed
memory_context - First observed
memory_context_full - First observed
memory_stats - First observed
merge_entities - First observed
open_nodes - First observed
query_timeline - First observed
read_graph - First observed
search_nodes
TDQS
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.
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.
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.
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
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
Persistent, portable memory for AI assistants — your private memory graph, from any MCP client.
- memnodeOAuthdev.memnode
Persistent, inspectable memory for AI agents with lineage, correction, and a hosted MCP endpoint.
Graph-native persistent memory for AI agents — 33 MCP tools, zero-LLM writes.
Analytical memory for AI agents: a real Postgres queried in plain English over MCP. One command.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceMCP server providing persistent memory management for AI agents using SQLite and FTS5, enabling storage, full-text search, and recall of memories with namespace isolation.1MIT
- AlicenseNot gradedqualityCmaintenanceA local-first MCP memory server providing persistent, searchable memory for AI agents, powered by SQLite.61Apache 2.0
- AlicenseNot gradedqualityDmaintenanceA SQLite-backed MCP memory server providing persistent memory storage with full-text search and knowledge graph capabilities for AI assistants.60MIT
- AlicenseNot gradedqualityBmaintenanceMCP 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.1Apache 2.0
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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