Koskamo

Stophy MCP

Provides AI agents with live web access to search, read social posts, and lookup products, places, jobs, and homes via a unified API.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

Stophy MCP logo, by StophyCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-06Published by Stophy
You need:get a key with `stophy login --browser`A new account starts with $10 to spend
MCP endpoint (Streamable HTTP)
https://api.stophy.dev/mcp
Vendor documentation

What its tools do

9 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

Not annotated (1)

9 of 9 have a description · 8 of 9 declare behavior hints · 4 of 9 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Search the web and news
  • Read social posts from Reddit and LinkedIn
  • Lookup products and prices on Amazon
  • Find places and reviews on Google Maps

Source and maintenance

Community listingRegistry 1.3.0
Maintenance checked

Protocol and capabilities

Server
Stophy 1.0.0
MCP protocol negotiated in check
2025-11-25
Tools
9 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

Live web data for the user's task. Use stophy_search to find pages, stophy_scrape to read one, stophy_map to list a site's pages, stophy_crawl to read many and stophy_extract to pull fields. For a site's own structured data (video, social, places, reviews, jobs, shopping, homes, stays, apps, travel, ads) call stophy_scrape with the page URL and a parser: formats [{"type":"json","parser":"<name>"}]. The parsers are listed in the stophy_scrape description. Some sites can only be read through a parser. Use stophy_search_endpoints and stophy_describe_endpoint to look up the other tools. Searching and describing cost nothing. Most calls cost $0.002, and creditsUsed in a result is its cost divided by $0.002 at the standard rate. The rate drops as your top-ups grow. Pass fields to keep some keys per row. Without an API key only Web Map, Web Parse, Web Scrape and Search work, at 10 requests a minute and 50 a day per IP. Call stophy_signup for a claim link your person approves. Then add the key as a bearer token to reach every endpoint.

Tools

9 advertised

stophy_search_endpoints — Find Stophy endpoints
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Start here. Send plain words for the data you want. Returns endpoints with their inputs, filters and cost, ready for stophy_call. Costs nothing.

stophy_search_endpoints input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "examples": [
    {
      "query": "crawl a docs site"
    },
    {
      "category": "web"
    }
  ],
  "properties": {
    "query": {
      "type": "string",
      "maxLength": 200,
      "description": "What you want in plain words, such as \"crawl a docs site\"."
    },
    "category": {
      "type": "string",
      "description": "Source name, such as web."
    }
  }
}
stophy_search_endpoints annotations
{
  "title": "Find Stophy endpoints",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
stophy_describe_endpoint — Describe a Stophy endpoint
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Optional. Returns an endpoint's full inputs, filter notes, an example and output fields. Costs nothing.

stophy_describe_endpoint input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "examples": [
    {
      "id": "map"
    }
  ],
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1,
      "description": "Endpoint id from stophy_search_endpoints."
    }
  }
}
stophy_describe_endpoint annotations
{
  "title": "Describe a Stophy endpoint",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
stophy_call — Call a Stophy endpoint
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Send an endpoint id and its input. Returns the data and what the call cost.

stophy_call input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "examples": [
    {
      "id": "map",
      "input": {
        "url": "https://bun.com",
        "limit": 20
      },
      "fields": [
        "url",
        "title"
      ]
    }
  ],
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1,
      "description": "Endpoint id from stophy_search_endpoints."
    },
    "input": {
      "type": "object",
      "description": "JSON body for that endpoint. Omit keys you are not setting.",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {}
    },
    "fields": {
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1
      },
      "maxItems": 50,
      "description": "Keys to keep, such as [\"title\", \"url\"]. They apply to each row of a results list, otherwise to the response. Dot paths reach nested keys, such as \"comments.author\". Unknown names are rejected."
    },
    "maxTextLength": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": 1,
      "description": "Cut each text value to this many characters. Omit it for full text."
    }
  }
}
stophy_call output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "creditsUsed",
    "requestId"
  ],
  "properties": {
    "success": {
      "type": "boolean",
      "const": true
    },
    "requestId": {
      "type": "string"
    },
    "creditsUsed": {
      "type": "number"
    }
  },
  "additionalProperties": {}
}
stophy_call annotations
{
  "title": "Call a Stophy endpoint",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
stophy_scrape — Web Scrape
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Scrape any public web page as markdown, HTML, links, a screenshot or JSON. 1 credit for any page, however it is reached. json with a schema or a prompt, summary and highlights add 4 credits each when they return something. CSS rules and attributes add nothing. A PDF adds 1 credit for each page read. Each perform action adds 2 credits. An answer from a stored copy within maxAge is free. A page that comes back with a 404 or 410 status is charged like any page. A page that cannot be read costs nothing. Each page of a urls call is priced on its own. creditsUsed shows what the call cost. To get a site's own data as JSON, send the site's page URL with formats [{"type":"json","parser":"<name>"}] and put extra inputs such as page or filters in options. Some sites can only be read this way. Parsers: google-maps, google-maps-place, google-maps-reviews, google-trends, google-scholar, google-patents, google-ads, google-flights, google-hotels, google-play-app, google-play-search, google-play-reviews, youtube-search, youtube-video, youtube-transcript, youtube-comments, youtube-channel, youtube-post, youtube-playlist, reddit-search, reddit-post, reddit-subreddit, reddit-user, reddit-subreddits, instagram-post, instagram-profile, instagram-comments, instagram-transcript, x-profile, x-post, threads-profile, threads-post, pinterest-search, pinterest-pin, pinterest-board, pinterest-profile, facebook-page, facebook-post, facebook-comments, facebook-marketplace, tiktok-video, tiktok-comments, tiktok-transcript, tiktok-profile, tiktok-hashtag, tiktok-sound, tiktok-search, tiktok-ads, tiktok-shop, linkedin-jobs, linkedin-job, linkedin-company, linkedin-profile, linkedin-posts, linkedin-ads, meta-ads, amazon-product, amazon-reviews, amazon-search, amazon-bestsellers, ebay-search, ebay-item, appstore-app, appstore-reviews, appstore-search, appstore-top, trustpilot-company, trustpilot-reviews, trustpilot-search, yelp-business, yelp-reviews, yelp-search, tripadvisor-search, tripadvisor-place, tripadvisor-reviews, glassdoor-company, glassdoor-reviews, glassdoor-salaries, zillow-search, zillow-property, realtor-search, realtor-property, booking-search, booking-hotel, booking-reviews, expedia-hotels, airbnb-search, airbnb-listing, airbnb-reviews, indeed-search, indeed-job, upwork-search, upwork-job, careers-jobs, careers-job, craigslist-search, luma-events, luma-event, emails, phone-numbers, company, instagram-feed, tiktok-followers, tiktok-following. GET /v1/parsers lists what each one takes.

stophy_scrape input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "url"
  ],
  "properties": {
    "url": {
      "type": "string",
      "description": "The page or PDF to read, such as https://bun.com/docs."
    },
    "urls": {
      "not": {}
    },
    "proxy": {
      "type": "string",
      "const": "auto"
    },
    "maxAge": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": 0,
      "description": "Accept a stored answer up to this many milliseconds old, at most 30 days. Without it, 2 days, or less for a site whose pages change often. 0 always reads the page live. metadata.cacheState says which one you got."
    },
    "minAge": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": 0,
      "description": "Answer only from a stored copy that is at least this many milliseconds old, and never read the page live. 0 accepts any stored copy. A page with no such copy is notFound."
    },
    "mobile": {
      "type": "boolean",
      "const": false
    },
    "actions": {
      "type": "array",
      "items": {
        "anyOf": [
          {
            "type": "object",
            "required": [
              "type",
              "milliseconds"
            ],
            "properties": {
              "type": {
                "type": "string",
                "const": "wait"
              },
              "milliseconds": {
                "type": "integer",
                "maximum": 30000,
                "minimum": 1
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "type",
              "selector"
            ],
            "properties": {
              "type": {
                "type": "string",
                "const": "wait"
              },
              "selector": {
                "type": "string",
                "minLength": 1
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "type",
              "selector"
            ],
            "properties": {
              "all": {
                "type": "boolean",
                "const": false
              },
              "type": {
                "type": "string",
                "const": "click"
              },
              "selector": {
                "type": "string",
                "minLength": 1
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "type",
              "text"
            ],
            "properties": {
              "text": {
                "type": "string",
                "minLength": 1
              },
              "type": {
                "type": "string",
                "const": "write"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "type",
              "key"
            ],
            "properties": {
              "key": {
                "type": "string",
                "maxLength": 40,
                "minLength": 1
              },
              "type": {
                "type": "string",
                "const": "press"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "type"
            ],
            "properties": {
              "type": {
                "type": "string",
                "const": "scroll"
              },
              "amount": {
                "anyOf": [
                  {
                    "type": "integer",
                    "maximum": 100000,
                    "minimum": 1
                  },
                  {
                    "enum": [
                      "viewport",
                      "max"
                    ],
                    "type": "string"
                  }
                ]
              },
              "selector": {
                "type": "string",
                "minLength": 1
              },
              "direction": {
                "enum": [
                  "up",
                  "down",
                  "left",
                  "right"
                ],
                "type": "string",
                "default": "down"
              },
              "maxScrolls": {
                "type": "integer",
                "maximum": 50,
                "minimum": 1
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "type"
            ],
            "properties": {
              "type": {
                "type": "string",
                "const": "screenshot"
              },
              "quality": {
                "type": "integer",
                "maximum": 100,
                "minimum": 1
              },
              "fullPage": {
                "type": "boolean"
              },
              "viewport": {
                "type": "object",
                "required": [
                  "width",
                  "height"
                ],
                "properties": {
                  "width": {
                    "type": "integer",
                    "maximum": 3840,
                    "minimum": 200
                  },
                  "height": {
                    "type": "integer",
                    "maximum": 2160,
                    "minimum": 200
                  }
                },
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "type"
            ],
            "properties": {
              "type": {
                "type": "string",
                "const": "scrape"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "type",
              "script"
            ],
            "properties": {
              "type": {
                "type": "string",
                "const": "executeJavascript"
              },
              "script": {
                "type": "string",
                "maxLength": 20000,
                "minLength": 1
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "type"
            ],
            "properties": {
              "type": {
                "type": "string",
                "const": "pdf"
              },
              "scale": {
                "type": "number",
                "maximum": 2,
                "minimum": 0.1
              },
              "format": {
                "enum": [
                  "Letter",
                  "Legal",
                  "Tabloid",
                  "Ledger",
                  "A0",
                  "A1",
                  "A2",
                  "A3",
                  "A4",
                  "A5",
                  "A6"
                ],
                "type": "string"
              },
              "landscape": {
                "type": "boolean"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "type",
              "action"
            ],
            "properties": {
              "type": {
                "type": "string",
                "const": "perform"
              },
              "action": {
                "type": "string",
                "maxLength": 500,
                "minLength": 1
              }
            },
            "additionalProperties": false
          }
        ]
      },
      "maxItems": 50,
      "minItems": 1,
      "description": "Up to 50 steps to run on the page, in order, before reading it: { \"type\": \"wait\", \"milliseconds\": 500 } (up to 30 seconds), { \"type\": \"wait\", \"selector\": \".results\" }, { \"type\": \"click\", \"selector\": \"button.more\" }, { \"type\": \"write\", \"text\": \"tides\" }, { \"type\": \"press\", \"key\": \"Enter\" }, { \"type\": \"scroll\", \"direction\": \"down\" } (also up, left or right; amount is pixels, \"viewport\" or \"max\"; maxScrolls 1 to 50; selector scrolls an inner container; \"max\" keeps scrolling until the page stops growing, for feeds that load as you go), { \"type\": \"screenshot\", \"fullPage\": true } (links come back in actions.screenshots), { \"type\": \"scrape\" } (the page at that point, in actions.scrapes), { \"type\": \"executeJavascript\", \"script\": \"document.title\" } (results in actions.javascriptReturns), { \"type\": \"pdf\", \"format\": \"A4\" } (links in actions.pdfs) or { \"type\": \"perform\", \"action\": \"Click the Load more button\" } (a step in plain words, up to 5 browser steps on this page, never leaving the site; at most 5 per call). A read with actions costs 1 credit, the same as any page, and each perform action costs 2 credits more. If an action fails, you still get the page as it stood, with a warning that names the action and says why."
    },
    "formats": {
      "type": "array",
      "items": {
        "anyOf": [
          {
            "enum": [
              "markdown",
              "summary",
              "html",
              "rawHtml",
              "links",
              "images",
              "network",
              "branding",
              "screenshot",
              "changeTracking"
            ],
            "type": "string"
          },
          {
            "type": "object",
            "required": [
              "type"
            ],
            "properties": {
              "type": {
                "enum": [
                  "markdown",
                  "summary",
                  "html",
                  "rawHtml",
                  "links",
                  "images",
                  "network",
                  "branding"
                ],
                "type": "string"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "type"
            ],
            "properties": {
              "tag": {
                "type": "null"
              },
              "type": {
                "type": "string",
                "const": "changeTracking"
              },
              "modes": {
                "type": "array",
                "items": {
                  "type": "string",
                  "const": "git-diff"
                }
              },
              "prompt": {
                "not": {}
              },
              "schema": {
                "not": {}
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "type"
            ],
            "properties": {
              "type": {
                "type": "string",
                "const": "screenshot"
              },
              "quality": {
                "not": {}
              },
              "fullPage": {
                "type": "boolean",
                "default": false,
                "description": "Capture the whole page from top to bottom instead of the visible part."
              },
              "viewport": {
                "not": {}
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "type",
              "query"
            ],
            "properties": {
              "type": {
                "type": "string",
                "const": "highlights"
              },
              "count": {
                "type": "integer",
                "default": 5,
                "maximum": 20,
                "minimum": 1,
                "description": "How many passages to return, best match first."
              },
              "query": {
                "type": "string",
                "maxLength": 10000,
                "minLength": 1,
                "description": "What you are looking for on the page, such as refund policy."
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "type"
            ],
            "properties": {
              "type": {
                "type": "string",
                "const": "json"
              },
              "rules": {
                "type": "object",
                "description": "Read the page with CSS rules instead of a model, no extra fee. Each field is a selector such as \"h1\" (the first match's text), \"a@href\" (an attribute) or { \"selector\": \"li\", \"type\": \"list\", \"output\": \"text\" | \"html\" | \"@attribute\" | { nested fields } }. A missing item is null and an unmatched list is []. Relative links become absolute. Up to 100 fields, 5 levels deep. Not with schema, prompt or parser.",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "$ref": "#/definitions/__schema2"
                }
              },
              "parser": {
                "type": "string",
                "description": "Read the page with a named parser, which gives the site's own data as json. The url must be the kind of page the parser reads. Parsers are the only way to read some sites. GET /v1/parsers lists them."
              },
              "prompt": {
                "type": "string",
                "maxLength": 10000,
                "minLength": 1,
                "description": "What to pull from the page in plain words, such as the version and the release date."
              },
              "schema": {
                "type": "object",
                "required": [
                  "type",
                  "properties"
                ],
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "object"
                  },
                  "properties": {
                    "type": "object",
                    "propertyNames": {
                      "type": "string",
                      "pattern": "^[A-Za-z][A-Za-z0-9_]{0,63}$"
                    },
                    "additionalProperties": {
                      "$ref": "#/definitions/__schema1"
                    }
                  }
                },
                "description": "The fields to fill, as a JSON Schema object with up to 20 properties. Each is a string, number, integer, boolean, an array, or an object with its own properties, nested up to 4 levels.",
                "additionalProperties": {}
              },
              "options": {
                "type": "object",
                "description": "Only with parser: extra inputs for it, such as { \"page\": 2 } for the next page of results or { \"minRating\": 4.5 } for a filter. GET /v1/parsers lists what each parser accepts.",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "$ref": "#/definitions/__schema0"
                }
              },
              "checkPromptInjection": {
                "type": "boolean",
                "const": false
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "type",
              "selectors"
            ],
            "properties": {
              "type": {
                "type": "string",
                "const": "attributes"
              },
              "selectors": {
                "type": "array",
                "items": {
                  "type": "object",
                  "required": [
                    "selector",
                    "attribute"
                  ],
                  "properties": {
                    "selector": {
                      "type": "string",
                      "minLength": 1
                    },
                    "attribute": {
                      "type": "string",
                      "maxLength": 100,
                      "minLength": 1
                    }
                  },
                  "additionalProperties": false
                },
                "maxItems": 50,
                "minItems": 1,
                "description": "The elements and attributes to read, such as { selector: 'a.buy', attribute: 'href' }."
              }
            },
            "additionalProperties": false
          }
        ]
      },
      "default": [
        "markdown"
      ],
      "maxItems": 20,
      "minItems": 1,
      "description": "What to return: markdown (clean page text), summary (a short summary of the page), html (the cleaned page), rawHtml (the page as sent), links (every link on the page), images (every image address), screenshot (a link to a JPEG of the visible page, kept for 7 days), changeTracking (what changed in the markdown since your key last read this page with the same options, kept 30 days) network (the JSON the page loaded while it rendered, up to 30 responses) and branding (the page's colors, fonts, typography, spacing, button and input styles, logo and brand images, read from how the page looks, with a field left out when the page does not show it). Send { \"type\": \"screenshot\", \"fullPage\": true } for the whole page. Send { \"type\": \"highlights\", \"query\": \"refund policy\" } for the passages that best match a query. Send { \"type\": \"json\", \"schema\": { \"type\": \"object\", \"properties\": { \"price\": { \"type\": \"number\" } } } } or { \"type\": \"json\", \"prompt\": \"the price and the stock\" } for fields filled from the page, each checked against it. Send { \"type\": \"json\", \"parser\": \"amazon-product\" } to get a site's own data as json instead of reading the page; GET /v1/parsers lists the parsers. Send { \"type\": \"json\", \"rules\": { \"title\": \"h1\", \"links\": { \"selector\": \"a\", \"type\": \"list\", \"output\": \"@href\" } } } to read the page with CSS rules and no model, at the page's own price. Send { \"type\": \"attributes\", \"selectors\": [{ \"selector\": \"a\", \"attribute\": \"href\" }] } for attribute values, returned in attributes. Without a parser or rules, json needs a schema or a prompt and is filled from the page. json with a schema or a prompt, summary and highlights cost 4 credits more each when they return something. json with rules or a parser, and attributes, cost nothing more. A screenshot, network or branding read costs 1 credit, the same as any page. A PDF comes back as markdown only, and costs 1 credit more for each page read."
    },
    "headers": {
      "not": {}
    },
    "parsers": {
      "type": "array",
      "items": {
        "anyOf": [
          {
            "type": "string",
            "const": "pdf"
          },
          {
            "type": "object",
            "required": [
              "type"
            ],
            "properties": {
              "mode": {
                "type": "string",
                "const": "auto"
              },
              "type": {
                "type": "string",
                "const": "pdf"
              },
              "pages": {
                "type": "boolean",
                "const": false
              },
              "blocks": {
                "type": "boolean",
                "const": false
              },
              "maxPages": {
                "not": {}
              },
              "pageMarkers": {
                "type": "boolean",
                "const": false
              }
            },
            "additionalProperties": false
          }
        ]
      },
      "minItems": 1,
      "description": "Only [\"pdf\"] is supported: PDFs are read as markdown."
    },
    "profile": {
      "type": "object",
      "required": [
        "name"
      ],
      "properties": {
        "name": {
          "type": "string",
          "maxLength": 128,
          "minLength": 1,
          "description": "A name you choose, such as shop-login. Calls with the same name share state."
        },
        "saveChanges": {
          "type": "boolean",
          "default": true,
          "description": "Keep the cookies and local storage this read leaves behind for the next call with this name. Send false to read with the profile without changing it."
        }
      },
      "description": "Read the page with the cookies and local storage that earlier calls saved under this name, kept for your account for 30 days after the last use. A call with a profile always loads the page in a browser, costs 1 credit, the same as any page, and is never answered from a stored copy. Only one call at a time can save to a profile.",
      "additionalProperties": false
    },
    "timeout": {
      "type": "integer",
      "maximum": 300000,
      "minimum": 1000,
      "description": "How long to keep trying, in milliseconds, between 10 seconds and 2 minutes. Pages behind a bot check can need 10 to 30 seconds the first time."
    },
    "waitFor": {
      "type": "integer",
      "maximum": 60000,
      "minimum": 0,
      "description": "Extra milliseconds to wait before reading, up to 60000, for pages that load their content late. To wait for an element, add a wait action with a selector. A read that waits costs 1 credit, the same as any page."
    },
    "blockAds": {
      "type": "boolean",
      "const": true
    },
    "location": {
      "type": "object",
      "properties": {
        "country": {
          "type": "string",
          "description": "Two-letter country code to read the page from, such as DE or JP."
        },
        "languages": {
          "not": {}
        }
      },
      "description": "Where to read the page from. The default is the United States.",
      "additionalProperties": false
    },
    "lockdown": {
      "type": "boolean",
      "const": false
    },
    "maxChars": {
      "type": "integer",
      "maximum": 1000000,
      "minimum": 500,
      "description": "Cut the markdown at this many characters; isTruncated says when that happened."
    },
    "linkStyle": {
      "enum": [
        "inline",
        "numbered",
        "none"
      ],
      "type": "string",
      "default": "inline",
      "description": "How links appear in the markdown. inline keeps [text](address). numbered writes Pricing⟨3⟩ and lists each address once at the end. none keeps only the link text, which makes link-heavy pages 10 to 70% shorter; ask for the links format to get the addresses."
    },
    "redactPII": {
      "type": "boolean",
      "const": false
    },
    "alexandria": {
      "not": {}
    },
    "toolDetail": {
      "not": {}
    },
    "domainTools": {
      "type": "boolean",
      "const": false
    },
    "excludeTags": {
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1
      },
      "minItems": 1,
      "description": "Remove the parts of the page that match these CSS selectors, such as .comments."
    },
    "includeTags": {
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1
      },
      "minItems": 1,
      "description": "Keep only the parts of the page that match these CSS selectors, such as article or .price. When set, onlyMainContent is not applied."
    },
    "storeInCache": {
      "type": "boolean",
      "default": true,
      "description": "Send false to neither read nor keep a stored copy of this page."
    },
    "auditMetadata": {
      "not": {}
    },
    "onlyMainContent": {
      "type": "boolean",
      "default": true,
      "description": "Keep only the page's main content, without menus, headers, footers and ads."
    },
    "onlyCleanContent": {
      "type": "boolean",
      "const": false
    },
    "threatProtection": {
      "not": {}
    },
    "zeroDataRetention": {
      "type": "boolean",
      "default": false,
      "description": "Send true to keep nothing from this call: no stored copy is read or made, and nothing from it is logged. Costs 1 credit more per page. Not with a screenshot."
    },
    "removeBase64Images": {
      "type": "boolean",
      "const": true
    },
    "skipTlsVerification": {
      "type": "boolean",
      "const": false
    },
    "checkPromptInjection": {
      "type": "boolean",
      "const": false
    }
  },
  "definitions": {
    "__schema0": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "number"
        },
        {
          "type": "boolean"
        },
        {
          "type": "null"
        },
        {
          "type": "array",
          "items": {
            "allOf": [
              {
                "$ref": "#/definitions/__schema0"
              }
            ]
          }
        },
        {
          "type": "object",
          "propertyNames": {
            "type": "string"
          },
          "additionalProperties": {
            "allOf": [
              {
                "$ref": "#/definitions/__schema0"
              }
            ]
          }
        }
      ]
    },
    "__schema1": {
      "anyOf": [
        {
          "type": "object",
          "required": [
            "type"
          ],
          "properties": {
            "type": {
              "enum": [
                "string",
                "number",
                "integer",
                "boolean"
              ],
              "type": "string"
            },
            "description": {
              "type": "string",
              "maxLength": 300
            }
          },
          "additionalProperties": {}
        },
        {
          "type": "object",
          "required": [
            "type",
            "items"
          ],
          "properties": {
            "type": {
              "type": "string",
              "const": "array"
            },
            "items": {
              "allOf": [
                {
                  "$ref": "#/definitions/__schema1"
                }
              ]
            },
            "description": {
              "type": "string",
              "maxLength": 300
            }
          },
          "additionalProperties": {}
        },
        {
          "type": "object",
          "required": [
            "type",
            "properties"
          ],
          "properties": {
            "type": {
              "type": "string",
              "const": "object"
            },
            "properties": {
              "type": "object",
              "propertyNames": {
                "type": "string",
                "pattern": "^[A-Za-z][A-Za-z0-9_]{0,63}$"
              },
              "additionalProperties": {
                "allOf": [
                  {
                    "$ref": "#/definitions/__schema1"
                  }
                ]
              }
            },
            "description": {
              "type": "string",
              "maxLength": 300
            }
          },
          "additionalProperties": {}
        }
      ]
    },
    "__schema2": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "number"
        },
        {
          "type": "boolean"
        },
        {
          "type": "null"
        },
        {
          "type": "array",
          "items": {
            "allOf": [
              {
                "$ref": "#/definitions/__schema2"
              }
            ]
          }
        },
        {
          "type": "object",
          "propertyNames": {
            "type": "string"
          },
          "additionalProperties": {
            "allOf": [
              {
                "$ref": "#/definitions/__schema2"
              }
            ]
          }
        }
      ]
    }
  },
  "additionalProperties": false
}
stophy_scrape output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "creditsUsed",
    "requestId"
  ],
  "properties": {
    "success": {
      "type": "boolean",
      "const": true
    },
    "requestId": {
      "type": "string"
    },
    "creditsUsed": {
      "type": "number"
    }
  },
  "additionalProperties": {}
}
stophy_scrape annotations
{
  "title": "Web Scrape",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
stophy_search — Search
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Search the web, news, images, scholarly papers and companies in one call. 2 credits per 10 results from each source a...

stophy_search input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "query"
  ],
  "properties": {
    "tbs": {
      "type": "string",
      "minLength": 1,
      "description": "Time filter: qdr:h, qdr:d, qdr:w, qdr:m or qdr:y, or cdr:1,cd_min:MM/DD/YYYY,cd_max:MM/DD/YYYY. Web takes both; news takes qdr only; images take none."
    },
    "safe": {
      "type": "boolean",
      "description": "Hide explicit web and image results when true."
    },
    "limit": {
      "type": "integer",
      "maximum": 100,
      "minimum": 1,
      "description": "Most results to return for each source. Default 10, or 5 with scrapeOptions, which reads at most 5 pages. News returns at most 50."
    },
    "query": {
      "type": "string",
      "maxLength": 400,
      "minLength": 1
    },
    "maxAge": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": 0,
      "description": "Accept a stored answer up to this many milliseconds old, at most 30 days. Without it, 15 minutes for news and 1 hour for web and images. 0 always searches live."
    },
    "country": {
      "type": "string",
      "pattern": "^[A-Za-z]{2}$",
      "description": "Two-letter country to search from, like us. Image results are always US."
    },
    "sources": {
      "type": "array",
      "items": {
        "anyOf": [
          {
            "enum": [
              "web",
              "news",
              "images"
            ],
            "type": "string"
          },
          {
            "type": "object",
            "required": [
              "type"
            ],
            "properties": {
              "tbs": {
                "type": "string"
              },
              "type": {
                "type": "string",
                "const": "web"
              },
              "location": {
                "type": "string"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "type"
            ],
            "properties": {
              "type": {
                "enum": [
                  "news",
                  "images"
                ],
                "type": "string"
              }
            },
            "additionalProperties": false
          }
        ]
      },
      "maxItems": 3,
      "minItems": 1,
      "description": "What to search: web, news, images. Each is a string or {type}. Default web, or none when categories asks for research, companies or developer."
    },
    "timeout": {
      "type": "integer",
      "default": 60000,
      "maximum": 9007199254740991,
      "minimum": 1000,
      "description": "Milliseconds to wait for the sources."
    },
    "location": {
      "type": "string",
      "minLength": 1,
      "description": "Where to search from, like Germany or San Francisco,California,United States. The last part is the country and replaces country. A city before it narrows web results to that place."
    },
    "categories": {
      "type": "array",
      "items": {
        "anyOf": [
          {
            "enum": [
              "developer",
              "gov",
              "research",
              "pdf",
              "companies"
            ],
            "type": "string"
          },
          {
            "type": "object",
            "required": [
              "type"
            ],
            "properties": {
              "type": {
                "enum": [
                  "developer",
                  "gov",
                  "research",
                  "pdf",
                  "companies"
                ],
                "type": "string"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "type"
            ],
            "properties": {
              "type": {
                "type": "string",
                "const": "developer"
              },
              "repos": {
                "type": "array",
                "items": {
                  "type": "string",
                  "pattern": "^[\\w.-]+\\/[\\w.-]+$"
                },
                "default": [],
                "maxItems": 5,
                "description": "Only results from these GitHub repositories, as owner/name."
              },
              "types": {
                "type": "array",
                "items": {
                  "enum": [
                    "readme",
                    "issue",
                    "pull_request",
                    "release",
                    "operation",
                    "doc"
                  ],
                  "type": "string"
                },
                "default": [],
                "description": "Only these result types: readme, issue, pull_request, release, operation, doc."
              },
              "language": {
                "type": "string",
                "minLength": 1,
                "description": "Only repositories whose main language is this, like TypeScript."
              },
              "minStars": {
                "type": "integer",
                "maximum": 9007199254740991,
                "minimum": 0,
                "description": "Only repositories with at least this many GitHub stars."
              }
            },
            "additionalProperties": false
          }
        ]
      },
      "description": "pdf: web results that are PDF files. research: scholarly papers, in a research list, ranked by relevance then citations. companies: companies that match the query, in a companies list, best matches first. The query can name a place, industry, employee count, founding year and funding stage, like fintech startups in Berlin, 50-200 employees. developer: passages from GitHub READMEs, issues, merged pull requests, releases, developer docs and API operations, in a developer list; send it as an object to filter by repos, types, language and minStars."
    },
    "enterprise": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "maxItems": 0
    },
    "highlights": {
      "type": "boolean",
      "default": true,
      "description": "On by default. When a web result's page is already stored, its description is the passages of that page that best match the query. Send false for the snippet the search engine shows."
    },
    "toolDetail": {
      "type": "string",
      "const": "compact"
    },
    "domainTools": {
      "type": "boolean",
      "const": false
    },
    "scrapeOptions": {
      "type": "object",
      "properties": {
        "proxy": {
          "type": "string",
          "const": "auto"
        },
        "maxAge": {
          "type": "number",
          "const": 172800000
        },
        "mobile": {
          "type": "boolean",
          "const": false
        },
        "formats": {
          "type": "array",
          "items": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "object",
                "required": [
                  "type"
                ],
                "properties": {
                  "type": {
                    "type": "string"
                  }
                },
                "additionalProperties": {}
              }
            ]
          }
        },
        "headers": {
          "type": "object",
          "properties": {},
          "additionalProperties": {}
        },
        "timeout": {
          "type": "number",
          "const": 60000
        },
        "waitFor": {
          "type": "number",
          "const": 0
        },
        "blockAds": {
          "type": "boolean",
          "const": true
        },
        "lockdown": {
          "type": "boolean",
          "const": false
        },
        "redactPII": {
          "type": "boolean",
          "const": false
        },
        "excludeTags": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "maxItems": 0
        },
        "includeTags": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "maxItems": 0
        },
        "storeInCache": {
          "type": "boolean",
          "const": true
        },
        "onlyMainContent": {
          "type": "boolean",
          "const": true
        },
        "onlyCleanContent": {
          "type": "boolean",
          "const": false
        },
        "zeroDataRetention": {
          "type": "boolean",
          "default": false,
          "description": "Send true to keep nothing from the pages read, and read each one live. Costs 1 more credit per page."
        },
        "removeBase64Images": {
          "type": "boolean",
          "const": true
        },
        "skipTlsVerification": {
          "type": "boolean",
          "const": false
        },
        "checkPromptInjection": {
          "type": "boolean",
          "const": false
        }
      },
      "description": "Reads the top web results, up to 5, and puts the passages that best match the query in each description. Add \"markdown\" to formats to get the whole page text too. Costs 1 more credit for each page read.",
      "additionalProperties": false
    },
    "excludeDomains": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "maxItems": 10
    },
    "includeDomains": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "maxItems": 10
    },
    "threatProtection": {
      "type": "object",
      "properties": {},
      "additionalProperties": {}
    },
    "ignoreInvalidURLs": {
      "type": "boolean",
      "default": false,
      "description": "Leave out results whose address cannot be read as a page."
    }
  },
  "additionalProperties": false
}
stophy_search output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "creditsUsed",
    "requestId"
  ],
  "properties": {
    "success": {
      "type": "boolean",
      "const": true
    },
    "requestId": {
      "type": "string"
    },
    "creditsUsed": {
      "type": "number"
    }
  },
  "additionalProperties": {}
}
stophy_search annotations
{
  "title": "Search",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
stophy_map — Web Map
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Scrape the list of pages on a website. 1 credit per call. Input: url, search, sitemap, includeSubdomains, ignoreQuery...

stophy_map input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "url"
  ],
  "properties": {
    "url": {
      "type": "string",
      "description": "Any page of the site to map, such as https://bun.com."
    },
    "limit": {
      "type": "integer",
      "default": 5000,
      "maximum": 100000,
      "minimum": 1,
      "description": "The most addresses to return, up to 100000."
    },
    "search": {
      "type": "string",
      "minLength": 1,
      "description": "Keep only addresses that mention these words, best matches first, such as pricing."
    },
    "sitemap": {
      "enum": [
        "skip",
        "include",
        "only"
      ],
      "type": "string",
      "default": "include",
      "description": "include uses the site's sitemaps and its pages. only lists just what the sitemaps name. skip ignores the sitemaps."
    },
    "timeout": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": 1000,
      "description": "Stop looking after this many milliseconds and return what was found."
    },
    "location": {
      "type": "object",
      "properties": {
        "country": {
          "type": "string"
        },
        "languages": {
          "not": {}
        }
      },
      "additionalProperties": false
    },
    "ignoreCache": {
      "type": "boolean",
      "default": false,
      "description": "Send true to build the list again instead of reusing one made in the last 6 hours."
    },
    "auditMetadata": {
      "not": {}
    },
    "threatProtection": {
      "not": {}
    },
    "includeSubdomains": {
      "type": "boolean",
      "default": true,
      "description": "Also list pages on subdomains, such as docs.bun.com for bun.com."
    },
    "ignoreQueryParameters": {
      "type": "boolean",
      "default": true,
      "description": "List each page once, without its ?query part."
    }
  },
  "additionalProperties": false
}
stophy_map output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "creditsUsed",
    "requestId"
  ],
  "properties": {
    "success": {
      "type": "boolean",
      "const": true
    },
    "requestId": {
      "type": "string"
    },
    "creditsUsed": {
      "type": "number"
    }
  },
  "additionalProperties": {}
}
stophy_map annotations
{
  "title": "Web Map",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
stophy_crawl — Web Crawl Start
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Crawl a website in the background. 1 credit a page, however it is reached. A page that cannot be read costs nothing. ...

stophy_crawl input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "url"
  ],
  "properties": {
    "url": {
      "type": "string",
      "description": "The page to start from, such as https://bun.com/docs."
    },
    "delay": {
      "not": {}
    },
    "limit": {
      "type": "integer",
      "default": 10000,
      "maximum": 10000,
      "minimum": 1,
      "description": "Stop after reading this many pages in total, across every call."
    },
    "prompt": {
      "type": "string",
      "maxLength": 1000,
      "minLength": 1,
      "description": "What you are looking for, such as sqlite performance. Pages about it are read first, and the crawl stops once new pages stop mentioning it."
    },
    "sitemap": {
      "enum": [
        "skip",
        "include",
        "only"
      ],
      "type": "string",
      "default": "include",
      "description": "include also uses the site's sitemaps. only reads just the pages the sitemaps name. skip ignores them."
    },
    "webhook": {
      "type": "object",
      "required": [
        "url"
      ],
      "properties": {
        "url": {
          "type": "string"
        },
        "events": {
          "not": {}
        },
        "headers": {
          "not": {}
        },
        "metadata": {
          "not": {}
        }
      },
      "description": "Where to be told about the job: { url } gets a JSON POST when the job starts, for each finished page, and when the job ends. If your address answers slowly, a page event can carry only the page url. Read that page with the status call.",
      "additionalProperties": false
    },
    "excludePaths": {
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 200,
        "minLength": 1
      },
      "default": [],
      "maxItems": 100,
      "description": "Skip pages whose path matches one of these regular expressions, such as tag/.*."
    },
    "includePaths": {
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 200,
        "minLength": 1
      },
      "default": [],
      "maxItems": 100,
      "description": "Read only pages whose path matches one of these regular expressions, such as blog/.*."
    },
    "scrapeOptions": {
      "type": "object",
      "properties": {
        "proxy": {
          "type": "string",
          "const": "auto"
        },
        "maxAge": {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": 0,
          "description": "Accept a stored answer up to this many milliseconds old, at most 30 days. Without it, 2 days, or less for a site whose pages change often. 0 always reads the page live. metadata.cacheState says which one you got."
        },
        "minAge": {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": 0,
          "description": "Answer only from a stored copy that is at least this many milliseconds old, and never read the page live. 0 accepts any stored copy. A page with no such copy is notFound."
        },
        "mobile": {
          "type": "boolean",
          "const": false
        },
        "actions": {
          "type": "array",
          "items": {
            "anyOf": [
              {
                "type": "object",
                "required": [
                  "type",
                  "milliseconds"
                ],
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "wait"
                  },
                  "milliseconds": {
                    "type": "integer",
                    "maximum": 30000,
                    "minimum": 1
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "object",
                "required": [
                  "type",
                  "selector"
                ],
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "wait"
                  },
                  "selector": {
                    "type": "string",
                    "minLength": 1
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "object",
                "required": [
                  "type",
                  "selector"
                ],
                "properties": {
                  "all": {
                    "type": "boolean",
                    "const": false
                  },
                  "type": {
                    "type": "string",
                    "const": "click"
                  },
                  "selector": {
                    "type": "string",
                    "minLength": 1
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "object",
                "required": [
                  "type",
                  "text"
                ],
                "properties": {
                  "text": {
                    "type": "string",
                    "minLength": 1
                  },
                  "type": {
                    "type": "string",
                    "const": "write"
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "object",
                "required": [
                  "type",
                  "key"
                ],
                "properties": {
                  "key": {
                    "type": "string",
                    "maxLength": 40,
                    "minLength": 1
                  },
                  "type": {
                    "type": "string",
                    "const": "press"
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "object",
                "required": [
                  "type"
                ],
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "scroll"
                  },
                  "amount": {
                    "anyOf": [
                      {
                        "type": "integer",
                        "maximum": 100000,
                        "minimum": 1
                      },
                      {
                        "enum": [
                          "viewport",
                          "max"
                        ],
                        "type": "string"
                      }
                    ]
                  },
                  "selector": {
                    "type": "string",
                    "minLength": 1
                  },
                  "direction": {
                    "enum": [
                      "up",
                      "down",
                      "left",
                      "right"
                    ],
                    "type": "string",
                    "default": "down"
                  },
                  "maxScrolls": {
                    "type": "integer",
                    "maximum": 50,
                    "minimum": 1
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "object",
                "required": [
                  "type"
                ],
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "screenshot"
                  },
                  "quality": {
                    "type": "integer",
                    "maximum": 100,
                    "minimum": 1
                  },
                  "fullPage": {
                    "type": "boolean"
                  },
                  "viewport": {
                    "type": "object",
                    "required": [
                      "width",
                      "height"
                    ],
                    "properties": {
                      "width": {
                        "type": "integer",
                        "maximum": 3840,
                        "minimum": 200
                      },
                      "height": {
                        "type": "integer",
                        "maximum": 2160,
                        "minimum": 200
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "object",
                "required": [
                  "type"
                ],
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "scrape"
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "object",
                "required": [
                  "type",
                  "script"
                ],
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "executeJavascript"
                  },
                  "script": {
                    "type": "string",
                    "maxLength": 20000,
                    "minLength": 1
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "object",
                "required": [
                  "type"
                ],
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "pdf"
                  },
                  "scale": {
                    "type": "number",
                    "maximum": 2,
                    "minimum": 0.1
                  },
                  "format": {
                    "enum": [
                      "Letter",
                      "Legal",
                      "Tabloid",
                      "Ledger",
                      "A0",
                      "A1",
                      "A2",
                      "A3",
                      "A4",
                      "A5",
                      "A6"
                    ],
                    "type": "string"
                  },
                  "landscape": {
                    "type": "boolean"
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "object",
                "required": [
                  "type",
                  "action"
                ],
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "perform"
                  },
                  "action": {
                    "type": "string",
                    "maxLength": 500,
                    "minLength": 1
                  }
                },
                "additionalProperties": false
              }
            ]
          },
          "maxItems": 50,
          "minItems": 1,
          "description": "Up to 50 steps to run on the page, in order, before reading it: { \"type\": \"wait\", \"milliseconds\": 500 } (up to 30 seconds), { \"type\": \"wait\", \"selector\": \".results\" }, { \"type\": \"click\", \"selector\": \"button.more\" }, { \"type\": \"write\", \"text\": \"tides\" }, { \"type\": \"press\", \"key\": \"Enter\" }, { \"type\": \"scroll\", \"direction\": \"down\" } (also up, left or right; amount is pixels, \"viewport\" or \"max\"; maxScrolls 1 to 50; selector scrolls an inner container; \"max\" keeps scrolling until the page stops growing, for feeds that load as you go), { \"type\": \"screenshot\", \"fullPage\": true } (links come back in actions.screenshots), { \"type\": \"scrape\" } (the page at that point, in actions.scrapes), { \"type\": \"executeJavascript\", \"script\": \"document.title\" } (results in actions.javascriptReturns), { \"type\": \"pdf\", \"format\": \"A4\" } (links in actions.pdfs) or { \"type\": \"perform\", \"action\": \"Click the Load more button\" } (a step in plain words, up to 5 browser steps on this page, never leaving the site; at most 5 per call). A read with actions costs 1 credit, the same as any page, and each perform action costs 2 credits more. If an action fails, you still get the page as it stood, with a warning that names the action and says why."
        },
        "formats": {
          "type": "array",
          "items": {
            "anyOf": [
              {
                "enum": [
                  "markdown",
                  "summary",
                  "html",
                  "rawHtml",
                  "links",
                  "images",
                  "network",
                  "branding",
                  "screenshot",
                  "changeTracking"
                ],
                "type": "string"
              },
              {
                "type": "object",
                "required": [
                  "type"
                ],
                "properties": {
                  "type": {
                    "enum": [
                      "markdown",
                      "summary",
                      "html",
                      "rawHtml",
                      "links",
                      "images",
                      "network",
                      "branding"
                    ],
                    "type": "string"
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "object",
                "required": [
                  "type"
                ],
                "properties": {
                  "tag": {
                    "type": "null"
                  },
                  "type": {
                    "type": "string",
                    "const": "changeTracking"
                  },
                  "modes": {
                    "type": "array",
                    "items": {
                      "type": "string",
                      "const": "git-diff"
                    }
                  },
                  "prompt": {
                    "not": {}
                  },
                  "schema": {
                    "not": {}
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "object",
                "required": [
                  "type"
                ],
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "screenshot"
                  },
                  "quality": {
                    "not": {}
                  },
                  "fullPage": {
                    "type": "boolean",
                    "default": false,
                    "description": "Capture the whole page from top to bottom instead of the visible part."
                  },
                  "viewport": {
                    "not": {}
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "object",
                "required": [
                  "type",
                  "query"
                ],
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "highlights"
                  },
                  "count": {
                    "type": "integer",
                    "default": 5,
                    "maximum": 20,
                    "minimum": 1,
                    "description": "How many passages to return, best match first."
                  },
                  "query": {
                    "type": "string",
                    "maxLength": 10000,
                    "minLength": 1,
                    "description": "What you are looking for on the page, such as refund policy."
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "object",
                "required": [
                  "type"
                ],
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "rules": {
                    "type": "object",
                    "description": "Read the page with CSS rules instead of a model, no extra fee. Each field is a selector such as \"h1\" (the first match's text), \"a@href\" (an attribute) or { \"selector\": \"li\", \"type\": \"list\", \"output\": \"text\" | \"html\" | \"@attribute\" | { nested fields } }. A missing item is null and an unmatched list is []. Relative links become absolute. Up to 100 fields, 5 levels deep. Not with schema, prompt or parser.",
                    "propertyNames": {
                      "type": "string"
                    },
                    "additionalProperties": {
                      "$ref": "#/definitions/__schema2"
                    }
                  },
                  "parser": {
                    "type": "string",
                    "description": "Read the page with a named parser, which gives the site's own data as json. The url must be the kind of page the parser reads. Parsers are the only way to read some sites. GET /v1/parsers lists them."
                  },
                  "prompt": {
                    "type": "string",
                    "maxLength": 10000,
                    "minLength": 1,
                    "description": "What to pull from the page in plain words, such as the version and the release date."
                  },
                  "schema": {
                    "type": "object",
                    "required": [
                      "type",
                      "properties"
                    ],
                    "properties": {
                      "type": {
                        "type": "string",
                        "const": "object"
                      },
                      "properties": {
                        "type": "object",
                        "propertyNames": {
                          "type": "string",
                          "pattern": "^[A-Za-z][A-Za-z0-9_]{0,63}$"
                        },
                        "additionalProperties": {
                          "$ref": "#/definitions/__schema1"
                        }
                      }
                    },
                    "description": "The fields to fill, as a JSON Schema object with up to 20 properties. Each is a string, number, integer, boolean, an array, or an object with its own properties, nested up to 4 levels.",
                    "additionalProperties": {}
                  },
                  "options": {
                    "type": "object",
                    "description": "Only with parser: extra inputs for it, such as { \"page\": 2 } for the next page of results or { \"minRating\": 4.5 } for a filter. GET /v1/parsers lists what each parser accepts.",
                    "propertyNames": {
                      "type": "string"
                    },
                    "additionalProperties": {
                      "$ref": "#/definitions/__schema0"
                    }
                  },
                  "checkPromptInjection": {
                    "type": "boolean",
                    "const": false
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "object",
                "required": [
                  "type",
                  "selectors"
                ],
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "attributes"
                  },
                  "selectors": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "required": [
                        "selector",
                        "attribute"
                      ],
                      "properties": {
                        "selector": {
                          "type": "string",
                          "minLength": 1
                        },
                        "attribute": {
                          "type": "string",
                          "maxLength": 100,
                          "minLength": 1
                        }
                      },
                      "additionalProperties": false
                    },
                    "maxItems": 50,
                    "minItems": 1,
                    "description": "The elements and attributes to read, such as { selector: 'a.buy', attribute: 'href' }."
                  }
                },
                "additionalProperties": false
              }
            ]
          },
          "default": [
            "markdown"
          ],
          "maxItems": 20,
          "minItems": 1,
          "description": "What to return: markdown (clean page text), summary (a short summary of the page), html (the cleaned page), rawHtml (the page as sent), links (every link on the page), images (every image address), screenshot (a link to a JPEG of the visible page, kept for 7 days), changeTracking (what changed in the markdown since your key last read this page with the same options, kept 30 days) network (the JSON the page loaded while it rendered, up to 30 responses) and branding (the page's colors, fonts, typography, spacing, button and input styles, logo and brand images, read from how the page looks, with a field left out when the page does not show it). Send { \"type\": \"screenshot\", \"fullPage\": true } for the whole page. Send { \"type\": \"highlights\", \"query\": \"refund policy\" } for the passages that best match a query. Send { \"type\": \"json\", \"schema\": { \"type\": \"object\", \"properties\": { \"price\": { \"type\": \"number\" } } } } or { \"type\": \"json\", \"prompt\": \"the price and the stock\" } for fields filled from the page, each checked against it. Send { \"type\": \"json\", \"parser\": \"amazon-product\" } to get a site's own data as json instead of reading the page; GET /v1/parsers lists the parsers. Send { \"type\": \"json\", \"rules\": { \"title\": \"h1\", \"links\": { \"selector\": \"a\", \"type\": \"list\", \"output\": \"@href\" } } } to read the page with CSS rules and no model, at the page's own price. Send { \"type\": \"attributes\", \"selectors\": [{ \"selector\": \"a\", \"attribute\": \"href\" }] } for attribute values, returned in attributes. Without a parser or rules, json needs a schema or a prompt and is filled from the page. json with a schema or a prompt, summary and highlights cost 4 credits more each when they return something. json with rules or a parser, and attributes, cost nothing more. A screenshot, network or branding read costs 1 credit, the same as any page. A PDF comes back as markdown only, and costs 1 credit more for each page read."
        },
        "headers": {
          "not": {}
        },
        "parsers": {
          "type": "array",
          "items": {
            "anyOf": [
              {
                "type": "string",
                "const": "pdf"
              },
              {
                "type": "object",
                "required": [
                  "type"
                ],
                "properties": {
                  "mode": {
                    "type": "string",
                    "const": "auto"
                  },
                  "type": {
                    "type": "string",
                    "const": "pdf"
                  },
                  "pages": {
                    "type": "boolean",
                    "const": false
                  },
                  "blocks": {
                    "type": "boolean",
                    "const": false
                  },
                  "maxPages": {
                    "not": {}
                  },
                  "pageMarkers": {
                    "type": "boolean",
                    "const": false
                  }
                },
                "additionalProperties": false
              }
            ]
          },
          "minItems": 1,
          "description": "Only [\"pdf\"] is supported: PDFs are read as markdown."
        },
        "profile": {
          "type": "object",
          "required": [
            "name"
          ],
          "properties": {
            "name": {
              "type": "string",
              "maxLength": 128,
              "minLength": 1,
              "description": "A name you choose, such as shop-login. Calls with the same name share state."
            },
            "saveChanges": {
              "type": "boolean",
              "default": true,
              "description": "Keep the cookies and local storage this read leaves behind for the next call with this name. Send false to read with the profile without changing it."
            }
          },
          "description": "Read the page with the cookies and local storage that earlier calls saved under this name, kept for your account for 30 days after the last use. A call with a profile always loads the page in a browser, costs 1 credit, the same as any page, and is never answered from a stored copy. Only one call at a time can save to a profile.",
          "additionalProperties": false
        },
        "timeout": {
          "type": "integer",
          "maximum": 300000,
          "minimum": 1000,
          "description": "How long to keep trying, in milliseconds, between 10 seconds and 2 minutes. Pages behind a bot check can need 10 to 30 seconds the first time."
        },
        "waitFor": {
          "type": "integer",
          "maximum": 60000,
          "minimum": 0,
          "description": "Extra milliseconds to wait before reading, up to 60000, for pages that load their content late. To wait for an element, add a wait action with a selector. A read that waits costs 1 credit, the same as any page."
        },
        "blockAds": {
          "type": "boolean",
          "const": true
        },
        "location": {
          "type": "object",
          "properties": {
            "country": {
              "type": "string",
              "description": "Two-letter country code to read the page from, such as DE or JP."
            },
            "languages": {
              "not": {}
            }
          },
          "description": "Where to read the page from. The default is the United States.",
          "additionalProperties": false
        },
        "lockdown": {
          "type": "boolean",
          "const": false
        },
        "redactPII": {
          "type": "boolean",
          "const": false
        },
        "alexandria": {
          "not": {}
        },
        "toolDetail": {
          "not": {}
        },
        "domainTools": {
          "type": "boolean",
          "const": false
        },
        "excludeTags": {
          "type": "array",
          "items": {
            "type": "string",
            "minLength": 1
          },
          "minItems": 1,
          "description": "Remove the parts of the page that match these CSS selectors, such as .comments."
        },
        "includeTags": {
          "type": "array",
          "items": {
            "type": "string",
            "minLength": 1
          },
          "minItems": 1,
          "description": "Keep only the parts of the page that match these CSS selectors, such as article or .price. When set, onlyMainContent is not applied."
        },
        "storeInCache": {
          "type": "boolean",
          "default": true,
          "description": "Send false to neither read nor keep a stored copy of this page."
        },
        "auditMetadata": {
          "not": {}
        },
        "onlyMainContent": {
          "type": "boolean",
          "default": true,
          "description": "Keep only the page's main content, without menus, headers, footers and ads."
        },
        "onlyCleanContent": {
          "type": "boolean",
          "const": false
        },
        "threatProtection": {
          "not": {}
        },
        "zeroDataRetention": {
          "type": "boolean",
          "default": false,
          "description": "Send true to keep nothing from this call: no stored copy is read or made, and nothing from it is logged. Costs 1 credit more per page. Not with a screenshot."
        },
        "removeBase64Images": {
          "type": "boolean",
          "const": true
        },
        "skipTlsVerification": {
          "type": "boolean",
          "const": false
        },
        "checkPromptInjection": {
          "type": "boolean",
          "const": false
        }
      },
      "description": "How to read each page, the same options as scrape. Only markdown comes back yet.",
      "additionalProperties": {}
    },
    "maxConcurrency": {
      "not": {}
    },
    "regexOnFullURL": {
      "type": "boolean",
      "default": false,
      "description": "Match includePaths and excludePaths against the whole address, not only the path."
    },
    "allowSubdomains": {
      "type": "boolean",
      "default": false,
      "description": "Also read pages on subdomains, such as docs.bun.com for bun.com."
    },
    "ignoreRobotsTxt": {
      "type": "boolean",
      "const": false
    },
    "robotsUserAgent": {
      "not": {}
    },
    "crawlEntireDomain": {
      "type": "boolean",
      "default": false,
      "description": "Read the whole site, not only pages under the start page's path."
    },
    "maxDiscoveryDepth": {
      "type": "integer",
      "default": 3,
      "maximum": 10,
      "minimum": 0,
      "description": "How many links away from the start page to go, up to 10."
    },
    "zeroDataRetention": {
      "type": "boolean",
      "default": false,
      "description": "Send true to keep nothing from this crawl: no stored copy is read or made, page results are held for one hour at most, and nothing is logged. Costs 1 credit more per page."
    },
    "allowExternalLinks": {
      "type": "boolean",
      "const": false
    },
    "ignoreQueryParameters": {
      "type": "boolean",
      "default": false,
      "description": "Treat addresses that differ only in their ?query part as one page."
    }
  },
  "definitions": {
    "__schema0": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "number"
        },
        {
          "type": "boolean"
        },
        {
          "type": "null"
        },
        {
          "type": "array",
          "items": {
            "allOf": [
              {
                "$ref": "#/definitions/__schema0"
              }
            ]
          }
        },
        {
          "type": "object",
          "propertyNames": {
            "type": "string"
          },
          "additionalProperties": {
            "allOf": [
              {
                "$ref": "#/definitions/__schema0"
              }
            ]
          }
        }
      ]
    },
    "__schema1": {
      "anyOf": [
        {
          "type": "object",
          "required": [
            "type"
          ],
          "properties": {
            "type": {
              "enum": [
                "string",
                "number",
                "integer",
                "boolean"
              ],
              "type": "string"
            },
            "description": {
              "type": "string",
              "maxLength": 300
            }
          },
          "additionalProperties": {}
        },
        {
          "type": "object",
          "required": [
            "type",
            "items"
          ],
          "properties": {
            "type": {
              "type": "string",
              "const": "array"
            },
            "items": {
              "allOf": [
                {
                  "$ref": "#/definitions/__schema1"
                }
              ]
            },
            "description": {
              "type": "string",
              "maxLength": 300
            }
          },
          "additionalProperties": {}
        },
        {
          "type": "object",
          "required": [
            "type",
            "properties"
          ],
          "properties": {
            "type": {
              "type": "string",
              "const": "object"
            },
            "properties": {
              "type": "object",
              "propertyNames": {
                "type": "string",
                "pattern": "^[A-Za-z][A-Za-z0-9_]{0,63}$"
              },
              "additionalProperties": {
                "allOf": [
                  {
                    "$ref": "#/definitions/__schema1"
                  }
                ]
              }
            },
            "description": {
              "type": "string",
              "maxLength": 300
            }
          },
          "additionalProperties": {}
        }
      ]
    },
    "__schema2": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "number"
        },
        {
          "type": "boolean"
        },
        {
          "type": "null"
        },
        {
          "type": "array",
          "items": {
            "allOf": [
              {
                "$ref": "#/definitions/__schema2"
              }
            ]
          }
        },
        {
          "type": "object",
          "propertyNames": {
            "type": "string"
          },
          "additionalProperties": {
            "allOf": [
              {
                "$ref": "#/definitions/__schema2"
              }
            ]
          }
        }
      ]
    }
  },
  "additionalProperties": false
}
stophy_crawl output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "creditsUsed",
    "requestId"
  ],
  "properties": {
    "success": {
      "type": "boolean",
      "const": true
    },
    "requestId": {
      "type": "string"
    },
    "creditsUsed": {
      "type": "number"
    }
  },
  "additionalProperties": {}
}
stophy_crawl annotations
{
  "title": "Web Crawl Start",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
stophy_extract — Web Extract
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Pull the fields you name from any public page as JSON, each checked against the page. $0.01 for most pages: the page'...

stophy_extract input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "urls"
  ],
  "properties": {
    "urls": {
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 2048
      },
      "maxItems": 10,
      "minItems": 1,
      "description": "The pages to read, up to 10, such as [\"https://bun.com/blog/bun-v1.3\"]. With more than one, the fields are filled from all of them together. A page that cannot be read is skipped and named in warning, and costs nothing. The call fails only when no page can be read."
    },
    "prompt": {
      "type": "string",
      "maxLength": 500,
      "minLength": 1,
      "description": "What to pull from the pages in plain words, such as the version and the release date."
    },
    "schema": {
      "type": "object",
      "required": [
        "type",
        "properties"
      ],
      "properties": {
        "type": {
          "type": "string",
          "const": "object"
        },
        "properties": {
          "type": "object",
          "propertyNames": {
            "type": "string",
            "pattern": "^[A-Za-z][A-Za-z0-9_]{0,63}$"
          },
          "additionalProperties": {
            "$ref": "#/definitions/__schema0"
          }
        }
      },
      "description": "The fields to fill, as a JSON Schema object with up to 20 properties. Each is a string, number, integer, boolean, an array, or an object with its own properties, nested up to 4 levels.",
      "additionalProperties": {}
    },
    "showSources": {
      "type": "boolean",
      "const": false
    },
    "ignoreSitemap": {
      "type": "boolean"
    },
    "scrapeOptions": {
      "type": "object",
      "properties": {
        "proxy": {
          "type": "string",
          "const": "auto"
        },
        "maxAge": {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": 0,
          "description": "Accept a stored answer up to this many milliseconds old, at most 30 days. Without it, 2 days, or less for a site whose pages change often. 0 always reads the page live. metadata.cacheState says which one you got."
        },
        "minAge": {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": 0,
          "description": "Answer only from a stored copy that is at least this many milliseconds old, and never read the page live. 0 accepts any stored copy. A page with no such copy is notFound."
        },
        "mobile": {
          "type": "boolean",
          "const": false
        },
        "actions": {
          "type": "array",
          "items": {
            "anyOf": [
              {
                "type": "object",
                "required": [
                  "type",
                  "milliseconds"
                ],
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "wait"
                  },
                  "milliseconds": {
                    "type": "integer",
                    "maximum": 30000,
                    "minimum": 1
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "object",
                "required": [
                  "type",
                  "selector"
                ],
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "wait"
                  },
                  "selector": {
                    "type": "string",
                    "minLength": 1
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "object",
                "required": [
                  "type",
                  "selector"
                ],
                "properties": {
                  "all": {
                    "type": "boolean",
                    "const": false
                  },
                  "type": {
                    "type": "string",
                    "const": "click"
                  },
                  "selector": {
                    "type": "string",
                    "minLength": 1
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "object",
                "required": [
                  "type",
                  "text"
                ],
                "properties": {
                  "text": {
                    "type": "string",
                    "minLength": 1
                  },
                  "type": {
                    "type": "string",
                    "const": "write"
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "object",
                "required": [
                  "type",
                  "key"
                ],
                "properties": {
                  "key": {
                    "type": "string",
                    "maxLength": 40,
                    "minLength": 1
                  },
                  "type": {
                    "type": "string",
                    "const": "press"
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "object",
                "required": [
                  "type"
                ],
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "scroll"
                  },
                  "amount": {
                    "anyOf": [
                      {
                        "type": "integer",
                        "maximum": 100000,
                        "minimum": 1
                      },
                      {
                        "enum": [
                          "viewport",
                          "max"
                        ],
                        "type": "string"
                      }
                    ]
                  },
                  "selector": {
                    "type": "string",
                    "minLength": 1
                  },
                  "direction": {
                    "enum": [
                      "up",
                      "down",
                      "left",
                      "right"
                    ],
                    "type": "string",
                    "default": "down"
                  },
                  "maxScrolls": {
                    "type": "integer",
                    "maximum": 50,
                    "minimum": 1
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "object",
                "required": [
                  "type"
                ],
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "screenshot"
                  },
                  "quality": {
                    "type": "integer",
                    "maximum": 100,
                    "minimum": 1
                  },
                  "fullPage": {
                    "type": "boolean"
                  },
                  "viewport": {
                    "type": "object",
                    "required": [
                      "width",
                      "height"
                    ],
                    "properties": {
                      "width": {
                        "type": "integer",
                        "maximum": 3840,
                        "minimum": 200
                      },
                      "height": {
                        "type": "integer",
                        "maximum": 2160,
                        "minimum": 200
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "object",
                "required": [
                  "type"
                ],
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "scrape"
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "object",
                "required": [
                  "type",
                  "script"
                ],
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "executeJavascript"
                  },
                  "script": {
                    "type": "string",
                    "maxLength": 20000,
                    "minLength": 1
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "object",
                "required": [
                  "type"
                ],
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "pdf"
                  },
                  "scale": {
                    "type": "number",
                    "maximum": 2,
                    "minimum": 0.1
                  },
                  "format": {
                    "enum": [
                      "Letter",
                      "Legal",
                      "Tabloid",
                      "Ledger",
                      "A0",
                      "A1",
                      "A2",
                      "A3",
                      "A4",
                      "A5",
                      "A6"
                    ],
                    "type": "string"
                  },
                  "landscape": {
                    "type": "boolean"
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "object",
                "required": [
                  "type",
                  "action"
                ],
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "perform"
                  },
                  "action": {
                    "type": "string",
                    "maxLength": 500,
                    "minLength": 1
                  }
                },
                "additionalProperties": false
              }
            ]
          },
          "maxItems": 50,
          "minItems": 1,
          "description": "Up to 50 steps to run on the page, in order, before reading it: { \"type\": \"wait\", \"milliseconds\": 500 } (up to 30 seconds), { \"type\": \"wait\", \"selector\": \".results\" }, { \"type\": \"click\", \"selector\": \"button.more\" }, { \"type\": \"write\", \"text\": \"tides\" }, { \"type\": \"press\", \"key\": \"Enter\" }, { \"type\": \"scroll\", \"direction\": \"down\" } (also up, left or right; amount is pixels, \"viewport\" or \"max\"; maxScrolls 1 to 50; selector scrolls an inner container; \"max\" keeps scrolling until the page stops growing, for feeds that load as you go), { \"type\": \"screenshot\", \"fullPage\": true } (links come back in actions.screenshots), { \"type\": \"scrape\" } (the page at that point, in actions.scrapes), { \"type\": \"executeJavascript\", \"script\": \"document.title\" } (results in actions.javascriptReturns), { \"type\": \"pdf\", \"format\": \"A4\" } (links in actions.pdfs) or { \"type\": \"perform\", \"action\": \"Click the Load more button\" } (a step in plain words, up to 5 browser steps on this page, never leaving the site; at most 5 per call). A read with actions costs 1 credit, the same as any page, and each perform action costs 2 credits more. If an action fails, you still get the page as it stood, with a warning that names the action and says why."
        },
        "formats": {
          "type": "array",
          "items": {
            "anyOf": [
              {
                "enum": [
                  "markdown",
                  "summary",
                  "html",
                  "rawHtml",
                  "links",
                  "images",
                  "network",
                  "branding",
                  "screenshot",
                  "changeTracking"
                ],
                "type": "string"
              },
              {
                "type": "object",
                "required": [
                  "type"
                ],
                "properties": {
                  "type": {
                    "enum": [
                      "markdown",
                      "summary",
                      "html",
                      "rawHtml",
                      "links",
                      "images",
                      "network",
                      "branding"
                    ],
                    "type": "string"
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "object",
                "required": [
                  "type"
                ],
                "properties": {
                  "tag": {
                    "type": "null"
                  },
                  "type": {
                    "type": "string",
                    "const": "changeTracking"
                  },
                  "modes": {
                    "type": "array",
                    "items": {
                      "type": "string",
                      "const": "git-diff"
                    }
                  },
                  "prompt": {
                    "not": {}
                  },
                  "schema": {
                    "not": {}
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "object",
                "required": [
                  "type"
                ],
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "screenshot"
                  },
                  "quality": {
                    "not": {}
                  },
                  "fullPage": {
                    "type": "boolean",
                    "default": false,
                    "description": "Capture the whole page from top to bottom instead of the visible part."
                  },
                  "viewport": {
                    "not": {}
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "object",
                "required": [
                  "type",
                  "query"
                ],
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "highlights"
                  },
                  "count": {
                    "type": "integer",
                    "default": 5,
                    "maximum": 20,
                    "minimum": 1,
                    "description": "How many passages to return, best match first."
                  },
                  "query": {
                    "type": "string",
                    "maxLength": 10000,
                    "minLength": 1,
                    "description": "What you are looking for on the page, such as refund policy."
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "object",
                "required": [
                  "type"
                ],
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "json"
                  },
                  "rules": {
                    "type": "object",
                    "description": "Read the page with CSS rules instead of a model, no extra fee. Each field is a selector such as \"h1\" (the first match's text), \"a@href\" (an attribute) or { \"selector\": \"li\", \"type\": \"list\", \"output\": \"text\" | \"html\" | \"@attribute\" | { nested fields } }. A missing item is null and an unmatched list is []. Relative links become absolute. Up to 100 fields, 5 levels deep. Not with schema, prompt or parser.",
                    "propertyNames": {
                      "type": "string"
                    },
                    "additionalProperties": {
                      "$ref": "#/definitions/__schema2"
                    }
                  },
                  "parser": {
                    "type": "string",
                    "description": "Read the page with a named parser, which gives the site's own data as json. The url must be the kind of page the parser reads. Parsers are the only way to read some sites. GET /v1/parsers lists them."
                  },
                  "prompt": {
                    "type": "string",
                    "maxLength": 10000,
                    "minLength": 1,
                    "description": "What to pull from the page in plain words, such as the version and the release date."
                  },
                  "schema": {
                    "type": "object",
                    "required": [
                      "type",
                      "properties"
                    ],
                    "properties": {
                      "type": {
                        "type": "string",
                        "const": "object"
                      },
                      "properties": {
                        "type": "object",
                        "propertyNames": {
                          "type": "string",
                          "pattern": "^[A-Za-z][A-Za-z0-9_]{0,63}$"
                        },
                        "additionalProperties": {
                          "$ref": "#/definitions/__schema0"
                        }
                      }
                    },
                    "description": "The fields to fill, as a JSON Schema object with up to 20 properties. Each is a string, number, integer, boolean, an array, or an object with its own properties, nested up to 4 levels.",
                    "additionalProperties": {}
                  },
                  "options": {
                    "type": "object",
                    "description": "Only with parser: extra inputs for it, such as { \"page\": 2 } for the next page of results or { \"minRating\": 4.5 } for a filter. GET /v1/parsers lists what each parser accepts.",
                    "propertyNames": {
                      "type": "string"
                    },
                    "additionalProperties": {
                      "$ref": "#/definitions/__schema1"
                    }
                  },
                  "checkPromptInjection": {
                    "type": "boolean",
                    "const": false
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "object",
                "required": [
                  "type",
                  "selectors"
                ],
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "attributes"
                  },
                  "selectors": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "required": [
                        "selector",
                        "attribute"
                      ],
                      "properties": {
                        "selector": {
                          "type": "string",
                          "minLength": 1
                        },
                        "attribute": {
                          "type": "string",
                          "maxLength": 100,
                          "minLength": 1
                        }
                      },
                      "additionalProperties": false
                    },
                    "maxItems": 50,
                    "minItems": 1,
                    "description": "The elements and attributes to read, such as { selector: 'a.buy', attribute: 'href' }."
                  }
                },
                "additionalProperties": false
              }
            ]
          },
          "default": [
            "markdown"
          ],
          "maxItems": 20,
          "minItems": 1,
          "description": "What to return: markdown (clean page text), summary (a short summary of the page), html (the cleaned page), rawHtml (the page as sent), links (every link on the page), images (every image address), screenshot (a link to a JPEG of the visible page, kept for 7 days), changeTracking (what changed in the markdown since your key last read this page with the same options, kept 30 days) network (the JSON the page loaded while it rendered, up to 30 responses) and branding (the page's colors, fonts, typography, spacing, button and input styles, logo and brand images, read from how the page looks, with a field left out when the page does not show it). Send { \"type\": \"screenshot\", \"fullPage\": true } for the whole page. Send { \"type\": \"highlights\", \"query\": \"refund policy\" } for the passages that best match a query. Send { \"type\": \"json\", \"schema\": { \"type\": \"object\", \"properties\": { \"price\": { \"type\": \"number\" } } } } or { \"type\": \"json\", \"prompt\": \"the price and the stock\" } for fields filled from the page, each checked against it. Send { \"type\": \"json\", \"parser\": \"amazon-product\" } to get a site's own data as json instead of reading the page; GET /v1/parsers lists the parsers. Send { \"type\": \"json\", \"rules\": { \"title\": \"h1\", \"links\": { \"selector\": \"a\", \"type\": \"list\", \"output\": \"@href\" } } } to read the page with CSS rules and no model, at the page's own price. Send { \"type\": \"attributes\", \"selectors\": [{ \"selector\": \"a\", \"attribute\": \"href\" }] } for attribute values, returned in attributes. Without a parser or rules, json needs a schema or a prompt and is filled from the page. json with a schema or a prompt, summary and highlights cost 4 credits more each when they return something. json with rules or a parser, and attributes, cost nothing more. A screenshot, network or branding read costs 1 credit, the same as any page. A PDF comes back as markdown only, and costs 1 credit more for each page read."
        },
        "headers": {
          "not": {}
        },
        "parsers": {
          "type": "array",
          "items": {
            "anyOf": [
              {
                "type": "string",
                "const": "pdf"
              },
              {
                "type": "object",
                "required": [
                  "type"
                ],
                "properties": {
                  "mode": {
                    "type": "string",
                    "const": "auto"
                  },
                  "type": {
                    "type": "string",
                    "const": "pdf"
                  },
                  "pages": {
                    "type": "boolean",
                    "const": false
                  },
                  "blocks": {
                    "type": "boolean",
                    "const": false
                  },
                  "maxPages": {
                    "not": {}
                  },
                  "pageMarkers": {
                    "type": "boolean",
                    "const": false
                  }
                },
                "additionalProperties": false
              }
            ]
          },
          "minItems": 1,
          "description": "Only [\"pdf\"] is supported: PDFs are read as markdown."
        },
        "profile": {
          "type": "object",
          "required": [
            "name"
          ],
          "properties": {
            "name": {
              "type": "string",
              "maxLength": 128,
              "minLength": 1,
              "description": "A name you choose, such as shop-login. Calls with the same name share state."
            },
            "saveChanges": {
              "type": "boolean",
              "default": true,
              "description": "Keep the cookies and local storage this read leaves behind for the next call with this name. Send false to read with the profile without changing it."
            }
          },
          "description": "Read the page with the cookies and local storage that earlier calls saved under this name, kept for your account for 30 days after the last use. A call with a profile always loads the page in a browser, costs 1 credit, the same as any page, and is never answered from a stored copy. Only one call at a time can save to a profile.",
          "additionalProperties": false
        },
        "timeout": {
          "type": "integer",
          "maximum": 300000,
          "minimum": 1000,
          "description": "How long to keep trying, in milliseconds, between 10 seconds and 2 minutes. Pages behind a bot check can need 10 to 30 seconds the first time."
        },
        "waitFor": {
          "type": "integer",
          "maximum": 60000,
          "minimum": 0,
          "description": "Extra milliseconds to wait before reading, up to 60000, for pages that load their content late. To wait for an element, add a wait action with a selector. A read that waits costs 1 credit, the same as any page."
        },
        "blockAds": {
          "type": "boolean",
          "const": true
        },
        "location": {
          "type": "object",
          "properties": {
            "country": {
              "type": "string",
              "description": "Two-letter country code to read the page from, such as DE or JP."
            },
            "languages": {
              "not": {}
            }
          },
          "description": "Where to read the page from. The default is the United States.",
          "additionalProperties": false
        },
        "lockdown": {
          "type": "boolean",
          "const": false
        },
        "redactPII": {
          "type": "boolean",
          "const": false
        },
        "alexandria": {
          "not": {}
        },
        "toolDetail": {
          "not": {}
        },
        "domainTools": {
          "type": "boolean",
          "const": false
        },
        "excludeTags": {
          "type": "array",
          "items": {
            "type": "string",
            "minLength": 1
          },
          "minItems": 1,
          "description": "Remove the parts of the page that match these CSS selectors, such as .comments."
        },
        "includeTags": {
          "type": "array",
          "items": {
            "type": "string",
            "minLength": 1
          },
          "minItems": 1,
          "description": "Keep only the parts of the page that match these CSS selectors, such as article or .price. When set, onlyMainContent is not applied."
        },
        "storeInCache": {
          "type": "boolean",
          "default": true,
          "description": "Send false to neither read nor keep a stored copy of this page."
        },
        "auditMetadata": {
          "not": {}
        },
        "onlyMainContent": {
          "type": "boolean",
          "default": true,
          "description": "Keep only the page's main content, without menus, headers, footers and ads."
        },
        "onlyCleanContent": {
          "type": "boolean",
          "const": false
        },
        "threatProtection": {
          "not": {}
        },
        "zeroDataRetention": {
          "type": "boolean",
          "default": false,
          "description": "Send true to keep nothing from this call: no stored copy is read or made, and nothing from it is logged. Costs 1 credit more per page. Not with a screenshot."
        },
        "removeBase64Images": {
          "type": "boolean",
          "const": true
        },
        "skipTlsVerification": {
          "type": "boolean",
          "const": false
        },
        "checkPromptInjection": {
          "type": "boolean",
          "const": false
        }
      },
      "description": "How to read each page, the same options as scrape.",
      "additionalProperties": {}
    },
    "enableWebSearch": {
      "type": "boolean",
      "const": false
    },
    "threatProtection": {
      "not": {}
    },
    "ignoreInvalidURLs": {
      "type": "boolean",
      "default": true,
      "description": "Skip addresses that are not public website URLs. Send false to refuse the call instead."
    },
    "includeSubdomains": {
      "type": "boolean"
    },
    "zeroDataRetention": {
      "type": "boolean",
      "default": false,
      "description": "Send true to keep nothing from this call: pages are read live, the result is held for one hour at most, and nothing is logged. Costs 1 credit more per page."
    }
  },
  "definitions": {
    "__schema0": {
      "anyOf": [
        {
          "type": "object",
          "required": [
            "type"
          ],
          "properties": {
            "type": {
              "enum": [
                "string",
                "number",
                "integer",
                "boolean"
              ],
              "type": "string"
            },
            "description": {
              "type": "string",
              "maxLength": 300
            }
          },
          "additionalProperties": {}
        },
        {
          "type": "object",
          "required": [
            "type",
            "items"
          ],
          "properties": {
            "type": {
              "type": "string",
              "const": "array"
            },
            "items": {
              "allOf": [
                {
                  "$ref": "#/definitions/__schema0"
                }
              ]
            },
            "description": {
              "type": "string",
              "maxLength": 300
            }
          },
          "additionalProperties": {}
        },
        {
          "type": "object",
          "required": [
            "type",
            "properties"
          ],
          "properties": {
            "type": {
              "type": "string",
              "const": "object"
            },
            "properties": {
              "type": "object",
              "propertyNames": {
                "type": "string",
                "pattern": "^[A-Za-z][A-Za-z0-9_]{0,63}$"
              },
              "additionalProperties": {
                "allOf": [
                  {
                    "$ref": "#/definitions/__schema0"
                  }
                ]
              }
            },
            "description": {
              "type": "string",
              "maxLength": 300
            }
          },
          "additionalProperties": {}
        }
      ]
    },
    "__schema1": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "number"
        },
        {
          "type": "boolean"
        },
        {
          "type": "null"
        },
        {
          "type": "array",
          "items": {
            "allOf": [
              {
                "$ref": "#/definitions/__schema1"
              }
            ]
          }
        },
        {
          "type": "object",
          "propertyNames": {
            "type": "string"
          },
          "additionalProperties": {
            "allOf": [
              {
                "$ref": "#/definitions/__schema1"
              }
            ]
          }
        }
      ]
    },
    "__schema2": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "number"
        },
        {
          "type": "boolean"
        },
        {
          "type": "null"
        },
        {
          "type": "array",
          "items": {
            "allOf": [
              {
                "$ref": "#/definitions/__schema2"
              }
            ]
          }
        },
        {
          "type": "object",
          "propertyNames": {
            "type": "string"
          },
          "additionalProperties": {
            "allOf": [
              {
                "$ref": "#/definitions/__schema2"
              }
            ]
          }
        }
      ]
    }
  },
  "additionalProperties": false
}
stophy_extract output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "creditsUsed",
    "requestId"
  ],
  "properties": {
    "success": {
      "type": "boolean",
      "const": true
    },
    "requestId": {
      "type": "string"
    },
    "creditsUsed": {
      "type": "number"
    }
  },
  "additionalProperties": {}
}
stophy_extract annotations
{
  "title": "Web Extract",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
stophy_signup — Get a Stophy API key
Advertised by the server during the last successful anonymous check.

Needs no key. Returns a claimUrl for your person to approve and a secret code. Call it again with the code to collect the key once they approve. Returns at once, so call again later.

stophy_signup input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "code": {
      "type": "string",
      "description": "The code from an earlier signup. Send it to collect the key once approved."
    },
    "scopes": {
      "type": "array",
      "items": {
        "enum": [],
        "type": "string"
      },
      "description": "What the key may do besides the calls every key can make. Leave out for none."
    }
  }
}

Prompts

Not advertised

No prompt definitions available.

Resources

Not advertised

No resource definitions available.

90-day uptime

A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.

Too few checks for a percentage yet (1 of 1 answered).

  1. 2026-11-07: 1 of 1 checks answered

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
586 ms
95th percentile latency
586 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 586 ms · metadata changed · 9 tool(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http stophy-mcp https://api.stophy.dev/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add stophy-mcp --url https://api.stophy.dev/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable stophy-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "stophy-mcp": {
      "url": "https://api.stophy.dev/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "stophy-mcp": {
      "type": "streamableHttp",
      "url": "https://api.stophy.dev/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start stophy-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "stophy-mcp": {
      "type": "http",
      "url": "https://api.stophy.dev/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http stophy-mcp https://api.stophy.dev/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://api.stophy.dev/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "stophy-mcp": {
      "serverUrl": "https://api.stophy.dev/mcp"
    }
  }
}

Let your agent find its tools

Find servers like Stophy MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.