流式CLI委托工具

一个允许Claude Code(或任何协调器)通过流式CLI将有限工作块委托给DeepSeek的小型命令行工具,提供可见性和可恢复性。

  • by luongjames8
  • TypeScript
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 luongjames8/deepseek-mcp-server

使用说明

deepseek——用于委派的流式CLI

一个小型CLI,允许Claude Code(或任何编排器)将有界的工作块委托给DeepSeek进行流式传输。替换旧的 deepseek-agent-mcp 模式:编排器通过小的可见CLI调用驱动循环,而不是在MCP工具调用内运行黑盒代理循环(超时、隐藏进度、无法从部分故障中恢复)。

为什么是CLI,而不是MCP

此仓库的早期版本是一个MCP服务器 deepseek_agent, deepseek_chat, web_fetch, web_search, web_fetch_raw 工具。代理工具不符合MCP的合同:

MCP函数调用 长代理循环
时间 有界,原子 无界
可见性 仅限最终响应 需要进展
恢复 重试整个过程 恢复中间循环
流媒体 无 头等舱

将多圈代理循环压缩成功能形状的工具意味着克劳德盲目等待了5分钟以上,运输超时,部分工作丢失。所以我们把它撕了下来。CLI提供了流式传输、可见性和可恢复性,Claude成为了循环,无论如何,它已经在做一个级别了。

有界工具(chat, fetch, search)为了保持一致性,它也变成了CLI子命令。

子指令

deepseek chat       single-turn chat (streams)
deepseek fetch      URL → cleaned text → deepseek summary (streams)
deepseek fetch-raw  URL → cleaned text (no model)
deepseek search     Brave + deepseek synthesis (streams)

每个使用子命令的模型都接受:

-m, --model <name>           per-subcommand default if omitted
--thinking <true|false>      omit → API default = on for v4 models
--reasoning-effort <l|m|h>   only meaningful when thinking is on
--max-tokens <n>             cap output
--show-thinking              stream reasoning_content to stderr
--system <text>              (chat only) system prompt
--temperature <n>            (chat only) sampling temp

提示可以是位置参数,也可以通过stdin管道传输。

默认值

  • chat → deepseek-v4-pro (当你明确地问,你想要更好的大脑)
  • fetch, search → deepseek-v4-flash (量大,总结是廉价的工作)
  • 所有v4型号都有思维模式 默认开启 --通行证 --thinking false 选择退出。

定价(每1M代币,缓存未命中):

模型 输入 输出
v4专业版 1.74美元(2026-05-31促销0.435美元) 3.48美元(促销0.87美元)
v4闪存 0.14美元 0.28美元
缓存命中率 1/10的输入价格 --

示例

# Single question
deepseek chat "What does this regex match: ^(?=.*[A-Z])(?=.*\d).{8,}$"

# Cheap & fast
deepseek chat "summarize this in one sentence" --thinking false --max-tokens 100 < article.txt

# URL summary
deepseek fetch "https://docs.example.com/v3" "list breaking changes" > breaking.md

# Web research
deepseek search "deepseek v4 thinking parameters" -n 8 > research.md

# See the model's reasoning
deepseek chat "what is 7*8" --show-thinking
# stdout: 56
# stderr: We are asked: "what is 7*8"...

# Override default model
deepseek chat "translate 'hello' to japanese" --model deepseek-v4-flash --thinking false

安装

git clone https://github.com/luongjames8/deepseek-mcp-server.git
cd deepseek-mcp-server
npm install
npm run build
npm link        # puts `deepseek` on PATH globally

集 DEEPSEEK_API_KEY 在您的环境中(以及可选 BRAVE_API_KEY 为了 search):

echo 'export DEEPSEEK_API_KEY="sk-..."' >> ~/.bashrc
echo 'export BRAVE_API_KEY="..."' >> ~/.bashrc

或者扔一个 .env 项目根目录中的文件,您的cwd,或 $HOME --CLI会自动从其中任何一个加载。

与Claude Code一起使用

向添加权限规则 ~/.claude/settings.local.json 所以克劳德不会在每次通话时都提示:

{
  "permissions": {
    "allow": ["Bash(deepseek:*)"]
  }
}

然后放下一项技能 ~/.claude/skills/deepseek/SKILL.md (此回购中的 claude-skill/ 是一个起点)告诉克劳德何时委派。Claude根据相关提示阅读技能并调用 deepseek 在适当的时候通过Bash。

配置

每个子命令默认值都存在 config.yaml 在repo根目录、项目cwd或 ~/.config/deepseek-cli/config.yaml:

chat:
  default_model: "deepseek-v4-pro"

web_search:
  default_model: "deepseek-v4-flash"
  max_results: 10

web_fetch:
  default_model: "deepseek-v4-flash"
  timeout_seconds: 15
  max_content_chars: 50000

每个值在每次调用时都可以通过标志进行覆盖。

测试

npm test

25例最严重的病例(API密钥约13秒,无密钥约1秒):

  • 单元:参数转换、验证、配置加载
  • 烟雾(真实API):生成针对DeepSeek/Brave的实际CLI二进制文件。捕获请求形状回归、中断流、上游模型路由更改。

如果出现以下情况,烟雾测试会自动跳过 DEEPSEEK_API_KEY 未设置。

锋利的边缘

  • 遗留别名死亡2026-07-24: deepseek-chat 和 deepseek-reasoner 将停止解决。使用 deepseek-v4-pro 或 deepseek-v4-flash 明确地。默认值已经正确。
  • 获取最小内容大小:500个字符。短页面(状态页面、重定向)出错--使用 fetch-raw 绕过解析。
  • 无交互式提示:每次通话都是一次机会。CLI不保留对话历史记录。如果你想要多回合,编排器会管理它。
  • 严格的工具调用(Beta版):未通过旗帜暴露。集 DEEPSEEK_BASE_URL=https://api.deepseek.com/beta 使用严格端点。

许可证

麻省理工学院