Elefante

io.github.amenophis1er由 GitHub 账号 amenophis1er 发布v0.1.9更新于 Nov 3, 2026

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

已验证STDIO仅桌面知识与记忆开发者工具

概览

AI 生成的概览

面向 MCP 智能体的 Git 原生记忆库:把智能体记忆以 Markdown 文件存进用户自己的 Git 仓库,并提供读写、搜索与同步工具。

可以做什么
  • 写入、读取、更新和删除以带 YAML frontmatter 的 Markdown 文件形式保存的记忆
  • 按关键词、类型或项目范围搜索和列出记忆
  • 与 Git 远程仓库同步记忆库并重建搜索索引
  • 通过读取工作目录的 git remote 自动按项目划分记忆范围,并提供全局与跨项目的例外选项
  • 启动时把重要记忆注入智能体的系统提示,无需先搜索即可获得偏好与上下文
适用场景
适合希望自己拥有并可审计智能体记忆的场景:可在 Claude、Codex、Cursor 等不同 MCP 智能体间通用,可用任意编辑器人工修改,并通过 Git 历史保留版本。适合熟悉 Git、更看重归属权与可审计性而非检索质量的用户。
运行要求
以 npm 包 elefante-mcp 通过 stdio 在本地运行,需要 Node.js 与 npx。需要一个用作记忆库的 Git 仓库(用仓库地址初始化),以及可用的 Git 凭据(SSH 密钥、凭据助手、gh auth token 或 ELEFANTE_GITHUB_TOKEN 环境变量)。与远程同步需要网络访问。
安装前请注意
记忆库是一个 Git 仓库,记忆会被推送到远程,其公开或私有取决于你如何创建仓库。它依赖你现有的 Git 凭据或 ELEFANTE_GITHUB_TOKEN 之类的令牌,该令牌可访问该仓库。智能体可以写入、更新和删除记忆,这些改动会被提交并同步,同步前请查看历史。重要记忆会被注入智能体的系统提示,因此存入的内容会提供给任何连接的智能体。

安装

在 SourceWeft 中

  1. 打开 控制台中的 Elefante,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

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

来源:README.md,提交 24b02e7

工具

0
SourceWeft 尚未在沙箱中启动过该软件包,因此其工具未知。

版本历史

1
  1. v0.1.9最新Sep 16, 2026

评分

已满足适用检查项的 40%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分

    请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。

  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具15 分

    请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。

  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分

    请在仓库或注册中心条目中声明许可证。