Skip to main content
Glama
eikarna
by eikarna

ChronoMem

Bi-temporal, graph-aware relational fact store for autonomous AI agents and Model Context Protocol (MCP) clients.

Built on embedded SQLite with Write-Ahead Logging (WAL), memory-mapped I/O (mmap), and 4-way Reciprocal Rank Fusion (RRF). Requires zero external daemons, zero Docker containers, and no background vector database processes.


1. System Architecture

ChronoMem addresses structural failure modes in stateful LLM memory architectures: temporal invalidation failure (ghost beliefs), context window inflation (token bloat), and unbounded memory daemon overhead.

                    ┌──────────────────────────────┐
                    │       User / Agent Query     │
                    └──────────────┬───────────────┘
                                   │
              ┌────────────────────┼────────────────────┐
              ▼                    ▼                    ▼
     ┌────────────────┐   ┌────────────────┐   ┌────────────────┐
     │  FTS5 BM25     │   │ Jaccard Token  │   │  Entity Graph  │
     │  Text Index    │   │ Overlap Rank   │   │  Adjacency     │
     └────────┬───────┘   └────────┬───────┘   └────────┬───────┘
              │                    │                    │
              └────────────────────┼────────────────────┘
                                   │
                                   ▼
                    ┌──────────────────────────────┐
                    │ 4-Way Reciprocal Rank Fusion │
                    │      + Temporal Filter       │
                    │  (valid_until IS NULL)       │
                    └──────────────┬───────────────┘
                                   │
                                   ▼
                    ┌──────────────────────────────┐
                    │ Strict Token-Budget Packing  │
                    │    (Prompt Context Window)   │
                    └──────────────────────────────┘

Core Primitives

  • Bi-Temporal Tuple Representation: Every assertion maintains two independent temporal coordinates:

    • system_time: Physical ingestion timestamp (immutable audit log).

    • valid_from / valid_until: Real-world validity boundaries. An updated belief atomically terminates the prior record's validity boundary (valid_until = now()) and records the successor pointer (superseded_by = new_fact_id).

  • Multi-Channel Fusion Scoring: Blends independent ranking signals using generalized Reciprocal Rank Fusion: $$RRF(d) = \sum_{c \in C} \frac{w_c}{k + \text{rank}_c(d)} \times (0.8 + 0.4 \cdot \text{trust}) \times \text{confidence}$$ where $k = 60$, with channels $C = {\text{BM25}, \text{Jaccard}, \text{EntityAlignment}}$.

  • Deterministic Token Budgeting: Avoids fixed $K$-item inflation. Context selection terminates when cumulative tokens meet the exact per-query limit.


Related MCP server: Cairn

2. Benchmark Matrix

All metrics below are generated deterministically using the included reproducibility suite (python scripts/benchmark_matrix.py).

Hardware Performance Matrix

Evaluated over 500 serial fact ingestions and 100 retrieval iterations with full text matching and rank fusion.

Hardware Tier

Target Profile

Ingest (500 facts)

Ingest / Fact

P50 Latency

P95 Latency

P99 Latency

Resident RAM

Low-End

1 vCPU, 512MB RAM, eMMC / HDD (mmap=0, 2MB cache)

430.35 ms

0.86 ms

1.69 ms

1.73 ms

1.86 ms

< 12 MB

Mid-Tier (Native)

AMD Ryzen 5 Pro / ThinkPad T14, NVMe PCIe 3.0 (256MB mmap)

393.55 ms

0.78 ms

1.71 ms

1.78 ms

2.47 ms

< 28 MB

High-End Server

AMD EPYC / Xeon, NVMe Gen4 (mmap=1GB, 64MB cache)

185.20 ms

0.37 ms

0.62 ms

0.89 ms

1.12 ms

< 45 MB

Environment & Virtualization Matrix

Comparison of storage access patterns across runtime boundaries.

Environment

Storage Layer

Sync Overhead / Batch Commit

Memory-Map Overhead

Contention Isolation

Bare-Metal Native

Direct NVMe NTFS / ext4

Baseline (0.00 ms added)

Direct kernel paging

Shared-process RLock registry

Virtual Machine (KVM / Hyper-V)

virtio-scsi raw disk

+ 0.12 ms per WAL flush

Near-native hypervisor MMU

Full VM isolation

Container (Docker / OCI)

overlayfs bind-mount

+ 0.35 ms per fsync barrier

Host VFS mapped

Mount namespace boundary

Grade-Based Semantic & Structural Evaluation Matrix

8 difficulty tiers evaluating retrieval precision, temporal reasoning, and contradiction resilience.

Level

Grade Tier

Objective / Test Case

Edge-Case Challenge

ChronoMem Result

Latency

Status

L0

None

Exact keyword lookup

Zero ambiguity literal search

1 / 1 recalled (100% precision)

0.42 ms

PASS

L1

Easy

Paraphrase & technical synonym

Vocabulary shift ("RAM" vs "memory")

Target fact ranked #1

0.20 ms

PASS

L2

Normal

Single temporal invalidation

Previous config replaced by new port

Ghost fact excluded (valid_until cutoff)

0.24 ms

PASS

L3

Medium

Multi-entity attribute association

Match attributes across target host only

Zero cross-host leakage

0.53 ms

PASS

L4

Intermediate

Cross-device software isolation

Disambiguate tools on different hardware

Zero cross-device pollution

0.45 ms

PASS

L5

Hard

Multi-step revision lineage ($A \to B \to C$)

Retrieve active state and full ancestry

Only $C$ returned; 3-step audit intact

0.24 ms

PASS

L6

Complex

Multi-constraint packing

Category filter + entity + 60-token cap

58 tokens packed; 0 category leaks

0.59 ms

PASS

L7

Undeterministic

Conflicting assertions + trust weight

Two active sources claiming differing IPs

High-trust assertion selected; conflict flagged

0.36 ms

PASS


3. Comparative Evaluation: Vector DB vs Flat Memory vs ChronoMem

Evaluation Vector

Flat-Text Memory

Dense Vector DB (pgvector/Chroma)

ChronoMem (SQLite Bi-Temporal)

Belief Invalidation

Manual find-and-replace

Fails (Old vectors remain in index)

Native (superseded_by, valid_until)

Ghost Recall Rate

High (String substring leaks)

High (Cosine similarity matches both)

0.00% (Excluded at index query)

Retrieval Latency

Linear scan (> 5 ms)

15 - 80 ms (ANN index calculation)

0.20 - 1.80 ms (FTS5 + B-Tree)

Context Window Control

Unbounded lines

Top-$K$ fixed items (unbounded tokens)

Strict token-budget packing

Operational Complexity

None (Files)

Requires PostgreSQL / Docker daemon

None (Embedded Single File)


4. Installation & Usage

Installation

Requires Python 3.10+.

# Via uv
uv add chronomem

# Or clone and install editable
git clone https://github.com/eikarna/chronomem.git
cd chronomem
uv pip install -e .

Python API

from chronomem import ChronoMem

with ChronoMem("agent_memory.db") as mem:
    # 1. Ingest fact
    f1 = mem.remember("ThinkPad T14 primary interface is Wi-Fi", category="net")

    # 2. Invalidate and supersede upon state change
    f2 = mem.supersede(f1, "ThinkPad T14 primary interface switched to Ethernet", category="net")

    # 3. Query active facts with token constraint
    facts = mem.recall("ThinkPad network interface", token_budget=150, active_only=True)
    for f in facts:
        print(f"[{f['trust_score']:.1f}] {f['content']}")

    # 4. Audit lineage
    history = mem.timeline("ThinkPad T14")
    assert len(history) == 2

5. Model Context Protocol (MCP) Setup

ChronoMem implements a stdio JSON-RPC 2.0 MCP server for integration with Cursor IDE, Claude Desktop, and Hermes Agent.

Cursor IDE Configuration (.cursor/mcp.json)

{
  "mcpServers": {
    "chronomem": {
      "command": "uv",
      "args": [
        "run",
        "--directory",
        "/path/to/chronomem",
        "python",
        "-m",
        "chronomem.server"
      ],
      "env": {
        "CHRONOMEM_DB": "~/.chronomem/memory.db"
      }
    }
  }
}

Available MCP Tools

  • chronomem_remember: Ingest assertion into bi-temporal storage with entity resolution.

  • chronomem_recall: Query facts via 4-way RRF capped by token budget.

  • chronomem_supersede: Atomically update an assertion, marking prior record expired.

  • chronomem_forget: Soft-delete assertion preserving audit lineage.

  • chronomem_timeline: Inspect belief evolution for an entity across time.

  • chronomem_contradictions: Identify unresolved semantic contradictions.


6. Reproducibility

To re-run the benchmark matrix locally:

uv run python scripts/benchmark_matrix.py
uv run --with pytest pytest tests/test_chronomem.py

7. License

MIT License. Copyright (c) 2026 Nix Seymour.

Available Tools

6 tools
chronomem_contradictionsC

Find active facts that potentially contradict each other.

ParametersJSON Schema
NameRequiredDescriptionDefault
categoryNoOptional category filter.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. 'Find' implies a read-only operation but this is never asserted, and there is no disclosure of what 'potentially contradict' means operationally, whether results are pairs or a list, cost, or whether it is expensive over large stores.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler, appropriate for a one-parameter tool. It is efficient but borders on under-specification rather than genuine conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no annotations and no output schema, the description is the only source of behavioral information, and it leaves the core concept of 'potentially contradict' undefined. For a detection tool whose value depends on how conflicts are judged, this is a significant gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single parameter is documented as an optional category filter, so the baseline is 3. The description adds no syntax, format, or scoping detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a concrete verb (find) and resource (active facts that potentially contradict each other), which is clearer than a tautology. However, it does nothing to distinguish itself from siblings like chronomem_recall, which also retrieves facts, so an agent has no explicit signal for choosing this over the plain retrieval tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this versus chronomem_recall or chronomem_timeline, and no exclusions. The word 'potentially' hints at a heuristic check rather than an exhaustive report, but that nuance is never stated as a usage rule.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

chronomem_forgetB

Expire/invalidate a fact so it is no longer retrieved, while preserving historical audit logs.

ParametersJSON Schema
NameRequiredDescriptionDefault
fact_idYesID of the fact to expire.

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and usefully discloses that the fact becomes unretrievable while audit logs are preserved. However, it omits other important traits for a mutation tool, such as reversibility, permission requirements, or behavior when the fact is already expired.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that states the purpose and the key behavioral effect without any filler. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter mutation tool with no annotations or output schema, the description covers the core purpose and audit-preservation behavior. It still lacks sibling differentiation and operational details like reversibility or permissions, which an agent would need in this memory-management context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 100% description coverage for the single 'fact_id' parameter, so the description does not need to explain it. The description adds no additional parameter-level meaning beyond what the schema already provides, making the baseline 3 appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb pair ('Expire/invalidate') and resource ('a fact'), and adds the retrieval effect. It does not differentiate from the sibling 'chronomem_supersede', which may also invalidate or replace facts.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit guidance on when to use this tool versus alternatives such as 'chronomem_supersede' or 'chronomem_contradictions'. The description implies a use case but leaves the agent to infer it from the purpose alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

chronomem_recallA

Retrieve relevant facts for a query using 4-Way Reciprocal Rank Fusion, strictly packed within a token budget.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesThe query or question to retrieve context for.
categoryNoOptional category filter.
active_onlyNoFilter out expired/superseded facts (default: true).
token_budgetNoMaximum tokens allowed for returned memory context (default: 500 tokens).

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It does disclose two behavioral traits beyond the schema: ranking via 4-Way Reciprocal Rank Fusion and strict packing within a token budget. However, it never states that the operation is read-only/non-mutating, nor what happens when no facts match, nor how results are ranked or truncated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence with the retrieval purpose front-loaded and no filler. Every clause (query relevance, fusion method, token budget) contributes to what the agent needs to know.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and no annotations, the description should say more about the return shape (e.g., a list of facts with scores, ordering) and the safety profile. It covers the input-side constraints well via the schema but leaves the response contract entirely unstated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all four parameters, including defaults for active_only and token_budget. The description only echoes the query and token-budget concepts and adds no format, syntax, or interaction detail beyond the schema, which is the baseline-3 case.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (retrieve) and resource (relevant facts for a query), which clearly separates it from write-side siblings like chronomem_remember, chronomem_supersede, and chronomem_forget. It stops short of distinguishing itself from the other read-side siblings (chronomem_timeline, chronomem_contradictions), so it is clear but not fully differentiated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: an agent can infer this is the tool for fetching context relevant to a query. There is no explicit when-to-use or when-not-to-use guidance, and with five siblings including two other retrieval-flavored tools (timeline, contradictions), the routing decision is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

chronomem_rememberB

Store a durable fact in bi-temporal memory. Supports automatic entity resolution and superseding previous beliefs.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNoOptional comma-separated tags.
contentYesThe exact declarative fact to remember (e.g. 'Laptop uses NetMod Syna on ThinkPad T14').
categoryNoCategory: 'user_pref', 'project', 'tool', or 'general'.general
supersedes_idNoOptional fact_id of a previous fact that this new fact replaces/invalidates.

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses automatic entity resolution and superseding of previous beliefs, which are important behavioral traits. However, it does not explain what 'superseding' means operationally (does it happen automatically without supersedes_id?), whether it requires permissions, or how it interacts with chronomem_supersede. The disclosure is useful but incomplete for a mutation operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the core action, no wasted words. Each sentence adds a distinct piece of information (what it does, key behaviors).

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description should ideally explain return behavior or side effects. It covers the main action and two behavioral traits but omits prerequisites, error cases, and how automatic superseding interacts with the supersedes_id parameter. For a tool with four parameters and no annotations, this is minimally adequate but leaves gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all parameters are fully documented in the schema, including content, tags, category, and supersedes_id. The description adds no parameter-specific meaning beyond what the schema provides (e.g., no guidance on when to use supersedes_id vs automatic superseding). Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Store) and resource (durable fact in bi-temporal memory), which is clear. However, it does not distinguish itself from siblings like chronomem_supersede, which also deals with fact replacement — the mention of 'superseding previous beliefs' overlaps with that sibling, creating some ambiguity about when to use which.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit when-to-use or when-not-to-use guidance. The description doesn't say when to prefer this over chronomem_supersede or how it relates to chronomem_recall. It implies storage but leaves alternative selection to inference, which is risky given multiple siblings handling memory operations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

chronomem_supersedeA

Replace an outdated fact with new accurate information, establishing an audit lineage.

ParametersJSON Schema
NameRequiredDescriptionDefault
categoryNoOptional category.general
new_contentYesNew updated fact content.
old_fact_idYesID of the outdated fact.

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It discloses that the tool establishes an audit lineage (a meaningful side effect beyond a simple update), but does not state whether the old fact remains retrievable, whether this is reversible, or what permissions are needed for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence that names the verb, the target, and the distinctive outcome (audit lineage). No waste, no repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no annotations and no output schema, the description should state what happens to the superseded fact and whether the operation is reversible. It hints at lineage but leaves key behavioral details unspecified, which is thin for a write operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so all three parameters are documented in the schema itself. The description adds no syntax or format detail beyond naming the operation, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (replace/supersede) and resource (an outdated fact) with a clear goal: establishing audit lineage. This distinguishes it from chronomem_remember (store new) and chronomem_forget (remove), though it doesn't explicitly name those siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implies usage when a fact is outdated and should be replaced rather than deleted, but offers no explicit when-to-use or when-not-to-use guidance versus chronomem_forget or chronomem_remember. An agent must infer that this is for corrections with lineage rather than plain deletion.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

chronomem_timelineB

Trace how beliefs and facts about a specific entity have changed over time.

ParametersJSON Schema
NameRequiredDescriptionDefault
entityYesName of the entity (e.g. 'ThinkPad', 'v2rayNG', 'NetMod').

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full behavioral burden but reveals almost nothing beyond a high-level purpose. It doesn't state whether this is read-only, what the output format looks like, whether it returns a timeline structure, how far back it traces, or any limits. For a query tool with no annotations and no output schema, this is a substantial gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, well-formed sentence that is front-loaded with the core action ('Trace how beliefs and facts... have changed over time'). No wasted words and the entity scope is implied cleanly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given a query tool with no annotations, no output schema, and a single fully-documented parameter, the description is too thin. It says nothing about return values (e.g., chronological ordered changes), read-only behavior, or how it relates to sibling tools like chronomem_recall and chronomem_contradictions. An agent would need to guess at the output shape and appropriate usage context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%: the single 'entity' parameter is fully documented with type, description, and examples in the schema. The description adds no additional parameter context (e.g., fuzzy matching, case sensitivity). Baseline 3 is appropriate when the schema fully handles parameter semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: tracing belief/fact changes over time for an entity. Clear and distinct from siblings like remember (write) and recall (retrieve). However, it doesn't explicitly differentiate itself from chronomem_contradictions, which also deals with belief changes, leaving ambiguity about temporal vs. conflict-focused views.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies a temporal, historical use case but gives no explicit when-to-use or when-not-to-use guidance. No mention of alternatives like chronomem_recall or chronomem_contradictions, so an agent must infer context from the tool name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 6 tool updatesv0.1.0
    • First observedchronomem_contradictions
    • First observedchronomem_forget
    • First observedchronomem_recall
    • First observedchronomem_remember
    • First observedchronomem_supersede
    • First observedchronomem_timeline

TDQS

A3.5/5.0

Scored across 6 tools

Disambiguation4/5

Most tools have clear distinct purposes, but remember can automatically supersede prior beliefs, creating some overlap with supersede. forget and supersede also both invalidate old facts, though their descriptions distinguish replacement from expiration.

Naming Consistency4/5

All tools use the chronomem_ prefix and snake_case, but the core names mix verbs (remember, recall, supersede, forget) with nouns (timeline, contradictions). This is a minor deviation from a purely predictable verb_noun pattern.

Tool Count5/5

Six tools is well-scoped for a bi-temporal memory server, covering core lifecycle operations without bloat. Each tool appears to earn its place.

Completeness5/5

The surface covers create, query, update/replace, expire, historical tracing, and contradiction detection. This is a complete lifecycle for the stated memory-management domain, with no obvious dead ends.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    A bi-temporal, provenance-carrying memory primitive for AI agents. Enables storing facts, recall, revision, and audit trails via MCP with SQLite storage.
    6
    Apache 2.0
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables agents to assert and recall typed facts with idempotent writes, freshness, and assurance verdicts. Provides MCP tools for persistent memory across sessions via SQLite-backed storage.
    194 npm
    1
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI harnesses to maintain a persistent memory layer backed by a local SQLite file, providing MCP tools to add, search, deprecate, and synchronize facts without deleting history.
    MIT
  • A
    license
    C
    quality
    A
    maintenance
    Local-first, governable long-term memory for AI agents. Provides SQLite-backed storage, cross-session recall, and traceable memory corrections through a standard MCP interface.
    40
    55 PyPI
    1
    MIT