Bastion: External Attack Surface Monitoring

official

Ask your AI assistant about your attack surface: run scans, catch expiring certificates and domains, triage findings, and generate reports.

What can you do with Bastion External Attack Surface Monitoring MCP?

  • Run on-demand scans — Ask your assistant to start a passive scan of a verified hostname and return the scanId via start_scan.
  • Review scan results — Pull full findings, evidence, remediation steps, and posture score for any completed scan using get_scan.
  • Monitor certificate health — Check all monitored endpoints for expiring certificates, issuer details, and overall health via list_certificates.
  • Triage findings — Acknowledge, mute, or accept a specific finding on a target with a note using set_triage.
  • Generate PDF reports — Request a downloadable PDF report of a completed scan through get_report.
  • Track estate changes — Ask what subdomains, DNS records, ports, or certificates changed recently across your domains via list_changes.

Documentation

Connect your AI assistant to your attack surface.

Attack Surface Scan ships a hosted MCP server, so Claude and other AI agents can run scans, read findings, watch the change feed, triage and pull PDF reports. All of it in chat, against the domains your account has verified, with nothing to install and no API keys to manage.

Server details

Endpointhttps://mcp.attacksurfacescan.com/mcp
TransportStreamable HTTP (stateless; SSE not required)
AuthenticationOAuth 2.1: authorization code + PKCE, dynamic client registration (RFC 7591), discovery via RFC 9728 / RFC 8414. No API keys.
Scopeaccount: delegated access as the user who approves the connection
PricingIncluded on every plan (plan quotas apply). Plans start with a 7-day trial, no card required.
RevocationIn-app: Team → Connected apps → Disconnect. Effective on the next request.

Connect a client

Every client follows the same handshake: point it at the endpoint, a browser window opens Attack Surface Scan's consent page, sign in and click Allow access. You need a Attack Surface Scan account (the trial works) but no keys or extra setup.

Claude (web, desktop, mobile)

Settings → Connectors → Add custom connector, then paste the endpoint URL. Claude discovers the OAuth configuration and walks you through approval.

https://mcp.attacksurfacescan.com/mcp

Claude Code

claude mcp add --transport http afs https://mcp.attacksurfacescan.com/mcp

Then run /mcp inside a session to complete the sign-in.

ChatGPT

Custom MCP connectors require developer mode (Pro, Plus, Business, Enterprise and Edu plans, on the web app): Settings → Apps → Advanced settings → Developer mode. Then Settings → Connectors → Create, paste the endpoint URL and choose OAuth as the authentication method. On workspace plans an admin may need to allow custom connectors first.

OpenAI Codex

codex mcp add afs --url https://mcp.attacksurfacescan.com/mcp
codex mcp login afs

The login command runs the OAuth flow in your browser. Configuration lands in ~/.codex/config.toml if you prefer to manage it there.

Hermes

Add the server in the dashboard (hermes dashboard → MCP servers), or in ~/.hermes/config.yaml:

mcp_servers:
  afs:
    url: "https://mcp.attacksurfacescan.com/mcp"
    auth: oauth

A browser window opens for authorization on first connect.

Manus

Settings → Connectors → + Add Connectors → Custom MCP → Direct Configuration. Name it Attack Surface Scan, choose the HTTP transport, paste the endpoint URL and save; Manus verifies the connection and walks you through sign-in.

OpenClaw

openclaw mcp add afs --url https://mcp.attacksurfacescan.com/mcp \
  --transport streamable-http --auth oauth
openclaw mcp login afs

The login command prints the authorization URL and finishes the token exchange once you approve in the browser. Check with openclaw mcp status.

Cursor and other MCP clients

Add the server to your client's MCP configuration:

{
  "mcpServers": {
    "afs": { "url": "https://mcp.attacksurfacescan.com/mcp" }
  }
}

Try it

Once connected, ask your assistant things like:

  • “Scan attacksurfacescan.com and summarize anything new since last week.”
  • “Which of our certificates expire in the next 30 days?”
  • “Mute the missing-HSTS finding on staging until March, with a note.”
  • “Generate the PDF report for yesterday's scan.”
  • “File these three domains under the Acme client and summarize that estate's posture.” (MSP plans)

Available tools

The connected client always sees the live list via tools/list; this table is the human-readable summary.

ToolWhat it does
get_accountPlan, subscription status and usage against limits
list_domainsClaimed domains, verification status and the DNS TXT record each needs
add_domainClaim a domain; returns the TXT record to publish (nothing is scanned yet)
verify_domainCheck the DNS TXT ownership token right now
request_domain_approvalEmail someone at the domain and let them approve monitoring it
start_scanQueue a passive scan of a verified hostname; returns a scanId
get_scanFull results for one scan: findings, evidence, remediation, posture score
list_scansRecent scans with summary scores, newest first
get_reportRender a completed scan as a PDF and return a download link
check_reportPoll a PDF job that outran get_report's inline wait
list_changesWhat moved across the estate: subdomains, DNS, ports, certificates, findings
list_lookalikesRegistered typosquats of your domains (observed via DNS and CT logs only)
list_certificatesEvery monitored endpoint and the certificate it is serving: issuer, expiry, health
list_unknown_certificatesCertificates seen in CT logs from CAs you have not authorized, plus the authorized-CA list
acknowledge_certificateMark an unknown certificate as expected, optionally trusting its CA from now on
list_triagePer-finding triage states, including lapsed suppressions
set_triageAcknowledge, mute or accept a finding on one target
list_clientsClient workspaces and their domain counts (MSP plans)
add_clientCreate a client workspace to file domains under (MSP plans, admin)
assign_domain_clientFile a domain under a client: grouping only, ownership rules unchanged
get_brandingThe white-label identity stamped onto PDF reports (MSP plans)
set_brandingSet the report company name and accent color (MSP plans, admin)

Questions

Do I need an API key?

No. The server uses standard MCP OAuth: your client registers itself, your browser opens Attack Surface Scan's consent page, you sign in with your normal account and click Allow. There is nothing to copy out of a dashboard and nothing long-lived to leak into a config file.

What can a connected agent do (and not do)?

It acts as the person who approved the connection: it can add and verify domains, run scans, read findings and reports, watch the change feed and triage findings. On MSP plans it can also organize client workspaces and manage report branding. It cannot touch billing, manage the team, or see any other account's data. Access can be revoked at any time in the app under Team → Connected apps, and revocation takes effect on the connection's next request.

Can it scan arbitrary websites?

No. The MCP surface passes the exact same gate as the app: a hostname is scannable only after the account proves control of its domain with a DNS TXT record, and that proof is re-checked nightly. Asking a connected agent to scan someone else's infrastructure fails the same way it would in the UI.

Does it cost extra?

No. The MCP server is included on every plan, including the free trial. Scans started over MCP count against the same monthly quota as scans started in the app, and PDF reports generated on the no-card signup trial carry the same TRIAL watermark.

Which clients are supported?

Anything that speaks MCP over Streamable HTTP with OAuth: Claude (web, desktop and mobile connectors), Claude Code, ChatGPT (developer mode), OpenAI Codex, Hermes, Manus, OpenClaw, Cursor, and other MCP clients that support remote servers with dynamic client registration. If your client can add a remote MCP server by URL, it can connect to Attack Surface Scan, and the connection guide covers each one.

Is the connection safe to leave in place?

Tokens are short-lived, stored only as hashes on our side, and bound to a connection you can see and revoke in the app, with the person who authorized it and when it was last used. If a team member leaves, their connections stop working the moment their membership ends.