Gives Claude a verifiable memory system scoped to a single repository. You store facts with file citations (path and line range), and when retrieving them later, the server rehashes the actual code on disk to verify nothing changed. If the snippet moved, it relocates the citation automatically. If it changed or got deleted, the memory is marked stale and filtered out. Exposes five tools: vrm_store for saving memories, vrm_search for keyword lookup, vrm_retrieve for JIT-verified results, vrm_list for auditing by status, and vrm_forget for deletion. Memories live in a local JSON file at the repo root with a default 28-day TTL. Useful when you want an agent to remember refactoring decisions or codebase conventions without serving outdated information after the code evolves.

Stale-proof repository memory with citations + just-in-time verification + TTL (repo-scoped).
An MCP server providing "safe memory" for AI coding agents. Memories are scoped per repository, backed by code citations, and verified just-in-time so an agent never receives stale information when the underlying code has changed.
Run via npx:
npx -y @cognitivemyriad/vrm-local --repo /path/to/repo
(Alternatively, run from source: npm ci && npm run build && node build/index.js --repo /path/to/repo)
vrm_store: Store a new memory with file citations.vrm_search: Search for candidate memories by keywords.vrm_retrieve: JIT-verify candidates and return only valid memories. (Main tool for agents)vrm_list: List memories by status (valid, stale, missing).vrm_forget: Manually delete a memory.Store: Input:
{
"subject": "API version sync",
"fact": "When changing API version, update client/server/docs together.",
"citations": [{ "path": "src/api.ts", "startLine": 10, "endLine": 15 }]
}
Output:
{
"stored": true,
"memoryId": "uuid-...",
"expiresAt": "2026-03-21T00:00:00Z"
}
Retrieve: Input:
{ "query": "API version" }
Output:
{
"query": "API version",
"valid": [ ... ],
"stats": { "verified": 1, "validCount": 1 }
}
graph TD
A[Agent] -->|Store Fact + Citation| B(Verified Repo Memory)
B --> C{Save to Disk}
C -->|Hash Code Snippet| D[(memories.json)]
A -->|Retrieve Fact| B
B --> E{JIT Verification}
E -->|Check File Hash| F{Unchanged or Relocated?}
F -->|Yes| G[Return VALID Memory]
F -->|No| H[Return STALE/MISSING]
vrm_retrieve, the server checks the physical file. If the snippet has moved, it relocates the citation. If it has been changed or deleted, the memory is marked STALE/MISSING and omitted from the results.Data is strictly repo-scoped and saved in:
<repoRoot>/.verified-repo-memory
This includes memories.json and a fingerprint/metadata file to prevent accidental cross-repo pollution. Add this directory to your .gitignore.
stdio local-only server without HTTP calls.../) out of the repository root, as well as accessing .git/ or .verified-repo-memory/.stderr.--no-secret-scan).To add this server to the Claude Desktop app, edit your configuration file:
~/Library/Application Support/Claude/claude_desktop_config.json%APPDATA%\Claude\claude_desktop_config.jsonAdd the following configuration:
{
"mcpServers": {
"verified-repo-memory": {
"command": "npx",
"args": [
"-y",
"@cognitivemyriad/vrm-local",
"--repo",
"/absolute/path/to/your/repo"
]
}
}
}
To add this server to Claude Code using stdio transport:
claude mcp add mcp-verified-repo-memory --transport stdio -- npx -y @cognitivemyriad/vrm-local
Note for Windows users: You may need to prepend cmd /c to the command:
claude mcp add mcp-verified-repo-memory --transport stdio -- cmd /c npx -y @cognitivemyriad/vrm-local
This section explains how to publish the package to NPM and register it with the Anthropic MCP Registry so that it becomes publicly available.
NPM (Node Package Manager) is the package distribution platform. Publishing here allows anyone to install your tool with a single command.
1. Log in to NPM from the terminal:
npm login
A browser window will open. Sign in with your NPM account. When prompted, enter your 2FA code from your authenticator app.
2. Publish the package:
npm publish --access public
This command does the following:
npm run build).tgz archive of the compiled fileshttps://registry.npmjs.org/3. Verify the publication:
Visit https://www.npmjs.com/package/@cognitivemyriad/vrm-local in your browser. Your package page should appear.
Note: If you need to re-publish, you must increment the version number in
package.jsonandserver.jsonfirst (npm version patch). NPM does not allow overwriting existing versions.
The MCP Registry is Anthropic's official directory of MCP servers. Registering here allows Claude Desktop, Claude Code, and other MCP clients to discover and install your server.
Important: The NPM package must be published first (Step 1). The MCP Registry validates that the NPM package exists before accepting the registration.
mcp-publisher CLI tool# macOS (Homebrew)
brew install nicholasgriffintn/tap/mcp-publisher
# Or via npx (no install required)
npx @anthropic-ai/mcp-publisher
1. Log in to the MCP Registry via GitHub:
mcp-publisher login github
A browser window will open. Authorize the application with your GitHub account.
2. Publish to the MCP Registry:
mcp-publisher publish
This command reads server.json in the current directory and registers the server with the MCP Registry. The registry will:
server.json schema3. Verify the registration:
Visit https://registry.modelcontextprotocol.io and search for your server name.
Note: Once a version is published to the MCP Registry, it is immutable and cannot be changed. To publish updates, increment the version in both
package.jsonandserver.json, publish to NPM first, then runmcp-publisher publishagain.
When releasing a new version, always update the version number in all three locations:
# 1. Bump version in package.json
npm version patch # 0.1.2 → 0.1.3
# 2. Update server.json (both top-level and packages[].version)
# Edit server.json manually to match the new version
# 3. Publish
npm publish --access public
mcp-publisher publish
| File | Field | Must Match |
|---|---|---|
package.json | version | ✅ |
server.json | version (top-level) | ✅ |
server.json | packages[0].version | ✅ |
VRM_TTL_DAYSDefault TTL in days (1-365).
VRM_DATA_DIROverride data dir path.
VRM_MAX_FILE_BYTESMax file parsing size bytes.
VRM_SECRET_SCANEnable secret scan (on/off).
io.github.ericm1018/skillfm-llm-cost-optimizer-openai-anthropic-usage
io.github.mikerawsonnz/llm-orchestration-agent
io.github.mikerawsonnz/authenticated-llm-agent
labforgedev/copilot-memory-mcp
csoai-org/agent-prompt-injection-firewall-mcp
io.github.mikerawsonnz/authenticated-multi-llm-agent