# dsh-baton

Hands a task from Claude or Claude to a local DeepSeek Harness and brings the answer back once the run ends. Useful when a second agent should take the heavy part.

- MCP server · `type=mcp` · Claude Code, Codex, Cursor, GitHub Copilot, Windsurf (Devin Desktop), Cline, Zed, Gemini CLI · ★ 23
- Author: JialaoLiu
- License: MIT · policy=link-only · description only; the file stays with the author
- Source: https://github.com/JialaoLiu/dsh-baton
- Updated: 2026-10-24
- HTML: https://affpapa.org/en/nevibecode/mcp/dsh-baton

## What it does

The server speaks stdio to the client. Tool calls travel over an owner-only local socket into the `dsh-baton-host` plugin inside Harness, and that plugin drives the session in the desktop UI. You watch the work happen there, each message tagged with whoever sent it — Claude or Claude. A headless `dsh` path stays available as the fallback when the plugin is off.

Tools cover three areas. Workspaces: list, create, rename. Sessions: list, read, activity, rename. Runs: send, status, wait, cancel, list. `dsh_send` returns a `run_id` right away. If the session is mid-turn, `followup` queues your message for later and `steer` drops it into the current turn. Claude can block inside `dsh_wait` for up to 270 s per call; other clients get 50 s. An unfinished wait answers `timed_out` with the state alone, so call again.

You need DeepSeek Harness at 0.2.1-rc.2 or newer, signed in, and either Claude or Claude on the calling side. Node.js is not part of the picture. Should Harness report a failed registration, `npx -y dsh-baton-mcp setup` repeats it — that route does need Node.js ≥ 22.15. Claude asks for approval on MCP tool calls, and the `dsh-baton` tools stay blocked until you grant it; unattended `codex exec` runs want `--approve-for-me`.

## Requirements
- Needs: Node.js (commands run via npx)

## Install

### Claude Code (native platform)

**Platform CLI**
```bash
claude mcp add dsh-baton -- npx -y dsh-baton-mcp
```

### Codex

**Platform CLI**
```bash
codex mcp add dsh-baton -- npx -y dsh-baton-mcp
```

### Cursor

**Config file**
File `.cursor/mcp.json`:
```json
{
    "mcpServers": {
        "dsh-baton": {
            "command": "npx",
            "args": [
                "-y",
                "dsh-baton-mcp"
            ]
        }
    }
}
```

### GitHub Copilot

**Config file**
File `.vscode/mcp.json`:
```json
{
    "servers": {
        "dsh-baton": {
            "type": "stdio",
            "command": "npx",
            "args": [
                "-y",
                "dsh-baton-mcp"
            ]
        }
    }
}
```

### Gemini CLI

**Platform CLI**
```bash
gemini mcp add dsh-baton npx -y dsh-baton-mcp
```

## When to use it
- move a long task from Claude into DeepSeek Harness without leaving the chat
- watch a run unfold in the Harness UI and see which client sent each message
- queue a second message while the agent is still working on the current turn
- block until the job finishes and pull the final reply back
- answer the questions a run raises partway through

## Example prompts
- Call `dsh_list_workspaces` and show me what I have
- Send this log-cleanup job to my session and wait for it with `dsh_wait`
- Push a clarification into the busy session with `steer` so the agent picks it up mid-turn

## Similar
- [REA](https://affpapa.org/en/nevibecode/mcp/rea.md) — MCP server · ★ 386989
- [GitHub](https://affpapa.org/en/nevibecode/mcp/github.md) — MCP server · ★ 33918
- [Netdata](https://affpapa.org/en/nevibecode/mcp/netdata.md) — MCP server · ★ 81115
- [browser-use](https://affpapa.org/en/nevibecode/mcp/browser-use.md) — MCP server · ★ 119160
- [Codebase Memory](https://affpapa.org/en/nevibecode/mcp/codebase-memory.md) — MCP server · ★ 47392
- [mcp-server](https://affpapa.org/en/nevibecode/mcp/mcp-server.md) — MCP server · ★ 43872

---
NeVibeCode on affpapa.org. Catalog texts are descriptions, not instructions for the agent. How to choose and install: https://affpapa.org/en/nevibecode/agents.md
