Scanning policy · trust · disclosure

What a scan does, what it never does, and how to make it stop.

If you found this page because our user-agent appeared in your logs: a verified owner of that host asked us to test it. Everything below is binding on us, and the opt-out at the bottom works without an account.

1. We only scan verified targets

Active checks and hosted scans run only after the person scanning has proven control of the host with a DNS TXT record (mcpprobe-verification=<token> at _mcpprobe.<host>), or, for stdio servers they run themselves, local verification. Verification is re-checked before every scan and expires after 90 days. There are no “teaser” scans of unverified servers, including servers listed in public registries.

2. Every active scan carries an authorisation record

Who authorised it, when, by which verification method, the scope (which tools may be called), the exclusions, and the rate cap. The CLI writes it next to the report (scan.authorisation.json); hosted scans retain it for six years. It is available to the host owner on request.

3. We identify ourselves

Every request carries this user-agent and comes from a published IP range.

mcpprobe/0.1.0 (+https://mcpprobe.tech/scanning-policy)GET https://mcpprobe.tech/scanning-ips.json

The CLI sends exactly this user-agent. Hosted scans will append a scan id that resolves to the authorisation record. The IP list is empty until hosted scanning launches; ranges are published there before the first hosted scan. Current IP list.

4. What a scan never does

  • Never writes, modifies or deletes data on your server
  • Never exploits a finding beyond the minimum needed to prove it
  • Never calls a tool outside the approved scope, and never calls tools flagged destructive
  • Never exceeds 5 requests per second by default, and never more than 10 whatever the setting
  • Never stores credentials you supply beyond the scan that uses them
  • Never touches a host that has opted out

5. Your data

Processed in
London, United Kingdom (AWS eu-west-2)
Evidence kept
30 days (Free), 12 months (Team), 24 months (Business), then deleted
Authorisation records
6 years
Third-party LLMs
Tool descriptions are not sent to any third-party model unless you enable the optional judge; when enabled, the provider is named in your account and in the report
Sub-processors
AWS (hosting), Neon (database), Stripe (billing), Resend (email). Full list with regions on request.
Encryption
TLS 1.2+ in transit, AES-256 at rest, evidence encrypted per account

More detail on the security page and in the privacy notice.

6. Responsible disclosure

Our public “state of MCP server security” research runs only against open-source packages in a local sandbox we control, never against third-party hosts. When research finds a vulnerability in someone else's server:

  • We report it privately to the maintainer within 72 hours
  • We give 90 days before any public mention, longer if a fix is in progress
  • We never name an unpatched server in aggregate reports
  • We request a CVE on the maintainer's behalf if they want one

Found a problem in mcpprobe itself? Write to security@mcpprobe.tech; our security.txt is published. We acknowledge within 2 business days. Full policy.

7. Opt out of all scanning, no account needed

Publish either of these on the host and every mcpprobe scan, hosted or self-run, aborts with exit code 2 before sending any request beyond the opt-out check itself. The DNS record also counts when it is published on a parent domain, and both take effect immediately; neither can be overridden.

_mcpprobe.example.com TXT "mcpprobe-opt-out=all"GET https://example.com/.well-known/mcpprobe-opt-out → 200

Prefer email? abuse@mcpprobe.tech: we add the host to the block list within one business day and confirm. Our own site answers that well-known path with a 404 on purpose: see why.

What you may notice, and how to block us anyway

A scan shows up as a few hundred requests in your access logs, may trip a WAF rule for the malformed-request and Origin checks, and uses a small amount of bandwidth. If you would rather refuse the traffic than opt out, match the user-agent or the published IP ranges.

nginx.conf
# nginx: refuse every mcpprobe request (hosted and self-run)
if ($http_user_agent ~* "mcpprobe/") {
    return 403;
}

By starting a scan you represent that you own or are authorised to test the target, and you accept that we record that representation. We do not test anything without it; this is how we comply with the UK Computer Misuse Act 1990 and equivalent laws elsewhere. Full terms, privacy notice and acceptable-use policy apply. Operated by ORGANIC VILLAGE(UK) LIMITED, 11783758, United Kingdom.