Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
MNEMENTO_DBYesPath to the Mnemento SQLite database file (e.g. "$HOME/.mnemento/mnemento.db"), passed via the env block of the MCP server configuration.
MNEMENTO_LLMNoLLM adapter used for natural-language interpretation. Natural-language interpretation uses the Claude Code CLI you are already logged into (MNEMENTO_LLM=claude-cli by default). With MNEMENTO_LLM=none only the fast path and structured QuerySpecs are answered.claude-cli
MNEMENTO_MODELNoSet MNEMENTO_MODEL to change the model used for natural-language interpretation (default model is haiku).haiku

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": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
queryC

Answer a question from the record book with evidence.

    question: natural-language question (e.g. "10/2 사람인 지원 몇 곳?").
    spec: optional structured QuerySpec; when given, no LLM is used.
    narrate: also write a prose answer with the LLM (it only sees aggregates).
    by: your agent name (optional; kept in the local query log).
    
query_logA

Look back at earlier questions: interpretation, QuerySpec, SQL and parameters, result count, evidence ids, warnings, stage times, tokens and cost.

    view: recent (last n) | warnings (answers that carried warnings) | errors |
          diverging (the same question pattern answered with different SQL — the interpretation moved) |
          path (only questions answered by `path`: fast | cache | llm | structured | entity | none) |
          empty (answers that found nothing — check whether the reading was wrong; with `path`, e.g.
          cache, only those).
    since: only entries asked at or after this time (ISO 8601).
    
purge_query_logA

Delete query log entries asked before before (ISO 8601), or all of them when omitted. Only when the user asks for it. Recorded facts are not touched.

recordA

Record a fact. Either structured or free text.

    Structured: entity_type + kind (created | updated | status_changed | corrected | retracted)
    + payload, and the target by entity_id or match (field values, e.g. {"platform": "saramin",
    "posting_id": "10000001"}). Reference fields may hold a name (e.g. a company name).
    Free text: text="사람인 10000001 가상테크 열람" — the Keeper structures it.
    at: when it happened (ISO 8601 with offset); defaults to now. at_precision: time | date (only the
    day is known) | unknown. by: your agent name.
    evidence: why you believe it (quote, mail subject...).
    Fields or values the dictionary does not know are stored as given (drafts, queryable at once); the
    reply lists them under `drafts` and may ask under `questions` whether a new name means an existing one.
    New kind of record (entity_type not in list_schemas, kind created): it is stored at once under a new draft
    type. Send schema_draft with it — the schema you suggest: {"description", "keywords", "fields": {name:
    {"type", "description", "enum", "labels", "required", "indexed", "format"}}}; you know best what each field
    means now. The reply carries a proposal under `proposals`: ask the user, and on their yes call
    apply_schema_proposal. If the name looks like an existing type you are asked first (new_type=true confirms).
    Returns status:
      recorded — stored (check `drafts` and `questions`);
      clarify  — nothing stored: the target is ambiguous (several matches), a referenced name (e.g. a
                 company) is unknown or only similar, the record looks like a duplicate, or it contradicts
                 the current state; ask the user and call again;
      rejected — nothing stored: a registered field is violated (required field missing, wrong type, bad
                 date) or the target was looked up by an unregistered field;
      error    — free text could not be structured (no LLM configured or the call failed).
    
record_seriesA

Record measurements over time for a series type (list_schemas shows kind "series", its key fields, time field and measures), e.g. [{"person": "A", "measured_on": "2026-07-01", "kg": 70.2}].

    One call = one batch, all or nothing: if any point is invalid nothing is stored and `rejected` says why.
    A point whose key and time are already stored is updated (the batch keeps the previous values).
    source: where the values come from (file, app, "user said"). by: your agent name.
    Returns batch_id and counts (inserted / updated / unchanged); revert_series_batch(batch_id) undoes it.
    
revert_series_batchA

Undo a whole series batch: its new points are removed, updated points get their previous values. Refused when a later batch changed the same points (revert that one first). Only when the user asks.

ingest_previewA

Turn notes that mix facts with rules and prose (e.g. a memory folder) into records — PREVIEW ONLY, nothing is written. Give text, or path (a file, or a folder of .md/.txt files; exclude skips file names). The preview lists, per chunk, whether it holds data; the records found (each value checked against a quote from the text — values without evidence are dropped and listed); facts repeated in several places merged; conflicting repeats; facts already recorded; new record types with a suggested schema; and the chunks kept only as notes. Show the user summary, the ambiguous list and the conflicts, then ingest_apply with their answer. Costs LLM calls (about one per 15 chunks per stage).

ingest_applyB

Write exactly one preview as one ingest batch — ONLY after the user agreed to that preview. New entity types become draft types (approve them later with apply_schema_proposal). Returns batch_id.

ingest_revertA

Undo one ingest batch: its records are retracted (history kept) and its series points reverted. Only when the user asks.

get_entityC

Current state of one record (after corrections/retractions).

historyB

Every event of one record, including corrections and retractions, in recording order.

list_schemasB

Record types with their fields, descriptions and allowed values, plus drafts (unregistered fields and values already in use) and the history of organize approvals.

apply_schema_proposalA

Organize unregistered (draft) fields and values, register a new record type (proposal id type_...), or take the repository's dictionary improvements into an organized type (dict_...) — ONLY with the user's explicit consent.

    Never call this on your own initiative. First show the user the proposal from propose_schema (its
    `question`), ask whether to apply it, and call this only after they answer yes. Pass who approved
    (approved_by) and the user's own words (user_answer); both are kept in the schema history.
    descriptions: {field: description} for every field being registered (required).
    labels: {field: {value: [natural-language names]}} for every new enum value (required, e.g.
    {"platform": {"remember": ["리멤버"]}}).
    merges: {draft_field: target_field} to fold look-alike names together (values move with history kept).
    index: fields to index. type_description: a new type's description, if its proposal has none.
    items (dict_... only): the item keys the user picked; default: the proposal's additive items. Items left out
    are not offered again for the same file.
    The data itself was already stored when it was written; this only organizes it.
    
propose_schemaA

Schema proposals (never applied automatically).

    Without samples: how to organize drafts — fields and enum values that records already use but the
    dictionary has not registered (they are stored and queryable; organizing adds descriptions, labels,
    indexes, and merges look-alike names). Ask the user before apply_schema_proposal.
    With samples and a new entity_type: a first schema draft for a new kind of record.
    

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

A3.7/5.0

Scored across 14 tools

Disambiguation5/5

Each tool has a clearly distinct role: recording facts vs. series, querying vs. reading query logs, preview/apply/revert for ingest, and proposal vs. application for schemas. Overlaps are explicitly resolved in descriptions, so an agent can reliably select the intended tool.

Naming Consistency4/5

Almost all names use predictable snake_case with verb_noun or verb_noun_noun patterns (record_series, ingest_apply, apply_schema_proposal). A few single-word tools like query, record, and history deviate slightly but remain clear and consistent in style.

Tool Count5/5

14 tools are well within the sweet spot for a domain that spans recording, querying, ingestion, history, and schema management. Each tool earns its place with a specific operation, and there is no redundant surface area.

Completeness4/5

The surface covers record lifecycle through explicit kinds (created, updated, corrected, retracted), series batches with revert, ingest lifecycle, querying, history, and schema proposals. Minor gaps exist, such as no dedicated list-entities operation, but query and get_entity provide workarounds.

Maintenance

ActivityMaintained
ResponsivenessResponsive