Nullprint

在 DeepSeek dsh 里使用 Nullprint

让 DeepSeek 的 agent 框架 dsh 通过 MCP 调用 Nullprint:建身份、启动浏览器、打开网页、读取内容、关闭。用 TRAE、Cherry Studio 请看国内 AI 接入教程;完整工具说明见 MCP 文档。

截至 2026-10,本页按 dsh 0.2.1-rc.2 和 nullprint-mcp 0.1.3 实测。dsh 还在预发布,后续版本的配置方式可能变化,以 dsh 官方说明为准。

关于 dsh

dsh 是 DeepSeek 官方的 agent 框架,npm 包 @deepseek-ai/dsh,源码在 GitHub deepseek-ai/deepseek-harness。注意:PyPI 上有同名的 dsh 包,不是 DeepSeek 官方的,别装错。

这个版本有两种用法:web(浏览器里的对话界面,dsh web)和 headless(命令行跑一个任务后退出,dsh --profile headless "任务"),没有终端界面(TUI)。下面两种都能接 Nullprint,配置分别写在各自的 profile 里。

准备

1. 装好 Nullprint 并保持运行

从下载页安装 Nullprint(Windows / macOS),打开并登录。dsh 干活期间保持开着(可以最小化)。

2. 装 dsh

需要先装好 Node.js(自带 npm),然后:

npm install -g @deepseek-ai/dsh

dsh 用 DeepSeek API,把 DeepSeek 开放平台的 API Key 设到环境变量 DEEPSEEK_API_KEY:

# macOS / Linux
export DEEPSEEK_API_KEY=sk-你的密钥
# Windows(PowerShell)
$env:DEEPSEEK_API_KEY = "sk-你的密钥"

3. 装 nullprint-mcp

pip、pipx、venv 三种方式都行,装好后要能在终端里直接运行 nullprint-mcp:

pipx install nullprint-mcp
pip install nullprint-mcp

用 venv 装的,下面配置里的 command 要写 venv 里 nullprint-mcp 的完整路径(例如 /Users/你/nullprint-venv/bin/nullprint-mcp)。

4. 先跑一次 dsh

dsh 第一次启动某个 profile 时才会生成它的配置目录。先启动一次你要用的那个(web 用 dsh web,看到能打开再关掉;headless 随便跑一个小任务),确认 ~/.dsh/profiles/web/ 或 ~/.dsh/profiles/headless/ 已经出现。

连上 Nullprint

编辑 ~/.dsh/profiles/<web 或 headless>/cordis.patch.yml,加入下面这一段:

- insert:
    - id: mcp-nullprint
      name: "@deepseek-ai/dsh-mcp-client"
      config:
        serverName: nullprint
        transport: stdio
        command: nullprint-mcp
        args: []
一定要包在 insert 里。直接写 - id: mcp-nullprint 只能修改已有的条目,新增条目必须写在 - insert: 下面,否则不会生效。文件里已经有别的内容时,把这一段追加在后面即可。

dsh 和 Nullprint 在同一台电脑上时,不用填端口和密钥:nullprint-mcp 会自动读取 Nullprint 的本机连接信息(daemon.json)。

web 和 headless 是两个独立的 profile,两种都要用的话,两个文件各加一次。

检查有没有加载上

dsh --profile web --dump-config

headless 的把 web 换成 headless。在输出里能找到 mcp-nullprint 那一项就是加载上了。启动后 Nullprint 的工具在 dsh 里叫 mcp__nullprint__<工具名>,例如 mcp__nullprint__profiles_list、mcp__nullprint__profile_start、mcp__nullprint__session_goto。

试一下

headless 方式,一条命令跑完:

dsh --profile headless "用 Nullprint 新建一个身份,打开 example.com,读出网页标题告诉我,然后关闭这个身份。"

web 方式:运行 dsh web,在打开的页面里输入同样的话。

dsh 会依次调用建身份、启动、打开网页(goto)、执行脚本读标题(eval)、关闭。完成后在 Nullprint 客户端里能看到新建的身份;不需要的话可以删掉。

你这样说dsh 会做什么
列出我的 Nullprint 身份,哪些在运行查看身份和状态
打开 shop-01,进 example.com启动浏览器窗口并跳转
读一下这个页面的标题和价格读页面内容
把 shop-01 关掉关闭浏览器
身份名字要准确(区分大小写)。需要登录的网站,密码和验证码自己在浏览器窗口里输,登好再交给 dsh。

dsh 和 Nullprint 不在同一台电脑

需要告诉 nullprint-mcp 去哪台电脑找 Nullprint:设 NULLPRINT_DAEMON_URL(地址和端口)和 NULLPRINT_API_KEY(Nullprint 设置里的 API Key)。

注意:dsh 启动 MCP 程序时,会把环境里名字带 KEY、TOKEN、SECRET、PASSWORD 的变量过滤掉,所以只在终端里 export NULLPRINT_API_KEY 是传不过去的,必须在配置里用 env 显式传:

- insert:
    - id: mcp-nullprint
      name: "@deepseek-ai/dsh-mcp-client"
      config:
        serverName: nullprint
        transport: stdio
        command: nullprint-mcp
        args: []
        env:
          NULLPRINT_DAEMON_URL: !!js process.env.NULLPRINT_DAEMON_URL
          NULLPRINT_API_KEY: !!js process.env.NULLPRINT_API_KEY

然后在启动 dsh 的终端里设好这两个变量。不要把密钥直接写进配置文件。

这种写法已实测(截至 2026-10):dsh 和 Nullprint 在两台电脑上,经 ssh 隧道连接,建身份、启动、打开网页、读取、关闭都正常。

常见问题

--dump-config 里找不到 mcp-nullprint。 多半是没包在 - insert: 里,或者改错了 profile 的文件(web 和 headless 各有一份)。

dsh 启动了,但没有 Nullprint 的工具。 连接失败时 dsh 照样启动、只是不加载这个服务。在终端运行 nullprint-mcp --help 确认能找到这个命令;用 venv 装的要写完整路径。

提示 Nullprint daemon 没在运行。 打开 Nullprint 并登录,再试。

dsh 说要先打开会话。 打开网页、执行脚本之前要先启动身份,先让它启动。

安全提醒

  • 你发给 dsh 的指令、身份名,以及 dsh 读到的网页内容,都会经过 DeepSeek 的服务器。敏感的身份不要交给 AI 操作。
  • AI 操作的是已登录的身份。付款、改密、删除类操作请自己把关。
  • 用完让它关掉身份。
  • 彻底删除(清空回收站)不开放给 AI。
  • nullprint-mcp 只在你电脑上运行、只连你指定的 Nullprint。