MemCore
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| MEMCORE_DB_PATH | No | Override the database location. Defaults to ~/MemCore/memcore.db. Point it wherever you like — a synced folder, an encrypted volume, a project directory. | ~/MemCore/memcore.db |
| MEMCORE_SEMANTIC | No | Set to 0 to disable semantic search without uninstalling dependencies. | 1 |
| MEMCORE_EMBED_MODEL | No | Override the default embedding model used for semantic search. | paraphrase-multilingual-mpnet-base-v2 |
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 |
|---|---|
| memory_searchA | Search all remembered facts by content, across every project scope. The default entry point. Use it before assuming something is not known: it searches EVERY scope at once, so there is no need to guess which project a fact was recorded under. Use memory_get instead when you already know the exact scope and name, memory_list to browse without a query, and memory_recent for what changed lately. Two layers, blended by default:
Read-only. Archived entries are never returned. Returns a list of entries, best match first; an empty list when nothing matches or the query is invalid. |
| memory_embed_statusA | Report whether semantic search is active, which embedding model is used, and how many entries have a current vector embedding. Use it to understand why memory_search finds (or misses) entries that
share no keywords with the query: entries without a current embedding are
lexical-only until the next |
| memory_recentA | List the most recently created or updated memory entries, newest first. Use it to catch up on what changed lately (start of a session, after another agent worked), optionally within one scope. To find entries by content use memory_search; to browse a scope or type without time ordering use memory_list; for who changed what, use memory_events. Read-only. |
| memory_getA | Fetch one memory entry, complete, by its exact scope and name. Use it when you already know both keys (from memory_search, memory_list or memory_recent results) and need the full, current content before relying on it. Returns null when no entry has that scope and name, or when it is archived and include_archived is false. Read-only. |
| memory_listA | Browse entries by scope, type and archived state, WITHOUT a search query. Use it to see everything in a project scope (onboarding to a codebase),
every entry of one type (e.g. all |
| memory_eventsA | Read the append-only audit log, newest first: who wrote, updated, archived or restored what, when, from which client, and any conflicts or secret redactions. Use it to answer "who changed this, and why?". To see the previous CONTENT of an entry, use memory_history instead; for the latest entries themselves, memory_recent. Read-only and available on any connection; scope-locked connections only see their own scope's events. |
| memory_scopesA | List every known project/topic scope with its number of entries. Use it first to discover valid |
| memory_statsA | Report the total number of entries, the number of archived entries, the database file location and the list of scopes. Use it for a quick overview or to check which database file this connection uses. For per-scope counts use memory_scopes; for semantic search coverage, memory_embed_status; to verify the store actually works, memory_healthcheck. Read-only, takes no arguments. |
| memory_historyA | Show the prior versions of one entry that were overwritten or deleted, newest first. Every write that replaces an entry keeps the previous version automatically, so nothing is silently lost even if another agent overwrote it. Use it to recover or compare earlier content. For who made each change use memory_events; for the current version, memory_get. Read-only, available even on a read-only connection. Returns an empty list when the entry has no prior versions. |
| memory_writeA | Record a new fact, or update an existing one (same scope + name updates it in place). Search first (memory_search) to avoid creating a duplicate under a
different name. An update keeps the previous version in
memory_history and is logged in memory_events, so it can be undone.
Updating an archived entry is refused: restore it first with
memory_restore. Secret-shaped values in Returns {"ok": true, "id": ...} on success, or {"ok": false, "error": ...} for an invalid argument, a conflict (stale expected_updated_at or archived entry) or a busy database (retry). Not available on read-only connections. |
| memory_archiveA | Archive (soft-delete) one entry: hide it from normal reads and search while keeping it, restorable with memory_restore and audited in memory_events. Use it for a fact that became wrong or obsolete; to correct a fact, prefer memory_write on the same scope + name. Nothing is ever physically deleted. Returns {"ok": true} if the entry is now archived (also when it already was), {"ok": false} if no entry has that scope and name, or {"ok": false, "error": ...} when the reason is empty. Not available on read-only connections. |
| memory_restoreA | Restore one archived entry so it appears again in normal reads and search. The inverse of memory_archive. Find archived entries with memory_list(archived=true). The restore is logged in memory_events with your reason. Returns {"ok": true} if the entry is now active (also when it was not archived), {"ok": false} if no entry has that scope and name, or {"ok": false, "error": ...} when the reason is empty. Not available on read-only connections. |
| memory_healthcheckA | Self-test MemCore end to end (about 1 s): write, read, search (strict AND and OR-fallback modes), history and delete. Use it instead of assuming a connection is healthy just because it is
listed: a connection can look fine while search silently misbehaves.
The test only writes to a throwaway scope ( |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 13 tools
Each tool has a sharply distinct purpose (write/search/get/list/recent/scopes/stats/events/history/archive/restore/embed_status/healthcheck), and the read-heavy tools explicitly cross-reference each other with 'use X instead when...' guidance, eliminating overlap. An agent can determine the right tool without guessing.
Every tool uses a uniform snake_case memory_ prefix followed by a clear verb or noun (memory_write, memory_search, memory_archive, memory_restore, memory_healthcheck). No mixing of conventions or inconsistent verb styles.
13 tools is well-scoped for a persistent memory store covering full CRUD, search, auditing, and maintenance. Each tool earns its place with no redundant or filler operations.
The full lifecycle is covered: create/update (write), read (get, search, list, recent), soft-delete/restore (archive, restore), plus history, audit events, scope discovery, stats, embedding status, and healthcheck. No obvious gaps for a memory domain.