-
Notifications
You must be signed in to change notification settings - Fork 0
System Controller
Halfservers LLC edited this page Jan 23, 2026
·
1 revision
macOS Accessibility API integration for screen reading and system control.
The System Controller is a Swift-based MCP server that provides Claude with the ability to interact with macOS through the Accessibility API. This enables screen reading, mouse control, keyboard input, and window management.
- macOS 12.0+
- Accessibility permissions granted in System Preferences
- Open System Preferences > Privacy & Security > Accessibility
- Click the lock to make changes
- Add your terminal application (Terminal, iTerm2, etc.)
- Add Claude Code if running as a standalone app
| Tool | Description |
|---|---|
click |
Click at coordinates |
double_click |
Double-click at coordinates |
right_click |
Right-click at coordinates |
scroll |
Scroll at coordinates |
| Tool | Description |
|---|---|
type_text |
Type text with optional modifiers |
hotkey |
Press keyboard shortcuts |
| Tool | Description |
|---|---|
clipboard_get |
Read clipboard contents |
clipboard_set |
Write to clipboard |
| Tool | Description |
|---|---|
focus_app |
Focus application by name |
move_window |
Move window to coordinates |
resize_window |
Resize window |
get_active_window |
Get current window info |
| Tool | Description |
|---|---|
screen_read_at |
Read text at coordinates |
check_accessibility |
Verify permissions |
| Level | Name | Capabilities |
|---|---|---|
| 0 | Sandboxed | Read-only screen access |
| 1 | Observer | Screen reading, clipboard read |
| 2 | Basic | Mouse click, basic keyboard |
| 3 | Standard | Full keyboard, clipboard write |
| 4 | Elevated | Window management, app focus |
| 5 | Unrestricted | All capabilities |
Add to ~/.claude.json:
{
"mcpServers": {
"system-controller": {
"command": "system-controller-cli",
"args": ["--stdio"]
}
}
}system_click(x=100, y=200)
system_type_text(text="Hello, World!")
system_hotkey(keys=["cmd", "c"]) # Copy
system_hotkey(keys=["cmd", "v"]) # Paste
system_focus_app(name="Safari")
system_screen_read_at(x=100, y=200, width=300, height=50)
# Check accessibility permissions
system-controller-cli --check-permissionsIf permissions aren't working:
- Remove the app from Accessibility list
- Re-add it
- Restart the terminal
# Verify installation
which system-controller-cli
# Check if binary exists
ls -la ~/.claude-code-pp/bin/system-controller-clicd swift-system-controller
swift build -c release
cp .build/release/system-controller-cli ~/.claude-code-pp/bin/- The System Controller has significant system access
- Only grant permissions to trusted applications
- Consider using lower permission levels for routine tasks
- Review actions before allowing automated control
- Architecture - System overview
- Configuration - Setup options
- Troubleshooting - Common issues