内容
# Total PC Control
一个MCP (Model Context Protocol) 服务器,使用[nut.js](https://nutjs.dev/)提供对您的屏幕、鼠标和键盘的控制。
## ⚠️ 警告:谨慎使用
此软件允许以编程方式控制您的鼠标、键盘和其他系统操作。使用此软件即表示您承认并接受以下内容:
- 通过此工具直接将AI模型控制您的计算机可能会导致意想不到的后果
- 该软件可以控制您的鼠标、键盘和其他系统功能
- 您完全自担风险使用此软件
- 本项目的创建者和贡献者对因使用此软件而可能产生的任何损害、数据丢失或其他后果不承担任何责任
## 特性
- 📷 **屏幕捕获**:捕获整个屏幕或特定区域的截图
- 🖱️ **鼠标控制**:移动鼠标光标、点击、双击和滚动
- ⌨️ **键盘输入**:输入文本并按下键盘快捷键
- 🪟 **窗口管理**:查找、聚焦和操作应用程序窗口
- 📋 **剪贴板访问**:复制和粘贴文本
## 先决条件
- Node.js 16 或更高版本
- npm 或 yarn
- cmake-js(用于构建本地依赖)
## 安装
1. 克隆仓库:
```bash
git clone https://github.com/jasondsmith72/total-pc-control.git
cd total-pc-control
```
2. 全局安装 cmake-js(构建本地依赖所需):
```bash
npm install -g cmake-js
```
3. 安装 libnut 核心库(nut.js 所需):
```bash
git clone https://github.com/nut-tree/libnut.git libnut-core
cd libnut-core
npm install
cmake-js rebuild
cd ..
```
4. 安装依赖并构建项目:
```bash
npm install
npm run build
```
## 与 Claude for Desktop 一起使用
1. 编辑您的 Claude for Desktop 配置文件:
- **macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`
- **Windows**: `%APPDATA%\Claude\claude_desktop_config.json`
2. 在配置中添加以下内容:
```json
{
"mcpServers": {
"total-pc-control": {
"command": "node",
"args": [
"/ABSOLUTE/PATH/TO/total-pc-control/build/index.js"
]
}
}
}
```
将 `/ABSOLUTE/PATH/TO/` 替换为您克隆仓库的实际路径。
3. 重启 Claude for Desktop
4. 在 Claude 界面中查找锤子图标以指示可用工具。
## 可用工具
### 屏幕捕获
- `capture_screen`: 捕获整个屏幕作为图像。支持 `format` (png/jpeg) 和 `quality` (仅限 jpeg) 参数。
- `capture_region`: 捕获屏幕的特定区域。需要 `left`、`top`、`width`、`height`。支持 `format` 和 `quality`。
- `get_screen_size`: 获取屏幕的尺寸(宽度和高度)。
### 鼠标控制
- `move_mouse`: 将鼠标光标移动到特定的 `x`、`y` 位置。
- `get_mouse_position`: 获取当前鼠标光标的 `x`、`y` 位置。
- `click_mouse`: 在当前位点击鼠标。可选 `button`(左、中、右)。
- `click_at`: 在特定的 `x`、`y` 位置点击鼠标。可选 `button`。
- `double_click`: 在当前位双击鼠标。
- `double_click_at`: 在特定的 `x`、`y` 位置双击鼠标。
- `scroll_mouse`: 滚动鼠标滚轮。需要 `direction`(上/下)。可选 `amount`。
- `drag_mouse`: 从当前位拖动鼠标到目标 `x`、`y` 位置。
- `drag_mouse_from_to`: 从 `startX`、`startY` 位置拖动鼠标到 `endX`、`endY` 位置。
### 键盘输入
- `type_text`: 在当前光标位置输入文本。需要 `text`。
- `type_text_with_delay`: 在按键之间有延迟地输入文本。需要 `text`。可选 `delayMs`。
- `press_key`: 按下特定的键盘键。需要 `key`。
- `press_key_shortcut`: 按下键盘快捷键(键的组合)。需要 `keys` 数组。
- `hold_key`: 按住一个键盘键。需要 `key`。
- `release_key`: 释放一个按住的键盘键。需要 `key`。
### 剪贴板操作
- `get_clipboard_text`: 从剪贴板获取文本。
- `set_clipboard_text`: 设置剪贴板文本。需要 `text`。
- `copy_selected_text`: 将选定文本复制到剪贴板并返回(使用 Ctrl+C/Cmd+C)。
- `paste_text`: 在当前光标位置粘贴文本(使用 Ctrl+V/Cmd+V)。需要 `text`。
- `get_clipboard_image`: 从剪贴板获取图像(如果可用)作为 base64 数据。
### UI 自动化工具(仅限 Windows)
这些工具通过 PowerShell 使用 Windows UI 自动化与 UI 元素交互。
- `get_ui_element_info`: 在指定窗口中查找 UI 元素并返回其属性(名称、AutomationId、类名、控制类型、边界矩形、是否启用、是否离屏、值、子元素)。
- 需要 `windowTitle`(可以是部分匹配)。
- 需要至少一个 `elementName`、`automationId` 或 `className` 来查找特定元素。
- 如果未提供元素标识符,则列出窗口的直接子元素。
- `invoke_ui_element_action`: 对指定的 UI 元素执行操作。
- 需要 `windowTitle`。
- 需要 `action`(`Click`、`SetValue` 或 `Focus`)。
- 需要至少一个 `elementName`、`automationId` 或 `className`。
- 如果 `action` 是 `SetValue`,则需要 `valueToSet`(字符串)。
## 开发
要在开发模式下运行服务器:
```bash
npm run dev
```
要运行测试:
```bash
npm test
```
## 许可证
本项目根据 MIT 许可证授权 - 详见 LICENSE 文件。