---
slug: "tpc"
source_type: "readme"
source_url: "https://cdn.jsdelivr.net/gh/jasondsmith72/tpc-mcpv2@main/README.md"
repo: "https://github.com/jasondsmith72/tpc-mcpv2"
source_file: "README.md"
branch: "main"
---
# 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.
