Skip to content
mcp/skillhub

Writ Cloud MCP Server

by usewritapp.usewrit/writ-cloudv1.0.0

Read, crawl and act on websites, signed in as the user, and turn any site into an API.

1Node.jsstdioremoteofficial registry

context tax

~8,858 tok/turn41 tools

security

100/100

cold start

pending

freshness

Active8d ago

Our reading of Writ Cloud, from the data

Writ Cloud is a browser automation MCP server from usewrit, listed in the official MCP Registry.

Its 41 tools add about 8,865 tokens to every model turn, heavier than the browser automation median of 1,687 tokens across 79 measured servers (measured 2026-10-19).

Maintenance is active: the last public signal was 8 days ago (2026-10-10). For comparison, 67% of browser automation servers are active or maintained.

With 1 GitHub stars it ranks #452 of 1,199 browser automation servers we index.

It runs either locally over stdio or as a hosted endpoint and needs one secret (WRIT_API_KEY); use a scoped, least-privilege key.

Install Writ Cloud MCP server

Install in Claude Code

claude mcp add writ -e WRIT_API_KEY='<writ-api-key>' -- npx -y writ-mcp

Configuration

VariableRequiredSecretDescription
WRIT_API_KEYyesyesA Writ API key with the mcp scope (Settings -> Developers).

Remote endpoints

  • streamable-httphttps://api.usewrit.app/mcp

Context tax

Connecting this server adds ~8,865 tokens of tool definitions to every model turn (heavy, 41 tools). Measured 2026-10-19 via its hosted endpoint; o200k tokenizer, worst case for clients that load all tools up front. How we measure

ModelPer 1,000 turnsWith prompt caching
Claude Opus 5.5$35.46$1.77
Claude Sonnet 5.5$17.73$1.77
Claude Haiku 5.5$0.886—

Input prices as of 2026-10-06. Excludes your own prompt and output.

Tools (41)

  • writ_crawl_site605 tok

    COLLECTS a site or a section into a queryable, change-tracked dataset (one row per page). Scope: intent (a section, in plain words), rank_cap=N (the top N items of a listing), seed_urls (known pages), or the whole site capped by page_budget. Modes: markdown (default, no AI), extract_mode='schema' (uniform records), executor='ai' + extract_prompt (per-page understanding, 5x the page rate). A bounded crawl answers with its rows; an open one returns a crawl_id for writ_crawl_status wait=true. NOT FOR: reading a few pages now (writ_scrape). Every option: writ_help('writ_crawl_site').

  • writ_create_automation444 tok

    Creates an automation: on an event (a workflow or crawl completed, a monitor change, a webhook, a schedule) it runs a workflow, sends a notification templated over the event's data, and/or wakes an AI agent. Event, template and webhook options: writ_help('writ_create_automation').

  • writ_website_to_api416 tok

    TURNS A WEBSITE INTO A CALLABLE API (named functions with inputs, returning JSON), built by the caller in a real browser. url = the page that already shows the rows (search results or a listing, not the home page); goal = the inputs and fields wanted. The call first proposes the user's matching saved workflows and marketplace APIs (skip_existing / skip_marketplace build fresh), then opens a cloud browser bound to the build: capture_network records the site's own calls, writ_browser_network reads them, api_call probes them; a failed probe is evidence, not the end. Functions: HTTP flows first (w

  • writ_wire_monitor408 tok

    Connects a monitor's change_detected event to an action: action='notify' (channels and recipients the account has configured), 'workflow' (runs a saved workflow), or 'ai_task' (an AI agent opens the page and works `prompt`). A price watch takes `threshold` (+ threshold_op): the action then runs once, when a check reads a price at or below it. Buying at a price (`buy`): writ_help('writ_wire_monitor').

  • writ_scrapehttp397 tok

    READ PAGES NOW, no browser session: one page (url), up to 20 pages in parallel (urls), or a listing plus its top N item pages (url + top_n). Returns clean markdown in 2-10 s, including pages a plain fetch cannot read: rendered by JavaScript (render_mode='browser'; a read that only got the page's shell says so and gives the retry), behind a bot wall or 403 (an automatic residential retry), or behind the user's sign-in (persona_id). Discussion threads keep their comments. format='html' returns the raw HTML for selectors. NOT FOR: a site-wide dataset (writ_crawl_site) or clicking and typing (writ

  • writ_create_monitor393 tok

    WATCHES a page for changes: Writ checks it on a schedule and fires change_detected when the page, a CSS selector's text, a value read by `extract`, or a visual zone changes. Returns the monitor_id that writ_wire_monitor connects to an alert, a workflow or an AI task (a price watch takes a threshold there). Without `interval` the answer is needs_input: this plan's options and a tell_user for the user, nothing created. The page is read first: a sign-in answers needs_persona, a bot check offers use_residential.

  • writ_run_workflow391 tok

    Runs a saved workflow by workflow_id or name and returns its extracted data (it waits by default). Inputs go as top-level fields or under `inputs`; function_name runs one function of a multi-function API (with the sign-in it needs). max_age reuses a recent result at no cost. A write function previews with mutation_mode='dry_run'. Runs sign in as the workflow's persona or persona_id; no password is ever passed. Venue, network, files and output shape: writ_help('writ_run_workflow').

  • writ_personas381 tok

    The user's own accounts on websites (personas): how Writ signs in as them. No password passes through this tool or the conversation, and its answers never ask for one: credentials are typed only into a Writ window. action='list' domain=<site> shows the personas usable there; with none it answers persona_needed: a tell_user for the user, a create_url (a small Writ window with only the sign-in form, pre-filled for the site) and a link_id. action='wait' link_id=<id> is one held call that answers when the user saves it, with its persona_id. Also get, request (a link for another account), sign_in (

  • writ_update_workflow377 tok

    Inspects or edits a saved workflow: an outline, one function's source, targeted function or step edits, a settings patch. copy_to keeps a linked copy on Writ Cloud or the user's desktop. Every option: writ_help('writ_update_workflow').

  • writ_browser_use307 tok

    A REAL CLOUD BROWSER FOR A TASK ON A SITE: the user's signed-in account (a persona_id from writ_personas: the password stays sealed in Writ, and sessions never ask for a password), a click, form, submit or search inside an app, or a page a plain fetch cannot open (login wall, 403, CAPTCHA). Opens the browser and returns the first page; writ_browser_act drives it (Writ runs no model here). Recording is always on: writ_browser_save turns the session into a workflow that replays without a browser, writ_browser_cancel closes it (an open browser bills). The start answer carries the action vocabular

  • writ_payment295 tok

    Pays on a site with one of the user's cards; card numbers never reach this conversation. request (site, max_amount, purpose) returns a tell_user and an open_url where the user approves; wait (grant_id or confirmation_id); checkout pauses at the order button for the user's confirmation, then Writ places the order; fill; list (card handles only). Details: writ_help('writ_payment').

  • writ_browser_act288 tok

    Runs one batch of actions on an open session and returns the fresh page. Each action is an object, e.g. {"action":"click","selector":"#go"}. DRIVE: navigate, click, fill, type_text, select, check, hover, submit, press_key, scroll, back, wait, wait_for. SEE: query_dom, find_text, read_text, count, get_attributes, inspect, list_candidates, get_dom, get_screenshot. NETWORK: capture_network, get_request, rotate_exit. CODE: evaluate_js, search_scripts, read_script. RECORD: extract {variable,script}, api_call, login_post, probe_write, confirm_write. 2FA: twofa {challenge_method}. A value written {{n

  • writ_browser_ask_user232 tok

    Hands an open session to the Writ user: kind='captcha' (they complete a security check in the live browser), 'twofa' (they supply the one-time code and Writ types it; the code never reaches this conversation), 'sign_in' (they sign in on the live page; no persona applies) or 'question' (their text answer). The call that opens the ask returns at once with user_link + tell_user to relay; later calls hold up to 60 s and answer answered, waiting_for_user (the same call again) or expired. Their answer is kept if your turn ends first.

  • writ_set_schedule197 tok

    Schedules a saved workflow: every_minutes, or kind='daily'/'weekly' with time (HH:MM) and days. functions + inputs schedule chosen functions of a multi-function API.

  • writ_record_website195 tok

    Records a repeatable task on a site as a workflow (goal + start url): the same session as writ_browser_use, labelled with its goal, driven with writ_browser_act and saved with writ_browser_save. A goal that asks for an API opens as a writ_website_to_api build instead: the same browser, bound to the build.

  • writ_browser_compose191 tok

    Authors the workflow in an open session beyond a recording: named API functions (define_function with a `flow` (preferred in an API build), from a captured call's index, or a lists payload; live-tested as defined; compile_function for an authenticated request), set_inputs, add_steps, test_function, remove_function, remove_step, list. Payload shapes: writ_help('writ_browser_compose').

  • writ_browser_save187 tok

    Saves the open session as a replayable workflow and closes the browser, in the place its browser ran: the user's desktop library or Writ Cloud. Composed functions become callable API functions, declared inputs become its parameters. The answer carries the steps, the inputs and a run_example; the workflow runs at zero AI cost through writ_run_workflow. A save that references something no run could resolve is refused with the reasons, and the browser stays open.

  • writ_browser_network184 tok

    Searches (operation=search, query, method) or reads in full (operation=detail, index) the backend requests the page made after capture_network: the site's real API. writ_browser_act api_call probes one with other values (a `flow`: several requests); an index feeds writ_browser_compose define_function from_index.

  • writ_help172 tok

    The full reference of any Writ tool (every parameter and its rules) and the complete guide. topic = a tool name (e.g. 'writ_browser_compose', a 'run_<workflow>' tool), 'guide' for the manual (recurring digests, HTTP flow building, buying on a price, crawl and build modes), 'actions' / 'recording' / '2fa' for the browser rules, 'http_flows' / 'flow_operators' for writing an HTTP flow, or empty for the list of topics.

  • writ_discovery_status163 tok

    Status of a writ_website_to_api build. wait=true is one held call (up to 75 s) that follows the build to its newest rung and returns when it is done or parked. Answers: succeeded (workflow_id, functions, run_example), failed, cancelled, or needs_guidance (the build is the caller's to finish with writ_website_to_api mode=guided build_id=<id>; its map comes with it).

  • writ_create_http_extraction161 tok

    Drafts or revises a multi-request browserless HTTP extraction (loops, GraphQL, cursor pagination) from captured requests and a plain-language goal. Every option: writ_help('writ_create_http_extraction').

  • writ_browser_context144 tok

    Re-reads an open session: section=page (url, fields, buttons, cleaned DOM), lists (the page's repeating rows with a live-tested define_function payload for writ_browser_compose), map (the evidence of the build the session is bound to).

  • writ_workflow_data139 tok

    Reads a saved workflow's collected data as a table: q filters, run_id picks one run, refs returns full records.

  • writ_browser_live_view125 tok

    The live browser card's own access: the card ChatGPT and Claude show under writ_browser_use and writ_record_website calls it to read the session's state and get one-time passes for the session's screencast and its take-over channel. The user watches the page in the card and can take it over there. It is not part of a conversation's work.

  • writ_run_saved_crawl121 tok

    Runs a saved crawl; max_age returns its recent data at no cost instead of re-crawling.

  • writ_devices108 tok

    The user's linked Writ desktops: list, use (scope this connection to one: runs, browsers, personas and monitors then target it), clear, monitors, datasets.

  • writ_crawl_status107 tok

    Status of a crawl by crawl_id; wait=true holds up to 75 s and returns the collected rows when it converges.

  • writ_expose_workflow_api101 tok

    Publishes a saved workflow as a REST endpoint (a POST URL that waits and returns its JSON). Repeated calls reuse it.

  • writ_browser_cancel94 tok

    Closes an open browser session (an open cloud browser bills until it is closed). Unsaved work that did more than visit pages is auto-saved first and the reply names it; discard=true keeps nothing.

  • writ_update_saved_crawl86 tok

    Inspects or changes a saved crawl's settings in place.

  • writ_search_data85 tok

    Searches everything the account's workflows already collected for a term, without running anything.

  • writ_list_workflows83 tok

    Lists the workflows saved in the Writ account; each runs on demand without live browsing. Returns id, name, declared inputs, schedule, and whether it is pinned as its own run_<name> tool.

  • writ_workflow_runs81 tok

    Run history (status, timing, errors, venue) of one workflow or all of them.

  • writ_diagnose_http_workflow76 tok

    Explains why a saved workflow's run returned nothing or failed: HTTP-lane readiness and, with task_id, the run's requests and responses.

  • writ_export_data76 tok

    Exports a workflow's full data table as CSV or JSON.

  • writ_crawl_files74 tok

    The original files (PDFs, office documents, images, CSVs) a crawl captured, with short-lived download URLs.

  • writ_saved_crawl_data71 tok

    Reads the data a saved crawl collected on its last completed run, without crawling.

  • writ_pin_workflow_tool65 tok

    Pins (or unpins) a saved workflow as its own run_<name> tool on this server.

  • writ_browser_sessions52 tok

    Lists the account's open cloud browser sessions (each resumable by its session_id).

  • writ_list_webhooks50 tok

    The account's inbound webhook URLs and the automations they fire.

  • writ_saved_crawls41 tok

    Lists the crawls saved for re-running, with their scope.

Security signals

100/100 — no known issues found as of 2026-10-19, from the checks below. This is not a guarantee of safety; review what a server can do before connecting it.

Deductions

No findings from the checks that ran.

Checks

  • ✓Repository hygiene (archived, activity, license, security policy)
  • ✓Tool descriptions (prompt-injection and hidden-text heuristics)
  • ○Package metadata (install scripts, provenance) — pending
  • ○Source scan (secrets, CVEs, risky code) by vectra-guard — pending

Scan it yourself before installing with vectra-guard, the open-source agent security CLI. Scoring rules

Freshness

Active — last maintenance signal 8d ago. The newest of the signals below sets the band.

  1. Last commit (default branch)

    2026-10-10 · 8d ago · GitHub

  2. Latest release

    2026-08-14 · 2mo ago · GitHub · v1.1.0

  3. Package published

    no data · npm/PyPI

  4. Registry entry updated

    2026-10-10 · 8d ago · official registry · v1.0.0

How it compares in Browser Automation

Against the most-starred browser automation servers we index. Token cost is per model turn, measured from each server's live tool list.

ServerStarsToolsTokens / turnFreshnessRuns
Writ Cloud (this)1418,858Activelocal + hosted
Browser Use118,444—not measuredActivelocal
Scrapling88,517—not measuredActivelocal
Browser39,318—not measuredActivelocal + hosted
Playwright38,349—not measuredActivelocal
Browser36,690—not measuredActive—
All browser automation MCP servers

FAQ

›How do I install the Writ Cloud MCP server in Claude Code?

Run: claude mcp add writ -e WRIT_API_KEY='<writ-api-key>' -- npx -y writ-mcp. For Cursor, VS Code, Claude Desktop and Windsurf, use the install tabs above.

›Does Writ Cloud require an API key?

Yes. It expects WRIT_API_KEY, of which 1 is a secret.

›Can I use Writ Cloud as a remote (hosted) MCP server?

Yes — it offers both a hosted endpoint and a local stdio package.

›Is Writ Cloud in the official MCP registry?

Yes, as app.usewrit/writ-cloud.

›How many tokens does Writ Cloud add to my context?

Its tool definitions total about 8,858 tokens, resent on every turn.

Sources and method

Official MCP Registry entry
updated 2026-10-10
GitHub repository
fetched 2026-10-19
Package registry (npm / PyPI)
listed
Last checked against all sources
2026-10-19

The description, packages and links come from the maintainer's own published metadata. Token cost, security signals, freshness and the reading above are MCPSkillHub's own measurements; see the methodology. Spot an error? Request a correction or claim the listing.

Alternatives to Writ Cloud

Other browser automation MCP servers.

View all