Hosted MCP server
Connect any MCP client to the hosted squirrelscan MCP server: cloud audits, reports, issues, and rules as native agent tools
squirrelscan runs a hosted Model Context Protocol server in the cloud. Point any MCP client at it and your agent gets 14 tools for running cloud audits, reading reports, working the per-website issue tracker, and browsing the 249+ rule catalog. Nothing to install, nothing to keep running:
https://mcp.squirrelscan.com/mcp
The transport is streamable HTTP. Authentication is OAuth 2.1 (browser sign-in) or a squirrelscan API key as a bearer header, whichever suits the environment.
Quick connect
The fastest path is Claude Code:
claude mcp add --transport http squirrelscan https://mcp.squirrelscan.com/mcpThen, inside a session, run /mcp, select squirrelscan, and choose Authenticate. Your browser opens, you sign in to squirrelscan, pick the organization the agent should act for, and approve. That’s it: the tools are live.
Every other client is a couple of lines of config. See MCP client setup for exact snippets for Cursor, Codex CLI, VS Code, Windsurf, and Gemini CLI.
Authentication
There are two ways in. Pick one per config entry.
OAuth (browser sign-in)
Add the server with no auth headers and the client handles everything: it discovers the authorization server at /.well-known/oauth-authorization-server, registers itself dynamically (DCR and CIMD are both supported), and runs the PKCE browser flow. You sign in, choose an organization, and approve on the consent screen.
Behind the scenes the flow mints a 30-day squirrelscan API key scoped to the organization you approved. When it expires, the client prompts you to sign in again.
Best for: a human at an editor. No key to copy, no secret in any config file.
API key (bearer header)
Set a standard bearer header on the server entry:
Authorization: Bearer sq_xxxxxxxxxxxx
Get a key from the dashboard at app.squirrelscan.com/settings/api-keys, or without leaving the terminal:
squirrel keys create --shell--shell offers to append export SQUIRRELSCAN_API_KEY=sq_... to your shell rc, and SQUIRRELSCAN_API_KEY is the conventional env var: most clients can interpolate it into the header so the key never lands in a config file. See squirrel keys and Authentication.
Key scopes apply to tools exactly like they do to the REST API: run_audit, add_website, and comment_on_issue need audits:write; audit, report, and issue reads need audits:read; get_credit_balance needs credits:read. A key missing a scope gets a structured FORBIDDEN error naming the missing scope. whoami works with any key but only includes the balance when the key has credits:read.
Best for: CI, headless machines, containers, and configs you commit and share.
Anonymous connections can initialize and list the tool catalog, but every tool call requires credentials. Unauthenticated calls get a 401 with a WWW-Authenticate challenge that points OAuth-capable clients at the sign-in flow.
Tools
All 14 tools require authentication. Write tools are marked; everything else only reads.
| Tool | What it does | Access |
|---|---|---|
whoami | Identify the active credentials: org, plan, auth kind, credit balance. Call it first. | Read |
run_audit | Run a cloud audit of a URL (crawl + 249-rule analysis + report). Estimate and confirm rail, see Credits. Registers the website automatically on first audit. | Write, spends credits |
get_audit_status | Poll a running audit by run_id until it completes. While running, the response includes a progress field (phase, message, page/link counts) when available. | Read |
get_report | Fetch a finished report: summary (JSON scores, top issues grouped by rule with fix text deduped into a rules dict, and score/issue-count history across prior audits), llm (compact text for agent context), or markdown (full report). | Read |
list_audits | Active and recent audit runs for the org. | Read |
list_websites | Websites the org has audited, with latest status and health score. Paginated (total/has_more). | Read |
add_website | Register a website without auditing it. Idempotent per domain. | Write |
list_issues | Open audit issues for a website, sorted by severity, filterable by status, severity, and category. | Read |
get_issue | One issue with full detail, per-occurrence detail from the latest report (which pages/images, capped and countable via occurrence_limit), and its comment thread. | Read |
comment_on_issue | Post a markdown comment on an issue, visible in the dashboard thread. | Write |
list_rules | Browse the audit rule catalog by category or keyword. | Read |
get_rule | One rule’s full definition by id, e.g. crawl/canonical-chain, including its fix recommendation and docs link. | Read |
get_credit_balance | Monthly and pack credit buckets for the org. | Read |
create_api_key | Mint a new org API key. Requires the keys:write scope, which only OAuth sign-in grants. The key is returned exactly once. | Write, gated |
Two tools deserve a closer look:
run_audithas a confirm rail. The first call returns a credit estimate instead of starting anything expensive; the agent is expected to show it to you and call again withconfirm: true. Every audit costs at least the 50-credit base, so expect the confirm step on each run. Amax_creditsargument acts as a hard spend guard: the audit refuses to start if the estimate exceeds it.create_api_keyis scope-gated. It needs credentials carrying the reservedkeys:writescope. OAuth sign-in grants it (you consented on the approval screen); plain API keys never carry it, and keys minted by this tool can’t mint further keys. No escalation loops.
Credits
Cloud audits are pay-as-you-go: credits are spent while the audit runs, and nothing is charged up front. From the agent’s side a paid audit looks like this:
- Agent calls
run_auditwith the URL. The response comes back withstatus: "confirmation_required", an upper-bound estimate (estimate.cap), and your current balance. - The agent shows you the estimate and asks. Actual spend is usually below the cap.
- You approve; the agent calls
run_auditagain withconfirm: true. The audit starts and returns arun_id. - The agent polls
get_audit_statusevery 15-30 seconds, then pulls the results withget_report.
An audit costs 50 credits base plus 2 per rendered page. Check spend anytime with get_credit_balance, or top up at app.squirrelscan.com/billing.
Sample prompts
Copy-paste starters. Prompts marked spends credits run a cloud audit; prompts marked write change state in your org.
- “Audit https://example.com and fix the top 3 issues in this repo.” (spends credits, write)
- “Check my site’s open audit issues and comment on the ones this PR fixes.” (write)
- “Compare the last two audits of example.com and tell me what regressed.”
- “Create an API key for CI and add it to my GitHub Actions secrets.” (write, needs OAuth sign-in for
keys:write) - “What would a deep audit of example.com cost, and how many credits do we have left?”
- “Run a full-coverage audit of staging.example.com, but stop if it would cost more than 200 credits.” (spends credits, write)
- “List our websites and summarize the health of each one.”
- “What does the rule crawl/canonical-chain check, and how do I fix it on a Next.js site?”
Local MCP server
The CLI ships a local stdio MCP server too:
squirrel mcpIt runs squirrelscan’s deterministic audit engine on your machine: local audits are free, work offline, and need no account. Reach for it when you want unmetered local runs, are auditing localhost or a private network, or have no network at all. The hosted server is the better default for everything cloud-side: shared org state, the issue tracker, browser rendering, and zero local install.
Full setup and tool reference: squirrel mcp.
Related
- MCP client setup - exact config for Claude Code, Cursor, Codex CLI, VS Code, Windsurf, and Gemini CLI
- Authentication - API keys, scopes, and
SQUIRRELSCAN_API_KEY squirrel keys- mint and manage keys from the terminalsquirrel mcp- the local stdio server- Cloud credits - how audits are metered