# SnoopScan (remote · api.snoopscan.com)

Web scraping for agents: scrape, crawl, map, search and extract pages as clean markdown or JSON.

- Trust score: 73/100 (medium)
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-09-27

## Components

- remote · `api.snoopscan.com`: 73/100 (this document), [markdown](https://verifymcp.io/servers/com-snoopscan-snoopscan/api.md), [page](https://verifymcp.io/servers/com-snoopscan-snoopscan/api)
- remote · `api.snoopscan.com`: 38/100, [markdown](https://verifymcp.io/servers/com-snoopscan-snoopscan/mcp-oauth.md), [page](https://verifymcp.io/servers/com-snoopscan-snoopscan/mcp-oauth)

## Channel facts

- Endpoint: `https://api.snoopscan.com/mcp`
- Transports: `streamable-http`
- Auth: `required`
- Version: `1.0.0`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-09-27.

- **Endpoint Security**: 80/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - No authorisation is required to call this server. Every tool declares its destructiveHint and none is destructive, so open access doesn't expose one.
  - HTTPS is enforced; there's no plaintext access path.
  - The HSTS (Strict-Transport-Security) header is present.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
- **Transport & Reachability**: 100/100
  - Verified streamable-http transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 82/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (good).
  - Tool/resource definitions use about 2317 tokens (~100/item across 23 items; 21 tools + 2 resources), lean.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 7/100
  - Stability observed for 2 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 71/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 0% of tool parameters carry a description.
  - Structured output schemas are declared (100% of tools); any adoption earns full credit.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - We read all 21 captured tool definition(s), and no name or description among them implies an irreversible operation.
  - An AI judge read all 23 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### How do I install the SnoopScan MCP server?

SnoopScan is a hosted endpoint at https://api.snoopscan.com/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add --transport http com-snoopscan-snoopscan 'https://api.snoopscan.com/mcp'
```

### Cursor

```json
{
  "mcpServers": {
    "com-snoopscan-snoopscan": {
      "url": "https://api.snoopscan.com/mcp"
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "com-snoopscan-snoopscan": {
      "type": "http",
      "url": "https://api.snoopscan.com/mcp"
    }
  }
}
```

### Codex

```toml
[mcp_servers.com-snoopscan-snoopscan]
url = "https://api.snoopscan.com/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "com-snoopscan-snoopscan": {
      "type": "remote",
      "url": "https://api.snoopscan.com/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add com-snoopscan-snoopscan --url 'https://api.snoopscan.com/mcp' --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  com-snoopscan-snoopscan:
    url: "https://api.snoopscan.com/mcp"
```

### Netclaw

```json
{
  "McpServers": {
    "com-snoopscan-snoopscan": {
      "Transport": "http",
      "Url": "https://api.snoopscan.com/mcp"
    }
  }
}
```

### Vellum

```bash
assistant mcp add com-snoopscan-snoopscan -t streamable-http -u 'https://api.snoopscan.com/mcp'
```

### Other

```json
{
  "mcpServers": {
    "com-snoopscan-snoopscan": {
      "type": "http",
      "url": "https://api.snoopscan.com/mcp"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-09-27 (score 73, 0)

- [functional regression] Schema quality: 1897 → 2317
- [functional] New tool “domainReport”
- [functional] New tool “domainScreen”
- [functional] New tool “domainSnapshots”

### 2026-09-26 (score 73, +1)

- [functional improvement] Stability: unverified → 0.03

### 2026-09-25 (score 72)

First indexed and scored.

## MCP tools (21)

### `scrape` (~99 tokens)

Scrape a web page

Fetch a single web page and return its content as clean markdown.

    Use this when you have a specific URL and need to read what is on it. For
    finding pages first, use `search` or `map`.

Input parameters:

- `formats`
- `maxAge` (integer)
- `maxChars` (integer)
- `onlyMainContent` (boolean)
- `url` (string, required)
- `waitFor` (integer)

Output parameters:

- `result` (string)

### `fetchMore` (~65 tokens)

Read the rest of a page

Read the remainder of a page that was truncated.

    Pass the token from a truncation marker. Returns the next section of the
    same page, truncating again if it is still too long.

Input parameters:

- `maxChars` (integer)
- `token` (string, required)

Output parameters:

- `result` (string)

### `domain` (~122 tokens)

Look up a domain

How old a domain is, who registered it, where it is hosted, and who links to it.

    The off-page questions a page scrape cannot answer. Use it when a page
    looks fine and you need to know whether the SITE is old, established or
    linked to — comparing competitors, judging a source, or checking whether a
    domain was registered last week.

    Nothing here fetches the page, so nothing here can be blocked.

Input parameters:

- `backlinks` (boolean)
- `limit` (integer)
- `url` (string, required)

Output parameters:

- `result` (string)

### `domainReport` (~142 tokens)

Report on a domain before buying it

A buyer's report on a domain: key findings, concerns, and the questions
    nobody can answer from outside, each tied to its evidence.

    `depth` is `quick` (registration, DNS, today's site), `buyer` (adds the
    Internet Archive history, known backlinks and a re-read sample of linking
    pages) or `deep` (larger samples). Brand, SEO and acquisition are judged
    separately; there is no overall score. One flat price per depth; `buyer`
    includes 6 archived snapshots and `deep` 12.

Input parameters:

- `depth` (string)
- `url` (string, required)

Output parameters:

- `result` (string)

### `domainSnapshots` (~139 tokens)

Read a domain report's pending archive snapshots

Read the archived homepage snapshots a `buyer` domainReport left pending.

    A buyer report answers at once with the Internet Archive's timeline and
    the snapshots already held; the rest are marked pending. Call this with
    the same domain (and optionally the pending years) to read them: what the
    site was about in each year, its language, and whether it was parked, for
    sale or redirecting. Free for the snapshots a buyer or deep report
    included; beyond those, charged only for snapshots actually fetched.

Input parameters:

- `snapshots` (integer)
- `url` (string, required)
- `years`

Output parameters:

- `result` (string)

### `domainScreen` (~139 tokens)

Screen a list of domains for availability

Which of up to 500 domain names can be registered, from each registry's
    own record (RDAP) and DNS. Use it to cut a long list of candidate or
    dropping names down to a shortlist, then run domainReport on the few that
    matter. Nothing is fetched from the names' websites.

    Each name comes back `likely_available`, `registered`, `unknown` or
    `no_registry_record`, with the reason. 1 credit per name its registry
    answered for; invalid names, duplicates and unanswered names are free.

Input parameters:

- `dns` (boolean)
- `names` (array, required)

Output parameters:

- `result` (string)

### `hiring` (~142 tokens)

Find a company's open jobs

What a company is currently recruiting for.

    A company hiring six engineers has budget, a roadmap and a problem — the
    signal sales teams and recruiters pay most for. Give it a company domain.

    It finds the careers page, identifies the applicant tracking system, and
    reads that system's own public job feed, so it returns real roles rather
    than the empty shell most careers pages serve to a plain fetch.

    Not every company exposes a feed. When none is found it says so and names
    the careers page instead of pretending — do not read "no feed" as "not
    hiring".

Input parameters:

- `url` (string, required)

Output parameters:

- `result` (string)

### `people` (~222 tokens)

Find people at a company

Find the people at a company, by what they do and how senior they are.

    Head-hunting a developer, poaching a sales team, or finding who signs the
    cheque are the same shape of question: function plus seniority. Give it a
    company and optionally a `role` and a `seniority` and it returns named
    people from public search — no login, no profile scraping.

    role: executive, engineering, product, sales, marketing, finance,
          procurement, talent, operations, data, security, legal, support, design
    seniority: exec, vp, director, manager, ic

    Each person says whether the employer was CONFIRMED in the source text.
    Unconfirmed people are real leads but unproven — the company name did not
    appear beside them — and anyone marked former has LEFT. Check those two
    flags before you contact anybody.

Input parameters:

- `company` (string, required)
- `limit` (integer)
- `role`
- `seniority`

Output parameters:

- `result` (string)

### `company` (~125 tokens)

Profile a company website

Everything a company's own website says about itself.

    Give it a company domain and get back the firmographics a lead list sells —
    name, phone, address, LinkedIn, headcount, industry, founded year — plus the
    contact emails, social links and contact form the site publishes. Reads the
    homepage and a few contact/about pages, nothing behind a login.

    Use it to enrich one company. It is the single-company half of a lead
    pipeline, not a directory search.

Input parameters:

- `contacts` (boolean)
- `url` (string, required)

Output parameters:

- `result` (string)

### `map` (~58 tokens)

Map a site's URLs

List the URLs on a website without fetching page content.

    Fast and cheap. Use this to understand a site's structure before deciding
    what to scrape.

Input parameters:

- `limit` (integer)
- `search`
- `url` (string, required)

Output parameters:

- `result` (string)

### `crawl` (~99 tokens)

Start a site crawl

Start crawling a website.

    This runs in the background and returns a job id immediately. Use
    `crawlStatus` to check progress and `crawlPages` to read results. Crawls
    can take minutes and consume significant resources — set `limit`
    conservatively.

Input parameters:

- `excludePaths`
- `includePaths`
- `limit` (integer)
- `maxDepth` (integer)
- `url` (string, required)

Output parameters:

- `result` (string)

### `crawlStatus` (~32 tokens)

Check crawl progress

Check the progress of a crawl. Returns counts and cost, never page bodies.

Input parameters:

- `jobId` (string, required)

Output parameters:

- `result` (string)

### `crawlPages` (~70 tokens)

Read crawled pages

Read the pages a crawl has collected, a few at a time.

    Small defaults on purpose — a crawl's full output will not fit in context.

Input parameters:

- `cursor`
- `jobId` (string, required)
- `limit` (integer)
- `maxCharsPerPage` (integer)

Output parameters:

- `result` (string)

### `findLeads` (~229 tokens)

Find business leads

Find businesses by what they do and where, with how to reach each one.

    `who` is the trade or kind of business ("roofing contractors", "dentists"),
    `where` is a town or area ("Houston, TX"). Looks on Google Maps, BBB and
    Yellow Pages by default (`sources` may also name companies_house for UK
    companies by trade, or web); merges duplicates; reads each business's own
    website for emails, socials and a contact form (`contacts`); and with
    `roles` (e.g. ["Owner"]) looks for a named person. Runs in the background
    for 2 to 5 minutes: call `leadsStatus` with the job id to follow it and to
    read the leads. Charged per lead delivered, never for what it cannot find.

Input parameters:

- `contacts` (boolean)
- `limit` (integer)
- `requireWebsite` (boolean)
- `roles`
- `sources`
- `where` (string, required)
- `who` (string, required)

Output parameters:

- `result` (string)

### `leadsStatus` (~89 tokens)

Read lead-search results

Follow a Find Leads run, and read its leads once it has finished.

    Returns the stage while it runs. When done, returns the leads 25 at a time:
    name, phone, email, website, address and where each was found; call again
    with `offset` for the next 25.

Input parameters:

- `jobId` (string, required)
- `offset` (integer)

Output parameters:

- `result` (string)

### `extract` (~86 tokens)

Extract structured data

Extract structured data from one or more pages according to a JSON schema.

    The output is validated against the schema — if a page does not contain the
    required fields, that page returns an error rather than invented values.
    Treat an error as genuine absence, not a reason to retry.

Input parameters:

- `prompt`
- `schema` (object, required)
- `urls` (array, required)

Output parameters:

- `result` (string)

### `search` (~92 tokens)

Search the web

Search the web and return results.

    Optionally fetch the content of each result. Fetching content is much
    slower and more expensive — only set `fetchContent` when you actually need
    the page bodies rather than just the links and snippets.

Input parameters:

- `fetchContent` (boolean)
- `limit` (integer)
- `maxCharsPerResult` (integer)
- `query` (string, required)

Output parameters:

- `result` (string)

### `checkChanges` (~35 tokens)

Check a page for changes

Check whether a page has changed since it was last fetched.

Input parameters:

- `includeDiff` (boolean)
- `url` (string, required)

Output parameters:

- `result` (string)

### `listProducts` (~85 tokens)

List a store's products

List every product a store publishes, from the store's own catalogue.

    Works for Shopify and WooCommerce stores without a key: one request per
    page of up to 250 products, with title, price, availability, variants and
    the product URL. Use this instead of crawling a shop.

Input parameters:

- `limit` (integer)
- `url` (string, required)

Output parameters:

- `result` (string)

### `listPosts` (~80 tokens)

List a site's posts

List a site's posts or articles from its own API or feed.

    WordPress, Substack, Squarespace and Discourse answer through their APIs;
    anything else through RSS or Atom. Titles, URLs and dates — use `scrape`
    on a URL to read one.

Input parameters:

- `limit` (integer)
- `url` (string, required)

Output parameters:

- `result` (string)

### `findContacts` (~60 tokens)

Find a website's contact details

Find contact information for a company website.

    Returns the contact page, any contact form and its vendor, published email
    addresses with where each was found, and social links. Used by the lead
    pipeline.

Input parameters:

- `url` (string, required)

Output parameters:

- `result` (string)

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/com-snoopscan-snoopscan/api#diagnostics

## Score history

- 2026-09-27: 73
- 2026-09-26: 73
- 2026-09-25: 72

## Common questions

### What is the SnoopScan MCP server?

SnoopScan is an MCP server listed in the public MCP registry as com.snoopscan/snoopscan. Web scraping for agents: scrape, crawl, map, search and extract pages as clean markdown or JSON. This page covers its hosted endpoint (https://api.snoopscan.com/mcp).

### Is the SnoopScan MCP server safe to use?

SnoopScan scores 73 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the SnoopScan MCP server expose?

SnoopScan exposes 21 tools: scrape, fetchMore, domain, domainReport, domainSnapshots, and 16 more. Their descriptions and schemas cost roughly 2,210 tokens of context every time the server is loaded.

### Does the SnoopScan MCP server require authentication?

No. We connected to SnoopScan without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.

### Is the SnoopScan MCP server still maintained?

SnoopScan is still listed as active in the MCP registry. We last reached this channel on 27 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

## Links

- Remote endpoint: https://api.snoopscan.com/mcp
- Authorisation metadata: https://api.snoopscan.com/.well-known/oauth-protected-resource/mcp
- Repository: https://github.com/SnoopScan/snoopscan-core
- Website: https://snoopscan.com/docs/mcp
- Changelog RSS feed: https://verifymcp.io/servers/com-snoopscan-snoopscan/api.xml
- Changelog JSON feed: https://verifymcp.io/servers/com-snoopscan-snoopscan/api.json
- HTML version of this page: https://verifymcp.io/servers/com-snoopscan-snoopscan/api
