{"_id":"fossel","_rev":"7-58009c2395fa8258d17b37374215fc0c","name":"fossel","dist-tags":{"latest":"1.1.1"},"versions":{"1.0.0":{"name":"fossel","version":"1.0.0","_id":"fossel@1.0.0","maintainers":[{"name":"vignesh_!23","email":"vigneshgopikrishnan.7@gmail.com"}],"bin":{"fossel":"dist/index.js"},"dist":{"shasum":"3c99ae0606f49e70f02ac9c7bd56ad78a1fd76e8","tarball":"https://registry.npmjs.org/fossel/-/fossel-1.0.0.tgz","fileCount":4,"integrity":"sha512-nb59lO0G5rb19EVIofTFMeAS1vNr3pqvScJ86hcKf78kfchnxq/pR1FHqdoeCPiDGJwUPo3m9sG2atv8ekG2vQ==","signatures":[{"sig":"MEUCIAJ3QdLkS8aESCcGzoZREPH1HiBZf68ohNo0Xz3iiIhrAiEA08C3pnaZjPvmjB0ODbQjMZYggZuLHn4FIeSpEyiNo0w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":14902},"type":"module","gitHead":"873998e43558831caebd0703aa3d96cd2daadeb9","scripts":{"dev":"tsx src/index.ts","build":"tsup","smoke":"tsx scripts/smoke.ts","start":"node dist/index.js"},"_npmUser":{"name":"vignesh_!23","email":"vigneshgopikrishnan.7@gmail.com"},"_npmVersion":"10.9.4","description":"Local MCP memory server for open-source contributors","directories":{},"_nodeVersion":"22.21.1","dependencies":{"zod":"latest","nanoid":"latest","better-sqlite3":"latest","@modelcontextprotocol/sdk":"latest"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"latest","tsup":"latest","typescript":"latest","@types/node":"latest","@types/better-sqlite3":"latest"},"_npmOperationalInternal":{"tmp":"tmp/fossel_1.0.0_1777241752244_0.8521889178431383","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"fossel","version":"1.0.1","_id":"fossel@1.0.1","maintainers":[{"name":"vignesh_!23","email":"vigneshgopikrishnan.7@gmail.com"}],"bin":{"fossel":"dist/index.js"},"dist":{"shasum":"ead9085aaa424e4699ec20c55f12a4a6fa05c9d3","tarball":"https://registry.npmjs.org/fossel/-/fossel-1.0.1.tgz","fileCount":4,"integrity":"sha512-/jA9I+oMGZhvg2i2f5s0/BFYEOuZaT+T7A2vVi+xA8lRAPKz9dB/KIPk4u7xFOVZI3c4ehxpWEpZLR1FNqUI7Q==","signatures":[{"sig":"MEUCIQC5tvoOfWaNtAPiRfbsn4yI/DNhTXgmobhtPERfLOTFbQIgYbBSFXzrTUwuvnXectAhe0Sg4O2ezX+jIhLs9trF26A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":14902},"type":"module","gitHead":"2ca6ce45354b4fee32b4b81512d25abff210f9ee","scripts":{"dev":"tsx src/index.ts","build":"tsup","smoke":"tsx scripts/smoke.ts","start":"node dist/index.js"},"_npmUser":{"name":"vignesh_!23","email":"vigneshgopikrishnan.7@gmail.com"},"_npmVersion":"10.9.4","description":"Local MCP memory server for open-source contributors","directories":{},"_nodeVersion":"22.21.1","dependencies":{"zod":"latest","nanoid":"latest","better-sqlite3":"latest","@modelcontextprotocol/sdk":"latest"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"latest","tsup":"latest","typescript":"latest","@types/node":"latest","@types/better-sqlite3":"latest"},"_npmOperationalInternal":{"tmp":"tmp/fossel_1.0.1_1777280310167_0.5121217064182302","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"fossel","version":"1.0.6","_id":"fossel@1.0.6","maintainers":[{"name":"vignesh_!23","email":"vigneshgopikrishnan.7@gmail.com"}],"bin":{"fossel":"dist/index.js"},"dist":{"shasum":"a54ce09a314116f784db3867356b89ecc1321c2e","tarball":"https://registry.npmjs.org/fossel/-/fossel-1.0.6.tgz","fileCount":4,"integrity":"sha512-H3yP+g3lyQus1Y2cxAqUvrkPScEpvbbmkn98nP8hOgGGWjcGVhsRgGHAeoHRkfoBbENG3JG25Z8wJcncGG5MZA==","signatures":[{"sig":"MEQCIGPnxI+D+Neftn4rvDEREMYwMRCb7UbURzBX2Gwus2lqAiBg/GaW1JAM0zRICbrIt7aKqyTqrmsC3hleslJhy4i3PA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":14979},"type":"module","gitHead":"a7fe9b19f9c4c1f17810cb7fcc9da496cfa92569","scripts":{"ci":"npm run typecheck && npm run build && npm run smoke","dev":"tsx src/index.ts","build":"tsup","smoke":"tsx scripts/smoke.ts","start":"node dist/index.js","typecheck":"tsc --noEmit"},"_npmUser":{"name":"vignesh_!23","email":"vigneshgopikrishnan.7@gmail.com"},"_npmVersion":"10.8.2","description":"Local MCP memory server for open-source contributors","directories":{},"_nodeVersion":"20.20.2","dependencies":{"zod":"latest","nanoid":"latest","better-sqlite3":"latest","@modelcontextprotocol/sdk":"latest"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"latest","tsup":"latest","typescript":"latest","@types/node":"latest","@types/better-sqlite3":"latest"},"_npmOperationalInternal":{"tmp":"tmp/fossel_1.0.6_1777282851963_0.704975807643385","host":"s3://npm-registry-packages-npm-production"}},"1.0.8":{"name":"fossel","version":"1.0.8","_id":"fossel@1.0.8","maintainers":[{"name":"vignesh_!23","email":"vigneshgopikrishnan.7@gmail.com"}],"bin":{"fossel":"dist/cli.js"},"dist":{"shasum":"57722f69474113517432facb5ac2ca1f0d85ac07","tarball":"https://registry.npmjs.org/fossel/-/fossel-1.0.8.tgz","fileCount":5,"integrity":"sha512-UDGRR75bW/E1O4FIWoVAcnsYrbgEZduO0/psR3fVtUWc/WfbXuJZVzUcDumedJBschWmRL3V6bSYN1TECW5SRA==","signatures":[{"sig":"MEUCIQCDBU+sPtR1RpWV6Ms6AeDBhFERdL0nWe/+OMv8dRVfRgIgLIZN6OkYc6PPSeeryxNbatQtMACOitt8faOYwQhhfqs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":57179},"type":"module","gitHead":"f6cf90282beda9da44fabbd6bcc7fc97c466f10c","scripts":{"ci":"npm run typecheck && npm run build && npm run smoke","dev":"tsx src/index.ts","build":"tsup","smoke":"tsx scripts/smoke.ts","start":"node dist/index.js","typecheck":"tsc --noEmit"},"_npmUser":{"name":"vignesh_!23","email":"vigneshgopikrishnan.7@gmail.com"},"_npmVersion":"10.8.2","description":"Local MCP memory server for open-source contributors","directories":{},"_nodeVersion":"20.20.2","dependencies":{"zod":"latest","nanoid":"latest","better-sqlite3":"latest","@modelcontextprotocol/sdk":"latest"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"latest","tsup":"latest","typescript":"latest","@types/node":"latest","@types/better-sqlite3":"latest"},"_npmOperationalInternal":{"tmp":"tmp/fossel_1.0.8_1777671086946_0.9876330617786255","host":"s3://npm-registry-packages-npm-production"}},"1.0.9":{"name":"fossel","version":"1.0.9","keywords":["mcp","model-context-protocol","cursor","claude","claude-desktop","memory","sqlite","fts5","open-source","contributors","local-first","ai","llm"],"_id":"fossel@1.0.9","maintainers":[{"name":"vignesh_!23","email":"vigneshgopikrishnan.7@gmail.com"}],"homepage":"https://github.com/7vignesh/fossel#readme","bugs":{"url":"https://github.com/7vignesh/fossel/issues"},"bin":{"fossel":"dist/cli.js"},"dist":{"shasum":"2ebc04ad0290784070c7c9cb1226a9c0eab4961c","tarball":"https://registry.npmjs.org/fossel/-/fossel-1.0.9.tgz","fileCount":5,"integrity":"sha512-/K0gj64IxEXAHS1rCa2U3rJqBwACD0lq+0HzGoRlT9S6cULCkEmafeL5k9olwUbi54O2E+/6JPwdybaWDyOcZA==","signatures":[{"sig":"MEUCIQC4t4AQalzLs/8QovCHS4akMilGvPgAyVAn6bB+DVAqCAIgHwkOWKftwBPRMchrcxdLjOWEQj+KvitrMHsfQkh9P1w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":58457},"type":"module","gitHead":"5161cb0c887fa2acaa27c6ef3325cfbc72ca8980","scripts":{"ci":"npm run typecheck && npm run build && npm run smoke","dev":"tsx src/index.ts","build":"tsup","smoke":"tsx scripts/smoke.ts","start":"node dist/index.js","typecheck":"tsc --noEmit"},"_npmUser":{"name":"vignesh_!23","email":"vigneshgopikrishnan.7@gmail.com"},"repository":{"url":"git+https://github.com/7vignesh/fossel.git","type":"git"},"_npmVersion":"10.8.2","description":"Local-first MCP memory for Cursor & Claude: repo context in SQLite, FTS5 search, pins, PR summaries. No cloud.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"zod":"latest","nanoid":"latest","better-sqlite3":"latest","@modelcontextprotocol/sdk":"latest"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"latest","tsup":"latest","typescript":"latest","@types/node":"latest","@types/better-sqlite3":"latest"},"_npmOperationalInternal":{"tmp":"tmp/fossel_1.0.9_1777932200103_0.3495548934777528","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"fossel","version":"1.1.0","keywords":["mcp","model-context-protocol","cursor","claude","claude-desktop","memory","sqlite","fts5","open-source","contributors","local-first","ai","llm"],"_id":"fossel@1.1.0","maintainers":[{"name":"vignesh_!23","email":"vigneshgopikrishnan.7@gmail.com"}],"homepage":"https://github.com/7vignesh/fossel#readme","bugs":{"url":"https://github.com/7vignesh/fossel/issues"},"bin":{"fossel":"dist/cli.js"},"dist":{"shasum":"ba9192f3ca3557d90032100f929e811148427dbf","tarball":"https://registry.npmjs.org/fossel/-/fossel-1.1.0.tgz","fileCount":5,"integrity":"sha512-Jaw96UxQwcZFnywnXMkdp1WujThWBc087/qkXcTO2h1VX9ZsUw2RPb3E7nAlKnTxUNAJRJbwYkmYAa/Z7QlUMQ==","signatures":[{"sig":"MEQCIA+R+6hz8/pHUdDLqQB/H6PmAQTAlxOWvHmyYs5BW/sdAiBcy4mAIGUu54syp65yME+DMZx6DknCoi3UYQOMFYhwag==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":140782},"type":"module","gitHead":"832d1fdbeb96d47c3875555d096364592b5dd38b","scripts":{"ci":"npm run typecheck && npm run test && npm run build && npm run smoke","dev":"tsx src/index.ts","test":"tsx --test tests/*.test.ts","build":"tsup","smoke":"tsx scripts/smoke.ts","start":"node dist/index.js","typecheck":"tsc --noEmit"},"_npmUser":{"name":"vignesh_!23","email":"vigneshgopikrishnan.7@gmail.com"},"repository":{"url":"git+https://github.com/7vignesh/fossel.git","type":"git"},"_npmVersion":"10.8.2","description":"Local-first MCP memory for Cursor & Claude: repo context in SQLite, FTS5 search, pins, PR summaries. No cloud.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"zod":"latest","nanoid":"latest","better-sqlite3":"latest","@modelcontextprotocol/sdk":"latest"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"latest","tsup":"latest","typescript":"latest","@types/node":"latest","@types/better-sqlite3":"latest"},"_npmOperationalInternal":{"tmp":"tmp/fossel_1.1.0_1779872698602_0.7203429225965656","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"fossel","version":"1.1.1","description":"Local-first MCP memory for Cursor & Claude: repo context in SQLite, FTS5 search, pins, PR summaries. No cloud.","keywords":["mcp","model-context-protocol","cursor","claude","claude-desktop","memory","sqlite","fts5","open-source","contributors","local-first","ai","llm"],"homepage":"https://github.com/7vignesh/fossel#readme","bugs":{"url":"https://github.com/7vignesh/fossel/issues"},"repository":{"type":"git","url":"git+https://github.com/7vignesh/fossel.git"},"type":"module","bin":{"fossel":"dist/cli.js"},"scripts":{"build":"tsup","dev":"tsx src/index.ts","start":"node dist/index.js","smoke":"tsx scripts/smoke.ts","test":"tsx --test tests/*.test.ts","typecheck":"tsc --noEmit","ci":"npm run typecheck && npm run test && npm run build && npm run smoke"},"dependencies":{"@modelcontextprotocol/sdk":"latest","better-sqlite3":"latest","nanoid":"latest","zod":"latest"},"devDependencies":{"@types/better-sqlite3":"latest","@types/node":"latest","tsup":"latest","tsx":"latest","typescript":"latest"},"_id":"fossel@1.1.1","gitHead":"1d5caa58741970cb37870979a9754ba8633a535c","_nodeVersion":"20.20.2","_npmVersion":"10.8.2","dist":{"integrity":"sha512-xTWlskRYCnlu8jCduYI2ynnNQKhnt7OGAGhpugb9yEJxTe+f/1NZV0TDAAd5eqkTDUVaKGjpYy5NqBDim0B06g==","shasum":"c704cff8564d2a8fed39da9c8074e911912f064b","tarball":"https://registry.npmjs.org/fossel/-/fossel-1.1.1.tgz","fileCount":5,"unpackedSize":155834,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIBpWNrhuz9KvVtcQJXDiFmHHvL8n47lUuWi35BiNxssaAiBPyjlbua68A7dRNtIofOF8Ybt3nN6n04lsJIBUGItzXQ=="}]},"_npmUser":{"name":"vignesh_!23","email":"vigneshgopikrishnan.7@gmail.com"},"directories":{},"maintainers":[{"name":"vignesh_!23","email":"vigneshgopikrishnan.7@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/fossel_1.1.1_1779880757044_0.8838575518761935"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-26T22:15:52.243Z","modified":"2026-05-27T11:19:17.342Z","1.0.0":"2026-04-26T22:15:52.381Z","1.0.1":"2026-04-27T08:58:30.309Z","1.0.6":"2026-04-27T09:40:52.119Z","1.0.8":"2026-05-01T21:31:27.110Z","1.0.9":"2026-05-04T22:03:20.290Z","1.1.0":"2026-05-27T09:04:58.733Z","1.1.1":"2026-05-27T11:19:17.209Z"},"bugs":{"url":"https://github.com/7vignesh/fossel/issues"},"homepage":"https://github.com/7vignesh/fossel#readme","keywords":["mcp","model-context-protocol","cursor","claude","claude-desktop","memory","sqlite","fts5","open-source","contributors","local-first","ai","llm"],"repository":{"type":"git","url":"git+https://github.com/7vignesh/fossel.git"},"description":"Local-first MCP memory for Cursor & Claude: repo context in SQLite, FTS5 search, pins, PR summaries. No cloud.","maintainers":[{"name":"vignesh_!23","email":"vigneshgopikrishnan.7@gmail.com"}],"readme":"# Fossel\n\n**Local-first MCP memory for every repo you work on.** Store conventions, bug fixes, reviewer patterns, and decisions in **SQLite on your machine** (with FTS5 search). Works with **Cursor**, **Claude Desktop**, and any **stdio MCP** client. **No accounts, no cloud.**\n\n---\n\n## Quick start (~2 minutes)\n\n1. **Onboard** (prints copy-paste MCP config + creates a sample memory):\n\n   ```bash\n   npx -y fossel init\n   ```\n\n2. **Add the JSON** from the output to **Cursor** (`~/.cursor/mcp.json`) or **Claude Desktop** MCP settings, then restart the app.\n\n3. **Run the server** (what the IDE launches; you can also run it manually for testing):\n\n   ```bash\n   npx -y fossel\n   ```\n\n4. In chat, just say *\"remember this\"* and Fossel handles the rest. See [Simple mode](#simple-mode-recommended) below.\n\n**Database path:** `~/.fossel/memory.db` (override with `FOSSEL_DB_PATH`).\n\n---\n\n## Why Fossel?\n\n| You get | Details |\n|--------|---------|\n| **Local data** | SQLite + migrations; nothing leaves your disk unless you share it. |\n| **Repo-scoped memory** | One canonical key per repo; aliases collapse automatically. |\n| **Find anything** | FTS5 search across notes; pin what matters; summarize for PRs. |\n| **Ambient capture** | Natural-language `remember`; dedupes near-duplicates on save. |\n| **Evolving schema** | Startup migrations keep upgrades safe for existing databases. |\n\n---\n\n## Simple mode (recommended)\n\nTwo tools cover the 80% case. Neither needs you to specify `type` or `tags`.\n\n### `remember` — save a memory\n\nJust send a sentence. Fossel infers the memory type, generates tags, resolves the repo, and merges near-duplicates into the existing row.\n\n> **You:** Remember: JWT lives in localStorage and 401 redirects to /login.\n>\n> **Agent calls** `remember({ note: \"JWT lives in localStorage and 401 redirects to /login.\" })`\n>\n> **Fossel:** Stored as `convention` with tags `jwt, auth, login` for `7vignesh/fossel`.\n\n### `get_context` — pull repo context\n\nPinned first, then recent, then FTS matches if you pass a `query`. Default limit of 8 is tuned for LLM context injection.\n\n> **You:** What does Fossel remember about auth here?\n>\n> **Agent calls** `get_context({ query: \"auth\" })`\n>\n> **Fossel:** returns a markdown block ready to drop into the system prompt.\n\nThat's it for daily use. The repo is detected from your `cwd` automatically.\n\n### Zero-prompt usage in Cursor\n\nFossel exposes a static MCP resource at `fossel://context/current-repo`. Cursor and Claude Desktop list resources on session start, so Fossel's pinned + recent memories show up before you type anything. Clients that don't list resources can still call `get_context` from the agent's first turn — that's all the prompting needed.\n\n---\n\n## Advanced mode\n\nEvery original tool is still available for power users.\n\n| Tool | Purpose |\n|------|---------|\n| `remember` | Natural-language save with auto-type/tags/dedupe (preferred). |\n| `get_context` | Unified pinned + recent + FTS retrieval. |\n| `resolve_repo` | Show canonical key, aliases, detected git remote. |\n| `dedupe_repo` | Find or merge near-duplicate memories. |\n| `store_context` | Explicit save with `type` and `tags`. |\n| `get_repo_context` | Recent memories grouped by type (pinned first). |\n| `search_memory` | FTS search, optional repo filter. |\n| `summarize_repo_context` | Markdown brief for a repo. |\n| `pin_memory` / `unpin_memory` | Pin important items. |\n| `update_memory` | Partial update by numeric id. |\n| `delete_memory` | Delete by legacy string id. |\n\n### Memory types\n\n`convention`, `bug_fix`, `reviewer_pattern`, `decision`, `issue`, `general`.\n\n### Tool examples\n\n`store_context` (explicit form):\n\n```json\n{\n  \"repo\": \"7vignesh/fossel\",\n  \"type\": \"convention\",\n  \"note\": \"Use pnpm workspaces for all package scripts.\",\n  \"tags\": [\"pnpm\", \"workspaces\"]\n}\n```\n\n`pin_memory`:\n\n```json\n{ \"id\": 12 }\n```\n\n`summarize_repo_context`:\n\n```json\n{ \"repo\": \"RocketChat/Rocket.Chat\" }\n```\n\n```md\nFossel Context Summary: RocketChat/Rocket.Chat\n\n📌 Pinned\n- (12) Always run test matrix before merge.\n\nConventions\n- (3) Use feature flags for UI experiments.\n\nBug Fixes\n- (5) Fixed webhook retries by making queue idempotent.\n```\n\n`dedupe_repo` (dry run, then apply):\n\n```json\n{ \"repo\": \"7vignesh/fossel\", \"apply\": false }\n{ \"repo\": \"7vignesh/fossel\", \"apply\": true, \"threshold\": 0.85 }\n```\n\n---\n\n## Repo identity\n\nFossel resolves the canonical key for your workspace in this order:\n\n1. `git remote get-url origin` → normalized to `owner/repo`\n2. folder basename\n3. anything you pass explicitly is recorded as an alias of the above\n\nMemories saved under any alias are reachable from the canonical key, and `npx fossel init` automatically merges legacy alias rows (e.g. `studentmanager` → `7vignesh/student-manager`).\n\n---\n\n## Commands\n\n```bash\nnpx -y fossel          # MCP server over stdio\nnpx -y fossel init     # onboarding + canonical key + safe alias merge\nnpx -y fossel doctor   # diagnose repo sprawl, duplicates, MCP config\n```\n\n### `fossel init`\n\nDetects the canonical repo key, prints **Cursor** and **Claude Desktop** MCP snippets, merges legacy alias rows into the canonical key, and inserts a starter memory only when the database is empty.\n\n### `fossel doctor`\n\nReports on:\n\n- canonical repo key for the workspace\n- sibling keys that look like the same repo (offers a fix)\n- exact-duplicate memory clusters (suggests `fossel doctor --fix` or `dedupe_repo`)\n- memory notes that still mention deprecated repo keys\n- detected MCP config files\n\nPass `--fix` to apply safe automated cleanup in one go: merge sibling repo keys, rewrite stale alias mentions, and remove exact-text duplicates. Without `--fix` it's read-only and exits non-zero on issues so it can run in CI.\n\n### `fossel init`\n\n`fossel init` auto-deduplicates exact duplicate memories at the end of the run; pass `--no-dedupe` to opt out.\n\n---\n\n## Cursor MCP config\n\n`~/.cursor/mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"fossel\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"fossel\"],\n      \"env\": {\n        \"FOSSEL_WORKSPACE\": \"${workspaceFolder}\"\n      }\n    }\n  }\n}\n```\n\n## Claude Desktop MCP config\n\n```json\n{\n  \"mcpServers\": {\n    \"fossel\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"fossel\"],\n      \"env\": {\n        \"FOSSEL_WORKSPACE\": \"/absolute/path/to/your/project\"\n      }\n    }\n  }\n}\n```\n\n`FOSSEL_WORKSPACE` pins Fossel to your project root. Without it, the server falls back to `process.cwd()`, which is occasionally wrong — Cursor and Claude Desktop sometimes spawn MCP servers from your home directory, which would silently route memories to the wrong repo. Cursor expands `${workspaceFolder}` automatically; Claude Desktop needs an absolute path.\n\n---\n\n## Development (from source)\n\n```bash\nnpm install\nnpm run dev          # MCP server over stdio\nnpm run typecheck\nnpm test             # unit tests (node:test via tsx)\nnpm run smoke        # end-to-end MCP roundtrip\nnpm run build\nnpm run start        # node dist/index.js\nnpm run ci           # typecheck + tests + build + smoke\n```\n\n## Notes\n\n- **Local-first:** data stays on your machine.\n- **Search:** FTS5 (no `sqlite-vec` in v1).\n- **`FOSSEL_DB_PATH`:** optional override for DB location (e.g. tests).\n- **Schema:** migrations live in `src/db/migrate.ts`; reference shape in `src/db/schema.sql`.\n\n## Community\n\nIf Fossel saves you time, **[star the repo](https://github.com/7vignesh/fossel)** and **[open an issue](https://github.com/7vignesh/fossel/issues)** for bugs or ideas — that helps others discover it too.\n","readmeFilename":"README.md"}