servers / uplink
Uplink MCP server
communitystdiolocalwrite capablehealthy
Automate a real, logged-in browser on your own device — no stored credentials, no bot detection.
01Tools · 15
| Tool | Risk | Side effects | Approval |
|---|---|---|---|
| uplink_refresh_pairing_code Mint a fresh 6-digit pairing code for the active session. Use this if the previous code expired (30s TTL) before the user typed it — the session itself stays valid, only the OTP rotates. Surface the new code in YOUR OWN prose, same format as uplink_connect (XXX-XXX), e.g.:
`New pairing code: 123-456 (expires in 30s)`
Claude Code collapses tool output; the code must be visible in your prose. | unknown | unknown | unknown |
| uplink_get_current_url Returns the current URL of the device's active page. | unknown | unknown | unknown |
| uplink_connect Start a new Uplink session for pairing a device via the Uplink Connect app. Call this before any other tool that drives the device.
AFTER this returns, in the SAME response turn, IMMEDIATELY call uplink_wait_for_device — do NOT end your turn saying "let me know when you've paired" or wait for the user to confirm. wait_for_device is the pairing-detection mechanism; see its description for the timeout-and-refresh loop. Never poll uplink_session_status as a substitute.
CRITICAL: Claude Code collapses ALL MCP tool output behind ctrl+o — the tool result is invisible unless expanded, so your response prose is the only thing the user sees. Render the pairing instructions in YOUR OWN prose, using the exact link and code from the tool result.
Pairing hands off from the user's desktop to their phone, so LEAD WITH THE LINK: on iPhone, opening the link (or scanning a QR) launches the Connect App Clip and pairs instantly, no install. Give the 6-digit code as the SECONDARY path (Android, or when Connect is already open). Render roughly:
```
^ Uplink session started! Pair your phone:
• iPhone — open this link on your phone to pair instantly (Connect App Clip, no install): http://localhost:4100/link/s/<uuid>
• Android / Connect already open — enter code 123-456 (expires in 30s)
```
If the tool result includes a "Link copied to your clipboard" line, surface it too — the user can paste the link onto their iPhone via Universal Clipboard.
The user can also scan a QR — mention they can ask for one (only call uplink_get_qr if they explicitly ask).
If the user mentions a custom SDK implementation, also include the JWT line from the tool result.
Do not paraphrase or omit the link/code — print them verbatim. | unknown | unknown | unknown |
| uplink_session_status Return whether a session is active and whether a device is paired to it. | unknown | unknown | unknown |
| uplink_await_network_request Wait for the next network request whose URL contains `url_pattern` (substring match). Returns method, URL, status, headers, and a body preview. | read | false | unknown |
| uplink_get_network_request Fetch a single captured network request by id (the id from uplink_search_network). | read | false | unknown |
| uplink_get_qr Render the active session's pairing URL as an ASCII QR code. Opt-in: only call when the user explicitly asks to see a QR (e.g., 'show me a QR' / 'I want to scan').
CRITICAL: Claude Code collapses tool output behind ctrl+o. After calling this tool, you MUST paste the returned QR ASCII art VERBATIM into your own response prose — every line of unicode half-blocks, exactly as returned. Do not say 'scan above' or 'see the QR' — those refer to the collapsed tool output which the user cannot see. The user will only see what you write directly. Yes, this is verbose, but the user explicitly asked for the QR; render it. | write | true | unknown |
| uplink_get_dom_snapshot Snapshot the DOM of the active device. Returns the body tree (formatted for LLM consumption) plus head metadata (title, base, meta tags, link rels). | unknown | unknown | unknown |
| uplink_read_logs Return captured console logs from `uplink_run_script` invocations on the active session. Optional `level` filter and `limit`. | unknown | unknown | unknown |
| uplink_get_command_result Fetch a single captured page command by id (the id from uplink_list_commands). | read | false | unknown |
| uplink_wait_for_device Block until a device finishes pairing on the active session, then return its metadata (deviceModel, platform, platformVersion, deviceType). Resolves immediately if a device is already paired.
Default timeout is intentionally short (25s, under the 30s OTP TTL) so each call returns control to you in time to refresh the code before it expires. When this errors with `pairing_timeout` and the user hasn't indicated they're done:
1. Call `uplink_refresh_pairing_code` to mint a fresh code.
2. Surface the new code in YOUR OWN prose (same XXX-XXX format as uplink_connect):
`New pairing code: 123-456 (expires in 30s)`
3. Call `uplink_wait_for_device` again to keep waiting.
Keep looping until either (a) the call returns successfully (device paired), (b) the user says to stop, or (c) the user says they've paired (still call wait_for_device once more — it returns immediately if the device is already there). This loop gives the user windows between iterations to interrupt or change approach. | unknown | unknown | unknown |
| uplink_evaluate_javascript Run a JS expression in the device's page context and return the result. Can take either a single expression (`document.title`) or a statement block (`const r = await fetch(...); return r.json()`). | write | true | unknown |
| uplink_search_network Search captured network requests by URL substring. Returns matches with method, URL, status, headers, and body previews. Use uplink_get_network_request to fetch a single entry by id. | read | false | unknown |
| uplink_run_script Execute a script against the device. The script body has `page` and `console` bound. Returns counts of captured flows + logs plus any error. | write | true | unknown |
| uplink_list_commands List captured page commands (method, args, result/error, timing) emitted while uplink_run_script executed. Optional `method` filter and `limit`. | read | false | unknown |
02Install & source
npx -y @uplink-code/mcp
npxnpx -y @uplink-code/cli
npx- repohttps://github.com/uplink-code/mcp
- homepagehttps://docs.uplink.build
- licenseNOASSERTION
- adoption0 stars · 0 forks
03Access granted
Execute code · writeRead & write files · write
The access this server can exercise, inferred from its verified tools — not a declared OAuth scope.
05Provenance & freshness
sourcesOfficial MCP Registry [p1]
last_checked2026-07-07 03:17Z
next_check2026-07-08 07:29Z
cadenceevery 29h
verifiedtools_list:passed handshake:passed metadata:passed
index_statusindex — 9 unique facts >= 5
06Badge
Add the “as seen on MCPExplorer” badge to your README.
[](https://mcpexplorer.com/servers/uplink)
Next step
This is one server. A loadout combines the right servers, governance, and proven plays for a whole job — assembled deliberately, not tool-dumped.
Explore loadouts →