chronomem
Enables Hermes Agent to use ChronoMem for fact ingestion, token-budgeted recall, contradiction detection, and audit lineage.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@chronomemRemember that John prefers dark mode and flag any future contradictions"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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 ( | 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 | 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 ( | 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 ( | 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 ( |
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) == 25. 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.py7. License
MIT License. Copyright (c) 2026 Nix Seymour.
Available Tools
6 toolschronomem_contradictionsC
Find active facts that potentially contradict each other.
| Name | Required | Description | Default |
|---|---|---|---|
| category | No | Optional category filter. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| fact_id | Yes | ID of the fact to expire. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | The query or question to retrieve context for. | |
| category | No | Optional category filter. | |
| active_only | No | Filter out expired/superseded facts (default: true). | |
| token_budget | No | Maximum tokens allowed for returned memory context (default: 500 tokens). |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Optional comma-separated tags. | |
| content | Yes | The exact declarative fact to remember (e.g. 'Laptop uses NetMod Syna on ThinkPad T14'). | |
| category | No | Category: 'user_pref', 'project', 'tool', or 'general'. | general |
| supersedes_id | No | Optional fact_id of a previous fact that this new fact replaces/invalidates. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| category | No | Optional category. | general |
| new_content | Yes | New updated fact content. | |
| old_fact_id | Yes | ID of the outdated fact. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| entity | Yes | Name of the entity (e.g. 'ThinkPad', 'v2rayNG', 'NetMod'). |
TDQS
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.
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.
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.
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.
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.
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.
6 tool updates
v0.1.0- First observed
chronomem_contradictions - First observed
chronomem_forget - First observed
chronomem_recall - First observed
chronomem_remember - First observed
chronomem_supersede - First observed
chronomem_timeline
TDQS
Scored across 6 tools
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.
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.
Six tools is well-scoped for a bi-temporal memory server, covering core lifecycle operations without bloat. Each tool appears to earn its place.
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
Related MCP Connectors
- KogniteOAuthdev.kognite
Hosted agent memory: store, search, and recall facts across sessions from any MCP client.
- memnodeOAuthdev.memnode
Persistent, inspectable memory for AI agents with lineage, correction, and a hosted MCP endpoint.
Memory for AI agents that knows what is still true. Typed bi-temporal facts, EU-hosted.
Persistent memory for AI agents — log and recall conversation context over MCP.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceA bi-temporal, provenance-carrying memory primitive for AI agents. Enables storing facts, recall, revision, and audit trails via MCP with SQLite storage.6Apache 2.0
- AlicenseNot gradedqualityAmaintenanceEnables 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 npm1MIT
- AlicenseNot gradedqualityCmaintenanceEnables 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
- AlicenseCqualityAmaintenanceLocal-first, governable long-term memory for AI agents. Provides SQLite-backed storage, cross-session recall, and traceable memory corrections through a standard MCP interface.4055 PyPI1MIT