Claude KVM

chính thức

🤖 ⚡️ Máy chủ MCP ( MacOS) — điều khiển máy tính từ xa qua VNC

Tài liệu

Claude KVM

Claude KVM

Truy cập Từ xa, Trí tuệ Nhân tạo

claude-kvm.ai

Claude KVM là một công cụ MCP điều khiển môi trường máy tính từ xa qua VNC. Nó bao gồm một lớp proxy JS mỏng (máy chủ MCP) và một daemon VNC Swift gốc nền tảng chạy trên hệ thống macOS của bạn.

Claude KVM Demo Claude KVM Demo Mac

[!TIP] Phantom-WG có thể là một giải pháp thay thế tuyệt vời cho bạn. Cô lập máy chủ VNC của bạn trong mạng riêng của bạn trong khi tận hưởng hiệu suất VPN tự lưu trữ với các tính năng bảo mật bổ sung mà bạn có được.

Chạy Thử Trực tiếp

[!NOTE] Các kiểm thử được tiến hành minh bạch trên GitHub Actions — mỗi bước đều hiển thị trong môi trường CI. Vào cuối mỗi bài kiểm thử, dù tích hợp thành công hay thất bại, bạn sẽ tìm thấy ảnh chụp màn hình của từng bước mà tác nhân đã thực hiện trong phiên, cùng với bản ghi video .mp4 ghi lại toàn bộ phiên làm việc. Bằng cách xem lại các bản ghi và ảnh chụp màn hình này, bạn có thể quan sát cách tác nhân tiến triển qua từng giai đoạn, tác vụ mất bao lâu và những quyết định nào đã được đưa ra dựa trên lời nhắc hệ thống. Bạn có thể sử dụng các ví dụ này làm tham khảo khi tạo lời nhắc hệ thống hoặc hướng dẫn của riêng bạn cho máy chủ MCP trong môi trường của bạn.

[!WARNING] Các tạo phẩm đính kèm theo các lần chạy này có thể đã hết hạn do chính sách lưu giữ tạo phẩm của GitHub. Các bản sao lưu trữ được chuẩn bị qua quy trình làm việc Persist Artifacts và luôn có thể được truy cập bằng ID lần chạy từ thư mục artifacts/ trên nhánh press-kit.

Kiến trúc

graph TB
    subgraph MCP["MCP Client (Claude)"]
        AI["Claude"]
    end

    subgraph Proxy["claude-kvm · MCP Proxy (stdio)"]
        direction TB
        Server["MCP Server<br/><code>index.js</code>"]
        Tools["Tool Definitions<br/><code>tools/index.js</code>"]
        Server --> Tools
    end

    subgraph Daemon["claude-kvm-daemon · Native VNC Client (stdin/stdout)"]
        direction TB
        CMD["Command Handler<br/><i>PC Dispatch</i>"]
        Scale["Display Scaling<br/><i>Scaled ↔ Native</i>"]

        subgraph Screen["Screen"]
            Capture["Frame Capture<br/><i>PNG · Crop · Diff</i>"]
            OCR["OCR Detection<br/><i>Apple Vision</i>"]
        end

        subgraph InputGroup["Input"]
            Mouse["Mouse<br/><i>Click · Drag · Move · Scroll</i>"]
            KB["Keyboard<br/><i>Tap · Combo · Type · Paste</i>"]
        end

        VNC["VNC Bridge<br/><i>LibVNCClient 0.9.15</i>"]

        CMD --> Scale
        Scale --> Capture
        Scale --> Mouse
        Scale --> KB
        Capture -.->|"framebuffer"| VNC
        Mouse -->|"pointer events"| VNC
        KB -->|"key events"| VNC
    end

    subgraph Target["Target Machine"]
        VNC_Server["VNC Server<br/><i>:5900</i>"]
        Desktop["Desktop Environment"]
        VNC_Server --> Desktop
    end

    AI <-->|"stdio<br/>JSON-RPC"| Server
    Server <-->|"stdin/stdout<br/>PC (NDJSON)"| CMD
    VNC <-->|"RFB Protocol<br/>TCP :5900"| VNC_Server

    classDef proxy fill:#1a1a2e,stroke:#16213e,color:#e5e5e5
    classDef daemon fill:#0f3460,stroke:#533483,color:#e5e5e5
    classDef target fill:#1a1a2e,stroke:#e94560,color:#e5e5e5

    class Server,Tools proxy
    class CMD,Scale,VNC,Capture,Mouse,KB daemon
    class VNC_Server,Desktop target

Các Lớp

LớpNgôn ngữVai tròGiao tiếp
MCP ProxyJavaScript (Node.js)Giao tiếp với Claude qua giao thức MCP, quản lý vòng đời daemonstdio JSON-RPC
VNC DaemonSwift/C (Apple Silicon)Kết nối VNC, chụp màn hình, chèn đầu vào chuột/bàn phímstdin/stdout PC (NDJSON)

Giao thức PC (Procedure Call)

Giao tiếp giữa proxy và daemon sử dụng giao thức PC qua NDJSON:

Request:      {"method":"<name>","params":{...},"id":<int|string>}
Response:     {"result":{...},"id":<int|string>}
Error:        {"error":{"code":<int>,"message":"..."},"id":<int|string>}
Notification: {"method":"<name>","params":{...}}

Tỷ lệ Tọa độ

Độ phân giải gốc của máy chủ VNC được thu nhỏ để vừa với --max-dimension (mặc định: 1280px). Claude hoạt động nhất quán hơn với tọa độ đã được thu nhỏ — daemon xử lý việc chuyển đổi ở nền:

Native:  4220 x 2568  (VNC server framebuffer)
Scaled:  1280 x 779   (what Claude sees and targets)

mouse_click(640, 400) → VNC receives (2110, 1284)

Chiến lược Màn hình

Claude giảm thiểu chi phí token bằng cách tiếp cận xác minh tiến triển:

diff_check       →  changeDetected: true/false     ~5ms    (text only, no image)
detect_elements  →  OCR text + bounding boxes      ~50ms   (text only, no image)
cursor_crop      →  crop around cursor              ~50ms   (small image)
screenshot       →  full screen capture             ~200ms  (full image)

detect_elements sử dụng Apple Vision framework cho OCR trên thiết bị. Trả về nội dung văn bản với tọa độ hộp giới hạn trong không gian đã thu nhỏ — cho phép nhắm mục tiêu nhấp chuột chính xác mà không tiêu tốn token thị giác.


Cài đặt

Yêu cầu

  • macOS (Apple Silicon / aarch64)
  • Node.js (LTS)

Daemon

brew tap ARAS-Workspace/tap
brew install claude-kvm-daemon

[!NOTE] claude-kvm-daemon được biên dịch và ký mã qua CI (GitHub Actions). Đầu ra bản dựng được đóng gói ở hai định dạng: một kho lưu trữ .tar.gz cho phân phối Homebrew và một ảnh đĩa .dmg để công chứng. DMG được gửi lên máy chủ Apple để công chứng trong cùng một quy trình làm việc — quá trình này có thể được theo dõi từ nhật ký CI. DMG đã công chứng có sẵn dưới dạng Tạo phẩm CI; .tar.gz đã lưu trữ cũng được xuất bản dưới dạng bản phát hành trên kho lưu trữ. Cài đặt Homebrew theo dõi bản phát hành này.

Cấu hình MCP

Tạo một tệp .mcp.json trong thư mục dự án của bạn:

{
  "mcpServers": {
    "claude-kvm": {
      "command": "npx",
      "args": ["-y", "claude-kvm"],
      "env": {
        "VNC_HOST": "192.168.1.100",
        "VNC_PORT": "5900",
        "VNC_USERNAME": "user",
        "VNC_PASSWORD": "pass",
        "CLAUDE_KVM_DAEMON_PATH": "/opt/homebrew/bin/claude-kvm-daemon",
        "CLAUDE_KVM_DAEMON_PARAMETERS": "-v"
      }
    }
  }
}

[!NOTE] Công cụ được kiểm thử đầu cuối qua CI — Claude thực thi các tác vụ qua VNC trong khi một mô hình thị giác độc lập quan sát và xác minh kết quả. Xem Kiểm thử Tích hợp để biết các lần chạy quy trình làm việc trực tiếp, lời nhắc hệ thống và bản ghi demo.

Cấu hình

MCP Proxy (ENV)

Tham sốMặc địnhMô tả
VNC_HOST127.0.0.1Địa chỉ máy chủ VNC
VNC_PORT5900Số cổng VNC
VNC_USERNAMETên người dùng (bắt buộc cho ARD)
VNC_PASSWORDMật khẩu
CLAUDE_KVM_DAEMON_PATHclaude-kvm-daemonĐường dẫn nhị phân daemon (không cần nếu đã có trong PATH)
CLAUDE_KVM_DAEMON_PARAMETERSĐối số CLI bổ sung cho daemon

Tham số Daemon (CLI)

Các đối số bổ sung được truyền cho daemon qua CLAUDE_KVM_DAEMON_PARAMETERS:

"CLAUDE_KVM_DAEMON_PARAMETERS": "--max-dimension 800 -v"
Tham sốMặc địnhMô tả
--max-dimension1280Kích thước thu nhỏ hiển thị tối đa (px)
--connect-timeoutThời gian chờ kết nối VNC (giây)
--bits-per-sampleMẫu bit trên mỗi điểm ảnh
--no-reconnectTắt tự động kết nối lại
-v, --verboseGhi nhật ký chi tiết (stderr)

Cấu hình Thời gian chạy (PC)

Tất cả các tham số thời gian và hiển thị đều có thể cấu hình trong thời gian chạy qua phương thức configure. Sử dụng get_timing để kiểm tra các giá trị hiện tại.

Đặt thời gian:

{"method":"configure","params":{"click_hold_ms":80,"key_hold_ms":50}}
{"result":{"detail":"OK — changed: click_hold_ms, key_hold_ms"}}

Thay đổi tỷ lệ hiển thị:

{"method":"configure","params":{"max_dimension":960}}
{"result":{"detail":"OK — changed: max_dimension","scaledWidth":960,"scaledHeight":584}}

Đặt lại về mặc định:

{"method":"configure","params":{"reset":true}}
{"result":{"detail":"OK — reset to defaults","timing":{"click_hold_ms":50,"combo_mod_ms":10,"cursor_crop_radius":150,"double_click_gap_ms":50,"drag_min_steps":10,"drag_pixels_per_step":20,"drag_position_ms":30,"drag_press_ms":50,"drag_settle_ms":30,"drag_step_ms":5,"hover_settle_ms":400,"key_hold_ms":30,"max_dimension":1280,"paste_settle_ms":30,"scroll_press_ms":10,"scroll_tick_ms":20,"type_inter_key_ms":20,"type_key_ms":20,"type_shift_ms":10},"scaledWidth":1280,"scaledHeight":779}}

Lấy giá trị hiện tại:

{"method":"get_timing"}
{"result":{"timing":{"click_hold_ms":80,"combo_mod_ms":10,"cursor_crop_radius":150,"double_click_gap_ms":50,"drag_min_steps":10,"drag_pixels_per_step":20,"drag_position_ms":30,"drag_press_ms":50,"drag_settle_ms":30,"drag_step_ms":5,"hover_settle_ms":400,"key_hold_ms":50,"max_dimension":1280,"paste_settle_ms":30,"scroll_press_ms":10,"scroll_tick_ms":20,"type_inter_key_ms":20,"type_key_ms":20,"type_shift_ms":10},"scaledWidth":1280,"scaledHeight":779}}
Tham sốMặc địnhMô tả
max_dimension1280Kích thước ảnh chụp màn hình tối đa
cursor_crop_radius150Bán kính cắt con trỏ (px)
click_hold_ms50Thời lượng giữ nhấp chuột
double_click_gap_ms50Độ trễ khoảng cách nhấp đúp
hover_settle_ms400Thời gian chờ ổn định di chuột
drag_position_ms30Thời gian chờ vị trí trước khi kéo
drag_press_ms50Ngưỡng giữ nhấn kéo
drag_step_ms5Giữa các điểm nội suy
drag_settle_ms30Ổn định trước khi thả
drag_pixels_per_step20Mật độ điểm trên mỗi pixel
drag_min_steps10Số bước nội suy tối thiểu
scroll_press_ms10Khoảng cách nhấn-thả cuộn
scroll_tick_ms20Độ trễ giữa các tick
key_hold_ms30Thời lượng giữ phím
combo_mod_ms10Độ trễ ổn định phím bổ trợ
type_key_ms20Giữ phím trong khi gõ
type_inter_key_ms20Độ trễ giữa các ký tự
type_shift_ms10Ổn định phím shift
paste_settle_ms30Chờ sau khi ghi clipboard

Công cụ

Tất cả các thao tác được thực hiện thông qua một công cụ vnc_command duy nhất:

Màn hình

Hành độngTham sốMô tả
screenshotChụp toàn màn hình PNG
cursor_cropCắt xung quanh con trỏ với lớp phủ tâm ngắm
diff_checkPhát hiện thay đổi màn hình so với đường cơ sở
set_baselineLưu màn hình hiện tại làm tham chiếu khác biệt

Chuột

Hành độngTham sốMô tả
mouse_clickx, y, button?Nhấp (trái|phải|giữa)
mouse_double_clickx, yNhấp đúp
mouse_movex, yDi chuyển con trỏ
hoverx, yDi chuyển + chờ ổn định
nudgedx, dyDi chuyển con trỏ tương đối
mouse_dragx, y, toX, toYKéo từ điểm bắt đầu đến kết thúc
scrollx, y, direction, amount?Cuộn (lên|xuống|trái|phải)

Bàn phím

Hành độngTham sốMô tả
key_tapkeyNhấn phím đơn (enter|escape|tab|space|...)
key_combokey hoặc keysTổ hợp phím bổ trợ ("cmd+c" hoặc ["cmd","shift","3"])
key_typetextGõ văn bản từng ký tự
pastetextDán văn bản qua clipboard

Phát hiện

Hành độngTham sốMô tả
detect_elementsPhát hiện văn bản OCR với hộp giới hạn (Apple Vision)

Trả về các phần tử văn bản với tọa độ hộp giới hạn trong không gian đã thu nhỏ:

{"method":"detect_elements"}
{"result":{"detail":"13 elements","elements":[{"confidence":1,"h":9,"text":"Finder","w":32,"x":37,"y":6},{"confidence":1,"h":9,"text":"File","w":15,"x":84,"y":6},{"confidence":1,"h":9,"text":"Edit","w":19,"x":112,"y":6},{"confidence":1,"h":9,"text":"View","w":22,"x":143,"y":6},{"confidence":1,"h":11,"text":"Go","w":15,"x":179,"y":6},{"confidence":1,"h":9,"text":"Window","w":35,"x":207,"y":6},{"confidence":1,"h":11,"text":"Help","w":22,"x":255,"y":6},{"confidence":1,"h":11,"text":"8•","w":26,"x":1161,"y":6},{"confidence":1,"h":9,"text":"Fri Feb 20 22:19","w":80,"x":1189,"y":6},{"confidence":1,"h":9,"text":"Assets","w":32,"x":1202,"y":97},{"confidence":1,"h":9,"text":"Passwords.kdbx","w":74,"x":1181,"y":168},{"confidence":1,"h":93,"text":"PHANTOM","w":633,"x":322,"y":477},{"confidence":1,"h":32,"text":"YOUR SERVER, YOUR NETWORK, YOUR PRIVACY","w":629,"x":325,"y":568}],"scaledHeight":717,"scaledWidth":1280}}

Cấu hình

Hành độngTham sốMô tả
configure{<params>}Đặt tham số thời gian/hiển thị khi chạy
configure{reset: true}Đặt lại tất cả tham số về mặc định
get_timingLấy tham số thời gian + hiển thị hiện tại

Điều khiển

Hành độngTham sốMô tả
waitms?Chờ (mặc định 500ms)
healthTrạng thái kết nối + thông tin hiển thị
shutdownTắt daemon một cách nhẹ nhàng

Xác thực

Các phương thức xác thực VNC được hỗ trợ:

  • VNC Auth — thử thách-phản hồi dựa trên mật khẩu (DES)
  • ARD — Apple Remote Desktop (Diffie-Hellman + AES-128-ECB)

macOS được tự động phát hiện qua yêu cầu thông tin xác thực loại 30 của ARD. Khi được phát hiện, các phím Meta được ánh xạ lại thành Super (tương thích phím Command).


MCP Badge

[!NOTE] Đang chạy trên máy Mac kim loại trần? Xem Mẹo chuẩn bị Mac M1 để biết các mẹo tăng cường bảo mật VNC, đường hầm SSH và ổn định phiên làm việc.


"Claude" là nhãn hiệu của Anthropic, PBC. Dự án này không liên kết hoặc được xác nhận bởi Anthropic.

Bản quyền (c) 2026 Riza Emre ARAS — Giấy phép MIT