nuphus-mcp

mrpulor-ghMIT活跃维护

基于 MCP 协议的桌面自动化服务器,让任意 AI Agent 通过 stdio 控制屏幕、窗口、鼠标键盘和 Chrome 浏览器,实现 computer use 能力。

Desktop automation MCP server — computer use for any AI agent: control screen, windows, mouse/keyboard, and Chrome via Model Context Protocol (stdio). Not a DSH plugin — DSH users install dsh-nuphus-mcp.

v0.3.4发布于 2026-11-08 14:58 UTC334star +1 / 7 天42fork同步于 2026-11-10 23:59 UTC

怎么上手

由 README 提炼,执行前请确认
npm install -g @nuphus/nuphus-mcp
nuphus-mcp --confirm-write
硬件要求按 README 说明

README 未说明显存要求;桌面控制推荐 Windows(Win32 全功能),macOS 需授予辅助功能权限,Linux 仅部分支持;浏览器工具需本机安装 Chrome 或 Edge。

下载:源码 zip·GitHub Releases(安装包)本站不镜像安装包

项目说明

由 README 自动翻译提炼

把桌面和 Chrome 自动化封装成 MCP 工具,让任意 AI 客户端直接操作屏幕、窗口、键鼠和浏览器

基于 MCP 协议的桌面自动化服务器,让任意 AI Agent 通过 stdio 控制屏幕、窗口、鼠标键盘和 Chrome 浏览器,实现 computer use 能力。

核心能力

  • 提供 45 个 MCP 工具,覆盖桌面与浏览器自动化
  • 通过 UIA/AX 无障碍树做语义化桌面操作,不依赖像素坐标
  • desktop_vision 接入自带视觉模型,desktop_perceive 本地 PaddleOCR 识别
  • 基于 chromiumoxide CDP 驱动 Chrome,支持快照、点击、上传、标签页
  • 纯 stdio JSON-RPC,无守护进程无网络服务,单进程即用

容易踩的坑

默认写操作无需确认,建议加 --confirm-write 或设 NUPHUS_MCP_CONFIRM_WRITE=1;本地 OCR 模型首次运行会自动下载;DSH 用户需另装 dsh-nuphus-mcp 插件,本项目本身不是 DSH 插件。

内容由模型根据 README 生成,可能不完整或不准确,以官方文档为准。看原文 README

最近发版

5 个版本v0.3.4
  1. v0.3.4最新正式版2026-11-08 · 2026-11-08 14:58 UTC

    Desktop automation MCP server — Windows / Linux / macOS binaries below, or install from npm:

    npm i -g @nuphus/[email protected]
    

    Fixed

    • Browser recovery preserves process ownership across cancellation and reuses fresh startup tabs. Cancelling a stalled reconnect no longer drops the live Chrome process handle. After a confirmed browser crash and fresh launch, obsolete target bindings are cleared so recovery adopts the startup page without opening an extra tab. Two real-Chrome regression tests cover cancellation/retry and crash recovery/navigation.

    • rustls-webpki upgraded to 0.103.16 — resolves RUSTSEC-2026-0382 (certificate paths accepting distrusted intermediates) and restores the dependency-audit CI check. Only the lockfile version and checksum change; the audit policy is unchanged.

    • Browser tasks reuse existing tabs and avoid foreground activation by default. Navigation adopts the startup page, reconnects preserve the selected target and unsaved state, and a confirmed closed target gets one background replacement without taking over unrelated tabs. browser_new_tab and browser_switch_tab accept optional activate: true; omitted or false keeps the operation in the background. Tab listings expose target_id and selected. An interrupted tab-creation request requires listing/selecting a target before another create attempt.

    • rustls upgraded to 0.23.46 — clears four advisories (RUSTSEC-2026-0346 … -0349: TLS secrets exposed by Debug impls of client session values, buffered application data sent to the outer server after ECH rejection, classical key-exchange downgrade via unauthenticated ServerHello, and a pre-authentication 1 GiB Brotli certificate-decompression allocation). Lock-only bump — rustls is a transitive dep via reqwest → hyper-rustls → tokio-rustls; cargo audit is unblocked again.

    • browser_screenshot captures the selected task tab without activating it. Screenshots no longer pull a window to the foreground; a background capture that stops producing frames returns a bounded 5-second timeout with an actionable message — no automatic activation, retry or reconnect — so agents fall back to browser_snapshot / browser_extract and activate only when the user explicitly asks for foreground interaction. Tool description and both TOOLS docs updated; no schema field changed.

    Install: npm i -g @nuphus/[email protected]

  2. v0.3.32026-10-13 · 2026-10-13 12:27 UTC
    查看更新说明
  3. v0.3.22026-10-11 · 2026-10-11 04:53 UTC
    查看更新说明
  4. v0.3.12026-09-28 · 2026-09-28 21:57 UTC
    查看更新说明

    What's Changed

    New Contributors

    Full Changelog: https://github.com/mrpulor-gh/nuphus-mcp/compare/v0.3.0...v0.3.1

  5. v0.3.02026-09-25 · 2026-09-25 18:43 UTC
    查看更新说明

用户点评

登录用户的真实使用记录,可按版本和硬件筛选
共 0 条

    还没有人点评。第一个说出真实体验的人最有价值。

    README 原文

    未翻译

    nuphus-mcp

    npm version npm downloads GitHub stars License: MIT CI

    Desktop automation MCP server — computer use for any AI agent. See the screen, control windows/mouse/keyboard, and drive Chrome over the Model Context Protocol (stdio). Desktop & browser automation need no API key; OCR runs locally; vision plugs into your own vision LLM (OpenAI-compatible or Anthropic native, BYOK).

    nuphus-mcp is a lightweight, cross-platform desktop automation MCP server that exposes desktop + browser automation as standard MCP tools. It speaks JSON-RPC 2.0 over stdio — no daemon, no network service, one binary. Claude Desktop, Cursor, VS Code, Copilot, or any MCP client can connect and immediately control the screen, windows, keyboard/mouse, and Chrome — computer use for any AI agent — desktop & browser automation need no API key; local OCR is built in; vision works with your own vision LLM (OpenAI-compatible, BYOK).

    🇨🇳 Mainland China mirror: this repo is mirrored on Gitee for fast in-China access (Chinese docs served by default there). 中文文档

    Part of the Nuphus ecosystem: Nuphus — a local-first AI agent with real desktop execution and dual-device (phone-as-second-screen) sync. nuphus-mcp exposes the same desktop + browser automation to any MCP client.

    Using DeepSeek Harness (DSH)? nuphus-mcp itself is a plain stdio MCP server — not a DSH/Cordis plugin. Install the dedicated dsh-nuphus-mcp plugin instead (see DeepSeek Harness (DSH)).

    ┌──────────────────┐   stdio JSON-RPC   ┌──────────────────────┐
    │  Any MCP Client  │  ───────────────►  │      nuphus-mcp      │
    │  (Claude/Cursor/ │  ◄───────────────  │  desktop-api crate   │──► screen/window/mouse/keyboard
    │   Nuphus itself) │  single-line JSON  │  nuphus-browser crate│──► Chrome (CDP)
    └──────────────────┘                    └──────────────────────┘
    

    Features

    • 45 MCP tools (22 desktop + 23 browser) — screenshots, window control, mouse/keyboard, Chrome CDP automation, and more — see TOOLS.md / TOOLS.zh-CN.md for the full reference.
    • Desktop automation: screen size, screenshot (PNG/base64), window list, window activate/screenshot/move/resize/info, mouse click/drag/scroll/position, keyboard input/hotkey, clipboard write/clean — implemented on the desktop-api crate (xcap + Win32, no Tauri dependency).
    • Semantic desktop (Accessibility/UIA) — 7 tools that drive native UI through the platform accessibility tree instead of pixel coordinates: desktop_targets_list, desktop_target_bind, desktop_semantic_observe, desktop_semantic_candidate, desktop_semantic_execute, desktop_semantic_action, desktop_verify_state. One contract — observe → pick a candidate → execute → verify — where native window handles, coordinates and platform locators never cross the MCP boundary; the caller only sees opaque ids and stable semantic locators. Backed by Windows UIA and the macOS Accessibility (AX) API.
    • Computer vision pair: desktop_vision (BYOK — send a screenshot to your own vision model via an OpenAI-compatible or Anthropic native API) + desktop_perceive (local OCR with PaddleOCR, models auto-downloaded on first run; optional YOLO icon detection). Used together they give AI agents both semantic understanding and pixel-precise coordinates — the battle-tested vision→perceive flow from the Nuphus desktop app. See TOOLS.md for BYOK env vars, model setup, and the recommended flow.
    • Browser automation: navigate, snapshot (accessibility tree with @N refs), click, type, exec, scroll, extract, screenshot, evaluate, back/forward, wait_for, cookies get/set/import, upload, tabs, downloads — implemented on nuphus-browser (chromiumoxide CDP).
    • Zero-cost stdio: no HTTP server, no daemon. The process reads single-line JSON from stdin and writes responses to stdout.
    • Safety-first: destructive tools are annotated per the MCP spec; optional strict-confirm mode; path validation for screenshots, uploads, and file drags.

    Repository Layout

    nuphus-mcp/
    ├── Cargo.toml                  # workspace root
    ├── TOOLS.md / TOOLS.zh-CN.md   # 45-tool reference
    ├── crates/
    │   ├── nuphus-mcp/             # MCP Server (this repo's product)
    │   ├── nuphus-browser/         # Browser automation core (CDP)
    │   └── desktop-api/            # Desktop control core (vendored)
    └── ...
    

    Prerequisites

    • Rust toolchain (stable) — build from source with Cargo.
    • Chrome or Edge — required for browser tools. The server auto-detects an installed browser; if none is found, browser_* tools return a clear error.
    • Windows recommended for full desktop control — see Platform Support below.

    Platform Support

    PlatformBrowser toolsDesktop tools
    WindowsFullFull (Win32 API)
    macOSFullSemantic (AX) + mouse/keyboard (Accessibility permission required)
    LinuxAvailablePartial — window/input capabilities are limited

    Execution HUD: non-intrusive execution feedback on every platform — Windows shows a compact status card anchored to the bottom-right of the work area, clear of the taskbar/tray (start / done / fail, real-time, styled after the main app HUD), macOS/Linux post a system notification on completion (NUPHUS_MCP_HUD=off to disable). Window activation is never used as a visibility fallback.

    API Keys & Local Models

    Vision — BYOK, OpenAI-compatible or Anthropic native

    desktop_vision uses your own vision model. It speaks two protocols:

    • OpenAI-compatible Chat Completions (default) — works with OpenAI, MiniMax, Qwen, Ollama, vLLM, …
    • Anthropic native Messages API — point NUPHUS_MCP_VISION_BASE_URL at https://api.anthropic.com/v1 and the protocol is auto-detected from the host; or force it with NUPHUS_MCP_VISION_PROVIDER=anthropic.

    Nothing is required unless you call this tool — and when it is not configured the tool returns a clear error instead of silently failing.

    Environment variableRequiredDefaultDescription
    NUPHUS_MCP_VISION_API_KEY✅—API key for your vision model
    NUPHUS_MCP_VISION_BASE_URL—https://api.openai.com/v1Base URL (https://api.anthropic.com/v1 for Claude)
    NUPHUS_MCP_VISION_MODEL✅—Model id, e.g. gpt-4o-mini, qwen-vl-max, claude-sonnet-4-5
    NUPHUS_MCP_VISION_PROVIDER—autoauto | openai | anthropic; auto infers from the base URL host
    NUPHUS_MCP_VISION_MAX_TOKENS—1024Max output tokens (Zhipu GLM-4V-Flash caps at 1024; raise for text-heavy screenshots)

    External browser (anti-detect / fingerprint browsers)

    By default browser_* tools launch and manage their own Chrome instance. To drive an external browser instead — e.g. an anti-detect / fingerprint browser — start it with a debugging port and point the server at it:

    Environment variableRequiredDefaultDescription
    NUPHUS_MCP_BROWSER_CDP_URL——External CDP endpoint, e.g. http://127.0.0.1:9222
    # Example: start your fingerprint browser with a debugging port
    chrome --remote-debugging-port=9222 --user-data-dir=...
    
    // MCP client config
    "env": { "NUPHUS_MCP_BROWSER_CDP_URL": "http://127.0.0.1:9222" }
    

    When set, browser_* tools attach to that endpoint and never launch a managed Chrome; attach failures are hard errors (no silent fallback into the wrong browser). The external browser belongs to you — the server never kills it on exit.

    Self-healing on window reopen (recommended)

    Fingerprint browsers typically get a new random debug port every time a window is reopened, which would leave a fixed ..._CDP_URL pointing at a dead port. Provide the browser identity and the server re-resolves the live port automatically on the next tool call:

    Environment variableRequiredDefaultDescription
    NUPHUS_BROWSER_EXE_PATHfor self-healing—Absolute path to the browser exe — the identity key used to locate the running window process
    NUPHUS_BROWSER_NAME—指纹浏览器Display name used in error guidance
    NUPHUS_BROWSER_USER_DATA_DIR——Profile dir, used to read DevToolsActivePort when the window was started with a random port (--remote-debugging-port=0) and the process cmdline does not reveal it
    // MCP client config — attach + self-heal
    "env": {
      "NUPHUS_MCP_BROWSER_CDP_URL": "http://127.0.0.1:9222",
      "NUPHUS_BROWSER_EXE_PATH": "C:\\path\\to\\fingerprint-browser.exe",
      "NUPHUS_BROWSER_NAME": "AdsPower",
      "NUPHUS_BROWSER_USER_DATA_DIR": "C:\\path\\to\\profile"
    }
    

    With the identity set, if the configured endpoint stops answering the server locates the window process by exe path, re-resolves its actual port (literal cmdline port, or DevToolsActivePort in the profile dir for random-port launches), verifies the candidate with a proxy-bypassing CDP probe and retries once — close and reopen the window and the next tool call just works. Without an identity, attach failures stay hard errors asking you to update the configured URL. Either way there is no fallback to a managed Chrome.

    Keeping logins: drive a browser that has your extensions & sessions

    Want browser_* tools to drive a browser carrying your own extensions / bookmarks / login state? First, a hard Chrome 136+ restriction: after Chrome's official security change, --remote-debugging-port and --remote-debugging-pipe are ignored against the default user data directory — they must be paired with --user-data-dir pointing at a non-default directory. This is a deliberate design to stop infostealer malware from reading real cookies through the local debugging port — not a nuphus-mcp defect, and no flag / registry policy can bypass it (RemoteDebuggingAllowed only allows/disallows the switches; it cannot re-enable them on the default directory).

    So "real default profile + CDP-controllable" are mutually exclusive since 136+. Pick one of the following, in priority order:

    Option A (recommended, simplest): log in once in the nuphus-managed profile

    nuphus-mcp manages its own Chrome instance by default (a dedicated --user-data-dir, always debuggable). Open it, log into the sites you want to stay signed in once — the state persists to that profile and every subsequent browser_* call carries those sessions. Zero config, zero copying.

    Option B: copy your real profile to a debuggable directory (keeps extensions / bookmarks / logins)

    When you need the original browser's extensions and login state, copy the real profile and launch from the copy:

    1. Quit your running Chrome / Edge entirely first (profile-lock conflict)
    2. Copy the profile to a non-default dir:
      • Windows: copy "%LOCALAPPDATA%\Google\Chrome\User Data\Default" <dest>\Default
      • macOS: cp -R ~/Library/"Application Support"/Google/Chrome/Default <dest>/Default
      • Linux: cp -R ~/.config/google-chrome/Default <dest>/Default
    3. Launch the copy with a debug port: chrome --remote-debugging-port=9222 --user-data-dir=<dest>
    4. Attach as an external browser: NUPHUS_MCP_BROWSER_CDP_URL=http://127.0.0.1:9222 (add NUPHUS_BROWSER_EXE_PATH / NUPHUS_BROWSER_USER_DATA_DIR for port self-healing)

    Notes: on Windows, cookies / passwords are DPAPI user-level encrypted and decrypt fine from the copy under the same user — login state mostly survives; on macOS some credentials live in Keychain and a few sites may ask to log in again. The copy can be hundreds of MB to GBs, and it cannot run at the same time as the real browser.

    Option C: desktop visual automation — operate the actually-running browser window

    To operate the user's currently running real browser (DOM-level is not possible), use the desktop OCR + mouse/keyboard chain (desktop_perceive / desktop_* tools) — visually click, type and read the screen without CDP, at the cost of no DOM access and no login-state injection.

    Perceive models (local, auto-downloaded)

    desktop_perceive runs PaddleOCR and YOLO icon detection locally with ONNX Runtime. The first call downloads the OCR models and icon_detect.onnx together automatically into %APPDATA%\Nuphus\models (or NUPHUS_MODELS_DIR). Download failures return a clear error with manual instructions. YOLO is optional at runtime: if its download fails, perceive still returns OCR elements and reports yolo_available: false (use NUPHUS_MCP_YOLO_MODEL_URL for a custom source). See TOOLS.md → Vision & Local Models.

    All other tools need no API key.

    Install & Run

    Install via npm (recommended — all platforms, prebuilt binaries):

    npm install -g @nuphus/nuphus-mcp
    

    The nuphus-mcp meta package installs the prebuilt binary for your platform automatically (Windows x64/arm64, macOS arm64, Linux x64/arm64) and puts the nuphus-mcp command on your PATH. No Rust toolchain needed:

    nuphus-mcp   # stdio MCP server
    

    Build from source (requires the Rust toolchain):

    cargo build --release -p nuphus-mcp
    # binary at target/release/nuphus-mcp(.exe)
    

    The server reads newline-delimited JSON from stdin and writes JSON-RPC responses to stdout. Logs go to stderr.

    # quick smoke test
    echo '{"jsonrpc":"2.0","id":0,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test"}}}' | nuphus-mcp
    

    🔒 Recommended: enable strict confirmation

    This server can physically control the machine it runs on. By default write tools run without confirmation; we strongly recommend enabling strict confirmation so destructive operations require an explicit "confirm": true argument from the client (otherwise the tool is rejected with isError).

    Any one of the following:

    # CLI flag
    nuphus-mcp --confirm-write
    
    # Environment variable (recommended — survives across clients, keeps config simple)
    export NUPHUS_MCP_CONFIRM_WRITE=1      # macOS / Linux
    setx NUPHUS_MCP_CONFIRM_WRITE 1        # Windows (persistent for new shells)
    
    # MCP client args
    "args": ["--confirm-write"]
    

    Claude Desktop — recommended claude_desktop_config.json:

    {
      "mcpServers": {
        "nuphus-mcp": {
          "command": "nuphus-mcp",
          "args": ["--confirm-write"]
        }
      }
    }
    

    Prefer the environment variable: one setting applies to every MCP client on the machine. See SECURITY.md and the Safety Annotations section of TOOLS.md for the full threat model.

    MCP Client Configuration

    Point any MCP client at nuphus-mcp. After npm install -g @nuphus/nuphus-mcp the command is on your PATH; otherwise use the absolute path to the binary (nuphus-mcp / nuphus-mcp.exe).

    Claude Desktop — claude_desktop_config.json:

    {
      "mcpServers": {
        "nuphus-mcp": {
          "command": "nuphus-mcp",
          "args": []
        }
      }
    }
    

    Any MCP client (generic mcpServers JSON):

    {
      "mcpServers": {
        "nuphus-mcp": {
          "command": "nuphus-mcp",
          "args": [],
          "env": {}
        }
      }
    }
    

    Supported MCP methods: initialize, notifications/initialized, ping, tools/list, tools/call.

    DeepSeek Harness (DSH)

    Recommended — install the official dsh-nuphus-mcp plugin (Gitee mirror: gitee.com/nuphus/dsh-nuphus-mcp). It mounts nuphus-mcp into DSH as native tools with zero config — --confirm-write on by default, no code change needed:

    npx -p @deepseek-ai/dsh dsh plugin --profile web add github:mrpulor-gh/dsh-nuphus-mcp
    

    Manual alternative — plug into DeepSeek Harness as a plain stdio MCP server via its built-in MCP client (@deepseek-ai/dsh-mcp-client). Mount in DSH's cordis.yml / patch:

    - id: nuphus-mcp
      name: '@deepseek-ai/dsh-mcp-client'
      config:
        serverName: nuphus-mcp
        transport: stdio
        command: nuphus-mcp
        args: ["--confirm-write"]
        toolCallTimeoutMs: 120000   # DSH default 60000 is too low for screenshots/OCR
    

    Tools register as mcp__nuphus-mcp__* (e.g. mcp__nuphus-mcp__desktop_click). Run DSH in the desktop session of the machine you want controlled.

    Demo

    A self-contained stdio client that walks through initialize → tools/list → tools/call:

    cargo build -p nuphus-mcp
    cargo run -p nuphus-mcp --example demo
    

    Tests

    cargo check --workspace
    cargo test -p nuphus-mcp          # protocol + security + vision + models tests (60)
    

    Safety

    This server can physically control the machine it runs on. Read SECURITY.md and the Safety Annotations section of TOOLS.md before deploying. Recommended: run with --confirm-write (or NUPHUS_MCP_CONFIRM_WRITE=1) so write tools require an explicit "confirm": true argument.

    Contributors

    Thanks to the people who have contributed code to this project:

    ContributorPull requestsContribution
    @Steooenwolf-666#4 · #5 · #6Native file drag + mouse button support · tool schema/runtime/docs alignment · trusted key press
    @yyyyyyyyiiiii#3macOS npm platform package os field (darwin)

    License

    MIT