DeepSeek Harness (dsh) meets Brain Server: agent memory as an MCP server
2026. Why dsh’s “everything is a plugin” design is the right host for a memory server, and how Brain Server fits it without being a plugin.
If you’re running DeepSeek Harness (dsh) and you want it to actually
remember, the question isn’t “is there a dsh memory plugin?” — it’s “which
MCP memory server do I point the generic bridge at?” This post covers what dsh
is, why its plugin architecture is genuinely different, and how Brain Server’s
MCP server connects to it as a first-class memory backend.
What is DeepSeek Harness (dsh)?
DeepSeek Harness (dsh) is an open-source agent harness developed by
DeepSeek AI. It wraps a model — DeepSeek or any other — into a desktop agent
with tools, plugins, memory, and a Web UI (default http://127.0.0.1:3080). The
design is built on Cordis, a plugin framework whose architecture is described
in A Programming Paradigm for Spatiotemporal
Composability.
The single sentence that matters: dsh uses an architecture where everything is a plugin. Not “plugins are a feature.” Everything — tools, memory, prompt assembly, settings tabs, commands — is a composable plugin loaded into a Cordis container.
What makes dsh good and unique
Most harnesses bolt tools onto a fixed runtime. dsh flips the model. The consequences are what make it worth a second look:
- Composable, not monolithic. Because everything is a Cordis plugin, you compose a harness from exactly the pieces you want. Want the model to speak HTTP but not touch the filesystem? You control that per-plugin, per-profile.
- Profiles as plugin bundles. dsh’s profile system bundles plugins into presets — a “memory” profile pulls in a memory plugin, an “agentic” profile pulls in tools. This mirrors exactly how Brain Server’s own Profiles work, which is a nice symmetry.
- A generic MCP client instead of one-off integrations. dsh does not write a
bespoke adapter per memory system. It ships one
@deepseek-ai/dsh-mcp-clientbridge that discovers and registers any MCP server’s tools. That is the deliberate, documented decision: rather than bake Memorix’s API (or anyone’s) into the product, dsh exposes the generic MCP boundary and lets you pick the memory server. - Client-side, scriptable, inspectable. The CLI is real; configs are plain overlay files you can read. Nothing is hidden in a managed SaaS surface.
The honest ceiling
dsh’s generic MCP client starts the server process but is not a package manager, and it does not re-create tools across MCP servers — each server brings its own tool semantics. It also has no automatic reconnect if a child transport closes. None of that is a defect; it’s a deliberate responsibility boundary (DSH owns lifecycle + discovery; the provider owns the server). The practical consequence is that you install and pin the memory server binary yourself — and that’s exactly the part Brain Server makes trivial.
Where your memory server enters
dsh ships opt-in, default-off overlay examples under examples/mcp-memory
(Memorix, MCP Reference Memory, Engram). Every file inserts exactly one
@deepseek-ai/dsh-mcp-client row. A “third-party memory MCP server” is the
documented, first-class slot — and Brain Server’s mcp binary is a drop-in
candidate for that slot.
What Brain Server’s MCP server gives a dsh agent
Brain Server ships a MCP server as a separate mcp binary. It speaks
JSON-RPC 2.0 over stdio and translates MCP tool calls into HTTP calls against a
running brain-server. Point dsh’s bridge at it and the agent gains:
| Tool | What it lets the agent do |
|---|---|
brain_search | Hybrid semantic + lexical search over the whole store |
brain_recall | Deterministic end-to-end recall (embed → hybrid) |
brain_ingest | Write a memory with explicit entities/relations |
ump.remember / ump.get / ump.revise / ump.forget | Full UMP record lifecycle: store, read, revise, erase |
ump.recall | Ranked recall with per-result signals and bi-temporal filter.valid_at |
ump.feedback | Record outcome feedback — the anti-rubber-stamp signal |
ump.audit / ump.audit.verify | Inspect and verify the hash-chained audit trail |
ump.capabilities | Negotiate the memory contract up front |
That is not just “a search tool.” It is a governed memory lifecycle — write, recall, revise, forget, audit — all behind one MCP server. For an agent harness, the difference between “I can search” and “I can store, retrieve, revise, and be audited” is the difference between a cache and a memory.
The standard: UMP 1.0 / L3
The ump.* tools are not an ad-hoc API. They implement the
Universal Memory Protocol (UMP) — an open
standard for portable agent memory. Brain Server’s conformance is verified
against the reference suite (@universalmemoryprotocol/core 1.0.0): 13/13
checks, UMP 1.0 / L3, re-run by CI on every push. With an operator key
configured, GET /ump/capabilities reports conformance: "L3" — the local
integrity layer with signed records and capability tokens.
Why this matters in a dsh context: UMP is transport-agnostic. It does not say “you must use Brain Server.” It says “here is the contract a portable memory must meet.” Because Brain Server implements that standard and exposes it over MCP, the memory your dsh agent writes is portable — a UMP-compliant reader on another host can read, verify, and reuse it without a shared database. That is the lock-in-free memory the no-lock-in post argues for, delivered.
Does it align with dsh correctly?
Yes — on both sides of the boundary:
- Protocol: dsh’s bridge targets the modern (2026-07-28) MCP spec with
server/discover. Brain Server’smcpbinary implements that and the legacy (2025-11-25) handshake, advertisingsupportedVersions: ["2026-07-28","2025-11-25"]. So discovery andtools/listwork regardless of which MCP era the host speaks. - Responsibility boundary: dsh starts the server and discovers tools; the
provider owns install, storage, and supervision. Brain Server’s
mcpbinary is clientside only — it performs no listening and no network binds, and it inherits the server’s auth, PII read-path masking, and audit on every call. It is exactly the thin, provider-owned component the dsh boundary expects. - No vendor lock-in on either side: if you replace Brain Server, dsh doesn’t change — the generic bridge just points at a different memory server. If you replace dsh, your UMP memory comes with you.
Connect it
A complete overlay + pinned install steps for the mcp binary are in the
full dsh integration guide. In short:
- Build/pin the
mcpbinary (dsh starts it, it does not install it). - Point dsh at a running brain-server with
BRAIN_URL+ token. - Add a one-file Cordis overlay inserting a
@deepseek-ai/dsh-mcp-clientrow. - Tools register as
mcp__brain-server__*.
One macOS note (see the guide): the installed mcp may carry the
com.apple.provenance quarantine attribute, which SIGKILLs the process on first
exec (exit 137). Strip it with xattr -dr com.apple.provenance ~/.local/bin/mcp
once, or reinstall via scripts/install-service.sh, before pointing dsh at it.
The bottom line
dsh’s “everything is a plugin” architecture and its generic MCP bridge are the right host for a memory server — not because dsh needs Brain Server, but because the two share the same philosophy: thin, composable, inspectable, and honest about the responsibility boundary. Brain Server connects to dsh not as a plugin but as the thing dsh was designed to accept: a portable, standards-backed (UMP L3), auditable memory MCP server.
Read the full integration guide or the Universal Memory Protocol spec to go deeper.