> 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/nanoclaw.md).

# nanoclaw

nanoclaw runs Claude-based agents in containers on your own machine. Containers can't open a sign-in window, so VoiceMoat connects with a personal key in 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 **nanoclaw**. Under **What can it do?**, tick **publish** if nanoclaw should be able to post straight away. It starts unticked: without it, nanoclaw 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. Register VoiceMoat as a remote server for your agent group:

   ```bash
   ncl groups config add-mcp-server --name voicemoat --url https://app.voicemoat.com/api/mcp
   ```
2. Give it your key. nanoclaw keeps credentials out of the server entry (it refuses addresses that carry a key in the link), so the key goes in a header:
   * **Recommended:** store the key in nanoclaw's credential vault (OneCLI) for the host `app.voicemoat.com`, sent as the header `Authorization` with the value `Bearer` followed by your key. nanoclaw adds it to every call to VoiceMoat.
   * **Or**, if your nanoclaw version lets a server you own carry a fixed header, add it when you register the server with the `--headers` option. Run `ncl groups config add-mcp-server --help` to see the exact form for your version.

The entry nanoclaw ends up with looks like this (the header is added by the vault or by `--headers`):

```json
"mcp_servers": {
  "voicemoat": {
    "type": "http",
    "url": "https://app.voicemoat.com/api/mcp",
    "headers": { "Authorization": "Bearer vm_live_your-key" }
  }
}
```

Keep the key out of shared repos: store it as a secret or environment variable if your setup supports it.

***

**Try it**

Once it is connected, ask nanoclaw 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 nanoclaw a preview with the exact text and the account, and nanoclaw has to call again with the code it got back. That second call is not you approving the post: nanoclaw can make it on its own. To see every post before it goes out, keep nanoclaw'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. nanoclaw stops working with VoiceMoat at once.

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