Deterministic memory layer for AI agents. Versioned records across Claude, ChatGPT, Cursor. Local-first, immutable state

A deterministic state layer for AI agents that provides versioned memory for contacts, tasks, decisions, and other structured records across Claude, Cursor, ChatGPT, and other AI tools.

16599 views2Local (stdio)

About neotoma

neotoma is a community-built MCP server published by markmhendrickson that provides AI assistants with tools and capabilities via the Model Context Protocol. Deterministic memory layer for AI agents. Versioned records across Claude, ChatGPT, Cursor. Local-first, immutable state It is categorized under ai ml. This server exposes 4 tools that AI clients can invoke during conversations and coding sessions.

How to install

You can install neotoma in your AI client of choice. Use the install panel on this page to get one-click setup for Cursor, Claude Desktop, VS Code, and other MCP-compatible clients. This server runs locally on your machine via the stdio transport.

License

neotoma is released under the MIT license. This is a permissive open-source license, meaning you can freely use, modify, and distribute the software.

Tools (4)

store

Store structured entities like contacts, tasks, transactions with versioned history

retrieve_entities

Retrieve entities by type, with filtering and pagination options

retrieve_entity_by_identifier

Get a specific entity by its unique identifier

upload

Upload and process files to extract structured data into entities

Neotoma

Your agents forget. Neotoma makes them remember.

Versioned records — contacts, tasks, decisions, finances — that persist across Claude, Cursor, ChatGPT, OpenClaw, and every agent you run. Open-source. Local-first. Deterministic. MIT licensed.

neotoma.io · Evaluate · Install · Documentation

Why this exists

You run AI agents across tools and sessions. Without a state layer, you become the human sync layer:

  • Every session starts from zero — nothing your agent learns carries over
  • Facts conflict across tools — two agents store different versions of the same person
  • Decisions execute without a reproducible trail — you can't trace why your agent acted
  • Corrections don't stick — you fix something in Claude and it's wrong again in Cursor

These are not hypothetical. They happen every day in production agent systems. You compensate by re-prompting context, patching state gaps, and maintaining manual workarounds. Neotoma removes that tax.

What Neotoma does

Neotoma is a deterministic state layer for AI agents. It stores structured records — contacts, tasks, transactions, decisions, events, contracts — with versioned history and full provenance. Every change creates a new version. Nothing is overwritten. Every state can be replayed from the observation log.

Not retrieval memory (RAG, vector search, semantic lookup). Neotoma enforces deterministic state evolution: same observations always produce the same entity state, regardless of when or in what order they are processed.

Architecture

graph LR
  Sources["Sources (files, messages, APIs)"] --> Obs[Observations]
  Obs --> Entities[Entity Resolution]
  Entities --> Snapshots["Entity Snapshots (versioned)"]
  Snapshots --> Graph[Memory Graph]
  Graph <--> MCP[MCP Protocol]
  MCP --> Claude
  MCP --> ChatGPT
  MCP --> Cursor
  MCP --> OpenClaw
  • Deterministic. Same observations always produce the same versioned entity snapshots. No ordering sensitivity.
  • Immutable. Append-only observations. Corrections add new data, never erase.
  • Replayable. Inspect any entity at any point in time. Diff versions. Reconstruct history from the observation log.
  • Structure-first. Schema-first extraction with deterministic retrieval. Optional similarity search when embeddings are configured.

Three foundations

FoundationWhat it means
Privacy-firstYour data stays local. Never used for training. User-controlled storage, optional encryption at rest. Full export and deletion control.
DeterministicSame input always produces same output. Schema-first extraction, hash-based entity IDs, full provenance. No silent mutation.
Cross-platformOne memory graph across Claude, ChatGPT, Cursor, OpenClaw, Codex, and CLI. MCP-based access. No platform lock-in. Works alongside native memory.

State guarantees

Most AI memory systems optimize storage or retrieval. Neotoma enforces state integrity. Full comparison with explanations →

PropertyPlatformRetrieval / RAGFilesDatabaseNeotoma
Deterministic state evolution
Versioned history⚠ manual
Replayable timeline
Auditable change log⚠ partial
Schema constraints⚠ partial
Silent mutation risk⚠ common⚠ common⚠ common⚠ commonprevented
Conflicting facts risk⚠ common⚠ common⚠ possible⚠ commonprevented
Reproducible state reconstruction
Human inspectability (diffs/lineage)⚠ partial⚠ partial⚠ partial⚠ partial
Zero-setup onboarding
Semantic similarity search
Direct human editability

Platform: Claude, ChatGPT, Gemini, Copilot. Retrieval: Mem0, Zep, LangChain Memory. Files: Markdown files, JSON stores, CRDT docs. Database: SQLite, Postgres, MySQL. Neotoma: Deterministic state layer (reference implementation).

Quick start

Evaluate first (recommended)

Ask your AI agent whether Neotoma fits your workflow. Paste this into Claude, Cursor, ChatGPT, or any MCP-capable tool:

Read https://neotoma.io/evaluate. Before you answer, inspect any broader tool, workspace, and configuration context you can access so you assess my real workflow rather than just this chat. Then tell me whether Neotoma is a real fit for my workflow, what data would be highest value to persist first, and what I should do next.

The agent reads the evaluation page, checks your context, and gives you an honest assessment. If it's a fit, the agent carries you through install and activation.

Agent-driven install

Agents install Neotoma themselves. Paste this prompt into Claude, Cursor, ChatGPT, or Codex:

Read https://neotoma.io/install and carry me through the install-first Neotoma flow. Install, activate it with my data, and configure my current tool for robust ongoing use.

The agent handles npm install, initialization, and MCP configuration. Manual install:

npm install -g neotoma
neotoma init
neotoma mcp config

More options: Docker | CLI reference | Getting started

Example

neotoma store --json='[{"entity_type":"task","title":"Submit expense report","status":"open"}]'
neotoma entities list --type task
neotoma upload ./invoice.pdf

Results reflect versioned entity state with full provenance. Agents perform the same operations through MCP tool calls (store, retrieve_entities, retrieve_entity_by_identifier).

Interfaces

Three interfaces. One state invariant. Every interface provides the same deterministic behavior regardless of how you access the state layer.

InterfaceDescription
REST APIFull HTTP interface for application integration. Entities, relationships, observations, schema, timeline, and version history.
MCP ServerModel Context Protocol for Claude, ChatGPT, Cursor, OpenClaw, Codex, and more. Agents store and retrieve state through structured tool calls.
CLICommand-line for scripting and direct access. Inspect entities, replay timelines, and manage state from the terminal.

All three map to the same OpenAPI-backed operations. MCP tool calls log the equivalent CLI invocation.

Who this is for

People building a personal operating system with AI agents across their life — wiring together tools like Claude, Cursor, ChatGPT, OpenClaw, and custom scripts to manage contacts, tasks, finances, code, content, and other domains. The same person operates their agents, builds new pipelines, and debugs state drift. These are three operational modes, not separate personas:

ModeWhat you're doingThe tax you pay without NeotomaWhat you get back
OperatingRunning AI tools across sessions and contextsRe-prompting, context re-establishment, manual cross-tool syncAttention, continuity, trust in your tools
BuildingShipping agents and pipelinesPrompt workarounds, dedup hacks, memory regression fixesProduct velocity, shipping confidence
DebuggingTracing state drift and reproducing failuresWriting glue (checkpoint logic, custom diffing, state serialization)Debugging speed, platform design time

Not for: Casual note-taking. PKM/Obsidian-style users. Thought-partner usage where the human drives every turn. Platform builders who build state management as their core product. Users who need zero-install onboarding (Neotoma requires npm and CLI today).

Record types

Neotoma stores typed entities with versioned history and provenance. Each type has a dedicated guide on neotoma.io:

TypeWhat it storesExamples
ContactsPeople, companies, roles, relationshipscontact, company, account
TasksObligations, deadlines, habits, goalstask, habit, goal
TransactionsPayments, receipts, invoices, ledger entriestransaction, invoice, receipt
**[Contracts](https://neotoma.io/types

README truncated. View full README on GitHub.

Alternatives