arrow_backBack to home

Documentation

How VibeScan's scans, API, and MCP server work — and what exactly gets checked when you run one.

Getting started

Every scan target needs to be authorized before VibeScan touches it — there's no way around this step, by design. See the authorization model for the full detail.

  1. Website scan — verify domain ownership with a DNS TXT record, then sign the authorization form for the specific checks you want to allow.
  2. Repo scan — connect a GitHub repository via OAuth, then sign the authorization form the same way.
  3. Trigger scans from the dashboard, the REST API, or an MCP-connected agent — same authorization, same findings, different entry point.

Website scan checks

HDRSecurity headersCORS policy, response header hygiene, server/version fingerprinting.
TLSTLS/SSL configCertificate validity, protocol/cipher strength.
CVEDependency/CVE checksKnown-vulnerable versions detectable from public responses.
SECExposed secrets/pathsPublicly reachable .env/config files, admin panels, GraphQL introspection.
CKYCookie security flagsMissing Secure/HttpOnly/SameSite attributes.

Repo scan checks

SASTStatic code analysisInjection, unsafe eval, SSRF, path traversal, missing auth checks.
PYPython-specific scanPython-ecosystem security patterns beyond the general SAST pass.
CVEDependency vulnerability scanKnown-vulnerable package versions across your lockfile.
SECSecret detectionCredentials in files and git history — redacted, never stored as plaintext.
CFGInfrastructure & config auditDockerfiles, Kubernetes manifests, Terraform.

REST API

Authenticate with Authorization: Bearer <api-key> against /api/v1. Generate a key from Dashboard → API Keys.

Targets

GET /api/v1/domainsYour verified domains.
POST /api/v1/domainsClaim a domain. Body: { domain }. Returns the TXT record to add to DNS.
POST /api/v1/domains/:id/verifyRe-check the DNS TXT record for a claimed domain.
PATCH /api/v1/domains/:id/auto-scanTurn scheduled scanning on or off. Body: { enabled }.
DELETE /api/v1/domains/:idRemove a domain and every scan recorded against it.
GET /api/v1/reposYour connected repositories.
POST /api/v1/reposConnect a repository. Body: { url }.
DELETE /api/v1/repos/:idDisconnect a repository and remove its scans. Nothing in the repository itself changes.

Scans and reports

GET /api/v1/scansYour scan history.
GET /api/v1/scans/:idA single scan with its findings.
POST /api/v1/scansTrigger a scan. Body: exactly one of domainId, repoId or pentestTargetId, plus an optional tools array.
GET /api/v1/scans/:id/reportDownload the report. ?format=json|csv|md|pdf — availability depends on your plan.
POST /api/v1/scans/:id/findings/:findingId/fixGenerate a fix for one finding and open it as a pull request on a new branch.

Alerts

GET /api/v1/alertsYour alert destinations.
POST /api/v1/alertsAdd a destination. Body: { kind: email|slack|discord, target, label? }.
PATCH /api/v1/alerts/:idPause or resume a destination. Body: { enabled }.
DELETE /api/v1/alerts/:idRemove a destination.
POST /api/v1/alerts/:id/testSend a clearly-labelled sample notification.

Insights

GET /api/v1/trendSecurity posture over time for one asset. ?domainId= or ?repoId=. Lower scores are better.

Every domain and repo referenced by domainId/repoIdmust already have a signed authorization on file — the API can't bypass that step, only the dashboard's authorization form can create one.

MCP server

Connect VibeScan to Claude Code, Claude Desktop, Cursor, or any MCP-compatible agent so it can check your targets and kick off a scan mid-session, using the same API keys as the REST API above.

{
  "mcpServers": {
    "vibescan": {
      "type": "http",
      "url": "https://www.usevibescan.com/api/mcp",
      "headers": {
        "Authorization": "Bearer <your-api-key>"
      }
    }
  }
}

Using claude.ai directly? Add the same URL as a Custom Connector under Settings → Connectors — you'll sign in with your VibeScan account through Clerk, no API key required for that path.

You don't type tool names — your agent picks. Ask in plain English. These five cover almost everything:

Scan“Scan usevibescan.com.”trigger_scan
Fix“Open a PR fixing the critical finding.”fix_finding
Report“Send me the full report as markdown.”get_scan_report
Alert“Ping my Slack channel when a scan finishes.”add_alert
Trend“Is my site getting more secure or less?”get_posture_trend

All 22 tools, and something you could say to reach each one. Names are verb_nounthroughout, so they're guessable — but you shouldn't have to guess.

Scanning

“Scan usevibescan.com.”trigger_scan
“Show my recent scans.”list_scans
“What did that scan find?”get_scan
“Send me the full report as markdown.”get_scan_report
“Is my site getting more secure or less?”get_posture_trend
“Stop that pentest scan.”stop_scan
“Delete that scan.”remove_scanDestructive

Fixing

“Open a PR fixing the critical finding.”fix_finding

Websites

“Add example.com.”add_domain
“What domains do I have?”list_domains
“Is my DNS record live yet?”verify_domain
“Scan example.com automatically every day.”set_auto_scan
“Remove example.com.”remove_domainDestructive

Repositories

“Connect github.com/me/my-app.”add_repo
“Which repos are connected?”list_repos
“Disconnect that repo.”remove_repoDestructive

Alerts

“Ping my Slack channel when a scan finishes.”add_alert
“Where do my alerts go?”list_alerts
“Send a test alert.”test_alert
“Pause my email alerts for now.”set_alert_enabled
“Delete that alert destination.”remove_alertDestructive

Pentest (gated)

“List my pentest targets.”list_pentest_targets

Full setup walkthrough (with your own endpoint URL filled in) lives at Dashboard → MCP Server.

What the API deliberately can't do

A few things have no API or MCP equivalent on purpose. They are listed here rather than left to be discovered by being refused.

Signing an authorization to scan

Every domain and repository needs a one-time signed authorization confirming you have legal authority over the target. That attestation has to be made by a person, so it lives only in the dashboard — the API and MCP server cannot create one, and a scan without it is refused on every surface.

Creating API keys

A key that can mint further keys is an escalation waiting to happen. Keys are created in the dashboard only.

Deleting your account or full scan history

Irreversible and account-wide, so it stays a deliberate action in Settings rather than something one call away.

Plans & limits

PlanPriceDaily scansAuto-scans
Free$0/mo2/dayNot included
Pro$9.99/moUnlimitedDaily, per verified domain
Max$19.99/moUnlimitedDaily, per verified domain

Free plan: 2 website scans and 1 MCP-triggered scan per day; the REST API is a paid feature. Pro and Max have no daily scan limit.

Authorization & data handling

We only scan what's been explicitly, signed-off authorized — domain ownership or repo OAuth access, plus a per-target consent record before any check runs. Secret values are never stored, and repository clones are deleted immediately after each scan.

Read the full authorization model

Support

Questions not covered here? Email support@usevibescan.com or see Support & Legal in the dashboard.