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

# Kimi Code

Kimi Code is Moonshot's terminal coding agent, running Kimi's models. It can sign in to VoiceMoat or use a personal key.

**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 **Kimi Code**. Under **What can it do?**, tick **publish** if Kimi Code should be able to post straight away. It starts unticked: without it, Kimi Code 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. Open `~/.kimi-code/mcp.json` (or `.kimi-code/mcp.json` in a project) and add VoiceMoat inside `mcpServers`.
2. `url`: paste the address. A server with a `url` is treated as HTTP.
3. `headers`: `Authorization` with `Bearer` followed by your key.

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

To keep the key out of the file, use `"bearerTokenEnvVar": "VOICEMOAT_KEY"` instead of `headers`, and put just the key (without `Bearer`) in that environment variable.

Prefer the sign-in? Leave the header out and run `/mcp-config login voicemoat`. Run `/mcp` to check it is connected.

***

**Try it**

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

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