Skip to main content
Glama
mysleekdesigns

CrawlForge MCP Server

browser_session

Drive a browser across multiple calls while keeping the page, cookies, and login alive; snapshot interactive elements, act on stable refs, read content, then close.

Instructions

Use this to drive a browser across several calls, keeping the page, its cookies and its login in between. The loop is: open a session on a URL, snapshot it to list the interactive elements with stable refs (@e1, @e2 ...), act on those refs, read the content, close. Because the page stays open you can look before each step instead of committing to a whole chain up front, so a wrong selector costs one call rather than all of them. Operations: open (url, stealth, ttl, activity_ttl, viewport), snapshot, act (the same action array as scrape_with_actions), read (formats), screenshot, close, list. Navigation invalidates refs, so snapshot again after one. robots.txt is respected on every navigation, and screenshots are stored as crawlforge://screenshot/{actionId} resources. A session expires 600s after it opens or 300s after its last use, whichever comes first, so close it when you are done. Not for a page that renders without interaction (scrape), and not for an interaction you can write out in advance - that is one scrape_with_actions call for 5. Cost: 3 credits to open; read 2; snapshot, act, screenshot, close and list 1 each. Example: browser_session({operation:"open", url:"https://app.com/login"}), then browser_session({operation:"snapshot", session_id:"..."})

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
ttlNoopen: seconds the session may live at most (default 600)
urlNoopen: the URL to load the session on
formatNoscreenshot: image formatpng
actionsNoact: the action array, same shape as scrape_with_actions. Target refs like "@e2" in `selector`
formatsNoread: output formats
qualityNoscreenshot: JPEG quality
stealthNoopen: run the session in the stealth browser
timeoutNoPer-action timeout in ms
selectorNoscreenshot: capture just this element (a ref like "@e2" works)
viewportNoopen: viewport size
full_pageNoscreenshot: capture the full scrollable page
max_nodesNosnapshot: cap on emitted nodes (default 200)
operationYesopen a session, observe it, act on it, read it, or close it
session_idNoThe id returned by operation:"open". Required by every operation except open and list
activity_ttlNoopen: seconds the session may sit idle (default 300)
respect_robotsNoRespect the target site's robots.txt (default: true). Setting this to false is honoured, returns a warning in the response, and is recorded against your API key — it is your decision, not a silent default.
interactive_onlyNosnapshot: only interactive elements get refs (false also emits headings and landmarks)
max_inline_charsNoLargest result to return inline, in characters of its JSON. Over it, the call returns a preview plus a result_handle for read_result instead of the whole result (default 40,000; env CRAWLFORGE_MAX_INLINE_CHARS)
continue_on_errorNoact: keep going past a failed action

Schema Changelog

Changes observed during successful MCP inspections.

  1. Addedv6.6.0

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover only the safety profile (readOnlyHint=false, openWorldHint=true, idempotentHint=false). The description adds the operational traits an agent actually needs: session expiry (600s absolute / 300s idle), ref invalidation on navigation, robots.txt enforcement, screenshot resource URIs, and per-operation credit costs. This is well beyond what annotations provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose, the operating loop, then rationale, alternatives, operations, constraints, and cost. Dense and mostly every sentence earns its place, though the operations enumeration partially duplicates schema descriptions and the end-of-paragraph cost/expiry detail could be tightened.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 19 parameters, nested objects, no output schema, and seven sub-operations behind one entrypoint, this description supplies the missing glue: the workflow order, ref lifecycle, expiry semantics, credit costs, and a concrete call example. An agent can sequence a correct multi-call session from the description alone.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and each parameter already carries an operation prefix, so the baseline is 3. The description goes further by mapping operations to their parameter sets ('open (url, stealth, ttl, activity_ttl, viewport)') and by explaining ref semantics ('stable refs (@e1, @e2 ...)') and ref lifetime, which the schema cannot express. It does not document timeout, continue_on_error, or max_inline_chars behavior beyond what the schema says.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('drive a browser across several calls') and immediately establishes what makes it distinct: persistent state (page, cookies, login) across calls. It names the loop of operations and explicitly contrasts itself with scrape and scrape_with_actions, so an agent can identify it without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use ('look before each step instead of committing to a whole chain up front, so a wrong selector costs one call rather than all of them') and explicit when-not-to-use ('Not for a page that renders without interaction (scrape), and not for an interaction you can write out in advance - that is one scrape_with_actions call for 5'). Names both alternatives and the selecting condition.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.