Hippo

Local long-term memory for coding agents, stored in SQLite and shared across agent tools

By Keith So (individual) TypeScript Local · stdio Knowledge and memoryDeveloper tools

69 popularity score ★ 790 ↓ 3.3k/wk

Connect your client

Local (npm)

Add in one click

Opens the app, which asks before it adds the server.

Or add it by command or config

Claude CodeTerminal
claude mcp add hippo -- npx -y hippo-memory mcp
Claude Desktopclaude_desktop_config.json
{
  "mcpServers": {
    "hippo": {
      "command": "npx",
      "args": [
        "-y",
        "hippo-memory",
        "mcp"
      ]
    }
  }
}
Cursor~/.cursor/mcp.json
{
  "mcpServers": {
    "hippo": {
      "command": "npx",
      "args": [
        "-y",
        "hippo-memory",
        "mcp"
      ]
    }
  }
}
VS Code.vscode/mcp.json
{
  "servers": {
    "hippo": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "hippo-memory",
        "mcp"
      ]
    }
  }
}
Codex~/.codex/config.toml
[mcp_servers.hippo]
command = "npx"
args = ["-y", "hippo-memory", "mcp"]
Gemini CLITerminal
gemini mcp add --scope user hippo npx -- -y hippo-memory mcp

Settings 3

HIPPO_HOME Optional: Folder for the global store instead of the default under your home folder.
HIPPO_TENANT Optional: Tenant the server reads and writes as. Blank uses the default tenant.
HIPPO_REQUEST_DEADLINE_MS Optional: How long a tool call may run before it is answered with a timeout. 0 turns the deadline off.

What it does

Hippo gives coding agents a memory that outlasts one session. Memories live in a SQLite database on your machine (`.hippo/hippo.db` in a project, plus a global store in `~/.hippo/`), with markdown copies written beside it that you can read or commit. The `hippo mcp` command serves that store over stdio to any MCP client, so Claude Desktop, Cursor, Cline and others read and write the same memories the hippo CLI and its hooks do.

Entries change weight over time. A memory fades unless it is recalled, and recalling it makes it stronger. Error lessons get twice the half-life, pinned ones never fade, and when you tell it whether recalled memories helped, their decay slows down or speeds up. It tracks memories that contradict each other so you can pick one, a lesson can be copied to the global store for other projects, and it can scan recent git commits for lessons from fixes and reverts. Search is keyword (BM25) unless you add an embedder.

The server registers 13 tools in `src/surface/mcp/tools.ts`. That file caps the token budget a caller can pass to recall, assemble, drill and context at 25 times the recall default, which the README never mentions. `hippo_drill` walks one level down unless you pass `depth`, and `hippo_resolve` can delete the losing memory or tombstone it so the same text is refused if it comes back.

There is also an HTTP server (`hippo serve`) on `127.0.0.1:6789` by default. It wants an API key on every request, local ones included, and writes a fresh member key to `.hippo/server.key` each time it starts. On a store set up as shared it answers MCP at `POST /mcp` for several repos at once, with each request naming its project in a header.

What it needs

RuntimeNode.js 22.16+
Runs onmacOS, Windows, Linux

No account or API key is needed for `hippo mcp` over stdio. With no store present, the first tool call creates the global store in `~/.hippo`. Running `hippo init` in a project (after `npm install -g hippo-memory`) adds a project store. Hybrid search needs `npm i @huggingface/transformers` or an API embedder key (OpenAI, Voyage or Cohere). The HTTP server needs a key made with `hippo auth create`, sent as `Authorization: Bearer <key>`.

Limits

  • Limit Recall is keyword (BM25) search unless you install an embedder yourself. Nothing is auto-installed.
  • Size cap Token budgets for recall, assemble, drill and context are capped at 25 times the recall default (src/surface/mcp/tools.ts).
  • Limit `hippo serve` refuses any request without an API key, from the same machine too, and binding off loopback needs TLS or --allow-cleartext.
  • Rate limit `hippo serve` allows each caller 20 requests a second with bursts of 40 by default (HIPPO_CALLER_RPS, 0 turns it off).
  • Not covered On a shared store, hippo_learn, hippo_share, hippo_resolve and hippo_peers are switched off.
  • Limit On a shared store, tools other than hippo_predict_baserate refuse calls without the X-Hippo-Project header.
  • Limit The README says project headers are a filter, not access control: any member key can name another project.
  • Limit Its own FAQ says the published benchmarks measure retrieval, not whether agents do better work with it.
  • Early release A commercial edition (SSO, hosted service) is described as planned, not released.

Recall is keyword (BM25) search unless you install an embedder yourself; nothing is auto-installed. On a shared store served by `hippo serve`, `hippo_learn`, `hippo_share`, `hippo_resolve` and `hippo_peers` are switched off and every other tool except `hippo_predict_baserate` refuses calls that lack the `X-Hippo-Project` header. The README says those project headers are a filter, not access control: any member key can name another project. Its own FAQ notes that the published benchmarks measure retrieval, not whether agents do better work with it. A commercial edition is described as planned, not released.

Who it suits

Suits a developer who uses several coding agents on one machine and wants one local memory they all share, with no account and no hosted service. Because memories decay unless reused and can be rated, it fits people willing to let the store prune itself rather than keep a fixed notes file. Teams wanting a hosted, multi-user memory service with real per-project access control should note the README's own caveat that the shared-store project headers are not a security boundary, and pick a store whose access model matches. Anyone wanting semantic search out of the box must add an embedder.

Tools 13

8 only read, 4 change things, 1 can delete or overwrite. A ? marks an optional parameter.

hippo_recall
Search stored memories for a query within a token budget, optionally limited to one scope.query: stringbudget?: numberinclude_continuity?: booleanscope?: stringfresh_tail_count?: numberfresh_tail_session_id?: stringsummarize_overflow?: booleanscorer_window?: numbersession_id?: string
hippo_assemble
Build a time-ordered context window for a session from recent rows and summaries of older ones, fitted to a budget.session_id: stringbudget?: numberfresh_tail_count?: numbersummarize_older?: booleanscope?: string
hippo_drill
Expand a summary memory back into the detailed entries it replaced.summary_id: stringlimit?: numberbudget?: numberdepth?: integer
hippo_remember changes
Save a new memory, such as a lesson, an error or a useful pattern.text: stringerror?: booleanpin?: booleantag?: stringpersonal?: boolean
hippo_outcome changes
Rate whether recalled memories helped, which slows or speeds their decay.good: boolean
hippo_context
Return memories for the current git task plus the active task snapshot, handoff and session trail.budget?: numberscope?: string
hippo_status
Show store health: counts, strengths, fading memories and the last consolidation.
hippo_learn changes
Scan recent git commits for lessons from fixes, reverts and refactors and store them.days?: number
hippo_conflicts
List open conflicts between contradicting memories.
hippo_resolve deletes
Settle a conflict by keeping one memory and weakening or deleting the other.conflict_id: numberkeep: stringforget?: booleanrejectLoser?: booleanreason?: string
hippo_share changes
Copy a memory into the global store for use in other projects.id: stringforce?: boolean
hippo_peers
List the projects that have added memories to the global store.
hippo_predict_baserate
Give past track-record statistics for a class of predictions, such as effort estimates.class_tag: string

Similar servers