Bastion: External Attack Surface Monitoring
officialAsk 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
scanIdviastart_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
| Endpoint | https://mcp.attacksurfacescan.com/mcp |
|---|---|
| Transport | Streamable HTTP (stateless; SSE not required) |
| Authentication | OAuth 2.1: authorization code + PKCE, dynamic client registration (RFC 7591), discovery via RFC 9728 / RFC 8414. No API keys. |
| Scope | account: delegated access as the user who approves the connection |
| Pricing | Included on every plan (plan quotas apply). Plans start with a 7-day trial, no card required. |
| Revocation | In-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.
| Tool | What it does |
|---|---|
get_account | Plan, subscription status and usage against limits |
list_domains | Claimed domains, verification status and the DNS TXT record each needs |
add_domain | Claim a domain; returns the TXT record to publish (nothing is scanned yet) |
verify_domain | Check the DNS TXT ownership token right now |
request_domain_approval | Email someone at the domain and let them approve monitoring it |
start_scan | Queue a passive scan of a verified hostname; returns a scanId |
get_scan | Full results for one scan: findings, evidence, remediation, posture score |
list_scans | Recent scans with summary scores, newest first |
get_report | Render a completed scan as a PDF and return a download link |
check_report | Poll a PDF job that outran get_report's inline wait |
list_changes | What moved across the estate: subdomains, DNS, ports, certificates, findings |
list_lookalikes | Registered typosquats of your domains (observed via DNS and CT logs only) |
list_certificates | Every monitored endpoint and the certificate it is serving: issuer, expiry, health |
list_unknown_certificates | Certificates seen in CT logs from CAs you have not authorized, plus the authorized-CA list |
acknowledge_certificate | Mark an unknown certificate as expected, optionally trusting its CA from now on |
list_triage | Per-finding triage states, including lapsed suppressions |
set_triage | Acknowledge, mute or accept a finding on one target |
list_clients | Client workspaces and their domain counts (MSP plans) |
add_client | Create a client workspace to file domains under (MSP plans, admin) |
assign_domain_client | File a domain under a client: grouping only, ownership rules unchanged |
get_branding | The white-label identity stamped onto PDF reports (MSP plans) |
set_branding | Set 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.