basic-memory
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
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
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| logging | {} |
| prompts | {
"listChanged": true
} |
| resources | {
"subscribe": false,
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| basic_memory_diagnosticsA | Return version, system, and configuration diagnostics for Basic Memory. Provides:
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. |
| recent_activityA | Get recent activity for one project. |
| search_notesA | Search notes, observations, and relations in one project, or in several with |
| 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. |
| 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 |
| 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 |
| 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: |
| 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 |
| bm_deleteA | Delete a Basic Memory note ( |
| bm_editA | Change part of an existing Basic Memory note. |
| bm_findA | Find files in a Basic Memory project, recursively. With |
| bm_listA | List one folder of a Basic Memory project: its subfolders, then its files with title, date and id. |
| bm_manA | Read the Basic Memory manual. With no arguments, the index of every page. |
| bm_moveA | Move or rename a Basic Memory note ( |
| bm_schemaA | Basic Memory note schemas (Picoschema). |
| bm_projectA | Basic Memory projects. |
| bm_searchA | Search a Basic Memory project, ranked by relevance. |
| bm_readA | Read a Basic Memory note or file by path, permalink, memory:// URL or exact title. Slice a long note with |
| bm_writeA | Create or replace a Basic Memory note. Give a file path as |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| continue_conversation | Continue a previous conversation |
| getting_started | Introduce Basic Memory and help the user create their first note |
| recent_activity | Get recent activity from one project: the given one, else the default project. Lists every project only when no default is set |
| search_knowledge_base | Search across all content in basic-memory |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| ai assistant guide | Bootstrap an AI assistant on Basic Memory and explain how to fetch current documentation |
| manual | Index 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
Scored across 38 tools
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 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.
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.
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.