<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[DSH Plugin]]></title><description><![CDATA[DSH Plugin]]></description><link>https://dsh-plugin.hashnode.dev</link><generator>RSS for Node</generator><lastBuildDate>Sat, 14 Nov 2026 21:23:31 GMT</lastBuildDate><atom:link href="https://dsh-plugin.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Wiring a memory MCP into DeepSeek Harness: why “it remembered” can be an illusion]]></title><description><![CDATA[Six pitfalls when connecting a memory MCP to DeepSeek Harness, plus how to verify recall honestly.]]></description><link>https://dsh-plugin.hashnode.dev/wiring-a-memory-mcp-into-deepseek-harness-why-it-remembered-can-be-an-illusion</link><guid isPermaLink="true">https://dsh-plugin.hashnode.dev/wiring-a-memory-mcp-into-deepseek-harness-why-it-remembered-can-be-an-illusion</guid><category><![CDATA[mcp]]></category><category><![CDATA[tooling]]></category><category><![CDATA[Productivity]]></category><dc:creator><![CDATA[啦啦啦种太阳]]></dc:creator><pubDate>Fri, 13 Nov 2026 08:31:56 GMT</pubDate><content:encoded><![CDATA[<p><strong>Connect a memory MCP to DeepSeek Harness by installing a chosen server, applying its default-off overlay, and verifying a write and recall in separate sessions while keeping the provider's storage scope unchanged.</strong></p>
<h2>DeepSeek Harness: What does the memory MCP connection do?</h2>
<p>The <a href="https://deepseek-harness.github.io/deepseek-harness/en/guide/mcp-memory">memory MCP guide</a> offers three default-off third-party interoperability examples. DSH loads a Cordis overlay, starts a configured stdio process or connects to a Streamable HTTP server, discovers tools, and exposes them as <code>mcp__&lt;serverName&gt;__&lt;tool&gt;</code>. The provider, not DSH, owns its storage and provider-specific behavior. The <a href="https://deepseek-harness.github.io/deepseek-harness/en/reference/subsystems/tools">tools reference</a> describes tool registration and execution as separate from the external server's persistence.</p>
<p>The examples are not an endorsement or a security certification. Evaluate the server, its dependencies, storage and data handling for your own use. DSH does not download the server, initialize its database, choose its embedding provider, create an account, migrate data or supervise an independent HTTP service. An HTTP service must already be running; a stdio child is started and stopped with the DSH plugin lifecycle.</p>
<p><img src="/blog/memory-mcp-setup/flow.en.svg" alt="Memory MCP server setup and fresh-session recall" /></p>
<h2>DeepSeek Harness: Which example stores data where?</h2>
<table>
<thead>
<tr>
<th>Example</th>
<th>Transport and documented prerequisite</th>
<th>Documented storage behavior</th>
</tr>
</thead>
<tbody><tr>
<td>Memorix</td>
<td>stdio; Node 22.18+ and <code>memorix@1.3.0</code></td>
<td>Defaults to <code>~/.memorix/data</code>; detects Git project from DSH working directory</td>
</tr>
<tr>
<td>MCP Reference Memory</td>
<td>stdio; <code>@modelcontextprotocol/server-memory@2026.7.4</code></td>
<td>Example uses <code>$HOME/.dsh-mcp-reference-memory.jsonl</code> for a local knowledge graph</td>
</tr>
<tr>
<td>Engram</td>
<td>stdio; Go 1.25.10+ and the documented <code>v1.20.0</code> install, or matching binary</td>
<td>Defaults to <code>~/.engram</code>; detects Git project from DSH working directory</td>
</tr>
</tbody></table>
<p>Memorix can use local heuristic mode without a model or embedding service. The Reference Memory server stores entities, relations and observations and offers read, search and open tools. Its search uses case-insensitive substring matching over names, types and observations; it does not supply semantic retrieval, embeddings, automatic summarization, conflict resolution or a forgetting policy. Engram owns its storage and project selection. These are descriptions of the cited examples, not guarantees for other versions or servers.</p>
<h2>DeepSeek Harness: How do you enable and test one?</h2>
<p>The following is the guide's Reference Memory example. Its overlay path assumes a checkout containing the example files; adjust the path to your actual copy.</p>
<ol>
<li>Install the pinned server separately:</li>
</ol>
<pre><code class="language-sh">npm install --global @modelcontextprotocol/server-memory@2026.7.4
</code></pre>
<ol start="2">
<li>Start the Web profile with its overlay:</li>
</ol>
<pre><code class="language-sh">dsh web --patch "$PWD/apps/cli/config/examples/mcp-memory/mcp-reference-memory.cordis.yml"
</code></pre>
<ol start="3">
<li>Wait for initial asynchronous discovery and the provider's <code>mcp__...</code> tools to appear. In session A, ask it to remember a unique, non-sensitive test value; confirm a write tool was called and returned success.</li>
<li>Create session B in the same running Host without copying session A's conversation. Ask the agent to check memory for the value. Confirm a search or recall call and its result.</li>
<li>Ask a follow-up that uses the recalled value, and verify it was used. Keep the provider's storage scope the same throughout; a new session is required, but a Host restart is not.</li>
</ol>
<p>The test distinguishes persistent recall from a model repeating information already present in the same conversation. It is evidence about that value and storage scope, not proof that every future request will use memory. The guide offers an optional instruction to ask the model to write when requested and search when history may matter; the instruction supplements the existing persona and does not force tool use.</p>
<h2>DeepSeek Harness: How can you persist or turn off the connection?</h2>
<p>Omitting the <code>--patch</code> keeps all three examples disabled in the shipped composition. If the overlay was only supplied on the command line, start a subsequent run without it. If you merged its single <code>insert</code> into a persistent patch, remove that specific insertion from the relevant layer and reload or restart as appropriate; preserve unrelated patches. The documented persistent locations are <code>$DSH_HOME/profiles/&lt;name&gt;/cordis.patch.yml</code> for a profile and <code>$DSH_HOME/cordis.patch.yml</code> for the machine's profiles.</p>
<p>Turning off the connection is separate from deleting stored memory. The guide assigns storage to the provider and does not specify a universal deletion procedure. Consult the chosen provider's own documentation before removing data, and check backups and any other clients using it. For the Reference Memory example, <code>MEMORY_FILE_PATH</code> can override the example path; for Memorix <code>MEMORIX_DATA_DIR</code> changes the data location, while Engram accepts <code>ENGRAM_DATA_DIR</code> and <code>ENGRAM_PROJECT</code>. Record the actual scope before diagnosing a missing value.</p>
<p>The <a href="https://deepseek-harness.github.io/deepseek-harness/en/develop/basic/config">plugin configuration guide</a> explains that configuration is validated when a plugin loads. A malformed configuration can fail loading; that differs from a server being absent, a tool not yet discovered, or a valid search returning no match. Check the relevant layer and server output before changing unrelated configuration.</p>
<h3>What should you check when recall fails?</h3>
<p>Start with discovery. The client discovers tools asynchronously, so immediately prompting after startup can precede tool registration. If tools never appear, inspect the selected overlay, server installation and plugin configuration. If the tools appear but a call fails, check the server's own output and whether the child is in an outage or reconnecting. If the search succeeds but returns no value, compare the provider's actual file, directory or project identity with the one used for the write.</p>
<p>The two-session test deliberately holds storage scope constant. Starting a new session changes conversation history, while restarting a Host is not required. If a project-sensitive provider selects a different project after a working-directory change, the test is no longer comparing the same scope. Record the provider and effective location before changing settings; this prevents a missing result from being mistaken for a lost write.</p>
<h3>How does an overlay interact with existing configuration?</h3>
<p>The guide's examples are single insert patches. Supplying one on the command line makes it part of that run; persisting the insertion in a profile or home layer changes later runs too. Before editing a persistent file, inspect existing entries and merge the intended insertion rather than overwriting the file. When disabling it later, remove only that insertion. Restart or reload according to the active composition, then verify that the provider's tools are no longer exposed.</p>
<p>The plugin configuration guide explains that schemas validate configuration at load time. That check is useful for the DSH row but does not prove the external server is installed, healthy or appropriate for your data. Provider installation and the overlay are separate responsibilities. A remote Streamable HTTP configuration likewise depends on an already-running service and provider-specific authentication and storage choices.</p>
<p>Finally, decide what should be remembered. A model can call a write tool in response to an instruction, and a retrieved record may influence later answers. The optional instruction in the guide is a behavioral hint, not a deterministic retention or deletion policy. Treat test values, private facts and third-party data differently, and consult the chosen server's documentation for its own controls. Removing the DSH connection stops that integration from being selected in the described composition; it does not establish that stored data or backups were erased.</p>
<h2>DeepSeek Harness: What are the limits and safety boundaries?</h2>
<p>The stdio bridge removes ambient variables whose names usually identify credentials and all <code>DSH_*</code> variables before starting a child, but other environment variables remain inherited. Optional upstream secrets belong in the row's <code>config.env</code> as described by the guide, not as literal secret values in YAML. Check what the server receives and what it persists; environment filtering does not make arbitrary server code safe.</p>
<p>If an MCP child crashes, the guide describes reconnection with backoff and tool re-synchronization. Calls fail during the outage; when the retry budget is exhausted, tools are unregistered until reload or restart. Initial discovery is also asynchronous. Neither a tool's presence nor a successful test establishes that sensitive data is appropriate to store. Inspect third-party retention and access policies, and use a harmless unique value for the first test.</p>
<h2>DeepSeek Harness: What do these terms mean?</h2>
<ul>
<li><strong>MCP server</strong>: the external process or service providing tools through the Model Context Protocol.</li>
<li><strong>Overlay</strong>: a patch that inserts the configured client into the selected DSH composition.</li>
<li><strong>Stdio</strong>: a transport using the child process's standard streams.</li>
<li><strong>Storage scope</strong>: the provider's actual file, directory or project identity used for reads and writes.</li>
<li><strong>Fresh-session recall</strong>: retrieving a value in another conversation without relying on the first conversation's messages.</li>
</ul>
<hr />
<p><em>Originally published at <a href="https://dsh-plugin.com/blog/memory-mcp-setup">https://dsh-plugin.com/blog/memory-mcp-setup</a></em></p>
]]></content:encoded></item></channel></rss>