@rebind.gg/mcp-server 0.1.5 → 0.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +52 -39
- package/package.json +2 -2
- package/src/index.ts +1 -1
package/README.md
CHANGED
|
@@ -1,19 +1,17 @@
|
|
|
1
1
|
# @rebind.gg/mcp-server
|
|
2
2
|
|
|
3
|
-
Stdio MCP server that
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
(https://
|
|
8
|
-
(recommended) or `remote_access.lua` (protocol >= 1.1.0)
|
|
9
|
-
|
|
10
|
-
called
|
|
3
|
+
Stdio MCP server that turns [Rebind](https://rebind.gg) into a computer-use toolkit: screenshots, verified clicks, keyboard input, window control, and direct Luau scripting on the connected machine — driven over real HID, not synthetic OS events.
|
|
4
|
+
|
|
5
|
+
**Requirements**
|
|
6
|
+
|
|
7
|
+
- [Bun](https://bun.sh) >= 1.1 (the server runs via `bunx`)
|
|
8
|
+
- The [Rebind app](https://rebind.gg/download) running its Remote Access relay: `remote.luau` (recommended) or `remote_access.lua` (protocol >= 1.1.0)
|
|
9
|
+
|
|
10
|
+
> Older copies of `remote_access.lua` called `hid.press` outside a coroutine, so clicks silently failed. Use `remote.luau` or a current `remote_access.lua`.
|
|
11
11
|
|
|
12
12
|
## Install
|
|
13
13
|
|
|
14
|
-
One command writes the correct config for whichever clients you name — Claude
|
|
15
|
-
Code, Cursor, Codex, OpenCode, VS Code, Windsurf, Zed, and more — each in its
|
|
16
|
-
native format, via [`add-mcp`](https://github.com/neondatabase/add-mcp):
|
|
14
|
+
One command writes the correct config for whichever clients you name — Claude Code, Cursor, Codex, OpenCode, VS Code, Windsurf, Zed, and more — via [`add-mcp`](https://github.com/neondatabase/add-mcp):
|
|
17
15
|
|
|
18
16
|
```sh
|
|
19
17
|
npx add-mcp "bunx @rebind.gg/mcp-server" --name rebind \
|
|
@@ -21,13 +19,9 @@ npx add-mcp "bunx @rebind.gg/mcp-server" --name rebind \
|
|
|
21
19
|
-g -a claude-code -a cursor -a codex -a opencode
|
|
22
20
|
```
|
|
23
21
|
|
|
24
|
-
Drop `-a <agent>` for the clients you want, or pass `--all`. `-g` installs
|
|
25
|
-
globally; omit it for project-local config. Restart the client afterward.
|
|
26
|
-
|
|
27
|
-
Requires **Bun** (the server runs via `bunx`) and the **Rebind** app
|
|
28
|
-
(https://rebind.gg/download) running its Remote Access relay.
|
|
22
|
+
Drop `-a <agent>` for the clients you want, or pass `--all`. `-g` installs globally; omit it for project-local config. Restart the client afterward.
|
|
29
23
|
|
|
30
|
-
|
|
24
|
+
### Manual configuration
|
|
31
25
|
|
|
32
26
|
Any MCP client takes the stdio block directly:
|
|
33
27
|
|
|
@@ -43,33 +37,48 @@ Any MCP client takes the stdio block directly:
|
|
|
43
37
|
}
|
|
44
38
|
```
|
|
45
39
|
|
|
46
|
-
|
|
47
|
-
token** panel field on `remote.luau`, or `AUTH_TOKEN` on `remote_access.lua`).
|
|
48
|
-
|
|
49
|
-
Check the relay is reachable before wiring it up:
|
|
40
|
+
### Verify the relay is reachable
|
|
50
41
|
|
|
51
42
|
```sh
|
|
52
43
|
bunx @rebind.gg/mcp-server --selftest
|
|
53
44
|
```
|
|
54
45
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
click
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
46
|
+
Connects, takes a capture, and reports the display — the fastest way to catch the #1 first-run failure (relay not loaded).
|
|
47
|
+
|
|
48
|
+
## Tools
|
|
49
|
+
|
|
50
|
+
| Tool | What it does |
|
|
51
|
+
| --- | --- |
|
|
52
|
+
| `screenshot` | Capture a display (cursor marked with a crosshair). All coordinates the model emits are pixels in the most recent screenshot. |
|
|
53
|
+
| `screenshot_window` | Capture one window by title substring (or the active window) — smaller, cheaper, monitor-proof. |
|
|
54
|
+
| `zoom` | Re-capture a region of the last screenshot at native resolution, for small text. Read-only. |
|
|
55
|
+
| `click` | Move to a point and click (`left`/`right`/`middle`, optional double). Landing position is verified and corrected before pressing. |
|
|
56
|
+
| `move_mouse` | Move without clicking, with the same verification. |
|
|
57
|
+
| `type` | Type text into the focused element. |
|
|
58
|
+
| `key` | Press a key or combo, e.g. `Enter`, `LCtrl+L`, `LAlt+Tab`. |
|
|
59
|
+
| `scroll` | Scroll the wheel at the cursor (positive = up). |
|
|
60
|
+
| `run_lua` | Run a Luau script on the connected machine and return its `return` value as JSON — the fast path for any deterministic sequence (launch apps, place windows, shell commands, pixel search). |
|
|
61
|
+
| `lua_docs` | Full Luau SDK type definitions for `run_lua`. |
|
|
62
|
+
| `list_displays` / `list_windows` / `focus_window` / `active_window` | Display and window enumeration and control. |
|
|
63
|
+
| `get_cursor` / `wait` / `calibrate` | Cursor readback, pauses, and the mouse scale probe. |
|
|
64
|
+
|
|
65
|
+
## Configuration
|
|
66
|
+
|
|
67
|
+
| Env var | Default | Purpose |
|
|
68
|
+
| --- | --- | --- |
|
|
69
|
+
| `REBIND_URL` | `ws://127.0.0.1:19561` | Relay WebSocket URL. |
|
|
70
|
+
| `REBIND_TOKEN` | — | Required when the relay has an auth token set (the **Auth token** panel field on `remote.luau`, or `AUTH_TOKEN` on `remote_access.lua`). |
|
|
71
|
+
| `REBIND_AGENT_LOG` | off | Path to append one JSONL line per tool call (`{ts, tool, ok, latency_ms, note}`). No screenshot bytes, no user content. |
|
|
72
|
+
|
|
73
|
+
## How it works
|
|
74
|
+
|
|
75
|
+
**Verified clicks.** `click` and `move_mouse` reach an absolute screen point by reading the real OS cursor and sending relative HID deltas (which map 1:1 to pixels), correcting against the true cursor until it lands. This sidesteps the relay's own absolute move, whose delta comes from a cached cursor position that goes stale and flings the pointer to a screen edge.
|
|
76
|
+
|
|
77
|
+
**Calibration.** A mouse scale probe runs on the first `click`/`move_mouse`. If pointer ballistics are detected (enhance pointer precision, DPI mismatch), the probe reports it, since acceleration would break the 1:1 assumption. Re-run it any time with `calibrate`.
|
|
78
|
+
|
|
79
|
+
**One queue.** There is one physical cursor and keyboard, so tool calls are serialized: parallel calls from the model run one after another instead of interleaving HID input.
|
|
80
|
+
|
|
81
|
+
**One coordinate space.** All results are reported in the pixel space of the last screenshot — the same space the model emits — so no rescaling math ever falls on the model.
|
|
73
82
|
|
|
74
83
|
## Develop
|
|
75
84
|
|
|
@@ -77,3 +86,7 @@ model emits.
|
|
|
77
86
|
bun test packages/mcp-server/tests/
|
|
78
87
|
bun run --cwd packages/mcp-server typecheck
|
|
79
88
|
```
|
|
89
|
+
|
|
90
|
+
## License
|
|
91
|
+
|
|
92
|
+
MIT © [US Input Company](https://usinput.com)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rebind.gg/mcp-server",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.6",
|
|
4
4
|
"description": "MCP server exposing Rebind as computer-use tools: screenshot, verified click, type, key, scroll, and window control over the Remote Access protocol.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
},
|
|
48
48
|
"dependencies": {
|
|
49
49
|
"@modelcontextprotocol/sdk": "^1.12.0",
|
|
50
|
-
"@rebind.gg/client-ts": "0.2.
|
|
50
|
+
"@rebind.gg/client-ts": "0.2.1",
|
|
51
51
|
"sharp": "^0.34.2",
|
|
52
52
|
"zod": "^3.25.0"
|
|
53
53
|
},
|
package/src/index.ts
CHANGED
|
@@ -53,7 +53,7 @@ async function main() {
|
|
|
53
53
|
|
|
54
54
|
const session = new Session(client);
|
|
55
55
|
|
|
56
|
-
const server = new McpServer({ name: "rebind", version: "0.1.
|
|
56
|
+
const server = new McpServer({ name: "rebind", version: "0.1.6" });
|
|
57
57
|
|
|
58
58
|
// REBIND_AGENT_LOG=<path>: opt-in telemetry — one JSONL line per tool call
|
|
59
59
|
// ({ts, tool, ok, latency_ms, note}). No screenshot bytes, no user content.
|