Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault

No arguments

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

CapabilityDetails
tools
{
  "listChanged": true
}
logging
{}
prompts
{
  "listChanged": true
}
resources
{
  "subscribe": false,
  "listChanged": true
}

Tools

Functions exposed to the LLM to take actions

NameDescription
basic_memory_diagnosticsA

Return version, system, and configuration diagnostics for Basic Memory.

Provides:

  • Basic Memory package version

  • Python version and platform details

  • Config file path and its contents (secrets redacted)

  • BASIC_MEMORY_* environment variables that override the file at runtime

Useful for troubleshooting installations and gathering information for support requests. Read-only; never emits secrets or API keys.

delete_noteA

Delete a note or directory by title, permalink, or path. Deletion is permanent and removes the file. With is_directory=True every file under the path is deleted. A missing note returns false rather than an error.

read_contentA

Read a file's raw bytes by path, permalink, or memory:// URL, without knowledge-graph processing. Text and JSON come back as {"type": "text"}; images are re-encoded as JPEG and downscaled to about 350 KB; other binaries come back base64 as {"type": "document"} and are refused above 350 KB. Use read_note for markdown notes when you want note resolution and fallback search.

build_contextA

Build context from a memory:// URI to continue conversations naturally.

Use this to follow up on previous discussions or explore related topics.

Memory URL Format:
- Use paths like "folder/note" or "memory://folder/note"
- Pattern matching: "folder/*" matches all notes in folder
- Valid characters: letters, numbers, hyphens, underscores, forward slashes
- Avoid: double slashes (//), angle brackets (<>), quotes, pipes (|)
- Examples: "specs/search", "projects/basic-memory", "notes/*"

Timeframes support natural language like:
- "2 days ago", "last week", "today", "3 months ago"
- Or standard formats like "7d", "24h"

Format options:
- "json" (default): Structured JSON with internal fields excluded
- "text": Compact markdown text for LLM consumption

Queries the Basic Memory knowledge base API — see
https://docs.basicmemory.com/concepts/memory-urls
recent_activityA

Get recent activity for one project.

With no project, this uses the configured default project. It lists activity
across all projects only when there is no default.

Timeframe supports natural language formats like:
- "2 days ago"
- "last week"
- "yesterday"
- "today"
- "3 weeks ago"
Or standard formats like "7d"
search_notesA

Search notes, observations, and relations in one project, or in several with projects / search_all_projects. The query supports quoted phrases, AND/OR/NOT with parentheses, and tag:name (converted to a tags filter). A plain multi-term query first requires every term and may fall back to any-term matching when that returns nothing. search_type selects text, title, permalink (a * glob matched against the full permalink path), vector/semantic, or hybrid; the default is hybrid when semantic search is enabled, otherwise text. Omit query to search by filters alone (metadata_filters, tags, status, note_types). Results are whole notes by default; a categories or valid-time filter switches the default to observations. after_date filters by when content was last updated. valid_at / valid_overlaps / time_kind filter by dates written inside notes (e.g. @effective[2026-06-10,2026-07-27)) and exclude undated content. Returns ranked, paginated results; read full content with read_note or cat. Syntax reference: memory://man/search-notes(3).

read_noteA

Read a markdown note by title or permalink, optionally a numbered line range. If the identifier doesn't resolve directly, a note whose title matches it exactly (case-insensitive) is returned with full content; otherwise it returns related-note suggestions from text search instead of content. Pass include_content=false to get only the note's metadata and checksum.

view_noteA

Read a note (same resolution as read_note) and return it wrapped in an instruction to display it to the user as a markdown artifact. Use when the user wants to see the note rendered; use read_note when you need the content yourself. Not-found results are returned unwrapped.

write_noteA

Create a markdown note. If the note already exists, returns an error by default — pass overwrite=True to replace. directory is required. For incremental changes to an existing note use edit_note. A new note's result may list similar existing notes; that is advisory and does not block the write. Pass expected_checksum with overwrite=True to replace the note only if it is still the revision you read.

list_directoryB

List directory contents with filtering and depth control.

edit_noteA

Edit a note in place. operation picks the edit: append or prepend content (prepend lands after frontmatter; both create the note if it does not exist); find_replace (replaces every exact, case-sensitive occurrence of find_text, and writes nothing unless the count equals expected_replacements, default 1); replace_section (replaces the content under the section heading, including its subsections unless replace_subsections=false); insert_before_section / insert_after_section (adds content beside the section heading). The heading must match exactly and appear once; a heading without leading # is treated as ##. A missing or duplicate heading, or missing find_text, fails without writing. identifier must resolve exactly; there is no fuzzy matching. Pass metadata to merge frontmatter fields in the same call. Pass expected_checksum to edit only if the note is still the revision you read.

move_noteA

Move a note, or a whole directory with is_directory=true, to a new path within the same project; cross-project moves are refused. For a file, give either destination_path (project-relative, with the same file extension as the source, e.g. "archive/note.md"; .markdown may become .md) or destination_folder (keeps the filename). The file moves on disk and its index entry, observations, and relations move with it. The permalink stays the same unless the server's update_permalinks_on_move setting is on, so links that use it keep resolving; other notes' text is not rewritten.

list_workspacesB

List available cloud workspaces (tenant_id, type, role, and name).

list_memory_projectsA

List all available projects with their status.

Shows projects from both local and cloud sources when cloud credentials are available, merging by permalink to give a unified view.

Each project entry includes an external_id (UUID). Pass that value as the project_id parameter on other tools to address a specific project unambiguously across cloud workspaces — useful when the same project name exists in more than one workspace.

create_memory_projectB

Create a new Basic Memory project.

Creates a new project with the specified name and path. The project directory will be created if it doesn't exist. Optionally sets the new project as default.

searchA

OpenAI/ChatGPT connector search adapter. Returns one text item holding JSON {results, total_count, query} for the top 10 search_notes matches. Other MCP clients receive an unsupported-client error; use search_notes instead.

fetchA

OpenAI/ChatGPT connector fetch adapter. Takes an id from search results (permalink, title, or memory:// URL) and returns one text item holding JSON {id, title, text, url, metadata}. Other MCP clients receive an unsupported-client error; use read_note instead.

catB

Print a note's content. Accepts '/path' identifiers.

grepA

Search note content in one project and return matching notes. Not a regex: pattern is matched as full-text keywords by default, and a pattern found in no note returns no results. semantic=True ranks by meaning instead (hybrid semantic plus full-text, when semantic search is enabled). Add context_lines to get case-insensitive matching lines with surrounding context and line numbers. Requires 'project' when several projects are addressable.

lsB

List one directory level. '/' lists projects; paths accept '/path'.

findA

Recursively list files by name glob or metadata predicates (e.g. "status=active"). Paths accept '/path'.

tailA

Show recently changed notes. Requires 'project' when several are addressable.

manB

Look up a manual page or search the manual.

schema_validateA

Validate notes against their Picoschema definitions. With neither note_type nor identifier it validates every note type that has a schema. A schema is a note with type: schema whose entity field names the note type it describes.

schema_inferA

Analyze existing notes of one type and suggest a Picoschema definition. A schema is a note with type: schema whose entity field names the note type it describes.

schema_diffB

Detect drift between a schema definition and actual note usage. A schema is a note with type: schema whose entity field names the note type it describes.

bm_contextA

Follow the Basic Memory knowledge graph from a note: the note, its observations, and the notes its relations reach, up to depth hops (1-5). identifier is a path, permalink, memory:// URL, or a pattern such as 'specs/*'. since limits related results to recent changes. compact returns the graph without note bodies; read chosen notes with bm_read.

bm_deleteA

Delete a Basic Memory note (identifier) or a directory (path). A directory delete removes every file under it and needs recursive=true. Pass expected_checksum (from bm_read) to delete a note only if it is still the revision you read. A note that does not exist is an error. This cannot be undone.

bm_editA

Change part of an existing Basic Memory note. command: append or prepend content; find_replace find_text with content (exact text, which must occur expected_replacements times, default 1); replace_section, insert_before_section or insert_after_section for a section heading ('Decisions', 'Auth/Decisions', 'Decisions[1]', as bm_read takes it); set_metadata to merge metadata into the frontmatter without touching the body. metadata also merges with any other command. Pass expected_checksum (from bm_read) to edit only the revision you read. A missing note is an error; create notes with bm_write.

bm_findA

Find files in a Basic Memory project, recursively. With name, match file names against a glob ('meeting'). With filters, match notes by frontmatter, e.g. {"status": "active"} or {"priority": {"$in": ["high"]}}, and with fields return just those frontmatter values per note. path limits the search to a folder. For ranked text or meaning search, use bm_search.

bm_listA

List one folder of a Basic Memory project: its subfolders, then its files with title, date and id. bm_list('/') with no project lists the projects you can address; '/path' lists inside another project. Filter files with glob and order them with sort. For a recursive search by name or frontmatter, use bm_find.

bm_manA

Read the Basic Memory manual. With no arguments, the index of every page. page reads one page: 'bm-search(3)' for an MCP tool, 'grep(1)' for a shell command; a tool name such as 'bm_search' works too. query lists the pages that mention every word given, like man -k.

bm_moveA

Move or rename a Basic Memory note (identifier) or a directory (path) within its project. destination is the new project-relative path; ending it with '/' moves into that folder under the current name ('archive/'). A note keeps its file extension ('.markdown' may become '.md'). Pass expected_checksum (from bm_read) to move a note only if it is still the revision you read. Moving into another project is refused: bm_read, bm_write there, then bm_delete.

bm_schemaA

Basic Memory note schemas (Picoschema). command: validate notes against their schema (one note_type, one note by identifier, or every type that has a schema); infer a schema from the notes of a note_type; diff a note_type's notes against its schema to find drift. A schema is a note with type: schema whose entity field names the note type it describes.

bm_projectA

Basic Memory projects. command: list (projects, grouped by workspace); create (name, path, optional set_default, workspace); recent (what changed lately: since, items, paging; project picks the project, else the default project, and with no default every project).

bm_searchA

Search a Basic Memory project, ranked by relevance. query supports quoted phrases, AND/OR/NOT and tag:name. mode picks hybrid (the default when semantic search is available), text, semantic, title or permalink (globs with *). Narrow with filters (frontmatter), note_types, items (notes, observations, relations) and since. lines returns the matching lines of each hit with that many lines of context, like grep. path limits the search to a folder; identifier searches one note. Read full notes with bm_read.

bm_readA

Read a Basic Memory note or file by path, permalink, memory:// URL or exact title. Slice a long note with section (a heading), start_line/end_line or max_tokens; line numbers count the whole file, frontmatter included. include_content=false returns only the metadata and the checksum that bm_write and bm_edit take as expected_checksum. Images come back as images and other binary files as documents. A missing note is an error: find notes with bm_search.

bm_writeA

Create or replace a Basic Memory note. Give a file path as identifier ('notes/plan.md'), or title plus directory. With a path the file lands exactly there and the title comes from the content's frontmatter, then title, then the file name. An existing note is an error unless overwrite=true; pass expected_checksum (from bm_read) to replace only the revision you read. To change part of a note use bm_edit. Content may hold frontmatter, observations ('- [category] fact #tag') and relations ('- relation_type [[Other Note]]').

Prompts

Interactive templates invoked by user choice

NameDescription
continue_conversationContinue a previous conversation
getting_startedIntroduce Basic Memory and help the user create their first note
recent_activityGet recent activity from one project: the given one, else the default project. Lists every project only when no default is set
search_knowledge_baseSearch across all content in basic-memory

Resources

Contextual data attached and managed by the client

NameDescription
ai assistant guideBootstrap an AI assistant on Basic Memory and explain how to fetch current documentation
manualIndex of the Basic Memory manual: every page with a one-line summary.
apropos(1)search the Basic Memory manual
cat(1)print a note's content from the shell
find(1)recursively list files, or query notes by frontmatter metadata
grep(1)search note content from the shell
head(1)print the first lines of a note
ls(1)list one directory level of a project
okf-check(1)check OKF v0.2 structural conformance without a project database
okf-export(1)export a local project as an OKF v0.2-compatible bundle
tail(1)show recently changed notes
tree(1)show a directory hierarchy
basic-memory-diagnostics(3)report version, system, and redacted configuration for troubleshooting
bm-context(3)follow the knowledge graph from a note
bm-delete(3)delete a note or a directory
bm-edit(3)change part of an existing note
bm-find(3)find files by name or notes by frontmatter, recursively
bm-list(3)list one folder: its subfolders, then its files
bm-man(3)read the Basic Memory manual
bm-move(3)move or rename a note or a directory within its project
bm-project(3)list, create, and show recent activity in projects
bm-project-delete(3)remove a project
bm-read(3)read a note or file by path, permalink, memory:// URL or title
bm-schema(3)validate notes against schemas, infer schemas, find drift
bm-search(3)search a project's notes, ranked by relevance
bm-write(3)create or replace a note
build-context(3)traverse the knowledge graph outward from a memory:// URL
chatgpt-fetch(3)OpenAI-actions-compatible document fetch adapter
chatgpt-search(3)OpenAI-actions-compatible search adapter
cloud-info(3)return Basic Memory Cloud overview and setup guidance (hosted server only)
create-memory-project(3)create a new project, locally or in a cloud workspace
delete-note(3)delete a note or directory from the knowledge base
delete-project(3)remove a project (local files survive by default; cloud files are always deleted)
edit-note(3)edit a note in place: append, prepend, find/replace, or section surgery
list-directory(3)browse project folders with depth and glob filtering
list-memory-projects(3)list all projects across local config and cloud workspaces
list-workspaces(3)list cloud workspaces available to the authenticated user
move-note(3)move a note or directory, keeping the database consistent
read-content(3)read a file's content without knowledge-graph processing
read-note(3)read a note by title, permalink, or memory:// URL
recent-activity(3)list recently changed notes, observations, and relations
schema-diff(3)detect drift between a schema and actual note usage
schema-infer(3)derive a Picoschema suggestion from existing notes
schema-validate(3)validate notes against their Picoschema definitions
search-notes(3)search the knowledge base by text, similarity, or metadata
view-note(3)retrieve a note formatted for artifact display
write-note(3)create or overwrite a markdown note in the knowledge base
comark(7)write ::bm-* components that render as charts, tables, boards, and live views

TDQS

B3.4/5.0

Scored across 38 tools

Disambiguation2/5

The set contains several parallel tool families for the same operations: read_note/bm_read/cat, search_notes/bm_search/grep/search, edit_note/bm_edit, write_note/bm_write, delete_note/bm_delete, list_directory/ls/bm_list, find/bm_find, man/bm_man, and schema_* / bm_schema. Some descriptions distinguish special cases, but an agent can easily misselect among aliases that target the same resource and action.

Naming Consistency2/5

Naming mixes bm_* prefixed tools, unprefixed snake_case tools, shell-style names like cat/grep/ls/find/tail/man, and one-off basic_memory_diagnostics. There is no single predictable convention across the 38 tools, even though individual names are readable.

Tool Count2/5

38 tools is too many for the apparent scope, especially because many are duplicate aliases across the bm_* and unprefixed families. The useful surface could likely be consolidated to roughly 15-20 tools without losing functionality.

Completeness5/5

The domain is knowledge-note management, and the surface covers create/read/update/delete, search, listing, moving, project management, schemas, graph context, recent activity, diagnostics, and manual lookup. Despite redundancy, there are no obvious lifecycle gaps or dead ends.

Maintenance

ActivityActive
ResponsivenessResponsive