Skip to main content
Glama
hqzqaq

dsh-minimal-mcp

by hqzqaq
README.md
# dsh-minimal-mcp

将 [deepseek-harness](https://github.com/deepseek-ai/deepseek-harness) 的**极简模式(minimal agent preset)**的面向模型工具包装成一个 MCP server,供任意外部 agent(Claude Desktop、Trae、Cursor、LangChain 等)通过标准 MCP 协议接入调用。

极简模式(`apps/cli/config/agent-presets/minimal/agent.cordis.yml`)是 deepseek-harness 官方提供的最小双工具编码智能体,仅暴露两个工具:

- **`bash`** — 持久 bash(PTY 会话,跨调用共享 cwd / 环境变量 / 函数 / 后台任务)
- **`str_replace_editor`** — `view` / `create` / `str_replace` / `insert` 文件编辑

本实现**自研复刻并对齐原版语义**(`@deepseek-ai/dsh-tool-bash-persistent` 与 `@deepseek-ai/dsh-tool-str-replace-editor`),不依赖完整 harness 运行时,跨平台、轻量、可独立运行。

## 工具语义(与原版对齐)

### `bash`
- 真实 PTY 持久 shell,命令间状态持久。
- 非零退出码追加注释:`[exit code: N]`。
- 输出超过上限截断并标记 `<response clipped>`。
- 超时返回部分输出并重置 shell。

### `str_replace_editor`
- `view`:文件按 `cat -n` 风格加行号;目录列出非隐藏项、向下两级。
- `create`:仅当路径不存在时创建,否则报错。
- `str_replace`:`old_str` 必须唯一逐字匹配,多匹配 / 零匹配报错。
- `insert`:`insert_line` 0-based,插入不额外加尾换行。

## 安装与构建

```bash
pnpm install
pnpm run build
```

> 首次安装会执行 `postinstall` 脚本,修复 `node-pty` 预编译二进制在 macOS 上的执行权限(缺失会导致 `posix_spawnp failed`)。

## 运行

```bash
node dist/index.js
```

### 环境变量

| 变量 | 默认 | 说明 |
|---|---|---|
| `DSH_CWD` | `process.cwd()` | bash 与文件系统工具的工作目录 |
| `DSH_BASH_TIMEOUT_MS` | `60000` | 单条命令超时(毫秒),超时自动重置 shell 防卡死 |
| `DSH_MAX_OUTPUT_CHARS` | `16000` | 命令 / 文件输出保留字符上限 |
| `DSH_SHELL` | `/bin/bash` | 用于 spawn 的 shell 路径 |

## 接入配置

以 Claude / 通用 MCP 客户端为例,在你的 MCP 配置中加入:

```json
{
  "mcpServers": {
    "dsh-minimal": {
      "command": "node",
      "args": ["/absolute/path/to/dsh-mcp-tools/dist/index.js"],
      "env": {
        "DSH_CWD": "/your/workspace"
      }
    }
  }
}
```

一次服务调用暴露两个工具:`bash` 与 `str_replace_editor`,即为 deepseek-harness 极简模式的编码能力全集。

## 目录结构

```
src/
  index.ts   # MCP server 入口,注册两个工具(stdio 传输)
  config.ts  # 环境变量解析与描述文本
  bash.ts    # 持久 bash(node-pty)
  editor.ts  # str_replace_editor
scripts/
  fix-node-pty-perms.mjs  # 安装后修复 node-pty 二进制权限
```

## 说明
- 传输方式为 **stdio**(MCP 标准,面向本地 agent)。如需 streamable-HTTP 可扩展。
- 原版 bash 描述中提到"可通过镜像访问 apt/pip 包"等环境信息,本实现保留该描述文本但实际网络能力取决于运行环境。