Touchpoint

by Touchpoint-Labs

376 downloads Not rated yet

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:

  1. Download and install Highlight from highlightai.com/download
  2. Navigate to the plugins tab and select "Add Custom Plugin"
  3. Configure the plugin with the settings below
    Plugin Name Touchpoint
    Command (node, npx, python, etc.)

    Please refer to the README for specific instructions on how to obtain API keys or other required environment variables.

  4. 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
- Windows:
%APPDATA%\Claude\claude_desktop_config.json

`json
{
"mcpServers": {
"touchpoint": {
"command": "touchpoint-mcp"
}
}
}
`

If using a virtualenv, use the full path:
"/path/to/venv/bin/touchpoint-mcp"

</details>

<details>
<summary><strong>VS Code / GitHub Copilot</strong></summary>

Add to
.vscode/mcp.json in your workspace:

`json
{
"servers": {
"touchpoint": {
"command": "touchpoint-mcp"
}
}
}
`

</details>

<details>
<summary><strong>Cursor</strong></summary>

Create or edit
~/.cursor/mcp.json:

`json
{
"mcpServers": {
"touchpoint": {
"command": "touchpoint-mcp"
}
}
}
`

</details>

<details>
<summary><strong>Windsurf</strong></summary>

Edit
~/.codeium/windsurf/mcp_config.json:

`json
{
"mcpServers": {
"touchpoint": {
"command": "touchpoint-mcp"
}
}
}
`

</details>

<details>
<summary><strong>Claude Code (CLI)</strong></summary>

`bash
claude mcp add touchpoint -- touchpoint-mcp
`

</details>

<details>
<summary><strong>OpenClaw</strong></summary>

Add to
mcpServers 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) |

All action functions accept an
Element 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 | ✅ | ✅ | ✅ | ---
No reviews yet — be the first

Sign in to leave a review

Use Google, GitHub, or an email account so ratings stay tied to real people.

Email sign in

No reviews posted yet.