> For the complete documentation index, see [llms.txt](https://docs.voicemoat.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.voicemoat.com/assistants/assistants/deepseek.md).

# DeepSeek Harness

DeepSeek Harness is DeepSeek's open-source agent harness. It can't sign in to MCP servers (it has no sign-in flow for them), so VoiceMoat connects with a personal key sent as a header.

**What you need**

* A VoiceMoat plan that includes assistants: **Pro**, **Enterprise**, or the **$5 Pro trial**.
* A personal key. In VoiceMoat, open **Settings**, then **Assistants**, then **Personal keys**, press **Create key** and pick **DeepSeek Harness**. Under **What can it do?**, tick **publish** if DeepSeek Harness should be able to post straight away. It starts unticked: without it, DeepSeek Harness can read, draft and schedule, but a request to post now is refused. Copy the key when it shows: you will not see it again.

{% hint style="info" %}
The address is the same for every assistant: `https://app.voicemoat.com/api/mcp`. Your key goes in a header as `Bearer` followed by the key.
{% endhint %}

***

**Connect it**

1. Save your key in DeepSeek Harness's **credentials store**, for example as `VOICEMOAT_KEY`.
2. In **Settings**, add an MCP server with transport **streamable-http** and paste the address as the URL.
3. Add the header `Authorization` with the value `Bearer ${credential:VOICEMOAT_KEY}`.

If you use a profile patch file instead (`~/.dsh/profiles/web/cordis.patch.yml`), the VoiceMoat entry under the MCP servers looks like this:

```yaml
voicemoat:
  transport: streamable-http
  url: https://app.voicemoat.com/api/mcp
  headers:
    Authorization: 'Bearer ${credential:VOICEMOAT_KEY}'
```

{% hint style="warning" %}
A patch file replaces the whole server list. Copy your other servers into it too, or add VoiceMoat from **Settings** instead.
{% endhint %}

***

**Try it**

Once it is connected, ask DeepSeek Harness things like:

* "Does this read like me?" (paste a draft)
* "What did I post last week and how did it do?"
* "Give me three post ideas in my voice for LinkedIn"
* "Schedule that for tomorrow at 9am"

Nothing posts on the first request: VoiceMoat sends DeepSeek Harness a preview with the exact text and the account, and DeepSeek Harness has to call again with the code it got back. That second call is not you approving the post: DeepSeek Harness can make it on its own. To see every post before it goes out, keep DeepSeek Harness's tool approval (asking you before it runs a tool) switched on.

**If it does not work**

* **401 or "unauthorized":** check the header is `Authorization: Bearer` followed by the whole key, with one space after `Bearer`.
* **"does not include using VoiceMoat from an assistant":** your plan does not include assistants yet.
* **"This personal key isn't allowed to post":** the key was made without **publish**. A key can't be changed once it is made, so create a new one with **publish** ticked and revoke the old one.
* **Stopped working:** the key may have been revoked, or someone pressed **Disconnect** in Settings. Create a new key.
* **Wrong address:** it must be exactly `https://app.voicemoat.com/api/mcp` (with `app.`).

**Stop it**

In VoiceMoat, open **Settings**, then **Assistants**, and press **Revoke** next to the key. DeepSeek Harness stops working with VoiceMoat at once.

*Steps checked November 2026. If DeepSeek Harness's screens look different, the idea is the same: a custom MCP server, our address, and the Authorization header.*
