Skip to main content
Glama
agentage

@agentage/mcp-memory

Official
by agentage

@agentage/server-memory

The MCP server for agentage Memory exposes your local vaults (~/.agentage/vaults.json, read through @agentage/memory-core) as the frozen 6 memory__* tools over stdio. The open, cross-vendor counterpart to @modelcontextprotocol/server-memory.

This package is intentionally small - it is just the MCP definition (the 6-tool Zod schema + .mcpc.json, the text renderer, createMemoryServer, and a ~15-line stdio bin). All memory logic (backends, git, search, routing) lives in @agentage/memory-core.

Use it

# one-time, offline: scaffold ~/.agentage + a starter vault
#   (memory-core's `init`, also surfaced by the agentage CLI)
npx @agentage/server-memory          # serves ~/.agentage/vaults.json over stdio

Point any stdio MCP client (Windsurf, Zed, Claude Desktop) at npx @agentage/server-memory.

Related MCP server: memory-mcp

Reused by the CLI daemon

The server builder is transport-agnostic, so the agentage CLI reuses the exact same pieces and only swaps the transport:

import { createMemoryServer, loadLocalServer } from '@agentage/server-memory';

// stdio bin:        await (await loadLocalServer()).connect(new StdioServerTransport());
// CLI daemon:       const server = createMemoryServer(registry, { scope: 'local' });
//                   await server.connect(new StreamableHTTPServerTransport(...));

Develop

npm install        # links @agentage/memory-core via file:../memory-core
npm test           # vitest: contract (tools/list = 6) + tools (in-memory) + e2e (init -> spawned bin -> round-trip)
npm run verify     # type-check + lint + format:check + test + build

@agentage/memory-core is a local file: link until both packages publish to npm; build core before running here (the e2e does this automatically). The 6-tool schema and .mcpc.json snapshot are the frozen MCP contract - keep them in sync if the contract changes.

Available Tools

6 tools
memory__deleteDelete memoryA
Destructive

Soft-delete (forget) a memory by path; recoverable from git history. Returns not-found if the path does not exist. To remove only part of a memory, use memory__edit.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesExact POSIX .md address - not a title or search query. Case-sensitive, no leading slash. e.g. work/tasks/foo.md

Output Schema

ParametersJSON Schema
NameRequiredDescription
pathYes
deletedYes

TDQS

A5/5.0
Behavior5/5

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

Beyond annotations (destructiveHint: true), description adds that delete is soft, recoverable from git history, and returns not-found for nonexistent paths.

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, no redundant information. Each sentence adds value: (1) what it does, (2) error behavior, (3) when to use alternative.

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 1 simple parameter and presence of output schema, description covers all needed aspects: purpose, usage, behavioral details, and parameter syntax. No gaps.

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 covers path parameter completely. Description adds crucial context: exact POSIX .md address, case-sensitive, no leading slash, example. Greatly aids correct invocation.

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 action (soft-delete), resource (memory by path), and distinguishes from sibling tool memory__edit. Also explains recoverability and error behavior.

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 states when to use (delete entire memory by path) and when to use alternative (use memory__edit to remove part). Provides guidance on recoverability and 'not-found' response.

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

memory__editEdit memoryA

Amend an EXISTING memory in place: mode=str_replace swaps one exact text match (old_str -> new_str) without resending the note - the default choice for small changes; append adds to the end; replace overwrites the whole body; frontmatter shallow-merges. Fails with not-found if the path does not exist - use memory__write to create. Do not introduce secrets, passwords, API keys, one-time codes, or payment/government identifiers (these are refused).

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNoMarkdown body, excluding frontmatter (no --- fences). With mode=replace it becomes the new body; with mode=append it is added to the end. Not used with mode=str_replace. Omit to change only frontmatter.
modeNoOptional. "str_replace" swaps old_str for new_str in place; "append" adds body to the end; omit or "replace" overwrites the whole body. Frontmatter always shallow-merges regardless.
pathYesExact POSIX .md address - not a title or search query. Case-sensitive, no leading slash. e.g. work/tasks/foo.md
new_strNomode=str_replace only. The replacement text. Omit to delete old_str.
old_strNomode=str_replace only. The exact existing body text to replace - must match verbatim (including whitespace) and appear exactly once. Read the memory first to copy it.
frontmatterNoYAML metadata as a key->value map (no --- fences), e.g. {"type":"task","status":"active","tags":["project"]}. write replaces the whole map; edit shallow-merges top-level keys (nested values replaced wholesale; a key cannot be removed via edit - use write to fully replace)

Output Schema

ParametersJSON Schema
NameRequiredDescription
pathYes
updatedYes

TDQS

A4.4/5.0
Behavior4/5

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

Discloses failure condition for non-existent path, security constraints, and mode behaviors. Annotations provide no hints, so description carries the burden well. Could mention concurrency or idempotency, but not required.

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?

Single paragraph packs mode explanations, failure condition, and security note. No fluff. Could be slightly more structured (e.g., bullet list for modes), but still concise and front-loaded.

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 6 params, 1 required, output schema present, and sparse annotations, the description covers all critical aspects: modes, error case, security, parameter usage. Omits nothing essential for an agent to use correctly.

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?

Adds meaning beyond schema by explaining which parameters interact with which modes (e.g., body not used with str_replace) and clarifying frontmatter merge behavior. Schema coverage is 100%, so baseline is high; description enhances it.

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?

Clearly states it amends an existing memory and lists distinct modes, distinguishing it from memory__write (create) and other siblings. Verb 'edit' is specific and resource-oriented.

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

Usage Guidelines4/5

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

Explicitly instructs to use memory__write if path doesn't exist, and explains when to use each mode. Security warning against secrets provides additional guidance. Does not fully cover when not to use this tool vs others, but context is clear.

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

memory__listBrowse memoryA
Read-only

Browse the memory as a folder tree: the files and subfolders under a folder, 2 levels deep by default, with per-folder file counts - no bodies, no ranking. Use to see what exists and how it is organized, or to list every note carrying a tag (tags filter); have a keyword to rank by instead? use memory__search. A folder shown without its own entries has more inside: call memory__list again with that folder. Folders over the per-folder entry limit are flagged truncated and not expanded - browse them directly or narrow with memory__search.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNoTags to filter by (frontmatter tags: or inline #tag), AND-matched (all must be present), case-sensitive, bare without #. e.g. [project, active]. Omit = no tag filter
depthNoOptional. 1 = direct children of the folder only; 2 (default) = also expand each subfolder one more level.
folderNoFolder, POSIX, no leading slash (trailing slash optional), e.g. work/tasks. Matches that folder only - not a string prefix. Omit = whole memory

Output Schema

ParametersJSON Schema
NameRequiredDescription
filesYesTotal files under the browsed folder (after the tags filter)
folderYesThe browsed folder, normalized; empty = memory root
entriesYes
truncatedYesTrue = something was omitted anywhere in this response (a folder over the per-folder limit, or the response budget); narrow with a subfolder or memory__search

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and destructiveHint false. Description adds behavioral details: no bodies/ranking, truncation flagged, how to expand folders, tag matching semantics.

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?

Single paragraph but packed with useful information. Front-loaded with purpose. Could be broken into shorter sentences, but no redundancy or wasted 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?

With output schema present and full parameter descriptions, this covers usage, edge cases (truncation), alternatives, and drill-down behavior. Complete for a browse 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 100% (baseline 3). Description adds context: tags AND-matched, case-sensitive, bare; depth defaults to 2; folder exact match (not prefix). Adds value beyond 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?

Description clearly states it browses memory as a folder tree, listing files/subfolders 2 levels deep with counts, no bodies or ranking. It distinguishes from memory__search for keyword ranking.

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 guides when to use (see organization, list notes by tag), when to drill down (call again if folder shown without entries), and alternative (memory__search for ranking).

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

memory__readRead memoryA
Read-only

Read ONE memory by its exact path: returns full frontmatter + body. Use a path you got from memory__search/list, a prior write/edit, or the user - do not invent or guess one from a title. No known path? use memory__search first.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesExact POSIX .md address - not a title or search query. Case-sensitive, no leading slash. e.g. work/tasks/foo.md

Output Schema

ParametersJSON Schema
NameRequiredDescription
bodyYes
pathYes
tagsYes
titleYes
deletedYes
updatedYes
frontmatterYes

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds that read returns 'full frontmatter + body' and warns about case-sensitivity and leading slash, providing useful behavioral details beyond annotations.

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 with no redundancy. Every word adds value.

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?

For a simple read tool with one parameter, existing output schema, and clear annotations, the description fully covers purpose, usage, parameter semantics, and return value.

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 100% with a clear description. The description reinforces the exact path requirement, adds examples, and clarifies it's not a title or query, adding value 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 uses a specific verb ('Read') and resource ('memory by its exact path'), clearly stating it returns frontmatter and body. It distinguishes from sibling tools like memory__search (for finding paths) and memory__list.

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?

Explicit guidance on when to use ('path from search/list/prior operation'), when not to ('do not invent or guess'), and alternative ('use memory__search first') is provided.

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

memory__writeWrite memoryA
Idempotent

Create a NEW memory or fully OVERWRITE an existing one at path - replaces the entire body and frontmatter (idempotent; the saved memory persists for every AI). Use when you have the complete final content. To change only part of an existing memory, use memory__edit. Store durable knowledge and notes only - never secrets, passwords, API keys, one-time codes, or payment/government identifiers (these are refused).

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYesThe complete Markdown body, excluding frontmatter (no --- fences). write overwrites the entire existing body.
pathYesExact POSIX .md address - not a title or search query. Case-sensitive, no leading slash. e.g. work/tasks/foo.md
frontmatterNoYAML metadata as a key->value map (no --- fences), e.g. {"type":"task","status":"active","tags":["project"]}. write replaces the whole map; edit shallow-merges top-level keys (nested values replaced wholesale; a key cannot be removed via edit - use write to fully replace)

Output Schema

ParametersJSON Schema
NameRequiredDescription
pathYes
updatedYes

TDQS

A4.1/5.0
Behavior1/5

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

The description says 'fully OVERWRITE' which is destructive, but the annotation destructiveHint is false. This is a contradiction. The description also adds context about idempotency and persistence, but the contradiction undermines 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?

Two sentences plus a security warning, front-loaded with purpose and behavior. Every sentence is essential with no waste.

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 3 parameters, output schema exists, and sibling context, the description covers purpose, usage, parameter details, behavior, and security. No gaps identified.

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 covers all parameters with descriptions. Description adds value by clarifying that body excludes frontmatter, path is exact POSIX .md address with case-sensitivity, and frontmatter is YAML map with overwrite behavior.

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?

Clearly states the verb 'Create' and 'overwrite' with the resource 'memory at path', and distinguishes from sibling tool memory__edit by noting it replaces entire content.

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 says 'Use when you have the complete final content' and recommends memory__edit for partial changes. Also warns against storing secrets, providing clear when-to-use and when-not-to.

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. 6 tool updatesv0.0.3
    • First observedmemory__delete
    • First observedmemory__edit
    • First observedmemory__list
    • First observedmemory__read
    • First observedmemory__search
    • First observedmemory__write

TDQS

A4.5/5.0
Disambiguation5/5

Each tool has a unique, well-defined purpose: create/overwrite (write), modify existing (edit), delete (delete), read by path (read), browse folder tree (list), and keyword search (search). No overlapping functionality.

Naming Consistency5/5

All tools follow the 'memory__<verb>' pattern with clear, single-word verbs (delete, edit, list, read, search, write). Consistent and predictable.

Tool Count5/5

Six tools cover the essential CRUD and browsing operations for a hierarchical memory store. The count is well-scoped without unnecessary complexity.

Completeness4/5

Core CRUD and browsing are covered. Minor gaps like renaming or moving memories exist, but agents can work around by editing content or using multiple steps.

Maintenance

ActivityActive
ResponsivenessNo issues

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
    Exposes the local Gemini CLI as an MCP stdio server, providing tools for prompting, web search, file operations, and MCP management, enabling AI clients like Codex CLI and Claude Code to interact with Gemini.
    7
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    A local stdio MCP server that exposes a shared brain (read/search/write) over ~/.claude/memory, allowing memories written in any agent to be readable and searchable across all three (Claude Code, Cursor, Codex). It provides tools like memory_search, memory_read, memory_write, etc., with no external services.
    31
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Exposes a verified tool registry (calculator, sandboxed file read, web fetch) over MCP stdio, enabling any MCP-capable client to reuse the same tools from the inspectable ReAct loop.
    3
    MIT

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/agentage/server-memory'

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