Open Source · Apache 2.0

Your AI agents forget everything.MemTap fixes that.

Graph-based long-term memory that makes your agents actually intelligent. Remember facts, track decisions, discover connections — across sessions, forever.

memtap — agent memory
// Agent stores a memory
POST /memories
{"type": "decision", "content": "Chose PostgreSQL for billing — ACID compliance"}
→ Stored [a1b2c3] | Entities: PostgreSQL, billing | Edges: 2 created
 
// Weeks later, new session...
GET /recall?q=billing+database
→ [decision] Chose PostgreSQL for billing (importance: 8/10)
→ [fact] Billing service needs ACID transactions (via graph, 1-hop)
→ [goal] Complete billing migration by March 30 (via graph, 2-hop)
→ 3 results | 1 direct + 2 via graph traversal | 4ms

Works with every agent framework

OpenClaw LangChain CrewAI AutoGen Semantic Kernel Custom REST API

Every AI agent has amnesia

You spend 20 minutes explaining your project to an AI agent. Tomorrow, it has no idea who you are. This isn't a minor inconvenience — it's the single biggest bottleneck in agent intelligence.

Users repeat themselves. Every. Session.

"I already told you I prefer TypeScript." Sound familiar? Without persistent memory, every conversation starts from zero. Users get frustrated. Agents look dumb.

Context vanishes between sessions

Your agent made a critical decision on Tuesday. By Wednesday, it's gone. Project details, architecture choices, people's names — evaporated. The agent can't learn if it can't remember.

No learning from past decisions

"Why did we choose PostgreSQL over MongoDB?" A human would know. Your agent draws a blank. Without decision history, agents repeat mistakes and ignore lessons learned.

"Giving an AI agent a vector database for memory is like giving a human a filing cabinet full of sticky notes — technically storage, but not really memory."

MemTap is different

Other tools remember text. MemTap remembers relationships.

Not just a vector store — it's a knowledge graph

Vector databases find similar text. That's useful, but it's not memory. Real memory understands that "chose PostgreSQL" is connected to "billing project", which has a "deadline of March 30", which was "decided by Alex".

MemTap stores memories as typed nodes connected by typed edges in a knowledge graph powered by ArangoDB. When your agent recalls something, it doesn't just get the top-N similar results — it traverses the graph to discover context that keyword search would never find.

8 memory types. 7 edge types. Automatic entity extraction. Zero manual wiring.

[Decision] Chose PostgreSQL for billing
  —CAUSED_BY→ [Fact] Need ACID for financial data
  —PART_OF→   [Goal] Billing system migration
  —MENTIONS→  [Entity] PostgreSQL
  —MENTIONS→  [Entity] billing-service
  —CONTRADICTS→ [Fact] MongoDB was initial plan
  —DEPENDS_ON→ [Task] Schema migration complete

// One query returns the full picture
// Not just "PostgreSQL" — the WHY, WHO, WHAT, and WHEN

Everything your agents need to remember

Eight integrated capabilities that turn forgetful agents into intelligent ones.

Smart Recall

BM25 fulltext search with importance weighting and confidence scoring. Finds relevant memories across all types, ranked by what matters most right now. No embeddings required — works out of the box.

// Find what matters GET /recall?q=user+preferences&limit=5 // Returns ranked results with type + importance [preference] Prefers dark mode (8/10) [preference] Uses TypeScript (7/10) [fact] Timezone is CET (6/10)

GraphRAG Pro

The killer feature. Combines vector embeddings, BM25 fulltext search, and multi-hop graph traversal in a single query. Discovers memories that are logically connected but textually different — things pure similarity search would miss entirely.

POST /graphrag/query { "query": "billing project status", "hops": 3, "topK": 5 } // Direct: "Billing migration deadline March 30" // 1-hop: "Chose PostgreSQL for ACID compliance" // 2-hop: "Alex leads the billing team"

Auto-Capture

An LLM watches your agent's conversations and automatically extracts facts, decisions, preferences, and entities. No manual remember calls needed. Agents learn from every interaction without being told to.

// Agent says: "Let's use React for the frontend" // Auto-captured: { "type": "decision", "content": "Chose React for frontend", "entities": ["React"], "tags": ["auto-captured"] }

Decision Tracking

First-class support for decisions with options, context, deadlines, and outcomes. Create a decision, defer it with a reason, or resolve it with the chosen option. Never lose the "why" behind a choice again.

POST /decisions { "title": "CI/CD platform", "options": ["GitHub Actions", "GitLab CI"], "deadline": "2026-03-31" } // Later: resolve, defer, or list open decisions POST /decisions/:id/resolve { "outcome": "GitHub Actions — team already uses it" }

Intelligence Layer Pro

Memory decay makes old unaccessed memories fade naturally (configurable rate, 10% floor — nothing fully disappears). Contradiction detection flags conflicting facts. Deduplication merges near-identical memories. Your knowledge graph stays clean automatically.

POST /maintenance/run-all // Decay: 12 memories below threshold // Contradictions: "Ubuntu 22.04" vs "Ubuntu 24.04" // Duplicates: 3 near-matches found

Graph Analysis

Inspect the structure of your agent's knowledge. Find orphan memories with no connections, discover topic clusters, trace paths between any two memories, and get global stats on your knowledge graph's health.

POST /graph/analyze { "action": "clusters" } // Cluster 1: "Infrastructure" (23 memories) // Cluster 2: "Billing project" (18 memories) // Orphans: 4 memories with no edges

Entity Extraction

People, projects, companies, devices, and locations are automatically extracted from memories and linked as graph nodes. Navigate your agent's knowledge through the people and things it mentions — not just keyword matches.

GET /entities?type=person [person] Alex — 14 memories, aliases: ["Alex K."] [person] Sarah — 8 memories [person] Bob — 6 memories GET /entities/Alex/memories // All memories mentioning Alex

Multi-Agent Memory

Each agent gets its own memory scope, but memories can be shared across your agent fleet. A research agent discovers a fact, and your coding agent can recall it. Scoped by default, shared when needed.

// Research agent stores { "agent": "researcher", "content": "React 19 supports server components" } // Coding agent recalls across agents GET /recall?q=React+features&agent=*

Three steps to agents that remember

Get up and running in under five minutes. One Docker command, one config line, and your agents have persistent memory.

1

Install MemTap

One command deploys the MemTap server and ArangoDB. Nothing else to install.

$ git clone https://github.com/psifactory/memtap.git $ cd memtap && cp .env.example .env $ docker compose up -d # Server running at http://localhost:18800 # ArangoDB at http://localhost:8529
2

Connect your agent

Add the plugin to your agent config. Works with OpenClaw natively, or use the REST API with any framework.

// openclaw.json { "plugins": { "memtap": { "serverUrl": "http://localhost:18800", "agentId": "my-agent", "autoCapture": true, "bulletinOnBoot": true } } }
3

Your agents remember

Memories are captured automatically from conversations. Context persists across sessions, forever.

# Before MemTap: User: "What database did we pick?" Agent: "I don't have that information." # After MemTap: User: "What database did we pick?" Agent: "You chose PostgreSQL on Feb 12 for ACID compliance. The billing migration deadline is March 30."

A clean API your agents already understand

Seven tools your agent calls directly. Full REST API for custom integrations. Every response includes graph context.

Docker
Plugin Config
memtap_remember
memtap_recall
memtap_graphrag
# Clone and start MemTap + ArangoDB $ git clone https://github.com/psifactory/memtap.git $ cd memtap # Configure your environment $ cp .env.example .env $ nano .env # Set your license key, embedding API, etc. # Launch everything $ docker compose up -d # Verify it's running $ curl http://localhost:18800/health {"status": "ok", "version": "1.2.0", "arango": "connected"}
// openclaw.json — native plugin integration { "plugins": { "memtap": { "serverUrl": "http://localhost:18800", "agentId": "my-agent", "autoCapture": true, "bulletinOnBoot": true, "graphragEnabled": true, "decayRate": 0.005 } } } // Provides 7 tools: recall, remember, bulletin, graphrag, // graph, decide, maintenance // Plus 2 hooks: conversation-start, session-end
// Store a memory with automatic entity linking POST /memories { "type": "preference", "content": "User prefers dark mode and uses TypeScript exclusively", "agent": "assistant-1", "importance": 0.8, "tags": ["ui", "language"], "confidence": 0.95 } // Response { "id": "mem_a1b2c3d4", "entities": ["TypeScript"], "edges_created": 2, "duplicates_found": 0 }
// Search across all memory types with BM25 ranking GET /recall?q=user+preferences&limit=10&agent=assistant-1 // Returns ranked results with graph context { "memories": [ { "content": "User prefers dark mode in all applications", "type": "preference", "importance": 0.8, "score": 4.23, "entities": ["TypeScript"], "edge_count": 3 } ], "total": 2, "search_method": "bm25" }
// Deep knowledge retrieval: vector + BM25 + graph traversal POST /graphrag/query { "query": "What do we know about the billing project?", "agent": "assistant-1", "hops": 3, "topK": 5 } // Seeds (direct matches): // 1. [goal] Complete billing migration by March 30 // 2. [decision] Chose PostgreSQL for billing service // // Discovered via graph (missed by vector search): // 3. [fact] ACID compliance required (1-hop) // 4. [identity] Alex leads the billing team (2-hop) // 5. [fact] MongoDB rejected — no ACID (3-hop)

How MemTap stacks up

We built MemTap because existing solutions were missing the graph layer. Here's how the landscape looks.

Feature MemTap Mem0 Zep Graphiti Vector DBs Flat Files
Semantic searchBM25 + vectorsVectorsVectors + temporalVectorsVectorsgrep
Knowledge graphNative (ArangoDB)NoPartialNative (Neo4j)NoNo
Typed memories8 typesUntypedSessions + factsEpisodes + entitiesUntypedUntyped
Typed edge relationships7 typesNoNoTemporal edgesNoNo
Entity extractionAutomaticNoAutomaticAutomaticNoManual
GraphRAGBM25 + vector + BFSNoNoVector + graphNoNo
Contradiction detectionAutomaticNoNoNoNoNo
Decision trackingBuilt-inNoNoNoNoManual
Memory decayConfigurableNoTemporalTemporalNoNo
Self-hostedDockerYes + CloudCloud-firstYesCloud onlyYes
Open sourceApache 2.0Apache 2.0MIT (CE)Apache 2.0NoN/A
Paid tier starts at€19/mo$99/mo$99/moFree (OSS)~$70/moFree

Start free. Scale when you're ready.

Every tier includes self-hosted deployment. Your data never leaves your infrastructure.

Free

For individual developers

€0 / forever
No credit card required
  • 500 memories
  • 1 agent
  • BM25 fulltext search
  • 8 memory types
  • Basic entity linking
  • Decision tracking
  • REST API access
  • Docker Compose deployment
  • Community support
Get Started

Enterprise

For teams and organizations

Custom
Let's talk about your needs
  • Unlimited memories
  • Unlimited agents
  • Everything in Pro, plus:
  • Custom integrations
  • SLA & dedicated support
  • On-premise deployment
  • SSO & audit logging
  • Priority feature requests
  • Onboarding assistance
Contact Sales

Detailed feature comparison

FeatureFreeProEnterprise
Memories50010,000Unlimited
Agents110Unlimited
BM25 fulltext search
8 memory types
Entity linking
Decision tracking
REST API
Knowledge graph (basic)
GraphRAG (vector + graph)
Memory decay reports
Contradiction detection
Deduplication scanning
Advanced graph traversal
Custom integrations
SSO & audit logging
SLA guarantee
SupportCommunityPriority emailDedicated

Frequently asked questions

How is MemTap different from a vector database?+

Vector databases store embeddings and return similar results. MemTap adds a knowledge graph layer — memories are connected through typed relationships (CAUSED_BY, UPDATES, CONTRADICTS, etc.). This means your agent can traverse connections and discover related information that pure similarity search would miss. It's the difference between "find similar text" and "understand how things relate."

Where is my data stored?+

Everything runs on your infrastructure. MemTap uses ArangoDB as its backend, deployed via Docker Compose alongside the MemTap server. Your memories, graphs, and embeddings never leave your machines. No cloud dependency, no third-party data sharing.

Can I self-host MemTap?+

Yes — self-hosting is the default and recommended deployment. MemTap is designed to run on your own infrastructure via Docker Compose. There is no hosted/cloud version. You own your data completely.

Is there a free trial for Pro?+

Yes. Pro includes a 7-day free trial with full access to all Pro features including GraphRAG, memory maintenance, and advanced graph traversal. No credit card required to start.

Which agent frameworks does MemTap support?+

MemTap ships with a native OpenClaw plugin (7 tools + 2 hooks), but the REST API works with any agent framework. LangChain, CrewAI, AutoGPT, Claude Code, or your custom agent — if it can make HTTP requests, it can use MemTap.

Do I need vector embeddings?+

No. MemTap works out of the box with BM25 fulltext search — no embedding model required. For semantic similarity search and GraphRAG, you can optionally connect any OpenAI-compatible embedding API, including local models. The free tier works perfectly without embeddings.

How does memory decay work?+

Memories naturally lose importance over time, just like human memory. The decay rate is configurable (default: 0.5% per day) with a floor of 10% — nothing is ever fully forgotten. Accessing a memory resets its decay clock. This ensures recent, important memories surface first while older ones gracefully fade unless reinforced.

Can I migrate from Mem0 or Zep?+

Yes. Export your existing memories and POST them to MemTap's REST API. The graph relationships and entity linking will be auto-generated from your imported data, immediately enriching your existing knowledge base. Migration guides are available in the docs.

What happens if I hit the free tier limit?+

At 500 memories, new writes are blocked but all existing memories remain fully searchable and accessible. You can archive old memories to free up space, or upgrade to Pro for 10,000 memories. Your data is never deleted.

Is MemTap production-ready?+

Yes. MemTap is backed by ArangoDB, a battle-tested multi-model database used in production by major enterprises. The server includes health checks, graceful error handling, Ed25519-signed license validation, and automated maintenance. Docker Compose makes deployment reproducible and reliable.

Give your agents a brain
they won't forget.

Start with 500 free memories. No credit card. No cloud lock-in. Deploy in under 5 minutes.