jevmem — Claude Code MCP server: project memory that persists
Writes decisions, rules and dead ends from your chats into JEVMEM.md and feeds the relevant lines back next session.
claude mcp add --env TYPESAFE_API_KEY=<TYPESAFE_API_KEY> --env JEVMEM_ROOT=<JEVMEM_ROOT> --env TYPESAFE_BASE_URL=<TYPESAFE_BASE_URL> --env JEVMEM_CACHE=<JEVMEM_CACHE> --transport stdio jevmem -- npx -y jevmemWhat jevmem does
You talk to the agent as usual. jevmem decides whether what you just said is worth keeping, and if it is, one line lands in JEVMEM.md inside your repo. Next session the lines that bear on your prompt go back into context, and before a command runs or a file changes the agent checks the call against your saved rules.
It keeps decisions, constraints, bugs, to-dos and failed approaches with their reasons. Change your mind and the earlier line is marked superseded: it stays in the file for the record but is no longer sent to the agent. Teammates get the same file through git. The yes/no call is made by Jev from TypeSafe AI, a model that answers with probabilities.
You need a TYPESAFE_API_KEY before anything runs. The server starts with npx -y jevmem and plugs into Claude, Codex, Cursor, GitHub Copilot, Windsurf, Cline and Zed; Cursor and Claude take it as a plugin, the rest over MCP. Longer files cost you time on every prompt — pulling lines back takes roughly a third to half a second, and the agent waits for it.
What it helps with
- bring last week's decision back into a fresh session
- stop the agent from retrying an approach that already failed
- block an edit the project forbids
- keep a running record of constraints like the minimum Node version
- share the decision history with the team through git
Example prompts for the agent
- We use Postgres — save that.
- Check my command against the project's saved rules.
- What did we decide about the primary store last session?
How to install jevmem
Platform CLI
claude mcp add --env TYPESAFE_API_KEY=<TYPESAFE_API_KEY> --env JEVMEM_ROOT=<JEVMEM_ROOT> --env TYPESAFE_BASE_URL=<TYPESAFE_BASE_URL> --env JEVMEM_CACHE=<JEVMEM_CACHE> --transport stdio jevmem -- npx -y jevmemReplace <…> with your own values
Platform CLI
codex mcp add jevmem --env TYPESAFE_API_KEY=<TYPESAFE_API_KEY> --env JEVMEM_ROOT=<JEVMEM_ROOT> --env TYPESAFE_BASE_URL=<TYPESAFE_BASE_URL> --env JEVMEM_CACHE=<JEVMEM_CACHE> -- npx -y jevmemReplace <…> with your own values
Config file
{
"mcpServers": {
"jevmem": {
"command": "npx",
"args": [
"-y",
"jevmem"
],
"env": {
"TYPESAFE_API_KEY": "<TYPESAFE_API_KEY>",
"JEVMEM_ROOT": "<JEVMEM_ROOT>",
"TYPESAFE_BASE_URL": "<TYPESAFE_BASE_URL>",
"JEVMEM_CACHE": "<JEVMEM_CACHE>"
}
}
}
}Replace <…> with your own values
Config file
{
"servers": {
"jevmem": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"jevmem"
],
"env": {
"TYPESAFE_API_KEY": "<TYPESAFE_API_KEY>",
"JEVMEM_ROOT": "<JEVMEM_ROOT>",
"TYPESAFE_BASE_URL": "<TYPESAFE_BASE_URL>",
"JEVMEM_CACHE": "<JEVMEM_CACHE>"
}
}
}
}Replace <…> with your own values
Platform CLI
gemini mcp add -e TYPESAFE_API_KEY=<TYPESAFE_API_KEY> -e JEVMEM_ROOT=<JEVMEM_ROOT> -e TYPESAFE_BASE_URL=<TYPESAFE_BASE_URL> -e JEVMEM_CACHE=<JEVMEM_CACHE> jevmem npx -y jevmemReplace <…> with your own values
Step by step, with commands for each platform: How to add an MCP server to Claude Code, Codex, Cursor, VS Code, Gemini CLI and more
Questions about jevmem
How do I install jevmem in Claude Code?
Run claude mcp add jevmem -e TYPESAFE_API_KEY=<TYPESAFE_API_KEY> -- npx -y jevmem, replacing the key with your own.
What does jevmem do?
It records decisions, rules and failed approaches from your chat into JEVMEM.md, then returns the lines relevant to your next prompt. Before a command or edit it checks the action against those saved rules.
How is jevmem different from CLAUDE.md?
A CLAUDE.md is maintained by hand; jevmem keeps a file like it up to date as you work. In the author's tests both scored about the same, and the hand-written file did better on a convention the prompt never points at.