# io.github.teflon07/memkeeper (oci · ghcr.io/teflon07/memkeeper:0.5.3)

Local-first memory for AI agents: on-device hybrid retrieval over a single SQLite file.

- Trust score: 38/100 (low)
- Change this week: −1
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

- oci · `ghcr.io/teflon07/memkeeper:0.5.3`: 38/100 (this document), [markdown](https://verifymcp.io/servers/teflon07-memkeeper/ghcr-io-teflon07-memkeeper-0-5-3.md), [page](https://verifymcp.io/servers/teflon07-memkeeper/ghcr-io-teflon07-memkeeper-0-5-3)

## Channel facts

- Registry: `oci`
- Package: `ghcr.io/teflon07/memkeeper:0.5.3`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-03.

- **Supply Chain Security**: 0/100
  - Malware scan not yet available for this package.
  - CVE data not yet available for this package.
  - Install-script risk not yet assessed.
  - Dependency-health data not yet available.
- **Provenance & Transparency**: 32/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - License check failed: no license is declared.
  - Actively maintained (last published 10 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 65/100
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 3791 tokens (~236/item across 16 items; 16 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 23/100
  - Stability observed for 7 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

**Unverified: 1 category.** A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.

## Install

### Claude

```bash
claude mcp add teflon07-memkeeper -- docker run --rm -i ghcr.io/teflon07/memkeeper:0.5.3
```

### Codex

```bash
codex mcp add teflon07-memkeeper -- docker run --rm -i ghcr.io/teflon07/memkeeper:0.5.3
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "teflon07-memkeeper": {
      "type": "local",
      "command": [
        "docker",
        "run",
        "--rm",
        "-i",
        "ghcr.io/teflon07/memkeeper:0.5.3"
      ],
      "enabled": true
    }
  }
}
```

### Hermes

```yaml
mcp_servers:
  teflon07-memkeeper:
    command: "docker"
    args: ["run", "--rm", "-i", "ghcr.io/teflon07/memkeeper:0.5.3"]
```

### Other

```json
{
  "mcpServers": {
    "teflon07-memkeeper": {
      "command": "docker",
      "args": [
        "run",
        "--rm",
        "-i",
        "ghcr.io/teflon07/memkeeper:0.5.3"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-03 (score 38, +1)

No change was recorded against any check on this day. Stability & Change Management went from 20 to 23. That category is still filling its 30-day observation window: 6 days of observed history at the previous scan, 7 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-08-02 (score 37, +3)

- [functional improvement] Stability: unverified → 0.20

### 2026-07-31 (score 34, −5)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-27 (score 39, +31)

- [functional improvement] Tool coverage: unverified → 100
- [functional] First check of Schema quality: fail
- [functional] First check of Tool coverage: 100
- [functional] First check of Schema quality: fail
- [functional] First check of Schema quality: excellent

### 2026-07-26 (score 8)

First indexed and scored.

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

## MCP tools (16)

### `stats` (~122 tokens)

Report store statistics: total/active memory counts, breakdowns by space, silo, status, and kind, schema version, and database size. Read-only; no side effects. Use to inspect the store's overall state and health, not to retrieve memories (use `search` or `pack` for that).

Input parameters:

- `include_health` (boolean): If true, add the governance/health rollup (counts of stale, expiring, and low-confidence memories). Default false.
- `include_indexes` (boolean): If true, add per-index row counts. Default false.

### `search` (~277 tokens)

Find individual memories ranked by relevance to a query. Semantic-primary when embedding models are loaded, falling back to deterministic BM25/FTS keyword search otherwise; cross-encoder reranked by default. Read-only. Returns scored, individual memory records (with ids) — use this to locate or inspect specific memories. To assemble a prompt-ready context block, use `pack` instead; to browse recent memories without a query, use `memory_list`.

Input parameters:

- `entity_key` (string): Restrict to memories linked to this entity key.
- `include_content` (boolean): If true, return each memory's full text instead of a snippet. Default false.
- `include_source` (boolean): If true, reveal provenance/source metadata. Default false.
- `limit` (integer): Maximum number of memories to return. Default 10.
- `query` (string, required): Natural-language search query. Required.
- `rerank` (boolean): Apply the cross-encoder reranker to the candidate pool. Default true.
- `semantic_enabled` (boolean): Force semantic retrieval on or off. Default: on when embedding models are available, else lexical.
- `space` (string): Restrict to a single memory space (namespace), or "*" for all spaces. Omit to search the default space.
- `tags` (array): Restrict to memories carrying these tags.

### `get` (~111 tokens)

Fetch one memory by its exact id (for example, an id returned by `search` or `memory_list`). Read-only. Use when you already have the id and want the full record; use `search` to find a memory by its content.

Input parameters:

- `include_history` (boolean): If true, include the memory's version/change history. Default false.
- `include_source` (boolean): If true, reveal provenance/source metadata. Default false.
- `memory_id` (string, required): The memory's id. Required.

### `memory_list` (~194 tokens)

List recent memories in reverse-chronological order for review or cleanup, optionally filtered. Read-only. Use to browse or audit what is stored (including stale or superseded entries); use `search` or `pack` for relevance-ranked retrieval against a query.

Input parameters:

- `entity_key` (string): Restrict to memories linked to this entity key.
- `include_content` (boolean): If true, return each memory's full text instead of a snippet. Default false.
- `include_source` (boolean): If true, reveal provenance/source metadata. Default false.
- `limit` (integer): Maximum number of memories to return. Default 20.
- `space` (string): Restrict to a single memory space (namespace), or "*" for all spaces. Omit for the default space.
- `status` (string): Filter by lifecycle status (e.g. active, superseded, tombstoned). Omit for active memories.

### `entity_search` (~164 tokens)

Search the entity graph by key, canonical name, alias, or type (substring match). Read-only. Returns entity records, not memories — use it to resolve an entity_key or canonical name from a partial term. For memory content use `search`; to traverse outward from a known entity use `graph_neighbors` or `graph_context`.

Input parameters:

- `entity_key` (string): Filter to an exact entity key.
- `entity_type` (string): Filter by entity type (e.g. person, project, concept).
- `include_source` (boolean): If true, reveal provenance/source metadata. Default false.
- `limit` (integer): Maximum number of entities to return. Default 10.
- `query` (string): Substring matched against entity key, canonical name, and aliases.

### `graph_neighbors` (~169 tokens)

Traverse the entity graph outward from a starting entity, returning connected entities and the relationships between them up to a bounded depth. Read-only. Use to explore how an entity connects to others (raw graph structure); use `graph_context` if you want a prose, prompt-ready context pack instead of edges.

Input parameters:

- `depth` (integer): Number of relationship hops to follow. Default 1.
- `entity_key` (string, required): Entity key to start the traversal from. Required.
- `include_source` (boolean): If true, reveal provenance/source metadata. Default false.
- `include_tombstoned` (boolean): If true, include tombstoned (soft-deleted) entities/edges. Default false.
- `max_edges` (integer): Maximum relationships to return (bounds the traversal). Default 50.

### `graph_context` (~185 tokens)

Build a compact, prompt-ready context pack centered on an entity: the entity, its graph neighbors, and the most relevant linked memories, budgeted to a character limit. Read-only. Use when an agent needs ready-to-inject context about one specific entity; use `pack` for query-driven context, or `graph_neighbors` for raw graph edges.

Input parameters:

- `depth` (integer): Number of relationship hops to include. Default 1.
- `entity_key` (string, required): Entity key the context pack is centered on. Required.
- `include_source` (boolean): If true, reveal provenance/source metadata. Default false.
- `max_chars` (integer): Character budget for the assembled pack. Default 4000.
- `max_edges` (integer): Maximum relationships to include. Default 50.
- `max_memories` (integer): Maximum linked memories to include. Default 10.

### `dream_graph` (~105 tokens)

Preview the graph-maintenance pass in dry-run (proposal-only) mode: surfaces the entity and relationship extractions and merges the nightly `dream` job would make, without writing anything. Read-only; no side effects. Use to inspect what graph changes are pending before they are applied.

Input parameters:

- `max_memories` (integer): How many recent memories to analyze for proposals. Default 1000.
- `space` (string): Restrict the analysis to a single memory space (namespace).

### `remember` (~633 tokens)

Write one durable memory the agent should be able to recall later. Mutating: persists one atomic, self-contained fact, decision, preference, or lesson. When the fact names entities or states a typed relationship, include graph entities, aliases, and relationships in the same call; the memory and graph projection commit atomically and that one memory is the relationship evidence. Do not store secrets or raw transcripts. For a plausible-but-unverified inference, use `candidate_submit`.

Input parameters:

- `claim_key` (string): Stable key identifying the claim, used to group versions for supersession.
- `confidence` (number): Confidence in the memory, 0.0–1.0. Default 1.0.
- `content` (string, required): The memory text: one atomic, self-contained claim with enough context to stand on its own. Required.
- `contradicts` (array): Memory ids this memory conflicts with.
- `derive_keys` (boolean): Auto-derive entity_key/claim_key from the content when not provided. Default true.
- `dry_run` (boolean): If true, validate and return what would be written without persisting. Default false.
- `entity_key` (string): Stable key of the entity this memory is about (groups related memories in the graph).
- `expires_at` (string): RFC 3339 timestamp after which the memory is dropped from recall.
- `graph` (object): Machine-extracted graph projection supported by this same memory.
- `kind` (string): Memory kind (fact, decision, preference, lesson, action, ...). Inferred from the content prefix when omitted.
- `mode` (string): How to resolve against existing memories sharing the same entity/claim key. Default auto.
- `observed_at` (string): RFC 3339 timestamp of when this was observed. Defaults to now.
- `pinned` (boolean): If true, exempt from automatic eviction. Default false.
- `project` (string): Free-form project key this memory belongs to.
- `scope` (string): Visibility scope: global, workspace, project, session, or custom.
- `sensitivity` (string): Mark sensitive to flag the memory for stricter handling. Default normal.
- `silo` (string): Retention tier (e.g. short-term, durable). Omit to use the space default.
- `source_type` (string): Provenance: assistant-inference (default) when the agent inferred it, or explicit-user when the user stated it directly.
- `space` (string): Memory space (namespace) to write into. Omit for the default space.
- `summary` (string): Optional shorter summary of the content.
- `supersedes` (array): Memory ids this memory replaces (they become superseded).
- `tags` (array): Free-form tags for filtering and retrieval boosts.
- `valid_from` (string): RFC 3339 timestamp the fact starts being true.
- `valid_to` (string): RFC 3339 timestamp the fact stops being true (past values are excluded from recall).
- `verified_against` (string): What this memory was checked against, if any.

### `forget` (~250 tokens)

Retire one specific memory by id. Mutating: tombstones the memory (a soft delete that preserves audit history), so it stops surfacing in recall; it is not a hard delete. Set mode='correct' when retiring a memory because it is WRONG (e.g. a surfaced/recalled fact the user contradicted), as opposed to routine cleanup: this records a distinct `correct` event with the memory's provenance, and if you pass corrected_by (the id of the memory holding the right answer) it also records a `contradicts` link. Use mode='correct' for factual corrections so the signal is captured explicitly rather than inferred later.

Input parameters:

- `corrected_by` (string): With mode='correct', the id of the memory holding the right answer (records a contradicts link).
- `dry_run` (boolean): If true, validate without retiring. Default false.
- `memory_id` (string, required): Id of the memory to retire. Required.
- `mode` (string): tombstone (default) for routine cleanup; correct when the memory was factually wrong (records a correction signal).
- `reason` (string): Why the memory is being retired (recorded in the audit trail).

### `entity_upsert` (~255 tokens)

Create or update one entity in the graph projection (register it, rename it, or add aliases). Mutating. The graph is a rebuildable projection over memories, which remain the source of truth — use this to curate entity identity, not to store facts (use `remember` for facts).

Input parameters:

- `aliases` (array): Alternate names/surface forms that should resolve to this entity.
- `canonical_name` (string, required): Primary display name for the entity. Required.
- `confidence` (number): Confidence in the entity, 0.0–1.0.
- `entity_key` (string, required): Stable, unique key identifying the entity. Required.
- `entity_type` (string): Type of entity (e.g. person, project, concept, tool).
- `include_source` (boolean): If true, reveal provenance/source metadata in the response. Default false.
- `metadata` (object): Arbitrary key/value attributes to attach to the entity.
- `source_episode_id` (string): Id of the source episode this entity was derived from, if any.
- `space` (string): Memory space (namespace) the entity belongs to.
- `status` (string): Lifecycle status (e.g. active, tombstoned).

### `relationship_upsert` (~368 tokens)

Create or update one directed relationship in the graph: subject --relation_type--> object. Mutating. Identify each endpoint by entity_key (preferred) or internal entity_id. The graph is a rebuildable projection over memories — curate structure here, store facts with `remember`.

Input parameters:

- `confidence` (number): Confidence in the relationship, 0.0–1.0.
- `include_source` (boolean): If true, reveal provenance/source metadata in the response. Default false.
- `memory_id` (string): Id of the memory this relationship was derived from, if any.
- `metadata` (object): Arbitrary key/value attributes to attach to the relationship.
- `object_entity_id` (string): Internal id of the object endpoint (alternative to object_entity_key).
- `object_entity_key` (string): Entity key of the object (target) endpoint. Preferred over object_entity_id.
- `observed_at` (string): RFC 3339 timestamp of when this was observed.
- `relation_type` (string, required): The relationship type/predicate (e.g. depends_on, works_with, part_of). Required.
- `source_episode_id` (string): Id of the source episode this relationship was derived from, if any.
- `space` (string): Memory space (namespace) the relationship belongs to.
- `status` (string): Lifecycle status (e.g. active, tombstoned).
- `subject_entity_id` (string): Internal id of the subject endpoint (alternative to subject_entity_key).
- `subject_entity_key` (string): Entity key of the subject (source) endpoint. Preferred over subject_entity_id.
- `valid_from` (string): RFC 3339 timestamp the relationship starts being valid.
- `valid_to` (string): RFC 3339 timestamp the relationship stops being valid.

### `verify` (~115 tokens)

Re-confirm that an existing memory is still accurate as of now, stamping its last-verified time. Mutating: updates verification metadata only — it does NOT change the memory's content or promote it to a durable tier. If the value has CHANGED, do not verify; write a new memory with `remember` and supersede the old one instead.

Input parameters:

- `memory_id` (string, required): Id of the memory being re-confirmed. Required.
- `verified_against` (string): The source or ground truth the memory was checked against.

### `pack` (~216 tokens)

Assemble a compact, prompt-ready context block from one or more queries: retrieves, reranks, and budgets the top memories into injectable text. Read-only. This is the retrieval path for putting memory into an agent's prompt; use `search` instead when you want individual scored records rather than an assembled block.

Input parameters:

- `max_chars` (integer): Character budget for the assembled pack. Default 6000.
- `max_memories` (integer): Maximum memories to include in the pack. Default 10.
- `min_score` (number): Return an empty pack when the top final score is below this threshold. Default 0.
- `queries` (array, required): One or more natural-language queries to retrieve and merge into the pack. Required.
- `space` (string): Restrict retrieval to a single memory space (namespace), or "*" for all spaces. Omit for the default space.
- `tags` (array): Restrict retrieval to memories carrying these tags.
- `title` (string): Heading for the assembled pack. Default "context".

### `candidate_submit` (~347 tokens)

Queue a proposed memory for human review instead of writing it to recall directly. Mutating: adds an item to the review queue (it does not enter recall until a human approves it via CLI/dashboard). Use this for plausible-but-unverified inferences; use `remember` when the fact is confirmed and should be recallable immediately.

Input parameters:

- `claim_key` (string): Stable key identifying the claim.
- `confidence` (number): Confidence in the proposed memory, 0.0–1.0.
- `content` (string, required): The proposed memory text: one atomic, self-contained claim. Required.
- `dry_run` (boolean): If true, validate without enqueuing. Default false.
- `entity_key` (string): Stable key of the entity this memory is about.
- `kind` (string): Memory kind (fact, decision, preference, lesson, ...).
- `project` (string): Free-form project key.
- `rationale` (string): Why you are proposing this (evidence/reasoning) to help the human reviewer decide.
- `scope` (string): Visibility scope: global, workspace, project, session, or custom.
- `sensitivity` (string): normal (default) or sensitive.
- `silo` (string): Retention tier the candidate targets (e.g. short-term, durable).
- `source_type` (string): Provenance: assistant-inference (default) or explicit-user.
- `space` (string): Memory space (namespace) the candidate targets.
- `summary` (string): Optional shorter summary of the content.
- `supersedes` (array): Memory ids this candidate would replace if approved.
- `tags` (array): Free-form tags.

### `candidate_list` (~98 tokens)

List memories in the human-review queue, filtered by review status. Read-only. Use to see what has been proposed via `candidate_submit` and its disposition; approving or rejecting candidates is a human action in the CLI/dashboard.

Input parameters:

- `limit` (integer): Maximum candidates to return. Default 50.
- `space` (string): Restrict to a single memory space (namespace).
- `status` (string): Which queue to list. Default pending.

## Diagnostics

Captured diagnostic sections: Provenance. The full working is on the page: https://verifymcp.io/servers/teflon07-memkeeper/ghcr-io-teflon07-memkeeper-0-5-3#diagnostics

## Score history

- 2026-08-03: 38
- 2026-08-02: 37
- 2026-08-01: 34
- 2026-07-31: 34
- 2026-07-30: 39
- 2026-07-29: 39
- 2026-07-28: 39
- 2026-07-27: 39
- 2026-07-26: 8

## Links

- Repository: https://github.com/teflon07/memkeeper
- Changelog RSS feed: https://verifymcp.io/servers/teflon07-memkeeper/ghcr-io-teflon07-memkeeper-0-5-3/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/teflon07-memkeeper/ghcr-io-teflon07-memkeeper-0-5-3/changelog.json
- HTML version of this page: https://verifymcp.io/servers/teflon07-memkeeper/ghcr-io-teflon07-memkeeper-0-5-3
