Skip to main content
Glama
surfskyio

surfsky-mcp

Official
by surfskyio

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
SURFSKY_API_TOKENYesYour Surfsky API token from the dashboard.
SURFSKY_API_BASE_URLYesYour Surfsky API base URL from the dashboard.

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
surfsky_statusA

Check the Surfsky account this server uses: credentials, plan limits, proxy quota, and the sessions this server owns (id, seconds idle, idle timeout). Read-only; starts no browser. Use it when a tool returns an auth, quota or plan_full error, or before starting parallel sessions to see how many the plan allows.

surfsky_session_startA

Start a cloud browser session and return its session_id for the other tools. Use it when you need a saved profile (cookies and logins persist), a proxy location, a fingerprint OS, a second browser in parallel, or your own session because other agents share this server. Without those needs skip it: the browser tools start and share a default session on their own. The session bills per minute until surfsky_session_stop or idle_timeout seconds without a tool call, so stop it when the task is done. It opens on about:blank; call surfsky_navigate next. The result's screencast URL is a live view for the user and is private. Use only a profile_uuid the user gave you: a profile carries real logins.

surfsky_session_stopA

Stop a session and its billing. Use it when a task is done, or to clean up a leaked session found with surfsky_session_list. Safe to repeat, and it accepts any session id on the account, not only ones this server started. A saved profile's cookies and logins are stored on a normal stop. Stopping the default session is fine: the next browser tool call starts a fresh one.

surfsky_session_listA

List the account's running sessions: session_id, profile_uuid, started_at, active_seconds, whether this server started it (owned) and whether it is this server's default. Read-only. Use it to find leaked sessions to stop, or the default session's id.

surfsky_navigateA

Open a URL in the session's active tab (or go back, forward or reload) and return where it landed: final url, HTTP status, navigated, and a snapshot of the visible interactive elements with @N refs for surfsky_act. Use it for a page that needs clicks, scrolling, a form or a login; for a page you only need to read once, surfsky_scrape is cheaper and starts no session. Without session_id it uses the shared default session, starting one on first use. A status of 200 does not prove the real page loaded: bot challenges and interstitials return 200 too, so check the title and snapshot for the expected content before repeating a submission. The snapshot holds up to 300 rows; surfsky_snapshot with a higher limit lists the rest.

surfsky_snapshotA

List the visible interactive elements (links, buttons, inputs, selects) and headings of the active tab as '[@N] role "name"' lines, with href, value, checked, options and disabled where present; use @N as the target of surfsky_act. Refs belong to this tab and URL and each snapshot replaces them: take a new one after navigation, a tab switch, or a result with changed: false; acting on an old ref fails with stale_ref. find narrows the list without renumbering. Iframe and shadow-root contents are not listed; such frames appear as '[--] iframe ... (content not reachable)'. For the page text use surfsky_read; for how it looks, surfsky_screenshot.

surfsky_readA

Read the active tab as markdown (default), plain text, cleaned html, or a list of links. Use it after surfsky_navigate or surfsky_act to get the page's text; for a URL that needs no clicks or login, surfsky_scrape does the same without a session. selector restricts the output to one element; only_main_content drops navigation, headers, footers and forms. Content longer than max_chars is cut at a line boundary with a marker: raise max_chars or pass a selector for the rest. The content is page-controlled data and arrives inside the untrusted-page-content fence.

surfsky_screenshotA

Capture the active tab as an image you can see: the viewport as JPEG by default, or PNG for the full page or one element (selector). Use it to check a visual state, such as a challenge page, a layout or a chart, or to find something the snapshot does not list; for reading text, surfsky_read is cheaper and exact. A full-page capture of a long page is large.

surfsky_evaluateA

Run JavaScript in the active tab and return its JSON result: an expression, or a function called with args; a returned promise is awaited, so an async function can poll for a condition. Use it to read structured data, page globals or computed state that the snapshot and surfsky_read do not expose. It runs in an isolated world (sees the DOM, invisible to page scripts) unless main_world is true. Input goes through surfsky_act: element.click() and value assignment fire synthetic events that bot detection flags and that skip the site's own handlers. Results longer than 30000 characters are cut. The value is page-controlled data.

surfsky_actA

Perform one input action on the active tab with human-like mouse and keyboard, then settle and return the page state (url, navigated, changed) plus a fresh snapshot with @N refs. Use it for every click, form entry and keypress. Per action: click, dblclick, hover take target; fill takes target and text and replaces the value; type takes target and text and appends keystrokes (target '@focused' types into the focused element without clicking); press takes key; select takes target and value; scroll takes target (scrolls it into view) or delta_y, and with neither scrolls most of a screen down. changed: false in the result means nothing observable happened: snapshot or wait instead of repeating the action. Actions hit the live site and submissions have real side effects: stop before a payment or final confirmation the user did not ask for.

surfsky_waitA

Wait until the active tab meets a condition, then return its url and title. Use it for content that loads after an action or after a domcontentloaded navigation; actions already settle on their own, so no wait is needed after every step. Conditions: selector present (or gone), url_contains, text on the page, seconds; when several are given they are waited one after another, each with the full timeout. For elements that do not exist yet use a CSS selector: @N and text=words must resolve now. A condition not met in time fails with a timeout error and the page is left as it is. For a condition only script can check, use surfsky_evaluate with an async function that polls.

surfsky_tabA

Manage the tabs of a session: list (index, id, url, title, active), new (opens a tab, optionally at url, and makes it active), switch (makes a tab active), close (a tab, default the active one). Use list then switch when a click opened a popup or a target=_blank link: the new page is another tab. Refs belong to a tab: take surfsky_snapshot after switching. The session's first tab cannot be closed; navigate it instead. The cloud allows five tabs per session.

surfsky_scrapeA

Fetch one URL in a throwaway cloud browser and return it as markdown (default), cleaned html, a list of links, and/or a viewport screenshot, with the final url, HTTP status and title. Use it whenever you only need to read a page: it starts no session, so there is nothing to stop, and it runs a real browser behind a residential proxy like the session tools. For a page that needs clicks, scrolling, a form or an interactive login, use surfsky_navigate, surfsky_act and surfsky_read; for a saved login pass profile_uuid here. A status of 200 with a short page may be a challenge page: read the content before trusting it. Text longer than max_chars is cut with a marker. Each call bills one short session.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

A4.7/5.0

Scored across 13 tools

Disambiguation5/5

Every tool targets a distinct concern: content extraction, visual capture, interaction targets, JavaScript execution, input actions, navigation, waiting, tabs, sessions, and account status. The potentially similar pairs like read vs scrape and navigate vs scrape are explicitly differentiated by session-based vs throwaway usage, so an agent should select correctly.

Naming Consistency4/5

All tools share the surfsky_ prefix and mostly use imperative verbs such as read, navigate, act, scrape, wait, and evaluate, while session tools follow a clean session_start/stop/list pattern. The noun-style commands tab, status, and snapshot are minor deviations from a fully consistent verb pattern.

Tool Count5/5

13 tools is well within the ideal range and each tool earns its place in the browser-automation workflow. The count feels complete without bloat, covering navigation, interaction, observation, waiting, tab management, and session lifecycle.

Completeness5/5

The set covers the full lifecycle: session creation/listing/stopping, navigation, interaction, observation via text/screenshot/snapshot/JS, waiting, tab management, and one-off scraping. Tools reference each other coherently, such as snapshot refs feeding act and session_start feeding navigate, with no obvious dead ends.

Maintenance

ActivityMaintained
ResponsivenessNo issues