Touchpoint
About
Playwright for the entire OS. Give AI agents the ability to see, find, and interact with UI elements in any desktop application — native apps, Electron apps, and browsers. Cross-platform: Linux, macOS, Windows.
Explore
- Cross-platform (Linux, macOS, Windows) via native accessibility backends
- Integrates browsers and Electron apps via Chrome DevTools Protocol (CDP)
- MCP server with 19 tools for LLM agents (discovery, actions, keyboard, mouse, waiting)
- Structured element data: names, roles, states, and positions
- Output formats: flat, tree, JSON for LLM-friendly consumption
- Built-in wait and action functions for reliable automation
Setting up with Highlight
This MCP is not yet compatible with Highlight’s one-click setup. However, you can still use it with Highlight by following these steps:
- Download and install Highlight from highlightai.com/download
- Navigate to the plugins tab and select "Add Custom Plugin"
-
Configure the plugin with the settings below
Plugin Name
TouchpointCommand (node, npx, python, etc.)Please refer to the README for specific instructions on how to obtain API keys or other required environment variables.
- Enable "Start Automatically" if you want the plugin to start when Highlight launches
From the repository
Requires Python 3.10+.
``bash`
pip install touchpoint-py
Everything is included: your platform's native backend, CDP support for browsers and Electron apps, the MCP server, and screenshot capabilities. Platform-specific dependencies are installed automatically via pip environment markers.
<details>
<summary><strong>Claude Desktop</strong></summary>
Config file location:
- macOS: ~/Library/Application Support/Claude/claude_desktop_config.json%APPDATA%\Claude\claude_desktop_config.json
- Windows: `
json`
{
"mcpServers": {
"touchpoint": {
"command": "touchpoint-mcp"
}
}
}
"/path/to/venv/bin/touchpoint-mcp"
If using a virtualenv, use the full path: .vscode/mcp.json
</details>
<details>
<summary><strong>VS Code / GitHub Copilot</strong></summary>
Add to in your workspace:`
json`
{
"servers": {
"touchpoint": {
"command": "touchpoint-mcp"
}
}
}
~/.cursor/mcp.json
</details>
<details>
<summary><strong>Cursor</strong></summary>
Create or edit :`
json`
{
"mcpServers": {
"touchpoint": {
"command": "touchpoint-mcp"
}
}
}
~/.codeium/windsurf/mcp_config.json
</details>
<details>
<summary><strong>Windsurf</strong></summary>
Edit :`
json`
{
"mcpServers": {
"touchpoint": {
"command": "touchpoint-mcp"
}
}
}
`
</details>
<details>
<summary><strong>Claude Code (CLI)</strong></summary>
bash`
claude mcp add touchpoint -- touchpoint-mcp
mcpServers
</details>
<details>
<summary><strong>OpenClaw</strong></summary>
Add to in ~/.openclaw/openclaw.json:`
json`
{
"mcpServers": {
"touchpoint": {
"command": "touchpoint-mcp"
}
}
}
</details>
<details>
<summary>All optional — click to see available settings</summary>
<br>
| Variable | Example | Description |
|----------|---------|-------------|
| TOUCHPOINT_CDP_DISCOVER | true | Auto-discover CDP ports from running processes |TOUCHPOINT_CDP_PORTS
| | {"Chrome": 9222} | Explicit app-to-port mapping (JSON) |TOUCHPOINT_CDP_APP
| | Google Chrome | Single app name (pair with _PORT) |TOUCHPOINT_CDP_PORT
| | 9222 | Single port (pair with _APP) |TOUCHPOINT_CDP_REFRESH_INTERVAL
| | 5.0 | Seconds between CDP port scans |TOUCHPOINT_SCALE_FACTOR
| | 1.25 | Display scale override |TOUCHPOINT_FUZZY_THRESHOLD
| | 0.6 | Minimum match score for find() (0.0–1.0) |TOUCHPOINT_FALLBACK_INPUT
| | true | Use coordinate fallback when native actions fail |TOUCHPOINT_MAX_ELEMENTS
| | 5000 | Maximum elements per query |TOUCHPOINT_MAX_DEPTH
| | 10 | Default tree depth limit |
</details>
---
| Function | Description |
|----------|-------------|
| tp.screenshot(app, element, ...) | Full desktop or cropped to app/window/element/monitor |tp.monitor_count()
| | Number of connected monitors |tp.configure(...)
| | Set runtime options (see Configuration) |Element
All action functions accept an object or a string ID. elements(), find(), and get_element() support format="flat", format="json", or format="tree"` (elements only) to return pre-formatted strings instead of objects.
---
Category
Tools
| Category | Tools |
|----------|-------|
| Discovery | apps, windows, find, elements, get_element |
| Screenshot | screenshot (returns image data the LLM can see) |
| Actions | click (left/right/double), set_value, set_numeric_value, focus, action |
| Keyboard | type_text, press_key (single key or combo) |
| Mouse | mouse_move, scroll |
| Window | activate_window |
| Waiting | wait_for, wait_for_app, wait_for_window |
The MCP server includes built-in instructions that teach LLM agents how to work effectively — the orient → locate → act → verify loop, how to use find(), and how to recover from errors.
````
┌──────────┐
┌───▶│ ORIENT │ screenshot · apps · windows
│ └────┬─────┘
│ ▼
│ ┌──────────┐
│ │ LOCATE │ find · elements · get_element
│ └────┬─────┘
│ ▼
│ ┌──────────┐
│ │ ACT │ click · set_value · type_text · press_key
│ └────┬─────┘
│ ▼
│ ┌──────────┐
│ │ VERIFY │───▶ Done ✅
│ └────┬─────┘
│ │ not yet
└─────────┘
Claude Desktop / Cursor
Paste into your MCP client config file to install this server.
{
"mcpServers": {
"touchpoint": {
"touchpoint": {
"command": "touchpoint-mcp",
"args": []
}
}
}
}
McpServers
{
"touchpoint": {
"command": "touchpoint-mcp",
"args": []
}
}
Why Touchpoint?
| | Screenshot / vision | Browser automation | Touchpoint | |---|---|---|---| | Native desktop apps | ⚠️ inaccurate or slow | ❌ | ✅ structured access | | Browsers | ⚠️ inaccurate or slow | ✅ | ✅ via CDP | | Electron apps (Slack, VS Code, ...) | ⚠️ inaccurate or slow | ⚠️ web content only | ✅ native + web | | Structured element data | ❌ needs OCR/vision models | ✅ web only | ✅ names, roles, states, positions | | Works across Linux, macOS, Windows | ✅ | ✅ | ✅ | ---Sign in to leave a review
Use Google, GitHub, or an email account so ratings stay tied to real people.
No reviews posted yet.



