Plain Text Memory MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| MEMORY_AGENT | No | Override the agent name used to tag entries. | |
| MEMORY_FILE_PATH | No | Path to the memory file. A relative path resolves against the folder the agent starts the server in. If unset, defaults to `<git root>/.agents/memory.local.jsonl`, or `<start folder>/.agents/memory.local.jsonl` outside a git repo. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| create_entitiesA | Create new entities, each with a type and observations. Returns the entities created. A name that already exists, or repeats within the call, is not saved and is listed under "skipped", with its observations unsaved; to add facts to an existing entity, see add_observations. |
| create_relationsA | Create directed, typed relations between existing entities. Returns the relations created. A relation that names an entity that does not exist is not saved; it is listed under "skipped" with the missing names. A relation that already exists is neither created nor reported. |
| add_observationsA | Add observations to existing entities. Returns the observations added, per entity; a text already on the entity is skipped. Fails without saving anything if any named entity does not exist. To create an entity, see create_entities. |
| edit_observationA | Replace one observation's text in place. Keeps the observation's original added_at and agent, and records the edit in edited_at and edited_by. Returns the edited observation. Fails without saving when the entity or old text does not exist, or when the entity already has the new text. To add a new fact, see add_observations. |
| rename_entityA | Rename an entity and every relation that names it. Keeps every tag, so the entity and its observations still show when and by which agent they were added. Returns the renamed entity and a message counting the relations updated. Fails without saving when the entity does not exist or the new name is taken; to combine two entities, see merge_entities. |
| merge_entitiesA | Fold one entity into another and delete the first. Moves the source's observations to the target with their original tags; a text the target already has keeps the target's copy. Points the source's relations at the target, dropping any that would repeat an existing relation or point the target at itself. The target keeps its own name and type. Returns the merged target and the relations moved to it. Fails without saving when either entity does not exist. |
| delete_entitiesA | Delete entities by name, with every relation that touches them. Returns the deleted entities and relations in full, with a summary message. Names that do not exist are ignored. To remove single facts from an entity, see delete_observations. |
| delete_observationsA | Delete observations from entities, matched by exact text. Returns the deleted observations in full, per entity, with a summary message; entities that lost nothing are left out. Entities and texts that do not exist are ignored. To delete a whole entity, see delete_entities. |
| delete_relationsA | Delete relations matched by source, target, and relation type. Returns the deleted relations in full, with a summary message. Relations that do not exist are ignored. Deleting an entity with delete_entities already removes its relations. |
| read_graphA | Read every entity and relation, or only those in a date range. Returns the whole graph, which grows with the repo's memory. With since, before, or agent, returns only entries whose tags match: an entity appears when it or any of its observations matches, with only the matching observations. Any filter leaves out untagged entries. To read part of the graph by topic, see search_nodes and open_nodes. |
| search_nodesA | Search entities by name, type, or observation text. The query is split into words, and a "quoted phrase" stays one term. Returns the entities whose name, type, or any observation contains at least one term, ignoring case, ordered by how many terms they contain, plus every relation that touches them; a relation's other end may be outside the results. A blank query returns every entity. Since, before, and agent narrow the search to matching entries, as in read_graph. To fetch entities by exact name, see open_nodes. |
| open_nodesA | Open entities by exact name. Returns the named entities and every relation that touches them; a relation's other end may be outside the results. Names that do not exist are ignored. To find entities by keyword, see search_nodes. |
| initialize_memoryA | Claim the memory file for this repo, or start a new one. Resolves the error other tools return when the memory file's header names a different repo. 'fresh' renames the old file to a timestamped backup and starts an empty graph, for a file copied from another repo; 'adopt' rewrites the header to this repo, for a repo that was moved or renamed. Returns the status, the header, and the backup path if one was made. Changes nothing when the file already belongs to this repo. |
| export_taxonomyA | Write this repo's memory taxonomy to a JSONC file the user can read. The file sits beside the memory file as memory.local.taxonomy.jsonc. It holds the server's versioned schema (record types, tools, allowed values, resources, prompts) and this repo's usage: entry counts, entity and relation types in use, and entries per agent. Comments explain each section and the purpose of each record type. Returns the file path, the taxonomy version, and entry counts. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| cleanup | Review the memory graph and propose deletions and merges; nothing is deleted until approved. |
| export | Write this repo's taxonomy and usage counts to .agents/ and report them. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| taxonomy | The server's versioned schema: record types and their fields, tools with their parameters and results, allowed enum values, resources, prompts, and the changelog. To write it to the repo with this repo's usage counts, see the export_taxonomy tool. |
TDQS
Scored across 14 tools
Every tool has a clearly distinct purpose, and descriptions explicitly cross-reference related tools (e.g., 'to add facts to an existing entity, see add_observations') to prevent misuse. Boundary cases like edit_observation vs. add_observations vs. merge_entities are well delineated.
Tool names follow a strict verb_noun pattern throughout (create_entities, add_observations, edit_observation, rename_entity, merge_entities, delete_entities, read_graph, search_nodes, open_nodes, etc.). The single exception, initialize_memory, is still verb_noun and clearly consistent with the rest.
With 14 tools covering entity CRUD, relation CRUD, observation CRUD, querying, merging, renaming, initialization, and export, the count is well-scoped. Each tool earns its place; no redundant or trivially thin operations.
The surface covers full lifecycle operations for entities, relations, and observations, plus graph-level read/search, taxonomy export, and memory file initialization. No obvious dead ends; the domain of a plain-text knowledge graph is fully served.