{"_id":"trace-memory-mcp","_rev":"5-b8f7f06e136774b6a7b57957cd7bf767","name":"trace-memory-mcp","dist-tags":{"latest":"0.1.3"},"versions":{"0.0.0-stage":{"name":"trace-memory-mcp","version":"0.0.0-stage","_id":"trace-memory-mcp@0.0.0-stage","stub":true,"maintainers":[{"name":"jtrades12","email":"jtrades1212@gmail.com"}],"dist":{"shasum":"1355952324df637e718493a06e177f3a80075db8","tarball":"https://registry.npmjs.org/trace-memory-mcp/-/trace-memory-mcp-0.0.0-stage.tgz","fileCount":2,"integrity":"sha512-/5wJ65SWB+tbTWKebkorUDEPOLhGeGe0Qb4hcD8JpTiW5jV56Y/wNeXEqWuOZJ/jMICRzYDhcXy+54rjhWmmVA==","signatures":[{"sig":"MEQCIDzSHH/M4GoDdY0gdp494U9Ga4Vt3+hH8SnSKtZrabRIAiANZ0HlpTp1ub/HLzZ4ONB2iakVCzIc/SlRSqwbQ5GveQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":338},"_npmUser":{"name":"jtrades12","email":"jtrades1212@gmail.com"},"description":"Temporary package placeholder for staged publishing","directories":{}},"0.1.0":{"name":"trace-memory-mcp","version":"0.1.0","keywords":["mcp","memory","sqlite","local-first","model-context-protocol"],"license":"MIT","_id":"trace-memory-mcp@0.1.0","maintainers":[{"name":"jtrades12","email":"jtrades1212@gmail.com"}],"homepage":"https://github.com/JordyRdev/trace-mcp#readme","bugs":{"url":"https://github.com/JordyRdev/trace-mcp/issues"},"bin":{"trace":"dist/index.js"},"dist":{"shasum":"92f9725c46847b0395281da542a3683c3bdb4ddd","tarball":"https://registry.npmjs.org/trace-memory-mcp/-/trace-memory-mcp-0.1.0.tgz","fileCount":17,"integrity":"sha512-SN1MSewpbd+jE7rRpF2lviqqWRqe9HxkER888BgpbimcaQ21SdEcZyrctVmUzof9K0Fup3HXflLMIImKKLHytg==","signatures":[{"sig":"MEUCIHAQF4DL54eXqzkfIwDZtHdHnqz1ugQpo7qtA531QVyTAiEAzGxy7nBSYhqgkujTK6ggKkF6GWXmrdtuftBzHD34Paw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIAimASdsVUuFX90bZtL/lqYMRGtGRPpz6k0ldJEqdlnQAiEA1z3Q5o7QWftvj2HKxOwLIO75SwToO6OAP8C0P4caY6I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":47066},"main":"dist/index.js","type":"module","engines":{"node":">=20"},"gitHead":"291e717ca10cfcba5e5bde06f9c9dd5142b6374c","scripts":{"dev":"tsx src/index.ts","test":"tsx --test test/*.test.ts","build":"tsc -p tsconfig.json","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"jtrades12","email":"jtrades1212@gmail.com"},"repository":{"url":"git+https://github.com/JordyRdev/trace-mcp.git","type":"git"},"_npmVersion":"9.2.0","description":"A memory layer for AI tools. One SQLite file, evidence receipts, a review queue, exportable.","directories":{},"_nodeVersion":"22.22.1","dependencies":{"better-sqlite3":"^11.5.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","typescript":"^5.6.0","@types/node":"^22.7.0","@types/better-sqlite3":"^7.6.11"},"_npmOperationalInternal":{"tmp":"tmp/trace-memory-mcp_0.1.0_1794045867434_0.14991115851381642","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"trace-memory-mcp","version":"0.1.1","keywords":["mcp","memory","sqlite","local-first","model-context-protocol"],"license":"MIT","_id":"trace-memory-mcp@0.1.1","maintainers":[{"name":"jtrades12","email":"jtrades1212@gmail.com"}],"homepage":"https://github.com/JordyRdev/trace-mcp#readme","bugs":{"url":"https://github.com/JordyRdev/trace-mcp/issues"},"bin":{"trace":"dist/index.js"},"dist":{"shasum":"3890a7f7d07a46df9a10e07bd4bfa564acf499d0","tarball":"https://registry.npmjs.org/trace-memory-mcp/-/trace-memory-mcp-0.1.1.tgz","fileCount":17,"integrity":"sha512-hKJf4W5d8NRzGrhBH5Nm1XHXIv8f9/Kb4C5MghcUzYsnTdEoc3PENrngTqfTbzRChYnv/YFkY+n+FKoMRwWhDg==","signatures":[{"sig":"MEUCIBL/nc+w5LWiUAgxbICC4quDNJP+uOFtE51ogiocvQVTAiEA4PFIdsHfPXaRJPyZcqofEb+GKAgzUggG6nnFibMFSAk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIDupGHc19ksufuQrOlY7Z7wLaac1CLXviAs6/fCiiQBJAiEAquwMaT8A1ABL5rfcc+DNxRUpVpIS9lQ/IgKxOtcTUuM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":47463},"main":"dist/index.js","type":"module","engines":{"node":">=20"},"gitHead":"196bf793caf9ff0fc06e27bfeca4c12c3cdbb100","scripts":{"dev":"tsx src/index.ts","test":"tsx --test test/*.test.ts","build":"tsc -p tsconfig.json","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"jtrades12","email":"jtrades1212@gmail.com"},"repository":{"url":"git+https://github.com/JordyRdev/trace-mcp.git","type":"git"},"_npmVersion":"9.2.0","description":"A memory layer for AI tools. One SQLite file, evidence receipts, a review queue, exportable.","directories":{},"_nodeVersion":"22.22.1","dependencies":{"better-sqlite3":"^11.5.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","typescript":"^5.6.0","@types/node":"^22.7.0","@types/better-sqlite3":"^7.6.11"},"_npmOperationalInternal":{"tmp":"tmp/trace-memory-mcp_0.1.1_1794046367189_0.0304235287831911","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"trace-memory-mcp","version":"0.1.2","keywords":["mcp","memory","sqlite","local-first","model-context-protocol"],"license":"MIT","_id":"trace-memory-mcp@0.1.2","maintainers":[{"name":"jtrades12","email":"jtrades1212@gmail.com"}],"homepage":"https://github.com/JordyRdev/trace-mcp#readme","bugs":{"url":"https://github.com/JordyRdev/trace-mcp/issues"},"bin":{"trace":"dist/index.js"},"dist":{"shasum":"12802bd6f15478a993cd4328b087bb1facb7f8d3","tarball":"https://registry.npmjs.org/trace-memory-mcp/-/trace-memory-mcp-0.1.2.tgz","fileCount":17,"integrity":"sha512-XWVaO0ytH4XP0uY6jOUtRWC267tbZ/orDwYoz8ZeZR3mMqwnl6QnYxrf6qLMmMDOdRYQ9ec8UVcKGmDiznFHDw==","signatures":[{"sig":"MEQCICwIt6LIPGIUB4mkO+ceJzz/dRyqW79fadNlTomdtNrBAiBuBGfPls3WrHVTGtKt6jo+pTHKB5EOg5mG+ZQgv6e8jA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIGjvIhl3r6mqxZ30OWmS1PXg7QgSivbXbGvK0KnbwmN2AiBYKPShU9PJSs6py6n++v6vw6cHGJVVVlvIO0fHJX8zGA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":48106},"main":"dist/index.js","type":"module","engines":{"node":">=20"},"gitHead":"ad63bf81f86514d36d60f571de036bcc093c7f68","scripts":{"dev":"tsx src/index.ts","test":"tsx --test test/*.test.ts","build":"tsc -p tsconfig.json","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"jtrades12","email":"jtrades1212@gmail.com"},"repository":{"url":"git+https://github.com/JordyRdev/trace-mcp.git","type":"git"},"_npmVersion":"11.21.2","description":"A memory layer for AI tools. One SQLite file, evidence receipts, a review queue, exportable.","directories":{},"_nodeVersion":"22.22.1","dependencies":{"better-sqlite3":"^11.5.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","typescript":"^5.6.0","@types/node":"^22.7.0","@types/better-sqlite3":"^7.6.11"},"_npmOperationalInternal":{"tmp":"tmp/trace-memory-mcp_0.1.2_1794046818054_0.4680685473430335","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"_id":"trace-memory-mcp@0.1.3","bin":{"trace":"dist/index.js"},"bugs":{"url":"https://github.com/JordyRdev/trace-mcp/issues"},"dist":{"shasum":"f960562ae2776558ef1223c9a9c84235982c792a","tarball":"https://registry.npmjs.org/trace-memory-mcp/-/trace-memory-mcp-0.1.3.tgz","fileCount":17,"integrity":"sha512-N3Fe5wIRSM+71CHo6Tnz7PwhlcNBQog9DbRlJX4H8D6qbnWil5e5TCx47odM3secqU1f9ronzsPxJHMJw0/3JA==","signatures":[{"sig":"MEUCIFaoCgccS6qiAe1+rUyZCeDUgtH66u+28YdqaPSq4nsxAiEA6sTE6r4FhJSMp4MPAOLjs7FcWO5keqfnRu+v9WsBeDQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIHj/vYAZwwLO16Vl4+UgZt1PkacNRQ/QFKjsiafnN23HAiEAvCTwSqiIiocUrj7A6fuy4b/PwznvJmya3bKkUaxVxvs="}],"unpackedSize":51087},"main":"dist/index.js","name":"trace-memory-mcp","type":"module","engines":{"node":">=20"},"gitHead":"2bfb7ad682b77061eac9a97836242b4349595837","license":"MIT","scripts":{"dev":"tsx src/index.ts","test":"tsx --test test/*.test.ts","build":"tsc -p tsconfig.json","prepublishOnly":"npm run build && npm test"},"version":"0.1.3","_npmUser":{"name":"jtrades12","email":"jtrades1212@gmail.com"},"homepage":"https://github.com/JordyRdev/trace-mcp#readme","keywords":["mcp","memory","sqlite","local-first","model-context-protocol"],"repository":{"url":"git+https://github.com/JordyRdev/trace-mcp.git","type":"git"},"_npmVersion":"11.21.2","description":"A memory layer for AI tools. One SQLite file, evidence receipts, a review queue, exportable.","directories":{},"maintainers":[{"name":"jtrades12","email":"jtrades1212@gmail.com"}],"_nodeVersion":"22.22.1","dependencies":{"better-sqlite3":"^11.5.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","typescript":"^5.6.0","@types/node":"^22.7.0","@types/better-sqlite3":"^7.6.11"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/trace-memory-mcp_0.1.3_1794047960386_0.381221613291719"}}},"time":{"created":"2026-11-07T10:03:32.316Z","modified":"2026-11-07T10:39:20.675Z","0.0.0-stage":"2026-11-07T10:03:32.316Z","0.1.0":"2026-11-07T10:04:27.533Z","0.1.1":"2026-11-07T10:12:47.276Z","0.1.2":"2026-11-07T10:20:18.139Z","0.1.3":"2026-11-07T10:39:20.492Z"},"bugs":{"url":"https://github.com/JordyRdev/trace-mcp/issues"},"license":"MIT","homepage":"https://github.com/JordyRdev/trace-mcp#readme","keywords":["mcp","memory","sqlite","local-first","model-context-protocol"],"repository":{"url":"git+https://github.com/JordyRdev/trace-mcp.git","type":"git"},"description":"A memory layer for AI tools. One SQLite file, evidence receipts, a review queue, exportable.","maintainers":[{"name":"jtrades12","email":"jtrades1212@gmail.com"}],"readme":"# trace-mcp\n\nI built this because I got tired of being a stranger to my own AI. Every time I open Cursor to write code, or Claude to plan something, I have to re-explain who I am, what I'm working on, and what I decided yesterday. \n\n`trace-mcp` fixes that. It's a local-first memory layer that runs as an MCP server. It holds your context in one SQLite file you actually own, so it follows you across whatever AI tools you use, instead of being trapped inside someone else's cloud.\n\n## Three ideas\n\n1. **One file.** Everything lives in `~/.trace/trace.db`. Copy it, back it up, delete it.\n2. **Receipts.** A memory without a source quote and a date is a rumor. `trace` stores both.\n3. **Review.** The model proposes. You approve. Nothing becomes active on its own.\n\n## How it works\n\nAn MCP client (like Cursor or Claude Desktop) calls `remember` with a sentence and a supporting quote. The memory lands in a pending queue. You approve it in the CLI or in the local inspector. The model can't approve its own memories (see [Review stays with you](#review-stays-with-you)). \n\nRecall searches active memories using SQLite FTS5, includes your pinned memories, and fills any empty slots with the most recent ones.\n\nWhen something changes, you call `replace`. The new memory is queued as pending. On approval, the old row is marked `superseded`, gets an end date, and links to its replacement. Nothing is deleted, so you can see what used to be true and when it stopped being true.\n\n## Install\n\nRequires Node 20 or newer.\n\n```bash\nnpm install -g trace-memory-mcp\ntrace init\n```\n\nIf npm warns that `better-sqlite3` has install scripts that weren't run (npm 11 and newer), install with:\n\n```bash\nnpm install -g --allow-scripts=better-sqlite3 trace-memory-mcp\n```\n\nGetting `EACCES: permission denied`? Don't use `sudo`. Point npm at a folder you own instead:\n\n```bash\nnpm config set prefix ~/.npm-global --location=user\necho 'export PATH=\"$HOME/.npm-global/bin:$PATH\"' >> ~/.bashrc && exec bash\n```\n\n`trace init` creates `~/.trace/trace.db`. Use `--db <path>` or `TRACE_DB` to put it somewhere else.\n\n## Connect a client\n\ntrace runs as an MCP server over stdio with `trace serve`.\n\n**Claude Code**: available in every folder:\n\n```bash\nclaude mcp add --scope user trace -- trace serve\n```\n\n**Claude Desktop**: add this to `claude_desktop_config.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"trace\": {\n      \"command\": \"trace\",\n      \"args\": [\"serve\"]\n    }\n  }\n}\n```\n\n**Cursor**: add the same block to `~/.cursor/mcp.json`, or to `.cursor/mcp.json` in a project.\n\nIf the client can't find `trace` on its `PATH`, use `\"command\": \"npx\", \"args\": [\"-y\", \"trace-memory-mcp\", \"serve\"]`.\n\n## Review stays with you\n\nBy default the MCP server only exposes tools that **propose** or **read**:\n`remember`, `replace`, `recall`, `pending` and `stats`.\n\nApproving, rejecting, forgetting, pinning and exporting happen in the CLI or the inspector, where you're the one deciding. That's the point: a model, or text it read on a web page, can't slip a memory into your active set.\n\nIf you really want clients to review too, start the server with `trace serve --allow-review` (or set `TRACE_MCP_ALLOW_REVIEW=1`).\n\n**Agents with a shell.** Tools like Claude Code can also run terminal commands, so a model could call `trace approve` directly. Block that in the agent's own permissions. For Claude Code, in `~/.claude/settings.json`:\n\n```json\n{\n  \"permissions\": {\n    \"deny\": [\"Bash(trace approve:*)\", \"Bash(trace pin:*)\", \"Bash(trace forget:*)\", \"Bash(trace export:*)\"]\n  }\n}\n```\n\nCommands you type yourself (`! trace approve <id>` in Claude Code) still work.\n\n## Receipts\n\nOver MCP, `remember` and `replace` require `evidence`: the person's own words, quoted. A model can't store a memory it can't back up.\n\nFrom the CLI, `--evidence` is optional, but a memory without one is marked **no receipt** in recall, the inspector and exports, so you can tell facts from rumors.\n\n## Review queue\n\n```bash\ntrace pending                 # what's waiting\ntrace approve m_abc123        # make it active\ntrace reject m_abc123         # drop it\ntrace inspect                 # local web UI at http://127.0.0.1:4747\n```\n\nThe inspector only listens on `127.0.0.1` and only accepts requests addressed to `127.0.0.1` or `localhost` from its own pages, so other websites open in your browser can't read or change your memories.\n\n## CLI\n\n```bash\ntrace remember \"I prefer tabs over spaces\" --kind preference --evidence \"tabs, always\" --source chat\ntrace recall \"editor setup\"\ntrace replace m_abc123 \"I moved to Amsterdam\" --evidence \"we moved last week\"\ntrace pin m_abc123\ntrace forget m_abc123\ntrace list --status superseded\ntrace export --format md > memories.md\ntrace doctor\n```\n\nKinds: `identity`, `fact`, `preference`, `event`. Run `trace help` for every option.\n\n## Recall\n\n`recall` returns up to `--limit` memories (default 8):\n\n1. pinned memories, capped at half the slots when there are search matches\n2. full-text matches (SQLite FTS5, porter stemming, Unicode-aware)\n3. the rest of the pinned memories\n4. the most recent memories, only to fill empty slots\n\n## Development\n\n```bash\nnpm install\nnpm test\nnpm run build\n```\n\n## License\n\nMIT\n","readmeFilename":"README.md"}