MCP HeartbeatTHE MCP OBSERVATORY
Public workspace

Explore

Evidence for your next connection.

Independent measurements of remote MCP servers. Every observation has a timestamp.

Read-only probes

MCP server · Browser & web scraping

Writ Cloud

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

Checks passed
14 / 22

1 failed · 7 not measured

Median response
693 ms

Median of successful probes over 7 days

30-day uptime
Not measured

Share of countable probes over 30 days, including daily rollups. Auth challenges are excluded.

Discovered tools
41

Tool definitions returned by this server

Independent monitoring

Health & checks

Status history

Responded

The server completed its last measured handshake. This is an observation, not a guarantee.

Last checked
Check summary by test group
Test areaPassedFailedUnmeasured
ConnectionCan a client connect and discover tools?
500
Reliability & speedDoes it respond consistently and quickly?
103
Access & authenticationWhat is required to use this server?
102
Tool qualityAre the tool definitions usable by an agent?
310
Publisher identityCan the publisher be traced to its source?
402

Unmeasured means there is not enough evidence to decide. How these checks work

Inspect individual checks 22 recorded

Core

  • Pass
    Reachable

    Latest probe returned HTTP 200 in 693 ms.

  • Pass
    Valid handshake

    protocolVersion 2025-06-18, serverInfo.name Writ Cloud.

  • Pass
    Lists tools

    tools/list returned 41 tools.

  • Pass
    Current protocol

    Negotiated 2025-06-18. The bar is 2025-06-18 or newer.

  • Pass
    HTTPS

    The endpoint URL is https.

Performance

  • Not measured
    Fast (p50)

    Median latency 693 ms over 2 samples in 7 days. The bar is 1000 ms. Need at least 5 samples.

  • Not measured
    Consistent (p95)

    95th percentile 693 ms over 2 samples in 7 days. The bar is 3000 ms. Need at least 20 samples.

  • Not measured
    Reliable (uptime)

    2 of 2 attempts returned a tool list in 30 days (100%). The bar is 99%. Need at least 30 samples.

  • Pass
    Stable tool list

    No tool was removed and no required parameter was added in the last 30 days.

Access

  • Pass
    Open access

    tools/list succeeded with no credential, and the record declares none.

  • Not measured
    Standard auth

    Auth is not required, so the OAuth metadata check does not apply.

  • Not measured
    Free tier cited

    No publisher quote has been checked.

Tools

  • Pass
    Tools described

    Every tool description is at least 20 characters.

  • Pass
    Valid input schemas

    Every inputSchema is a JSON Schema object.

  • Fail
    Parameters documented

    99 of 327 parameters have a description (30%). The bar is 80%.

  • Pass
    Safety hints

    Every tool sets readOnlyHint or destructiveHint.

Publisher

  • Pass
    Verified namespace

    Listed in the Official MCP Registry.

  • Pass
    Website matches publisher

    The website host matches the reverse-domain namespace.

  • Pass
    Source repo linked

    A repository URL is on file.

  • Not measured
    Repo owner matches

    This namespace is not an io.github login, so the owner comparison does not apply.

  • Pass
    Recently updated

    Updated 2026-10-10T13:19:03.186616Z, within 180 days.

  • Not measured
    Open-source licence

    The GitHub licence lookup has not returned an OSI result yet.

Start using Writ Cloud

Connect to this server

Choose your client, copy the configuration, then enable the server in your client’s MCP settings.

Run this command in your terminal, then restart Claude Code.

Claude Code

claude mcp add --transport http writ-cloud https://api.usewrit.app/mcp

Capabilities

Tools 41

writ_browser_act

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 (a flow is built step by step with writ_browser_compose add_flow_step), login_post, probe_write, confirm_write. 2FA: twofa {challenge_method}. A value written {{name}} with its real value in `inputs` becomes a workflow input. Each action's arguments: the session's start answer, or writ_help('writ_browser_act').

Discovered
writ_browser_ask_user

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.

Discovered
writ_browser_cancel

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.

Discovered
writ_browser_compose

Authors the workflow in an open session beyond a recording: named API functions (define_function with a `flow`, preferred in an API build, or 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. A flow is built in small calls: define_function with its first request, then add_flow_step {function, step, at?} per step, each tested and answered with the step list; a set step's value is read as {ref:'vars.<name>'}. Shapes: writ_help('writ_browser_compose').

Discovered
writ_browser_context

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).

Discovered
writ_browser_live_view

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.

Discovered
writ_browser_network

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.

Discovered
writ_browser_save

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.

Discovered
writ_browser_sessions

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

Discovered
writ_browser_use

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 vocabulary, the recording rules and, with a persona, the 2FA rules. NOT FOR: reading pages (writ_scrape). An API: writ_website_to_api opens this same browser, bound to a build.

Discovered
writ_crawl_files

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

Discovered
writ_crawl_site

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').

Discovered
writ_crawl_status

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

Discovered
writ_create_automation

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').

Discovered
writ_create_http_extraction

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').

Discovered
writ_create_monitor

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.

Discovered
writ_devices

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

Discovered
writ_diagnose_http_workflow

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

Discovered
writ_discovery_status

Status of a website-to-API build (a guided one, or one started in the Writ app). 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 build_id=<id>; its map comes with it).

Discovered
writ_export_data

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

Discovered
writ_expose_workflow_api

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

Discovered
writ_help

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 modes), 'actions' / 'recording' / '2fa' for the browser rules, 'http_flows' / 'flow_operators' for writing an HTTP flow, or empty for the list of topics.

Discovered
writ_list_webhooks

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

Discovered
writ_list_workflows

Lists the workflows saved in the Writ account; each runs on demand without live browsing. Returns id, name, declared inputs (with `input_rules`: the values and format an input accepts), schedule, whether it is pinned as its own run_<name> tool, and, for an API with several functions, their names (`functions`, `write_functions`): call one with function_name.

Discovered
writ_payment

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').

Discovered
writ_personas

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 (refresh the session) and record_login. A persona_id works on writ_scrape, writ_crawl_site, writ_browser_use and writ_run_workflow; a desktop persona ('device:...') signs in on that desktop, from its own vault.

Discovered
writ_pin_workflow_tool

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

Discovered
writ_record_website

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.

Discovered
writ_run_saved_crawl

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

Discovered
writ_run_workflow

Runs a saved workflow by workflow_id or name and returns its extracted data (it waits by default). The answer's `data` is what the run returned and `records_path` names its records; pass `output` with only the fields the question needs (fields: ['price', 'data.date as date']) for a far smaller answer. 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').

Discovered
writ_saved_crawl_data

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

Discovered
writ_saved_crawls

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

Discovered
writ_scrape

READ PAGES NOW, no browser session: one page (url), up to 20 pages in parallel (urls, on one site or several), 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; render_mode='http' opens no browser, so it never passes a check), or behind the user's sign-in (persona_id). Discussion threads keep their comments. format='html' returns the raw HTML for selectors, for one page or a batch. A page that cannot be read says why (error.code, e.g. scrape_not_found: the URL does not exist on the site) and gives retry_with when another read can help. NOT FOR: a site-wide dataset (writ_crawl_site) or clicking and typing (writ_browser_use).

Discovered
writ_search_data

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

Discovered
writ_set_schedule

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.

Discovered
writ_update_saved_crawl

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

Discovered
writ_update_workflow

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').

Discovered
writ_website_to_api

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 (writ_browser_compose define_function `flow`; writ_help('http_flows')), single requests (from_index) mixed in, DOM extraction last. writ_browser_save, then run_example on two inputs.

Discovered
writ_wire_monitor

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').

Discovered
writ_workflow_data

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

Discovered
writ_workflow_runs

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

Discovered

Recent measurements

Probe history

View status
Latest stored probes. Raw probe rows are kept for 14 days.
CheckedResultResponseTools
Connected693 ms41
Connected693 ms41