diff --git a/README.md b/README.md index b4ba74c..1f05f4c 100644 --- a/README.md +++ b/README.md @@ -241,6 +241,37 @@ mneme is a standard **MCP server**, supporting both **stdio** (default, one proc | Windsurf | Add to MCP server config | | Cline / Continue | Add to MCP settings | +**Config provided, not verified by us:** + +| Agent | Setup | +|-------|-------| +| DeepSeek Harness (dsh) | Copy [`examples/dsh.cordis.yml`](examples/dsh.cordis.yml) into your dsh config — see below | + +### DeepSeek Harness + +dsh deliberately ships no memory layer of its own. Its design notes reject +per-provider plugins outright, on the grounds that they repeat "auth, +configuration, lifecycle, and tool wrappers that MCP already standardizes" — so +the supported path is a Cordis overlay pointing its generic MCP client at +whatever server you want. + +That means mneme needs no dsh plugin and no adapter code. It already speaks +stdio MCP, which is the only thing the overlay requires. The integration is a +config file: [`examples/dsh.cordis.yml`](examples/dsh.cordis.yml). + +Two caveats worth reading before you wire it up: + +- **The overlay uses `node /mcp-server.mjs`, not a bare command.** + mneme is not on npm with a `bin`, so there is nothing on PATH to invoke. You + need a checkout. +- **Set `EMBEDDING_API_*`.** Without them mneme starts, answers, and gives you + FTS5 keyword search only. Hybrid recall is the reason to run it; losing it is + not an error, just a quieter and worse result set. + +The overlay is provided as a starting point and is **not covered by this repo's +test suite** — the CI here exercises mneme's own MCP server, not dsh's loader. +Reports of it working (or not) are welcome. + --- ## Features diff --git a/examples/dsh.cordis.yml b/examples/dsh.cordis.yml new file mode 100644 index 0000000..6ed9303 --- /dev/null +++ b/examples/dsh.cordis.yml @@ -0,0 +1,41 @@ +# DeepSeek Harness (dsh) overlay for mneme — opt-in, default-off. +# +# mneme needs no dsh plugin: it is already a standard MCP server and dsh ships a +# generic MCP client (@deepseek-ai/dsh-mcp-client). This file only points that +# client at a mneme checkout. Copy it into your dsh config and edit the path. +# +# Unlike the overlays dsh ships in examples/mcp-memory, `command` here is `node` +# with an absolute script path rather than a bare executable: mneme is not +# published to npm with a `bin`, so there is nothing on PATH to invoke. Clone the +# repo, run `npm install`, and point args at that checkout. +# +# Two things that will silently give you a worse system if you skip them: +# +# 1. TOKENMEM_DB_PATH. Without it the DB is created relative to the process +# working directory, so the store you build in one session can be invisible +# from the next. Set it absolute. +# +# 2. EMBEDDING_API_*. Without these mneme starts fine and answers queries — as +# FTS5 keyword search only. Hybrid recall (FTS + vector KNN fused by RRF) is +# the reason to run mneme at all, and its absence is not an error, just a +# quieter, worse result set. Recent builds warn once per process on the +# degrade path; check stderr on first run if you are unsure which mode you +# are in. +- insert: + - id: memory-mneme + name: '@deepseek-ai/dsh-mcp-client' + config: + serverName: mneme + transport: stdio + command: node + # EDIT THIS PATH to your mneme checkout. + args: ['/absolute/path/to/mneme/mcp-server.mjs'] + cwd: !!js process.cwd() + env: + TOKENMEM_DB_PATH: !!js >- + process.env.TOKENMEM_DB_PATH?.trim() || process.getBuiltinModule('node:path').join(process.getBuiltinModule('node:os').homedir(), '.mneme', 'mneme.db') + # Optional but strongly recommended — see note 2 above. + EMBEDDING_API_BASE_URL: !!js process.env.EMBEDDING_API_BASE_URL ?? '' + EMBEDDING_API_KEY: !!js process.env.EMBEDDING_API_KEY ?? '' + EMBEDDING_MODEL: !!js process.env.EMBEDDING_MODEL ?? 'text-embedding-3-small' + EMBEDDING_DIMENSION: !!js process.env.EMBEDDING_DIMENSION ?? '1536'