Content
# Total PC Control
An MCP (Model Context Protocol) server that provides control over your screen, mouse, and keyboard using [nut.js](https://nutjs.dev/).
## ⚠️ Warning: Use with Caution
This software enables programmatic control of your mouse, keyboard, and other system operations. By using this software, you acknowledge and accept that:
- Giving AI models direct control over your computer through this tool can lead to unintended consequences
- The software can control your mouse, keyboard, and other system functions
- You are using this software entirely at your own risk
- The creators and contributors of this project accept NO responsibility for any damage, data loss, or other consequences that may arise from using this software
## Features
- 📷 **Screen Capture**: Capture screenshots of your entire screen or specific regions
- 🖱️ **Mouse Control**: Move the mouse cursor, click, double-click, and scroll
- ⌨️ **Keyboard Input**: Type text and press keyboard shortcuts
- 🪟 **Window Management**: Find, focus, and manipulate application windows
- 📋 **Clipboard Access**: Copy and paste text
## Prerequisites
- Node.js 16 or higher
- npm or yarn
- cmake-js (for building native dependencies)
## Installation
1. Clone the repository:
```bash
git clone https://github.com/jasondsmith72/total-pc-control.git
cd total-pc-control
```
2. Install cmake-js globally (required for building native dependencies):
```bash
npm install -g cmake-js
```
3. Install the libnut core library (required for nut.js):
```bash
git clone https://github.com/nut-tree/libnut.git libnut-core
cd libnut-core
npm install
cmake-js rebuild
cd ..
```
4. Install dependencies and build the project:
```bash
npm install
npm run build
```
## Using with Claude for Desktop
1. Edit your Claude for Desktop configuration file:
- **macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`
- **Windows**: `%APPDATA%\Claude\claude_desktop_config.json`
2. Add the following to your configuration:
```json
{
"mcpServers": {
"total-pc-control": {
"command": "node",
"args": [
"/ABSOLUTE/PATH/TO/total-pc-control/build/index.js"
]
}
}
}
```
Replace `/ABSOLUTE/PATH/TO/` with the actual path to where you cloned the repository.
3. Restart Claude for Desktop
4. Look for the hammer icon in the Claude interface to indicate available tools.
## Available Tools
### Screen Capture
- `capture_screen`: Capture the entire screen as an image. Supports `format` (png/jpeg) and `quality` (jpeg only) parameters.
- `capture_region`: Capture a specific region of the screen. Requires `left`, `top`, `width`, `height`. Supports `format` and `quality`.
- `get_screen_size`: Get the dimensions (width and height) of the screen.
### Mouse Control
- `move_mouse`: Move the mouse cursor to a specific `x`, `y` position.
- `get_mouse_position`: Get the current `x`, `y` position of the mouse cursor.
- `click_mouse`: Click the mouse at the current position. Optional `button` (left, middle, right).
- `click_at`: Click the mouse at a specific `x`, `y` position. Optional `button`.
- `double_click`: Double-click the mouse at the current position.
- `double_click_at`: Double-click the mouse at a specific `x`, `y` position.
- `scroll_mouse`: Scroll the mouse wheel. Requires `direction` (up/down). Optional `amount`.
- `drag_mouse`: Drag the mouse from the current position to a target `x`, `y` position.
- `drag_mouse_from_to`: Drag the mouse from a `startX`, `startY` position to an `endX`, `endY` position.
### Keyboard Input
- `type_text`: Type text at the current cursor position. Requires `text`.
- `type_text_with_delay`: Type text with a delay between keystrokes. Requires `text`. Optional `delayMs`.
- `press_key`: Press a specific keyboard key. Requires `key`.
- `press_key_shortcut`: Press a keyboard shortcut (combination of keys). Requires `keys` array.
- `hold_key`: Hold down a keyboard key. Requires `key`.
- `release_key`: Release a held keyboard key. Requires `key`.
### Clipboard Operations
- `get_clipboard_text`: Get text from the clipboard.
- `set_clipboard_text`: Set text to the clipboard. Requires `text`.
- `copy_selected_text`: Copy selected text to clipboard and return it (uses Ctrl+C/Cmd+C).
- `paste_text`: Paste text at current cursor position (uses Ctrl+V/Cmd+V). Requires `text`.
- `get_clipboard_image`: Get image from the clipboard (if available) as base64 data.
### UI Automation Tools (Windows Only)
These tools use Windows UI Automation via PowerShell to interact with UI elements.
- `get_ui_element_info`: Finds a UI element within a specified window and returns its properties (Name, AutomationId, ClassName, ControlType, BoundingRectangle, IsEnabled, IsOffscreen, Value, Children).
- Requires `windowTitle` (can be partial match).
- Requires at least one of `elementName`, `automationId`, or `className` to find a specific element.
- If no element identifier is provided, it lists the direct children of the window.
- `invoke_ui_element_action`: Performs an action on a specified UI element.
- Requires `windowTitle`.
- Requires `action` (`Click`, `SetValue`, or `Focus`).
- Requires at least one of `elementName`, `automationId`, or `className`.
- Requires `valueToSet` (string) if `action` is `SetValue`.
## Development
To run the server in development mode:
```bash
npm run dev
```
To run tests:
```bash
npm test
```
## License
This project is licensed under the MIT License - see the LICENSE file for details.
Connection Info
You Might Also Like
markitdown
MarkItDown-MCP is a lightweight server for converting URIs to Markdown.
firecrawl
Firecrawl MCP Server enables web scraping, crawling, and content extraction.
servers
Model Context Protocol Servers
Time
A Model Context Protocol server for time and timezone conversions.
Filesystem
Node.js MCP Server for filesystem operations with dynamic access control.
Sequential Thinking
A structured MCP server for dynamic problem-solving and reflective thinking.