Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 31 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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 <abs-path>/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
Expand Down
41 changes: 41 additions & 0 deletions examples/dsh.cordis.yml
Original file line number Diff line number Diff line change
@@ -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'
Loading