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
ToolRiskSide effectsApproval
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.
unknownunknownunknown
uplink_get_current_url
Returns the current URL of the device's active page.
unknownunknownunknown
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.
unknownunknownunknown
uplink_session_status
Return whether a session is active and whether a device is paired to it.
unknownunknownunknown
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.
readfalseunknown
uplink_get_network_request
Fetch a single captured network request by id (the id from uplink_search_network).
readfalseunknown
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.
writetrueunknown
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).
unknownunknownunknown
uplink_read_logs
Return captured console logs from `uplink_run_script` invocations on the active session. Optional `level` filter and `limit`.
unknownunknownunknown
uplink_get_command_result
Fetch a single captured page command by id (the id from uplink_list_commands).
readfalseunknown
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.
unknownunknownunknown
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()`).
writetrueunknown
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.
readfalseunknown
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.
writetrueunknown
uplink_list_commands
List captured page commands (method, args, result/error, timing) emitted while uplink_run_script executed. Optional `method` filter and `limit`.
readfalseunknown

02Install & source
npx -y @uplink-code/mcp
npx
npx -y @uplink-code/cli
npx

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_statusindex9 unique facts >= 5

06Badge

Add the “as seen on MCPExplorer” badge to your README. Uplink MCP — as seen on mcpexplorer.com

[![Uplink MCP — as seen on mcpexplorer.com](https://mcpexplorer.com/badge/uplink.svg)](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 →
Uplink MCP server — MCPExplorer