Elefante

io.github.amenophis1erPublished by GitHub account amenophis1erv0.1.9Updated Nov 3, 2026

Open, Git-native memory protocol for MCP agents. Portable, versioned, human-editable.

VerifiedSTDIODesktop onlyKnowledge & MemoryDeveloper Tools

Overview

AI-generated overview

Git-native memory vault for MCP agents: stores agent memories as Markdown files in a Git repo the user owns, with read, write, search and sync tools.

What you can do
  • Write, read, update and delete memories stored as Markdown files with YAML frontmatter
  • Search and list memories by keyword, type or project scope
  • Sync the vault with its Git remote and rebuild the search index
  • Scope memories automatically to the current project by reading the working directory's git remote, with global and cross-project escape hatches
  • Inject top memories into the agent's system prompt at startup so preferences and context are available without searching
When to use it
Useful when you want agent memory you own and can audit: portable across Claude, Codex, Cursor and other MCP agents, human-editable in any editor, and versioned through Git history. Suited to users comfortable with Git who prefer ownership and auditability over retrieval quality.
Requirements
Runs locally as an npm package (elefante-mcp) over stdio; Node.js and npx are needed. A Git repository to act as the vault, initialized with a repo URL, plus working Git credentials (SSH keys, credential helper, gh auth token, or the ELEFANTE_GITHUB_TOKEN environment variable). Network access for syncing with the remote.
Before you install
The vault is a Git repo, so memories are pushed to a remote and may be private or public depending on how you create it. It relies on your existing Git credentials or a token such as ELEFANTE_GITHUB_TOKEN, which grants access to that repo. The agent can write, update and delete memories, and those changes are committed and synced; review history before syncing. Top memories are injected into the agent's system prompt, so anything stored is shared with whichever agent connects.

Installation

In SourceWeft

  1. Open Elefante in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

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.

QuestionAnswer
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

bash
# Installnpm install -g elefante-mcp
# Initialize vault (uses a private GitHub repo as storage)elefante init [email protected]:yourname/my-memory.git
# Add your first memoryelefante add \  --name "TypeScript strict mode" \  --type user \  --body "Always enable strict: true in tsconfig.json"
# Searchelefante search "typescript"
# Check statuselefante status

Connect to Your Agent

From the terminal (before starting Claude Code):

bash
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.):

json
{  "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 sayWhat 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: global → null (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 valueMeaning
(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.

markdown
---id: mem_a1b2c3d4e5f6type: feedbackname: No database mocking in testsdescription: Integration tests must use real database connectionsprofile: you/acme-apiimportance: 3tags: [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 connectionto a test database.
**Why:** Mocked tests passed but the production migration failed becausethe 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 --onelinef4a2c1e remember: No database mocking in testsb3d8e7a remember: TypeScript strict mode preferencea1c9f2b update: REST to GraphQL migration deadline9e7d4c3 forget: Outdated staging URL2f8a6b1 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.

TypeWhat to storeTypically scoped to
userFacts about you — role, preferences, expertiseGlobal
feedbackAgent behavior guidance — corrections, confirmationsGlobal
projectActive work context — goals, deadlines, decisionsProject
referenceExternal pointers — URLs, dashboards, toolsProject

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 countelefante list [--type TYPE]    List memories with filterselefante search <query>        Search by keywordelefante read <id>             Read a specific memoryelefante add                   Create a memoryelefante delete <id>           Delete a memoryelefante sync                  Pull and push changeselefante reindex               Rebuild search indexelefante mcp                   Start MCP stdio server

How It Compares

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

ElefanteClaude/ChatGPT MemoryMem0 / Zep
You own the dataGit repo you controlVendor-controlledSelf-hosted or SaaS
Human-readableMarkdown filesNoNo
Version historyGit log for freeNoNo
Agent-agnosticAny MCP agentSingle vendorYes
Zero infrastructureGit + local processN/A (managed)Server + database
Offline accessLocal cloneNoNo
Auto project scopingDetects git remotePer-conversationManual
Semantic searchNot yet (planned)YesYes

"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

Source: README.md at commit 24b02e7

Tools

0
SourceWeft has not started this package in its sandbox yet, so its tools are not known.

Version history

1
  1. v0.1.9LatestSep 16, 2026

Score

40% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts

    Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.

  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listed15 pts

    Answer tools/list without a credential, or ship a package that starts in a sandbox without one.

  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts

    Declare a license in the repository or the registry entry.