elefante

elefante

Open, Git-native memory protocol for MCP agents: stores memories as Markdown files in a Git repo, enabling portability, auditability, and human-editable memory across different AI agents.

Category
Visit Server

README

Elefante

The open, Git-native memory protocol for MCP agents: portable, inspectable, versioned, and human-editable.

Your agent's memory is a Git repo you own.
Every memory is a Markdown file you can read.
Every change is a commit you can audit.
Any MCP agent can connect to it.

Why

Every AI agent has its own memory system. Claude's works only with Claude. ChatGPT's works only with ChatGPT. They're all opaque, vendor-locked, and non-portable.

Elefante takes a different approach. Instead of optimizing for retrieval quality, it optimizes for ownership, auditability, and portability — the things that matter when memory is a first-class asset, not a hidden implementation detail.

Question Answer
Who owns my agent's memory? You do. It's a Git repo.
What does my agent know about me? cat memories/user/*.md
What changed since last week? git log --since="1 week ago"
How do I use it across Claude, Codex, and Cursor? Point them at the same MCP server.
How do I back it up? Every clone is a full backup.
How do I undo a bad memory? git revert

Quick Start

# Install
npm install -g elefante-mcp

# Initialize vault (uses a private GitHub repo as storage)
elefante init git@github.com:yourname/my-memory.git

# Add your first memory
elefante add \
  --name "TypeScript strict mode" \
  --type user \
  --body "Always enable strict: true in tsconfig.json"

# Search
elefante search "typescript"

# Check status
elefante status

Connect to Your Agent

From the terminal (before starting Claude Code):

claude mcp add --scope user elefante -- npx -y elefante-mcp mcp

From inside Claude Code (during a session):

/mcp add --scope user elefante -- npx -y elefante-mcp mcp

Or manually — add to your MCP config (~/.claude.json, .cursor/mcp.json, etc.):

{
  "mcpServers": {
    "elefante": {
      "command": "npx",
      "args": ["-y", "elefante-mcp", "mcp"]
    }
  }
}

Cursor / VS Code / Codex — same config. Any agent that speaks MCP can read and write to the same vault.

Once connected, your agent gets 7 tools: memory_write, memory_read, memory_search, memory_list, memory_update, memory_delete, memory_sync.

Auto-Discovery

Elefante injects your top memories directly into the agent's system prompt at startup via MCP instructions. The agent sees your preferences, feedback, and project context without needing to search first.

No CLAUDE.md hacks. No "search my elefante memory" prompts. It just works.

Project-Aware Memory

Elefante auto-detects which project you're in and scopes memories accordingly. No configuration needed.

How It Works

When the MCP server starts, it reads the git remote from your working directory:

~/Projects/acme-api/   →  git remote = github.com:you/acme-api.git
                       →  profile = "you/acme-api"
                       →  memories scoped to this project

~/Projects/my-cli/     →  git remote = github.com:you/my-cli.git
                       →  profile = "you/my-cli"
                       →  different project, different memories

What Gets Scoped

You say What happens
"Remember this project uses Postgres 16" Stored with profile: you/acme-api (project-scoped)
"Remember I prefer Bun over npm" Agent stores with profile: globalnull (applies everywhere)
"Remember the staging URL is staging.acme.io" Stored with profile: you/acme-api (project-scoped)

The agent decides based on context. User preferences and behavioral feedback are typically global. Project details and references are typically scoped.

What You See When You Search

Working in acme-api:
  ✓ "Uses Postgres 16"              (profile: you/acme-api)
  ✓ "Prefers Bun over npm"          (profile: null — global)
  ✗ "Uses SQLite"                   (profile: you/my-cli — different project)

Working in my-cli:
  ✓ "Uses SQLite"                   (profile: you/my-cli)
  ✓ "Prefers Bun over npm"          (profile: null — global)
  ✗ "Uses Postgres 16"             (profile: you/acme-api — different project)

Global memories always show up. Project memories only show up in their project.

Escape Hatches

Profile value Meaning
(omitted) Auto-scope to detected project
"global" Explicitly global — no project scope
"all" Search/list across every project
"owner/other-repo" Explicitly target a different project

What a Memory Looks Like

Every memory is a Markdown file with YAML frontmatter. You can open it in any editor.

---
id: mem_a1b2c3d4e5f6
type: feedback
name: No database mocking in tests
description: Integration tests must use real database connections
profile: you/acme-api
importance: 3
tags: [testing, database]
created_at: "2026-04-14T10:30:00Z"
updated_at: "2026-04-14T14:22:00Z"
---

Do not mock the database in integration tests — use a real connection
to a test database.

**Why:** Mocked tests passed but the production migration failed because
the mock didn't reflect actual schema constraints.

**How to apply:** Use the test database helper (`createTestDb()`)
instead of jest mocks.

What a Git Log Looks Like

$ git log --oneline
f4a2c1e remember: No database mocking in tests
b3d8e7a remember: TypeScript strict mode preference
a1c9f2b update: REST to GraphQL migration deadline
9e7d4c3 forget: Outdated staging URL
2f8a6b1 Initialize elefante vault

Every write is remember:. Every update is update:. Every delete is forget:. Your memory has a clean, auditable history.

Vault Structure

~/.elefante/vault/
├── .elefante/
│   └── config.yaml              # Vault settings
├── memories/
│   ├── user/                    # Who the user is
│   │   └── mem_*.md
│   ├── feedback/                # How the agent should behave
│   │   └── mem_*.md
│   ├── project/                 # Active work context
│   │   └── mem_*.md
│   └── reference/               # External resource pointers
│       └── mem_*.md
├── profiles/
│   └── *.yaml                   # Named scopes for partitioning
└── index/
    ├── manifest.json            # All memory metadata (generated)
    └── search.json              # Search index (generated)

Memory Types

Four types. Intentionally constrained — a small taxonomy forces good classification.

Type What to store Typically scoped to
user Facts about you — role, preferences, expertise Global
feedback Agent behavior guidance — corrections, confirmations Global
project Active work context — goals, deadlines, decisions Project
reference External pointers — URLs, dashboards, tools Project

Authentication

Elefante doesn't reinvent auth. It uses whatever Git credentials you already have.

Resolution order:

  1. Local git credentials (SSH keys, macOS Keychain, credential helpers)
  2. gh auth token (if GitHub CLI is installed)
  3. ELEFANTE_GITHUB_TOKEN environment variable
  4. ~/.elefante/config.json token field

If git or gh is authenticated, Elefante works with zero config.

CLI Reference

elefante init <repo-url>       Clone vault repo to ~/.elefante/vault/
elefante status                Vault status, sync state, memory count
elefante list [--type TYPE]    List memories with filters
elefante search <query>        Search by keyword
elefante read <id>             Read a specific memory
elefante add                   Create a memory
elefante delete <id>           Delete a memory
elefante sync                  Pull and push changes
elefante reindex               Rebuild search index
elefante mcp                   Start MCP stdio server

How It Compares

Elefante doesn't compete on retrieval quality. It competes on ownership.

Elefante Claude/ChatGPT Memory Mem0 / Zep
You own the data Git repo you control Vendor-controlled Self-hosted or SaaS
Human-readable Markdown files No No
Version history Git log for free No No
Agent-agnostic Any MCP agent Single vendor Yes
Zero infrastructure Git + local process N/A (managed) Server + database
Offline access Local clone No No
Auto project scoping Detects git remote Per-conversation Manual
Semantic search Not yet (planned) Yes Yes

"Why not Obsidian + MCP plugin?" — Obsidian is a tool for humans that agents can access. Elefante is a tool for agents that humans can access. Same data format (Markdown + Git), different design center.

Protocol

The full protocol specification — memory model, vault structure, MCP interface, concurrency model, indexing, security considerations — is in PROTOCOL.md.

License

MIT

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured