basic-memory-mcp
This server provides a persistent, Markdown-backed notebook for AI models, enabling them to manage a searchable knowledge base with full topic lifecycle control.
Discover & search topics: Browse topics with optional filtering by tag, keyword query (case-insensitive AND search across ID, title, tags, and body), phrase matching, and result limits; optionally include expired topics.
Read topics: Retrieve full Markdown content and YAML frontmatter of any topic by its slash-path ID (expired topics are still readable).
Write topics: Create new or completely replace existing topics with Markdown content. Supports optional titles, tags, and retention/expiry (permanent, session/today, week, month, or a specific ISO‑8601 date). Parent folders are auto‑created.
Edit topics: Perform exact string replacements within a topic’s content—replace first occurrence or all occurrences.
Append to topics: Add text to an existing topic without overwriting, optionally under a specified
##heading; can extend (but never shorten) expiry.Rename / move topics: Move a topic to a new ID and automatically rewrite
[[wiki-links]]pointing to it across all topics.Delete topics: Soft‑delete a topic by moving it to a timestamped
.trash/folder (manually recoverable); empty parent folders are pruned automatically.Sweep expired topics: List or soft‑delete topics whose retention has passed, with a dry‑run mode to preview changes.
Track relationships: Report outbound and inbound wiki‑link connections for any topic.
Read‑only mode: Optionally restrict to discovery and reading only.
Multi‑tenancy (optional): Namespace topics per authenticated user in ATLAS deployments.
Git‑friendly storage: All data is stored as UTF‑8 Markdown files with YAML frontmatter, editable with any text editor and easily versioned.
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., "@basic-memory-mcpCreate a note about the Atlas ports refactor"
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.
basic-memory-mcp
An MCP server that gives a model a persistent notebook backed by a folder of Markdown files.
Tools
discover_topics(query=None, tag=None, limit=50)— list topics, optionally filtered.read(topic_id)— return the full Markdown file including frontmatter.write(topic_id, content, title=None, tags=[])— create or replace a topic.edit(topic_id, old, new, replace_all=False)— exact string replacement.delete(topic_id)— soft-delete into<root>/.trash/<timestamp>/....
Topic ids are slash-paths relative to --root without .md, e.g. projects/atlas-ports.
Related MCP server: Local Knowledge Desk
Usage
# stdio (default)
basic-memory-mcp --stdio --root ~/ATLAS-GROUP/basic-memory/memory
# HTTP
basic-memory-mcp --http --host 127.0.0.1 --port 8101 --root ...Set BASIC_MEMORY_READ_ONLY=1 or --read-only to expose only discover_topics and read.
Set BASIC_MEMORY_HARD_DELETE=1 or --hard-delete to unlink files instead of moving them
(only for throwaway/test roots).
Multi-tenancy (ATLAS deployments only, off by default)
--multi-tenant (or BASIC_MEMORY_MULTI_TENANT=1) namespaces every topic per
authenticated user, for the ATLAS deployment where the backend injects the caller's
email into tool calls.
Off (default): tool schemas are exactly as above — no
_atlas_userparameter exists anywhere, and behavior is byte-identical to a single-user server.On: every tool grows a trailing
_atlas_user: str | None = Noneparameter ("injected by the Atlas backend; do not supply"). ATLAS fills it from the authenticated session and strips anything the model supplies, so the LLM cannot impersonate another user. A call arriving without it is refused with a clear error — never silently mapped to a shared/default tenant.The email is sanitized to a filesystem-safe slug (lowercase,
@and.→_, must match[a-z0-9_-]+afterward):garland3@gmail.com→garland3_gmail_com/. All topic ids then resolve under<root>/<slug>/, and the usual path-escape rules apply after prepending, so one tenant can never name another tenant's files.Each tenant gets their own
.trash/;sweep, catalog priming, anddiscover_topicsare scoped to the calling tenant.memory://resources are disabled in this mode (resources get no_atlas_userinjection, so they cannot be scoped to the caller).Accepted slug collision:
a.b@c.danda_b@c_dsanitize to the same slug and share a folder. Emails are the trust boundary and ATLAS authenticates them, so this requires two authenticated users with pathological addresses.This is namespacing for the trusted-ATLAS case, not security against a hostile client — stdio gives whoever spawns the process the whole folder anyway.
No migration tool. Turning the flag on over an existing flat root leaves old topics invisible; move them under the tenant folder with a one-time
mv <root>/projects <root>/<slug>/(etc.) if you enable it later.
Storage
Files are UTF-8 Markdown with YAML frontmatter; only .md files are visible. The server
manages created and updated; the model supplies title and tags. The memory folder is
plain files, so git and ordinary editors work.
Development
uv sync
uv run pytestAvailable Tools
9 toolsappendADestructive
Append text to an existing topic without rewriting the whole body.
Inserts with exactly one blank line between the old body and the new text. If heading is supplied, appends under an existing ## heading or creates it at the end. Fails if the topic does not exist. Bumps the 'updated' timestamp. A retention argument only extends the current expiry; it never shortens it.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Markdown text to append | |
| heading | No | Optional ## heading under which to append | |
| topic_id | Yes | Topic id to append to | |
| retention | No | If given, extends the topic's expiry (never shortens it). Same values as write(). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses detailed behavioral traits: insertion with exactly one blank line, heading creation behavior, failure on nonexistent topic, timestamp bumping, and retention never shortening. This goes well beyond the annotation (destructiveHint: true) and gives the agent a clear model of side effects.
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 compact and front-loaded with the primary purpose. Each subsequent sentence adds meaningful behavior detail without unnecessary fluff. It is well-structured 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 tool's moderate complexity, the description covers failure conditions, side effects (timestamp), and retention semantics. Since an output schema exists, return values are not needed in the description. It is sufficiently complete for effective 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?
The schema already provides descriptions for all parameters (100% coverage). The tool description adds extra meaning for 'heading' (appends under existing ## heading or creates it) and 'retention' (extends but never shortens). This enriches understanding beyond the schema, warranting a score above the baseline.
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: 'Append text to an existing topic.' The phrase 'without rewriting the whole body' differentiates it from sibling tools like write and edit, making the purpose specific and unambiguous.
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 when to use this tool (when adding text to an existing topic without rewriting the whole body) and provides context about behavior (e.g., heading handling, failure if topic doesn't exist). However, it does not explicitly name alternatives or state when-not-to-use, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deleteADestructive
Soft-delete a topic, moving it to /.trash//.md.
Returns the trash path so it can be manually restored. Parent folders are pruned if empty. Topics are never unlinked.
| Name | Required | Description | Default |
|---|---|---|---|
| topic_id | Yes | Topic id, e.g. 'projects/atlas-ports' |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the destructiveHint annotation, explaining that deletion is soft, files are moved to a timestamped trash path, the path is returned for manual restoration, parent folders are pruned when empty, and topics are never unlinked. This provides comprehensive behavioral transparency with no contradictions.
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, with the main action in the first sentence and supplementary details in two short follow-up sentences. Every sentence adds meaningful information without redundancy.
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 parameter, an output schema, and a clear annotation, the description covers all essential aspects: the action, the destination, the return value, side effects, and restoration. It is self-contained and leaves no major gaps.
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 already fully describes the single parameter 'topic_id' with 100% coverage and an example. The description adds minor context by showing how the topic_id is used in the trash path template, but this is not essential since the schema already defines the parameter clearly.
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 identifies the tool as a soft-delete operation for a topic, specifying the destination as a trash path and contrasting with potential permanent deletion. The phrase 'never unlinked' and the return of the trash path distinguish it from related sibling tools like 'sweep' and 'rename'.
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 clearly implies when to use this tool: for reversible deletion that can be manually restored. It does not explicitly compare to alternatives like 'sweep' (likely permanent deletion), so it lacks an explicit 'when not to use' statement, but the context of soft-delete and manual restore is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discover_topicsARead-only
List available topics. Call this before read/write/edit/delete/append/rename/sweep.
Returns a JSON list of {id, title, tags, updated, size, snippet, outbound_links, expires, match_reason}, newest first. With a query, snippets are centered on the first body match. Expired topics are hidden by default; pass include_expired=true to reveal them, marked with "expired": true. Reports when results are truncated by limit or when expired topics were hidden.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | Optional exact tag match | |
| limit | No | Maximum topics to return | |
| query | No | Optional case-insensitive AND search across id, title, tags, and body. Quoted "exact phrase" matches as a single term. | |
| include_expired | No | Include topics whose expiry has passed |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description adds rich behavioral detail: the exact JSON fields returned, newest-first ordering, snippet centering on body matches, default hiding of expired topics, the 'expired' marker when revealed, and reporting of truncation/hidden results. This fully discloses behavior without contradicting annotations.
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 front-loaded with the primary purpose and usage directive, followed by a compact list of return fields and behavioral notes. Every sentence contributes unique information; there is no padding or repetition of schema content.
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 (4 parameters, list return with fields, filtering, expiration handling), the description covers all essential aspects: what it returns, ordering, query behavior, expiry handling, and truncation reporting. With readOnlyHint annotation and output schema, nothing is left ambiguous.
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?
Input schema already covers all four parameters with descriptions (100% coverage), so baseline is 3. The description adds meaning beyond the schema, notably that query affects snippet centering and that include_expired reveals topics marked with 'expired': true. This enriches the agent's understanding of parameter effects.
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 'List available topics' — a specific verb and resource that distinguishes this discovery tool from siblings like read, write, and related. It also positions itself as the precursor to mutation operations, further clarifying its unique role.
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 instructs to 'Call this before read/write/edit/delete/append/rename/sweep', giving a clear when-to-use directive. It also explains optional query and include_expired behavior, which helps the agent decide when to pass those parameters.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
editADestructive
Exact-string replacement inside an existing topic, like the Claude Code Edit tool.
Fails if the topic does not exist. Fails if 'old' is not found. Fails if 'old' appears more than once and replace_all is false. Bumps the 'updated' timestamp. To change title, tags, or expiry, use write instead.
| Name | Required | Description | Default |
|---|---|---|---|
| new | Yes | Replacement text | |
| old | Yes | Exact text to replace. Must match character-for-character, including whitespace | |
| topic_id | Yes | Topic id, e.g. 'projects/atlas-ports' | |
| replace_all | No | Replace every occurrence of old; default is exactly one occurrence |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint annotation, the description reveals failure modes (topic not existing, old not found, multiple occurrences without replace_all) and the side effect of bumping the 'updated' timestamp. This is rich behavioral context not present in annotations.
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 five tightly written sentences with no fluff. The first sentence defines the core purpose, and each subsequent sentence provides essential failure, side-effect, or alternative information. Nothing is redundant.
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 is present, there is no need to explain return values. The description covers purpose, exact behavior, failure modes, side effects, and alternative sibling tools, making it fully adequate for a tool of this 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 100%, so baseline is 3. The description adds value by contextualizing parameters: e.g., it explains that 'old' appearing more than once causes failure if replace_all is false, which connects parameter semantics to runtime behavior. This is beyond what the schema states.
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 'Exact-string replacement inside an existing topic' with a specific verb and resource, and distinguishes itself from siblings by explicitly directing metadata changes to write. This is unambiguous.
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?
It provides explicit when-to-use guidance ('Exact-string replacement') and an explicit alternative for metadata changes ('To change title, tags, or expiry, use write instead'). It also lists failure conditions that effectively say when not to use without replace_all, aiding correct tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
readARead-only
Read a single topic in full, including its YAML frontmatter.
Errors with a clear message if the topic does not exist; call discover_topics first. Expired topics are still readable by id.
| Name | Required | Description | Default |
|---|---|---|---|
| topic_id | Yes | Topic id, e.g. 'projects/atlas-ports' |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already signals a safe read operation. The description adds valuable behavioral details about error handling ('Errors with a clear message if the topic does not exist') and expiry behavior ('Expired topics are still readable by id'), going beyond what annotations provide.
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 consists of three concise sentences, front-loaded with the primary purpose. Every sentence contributes useful information (purpose, error handling, expiry behavior) without unnecessary verbosity.
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 read operation with one parameter, readOnlyHint, and an output schema, the description covers essential behavioral aspects (error, expiry) and prerequisites. It is complete enough for an agent to decide when and how to call the 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 description coverage is 100%, so the parameter 'topic_id' is fully documented in the schema. The description adds minimal parameter semantics (only the prerequisite to call discover_topics first), which is a slight enhancement but does not significantly exceed the schema baseline.
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 function: 'Read a single topic in full, including its YAML frontmatter.' It specifies both the resource (topic) and the scope (single, full, including frontmatter), and distinguishes it from sibling tools like discover_topics (listing) and write/edit (mutations).
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 contextual guidance: 'call discover_topics first' indicates a prerequisite for obtaining valid topic IDs, and 'Expired topics are still readable by id' clarifies behavior for edge cases. It does not explicitly exclude alternatives, but the guidance is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
renameADestructive
Move a topic and rewrite wiki links that pointed to it.
Also rewrites prefix links: renaming scratch/ → archive/scratch/ fixes
[[scratch/x]] links. Refuses if new_id already exists. Returns the count of
rewritten links so the model knows the blast radius.
| Name | Required | Description | Default |
|---|---|---|---|
| new_id | Yes | Destination topic id | |
| old_id | Yes | Existing topic id to move |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint annotation, the description discloses multiple behavioral traits: rewrites wiki links, handles prefix links with an example, refuses if new_id exists, and returns the count of rewritten links. This is rich, actionable 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?
The description is three sentences, with the core purpose front-loaded. The second sentence adds a concrete example, and the third covers constraints and return value—every sentence earns its place.
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 covers the operation, edge cases (prefix links, existing new_id), and return value. With an output schema present, there's no need to explain the count format. It's complete for a two-parameter 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 100%, so the schema already documents both parameters. The description adds context about the overall operation but doesn't elaborate on parameter specifics beyond what the schema provides. Baseline 3 is appropriate.
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 'Move a topic and rewrite wiki links that pointed to it,' giving a specific verb and resource. It also distinguishes the tool from siblings like write, edit, and delete by emphasizing the link-rewriting aspect.
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 gives clear context for when to use the tool (moving a topic and updating links) without explicitly naming alternatives. It doesn't provide exclusions or compare to siblings, but the unique behavior of rewriting links implies its specific use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sweepADestructive
List or soft-delete topics whose expiry has passed.
dry_run=true returns the list without changing anything; the model should review it and then call sweep(dry_run=false) to move the topics into .trash.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | When true (default), lists expired topics without moving them. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only provide destructiveHint=true. The description adds valuable context: the operation is a soft-delete that moves topics to .trash, and dry_run=true is safe, while dry_run=false triggers the destructive action. This explains the behavior beyond the annotation.
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 only two sentences, front-loaded with the core purpose, and every word earns its place. It explains the behavior, the parameter's role, and the intended usage pattern without any fluff.
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 simplicity (one parameter) and the presence of an output schema, the description fully covers the operation, safety considerations, and usage workflow. No additional return type details are needed.
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 already describes the dry_run parameter with 100% coverage. The description enriches this by explaining the two-step workflow, clarifying that true is a preview and false performs the move. This adds meaningful context beyond the schema's basic 'lists without moving'.
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 uses a specific verb+resource combination: 'List or soft-delete topics whose expiry has passed.' This clearly states the tool's function and distinguishes it from sibling tools like 'delete' (hard delete) and 'read' (general reading).
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 gives explicit usage guidance: first call with dry_run=true to review, then call with dry_run=false to perform the soft-delete. This is a clear when-to-use workflow. It doesn't explicitly mention alternatives like 'delete' for permanent deletion, but the soft-delete designation implies that distinction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
writeADestructive
Create or replace a topic. Overwrites existing topics without asking; use edit for targeted changes.
Parent folders are created implicitly. Returns the resolved id and whether the topic was created or replaced. Rejects content over approximately 1 MB; split large memories into multiple topics. Retention controls expiry: permanent means never; session/today means 24 hours; week means 7 days; month means 30 days.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Optional list of tags | |
| title | No | Optional display title; defaults to the topic id | |
| content | Yes | Markdown body text (frontmatter is managed by the server) | |
| topic_id | Yes | Topic id, e.g. 'scratch/2026-08-05-note' | |
| retention | No | Expiry: permanent (default), session/today, week, month, never, or an ISO-8601 date/time. | permanent |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the destructiveHint annotation by detailing overwrite behavior, implicit folder creation, the return payload (resolved id and created/replaced), the 1 MB content limit, and exact retention durations. No contradiction with annotations.
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?
Four tight sentences, no filler. The description is front-loaded with the core purpose, then efficiently covers destructive behavior, path creation, size limits, and retention in a logical order.
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, the annotations, and the presence of an output schema, the description covers all essential aspects: purpose, destructive behavior, constraints, return values, and retention options. An agent has enough to select and invoke this tool correctly.
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 100%, so the baseline is 3, but the description adds useful meaning: retention options are expanded with concrete durations (e.g., 'session/today means 24 hours'), and content is given a size constraint. Tags and title are self-explanatory and already well-described in 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?
Opens with 'Create or replace a topic' – a specific verb and resource. It distinguishes itself from the sibling 'edit' tool ('use edit for targeted changes') and clearly conveys the overwrite behavior.
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 directs users to 'edit' for targeted changes, which is a clear when-not-to-use alternative. It also gives practical guidance on splitting large content, notes implicit parent folder creation, and clarifies retention semantics.
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.
9 tool updates
v0.1.0- First observed
append - First observed
delete - First observed
discover_topics - First observed
edit - First observed
read - First observed
related - First observed
rename - First observed
sweep - First observed
write
TDQS
Each tool has a clearly distinct purpose: discover_topics for listing, read for full content, related for links, write for full replacement, edit for targeted string changes, append for adding text, rename for moving, delete for trash, and sweep for expired cleanup. No two tools overlap in function.
Most tools use single-word verbs (read, write, edit, append, rename, delete, sweep), but discover_topics introduces an underscore and related is an adjective rather than a verb. This mixed convention breaks the otherwise predictable verb-only pattern.
The 9 tools are well-scoped for a personal memory server, covering the full lifecycle of topics from discovery to deletion without unnecessary redundancy. Each tool addresses a distinct need and the count feels appropriate.
The tool surface is comprehensive: create, read, update (via edit, append, rename), delete, list, relationship traversal, and expiration cleanup are all covered. There are no discernible gaps for the stated purpose of managing topics in a knowledge base.
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
Markdown-based note-taking with a hosted MCP server. Your notes serve you and your AI.
Google Keep-style notes app with an MCP server for AI agents to read/write notes.
One memory, every AI. A shared, user-owned markdown memory your AI clients read and write over MCP.
An MCP server that used to create notes
Related MCP Servers
- AlicenseAqualityDmaintenanceA simple note-taking MCP server for recording and managing notes with AI models.42236GPL 2.0
- FlicenseAqualityBmaintenanceA local MCP server for managing Markdown notes, enabling create, list, read, search, summarize, and delete operations through natural language.61-
- AlicenseNot gradedqualityCmaintenanceA local-first MCP server that gives AI assistants long-term memory by storing, searching, and recalling notes as Markdown files on your machine.14MIT
- AlicenseAqualityBmaintenanceAn MCP server that stores notes as Markdown files on your machine, enabling you to save, search, and manage notes through natural language with Claude Code or Claude Desktop.5MIT
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/garland3/basic-memory-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server