Assurly MCP Server
A ship gate AI agents call before deploy — expose Assurly scans to Cursor, Claude Code, and other MCP clients via @assurly/mcp-server.
npx -y @assurly/mcp-serverWhat your agent gets back
Local scans return a Ship Gate summary the agent can read inline. Example output from assurly_scan_path:
⚠️ REVIEW RECOMMENDED Ship Score: 88/100
Scanned repository · 0 of 0 source files
Warnings (review):
· No .env.example file found at the root of the project. It is highly r… → 1 file
· GitHub Actions workflow for Assurly is missing. → 1 file
↳ Run: npx assurly initThe same tool also returns a markdown report and a JSON payload with verdict, status, shipScore, blockers, reviews, warnings, findings, detectedStack, and scanScope.
assurly_verdict reads the hosted API only — it never scans locally and never triggers an active probe. Pass exactly one of url or repo (owner/name). Alongside status and Ship Score it returns per-rule fixOutcomes (ruleId, outcome, observedAt) — shape-only, from the last re-probe. Example:
Assurly verdict: BLOCKED · Ship Score 42/100
Target: my-app.vercel.app
Top issue: Database exposure — Enable RLS on public tables
Fix outcomes (last re-probe only — may predate your latest edit):
· runtime-supabase-rls-open: still_open · observed 2026-07-18T06:00:00.000Z
Not yet verified against your latest changes — deploy and re-probe. An unverified claim is not done.
Trust page: https://assurly.dev/trust/my-appWhen the hosted status is blocked, the tool returns that text with isError: true, so the agent stops instead of shipping. Fix outcomes alone do not set isError— they may predate the agent's latest edit. After claiming a fix, deploy and re-probe; treat an unverified claim as not done.
Tools
| Tool | Description |
|---|---|
assurly_scan_path | Scan a local project directory |
assurly_scan_files | Scan in-memory { path, content }[] files |
assurly_explain_rule | Explain a rule id and how to fix it |
assurly_verdict | Read the hosted ship verdict (status, Ship Score, top issue, and per-rule fix outcomes with observation times) for a deployed URL or repository. Requires ASSURLY_API_KEY; a blocked verdict is returned as an error so the agent stops instead of shipping. Fix outcomes reflect the last re-probe — after claiming a fix, deploy and re-probe before treating it as done. |
assurly_scan_agent | Advisory audit of MCP client configs and agent instruction files only. Never blocks ship (isError stays false). |
assurly_plant_canary | Mint ASSURLY_CANARY_URL via the hosted API and append it to local .env.example. Requires ASSURLY_API_KEY. Never uploads source. |
Install
One-click install exists only where the client offers it: Cursor and VS Code each accept a server config over a URL handler. Claude Code installs with a single terminal command and Windsurf with a config file — no less supported, just one copy away in the tabs below.
Prerequisites: Node.js ^20.19.0 || >=22.12.0. Run via npx -y @assurly/mcp-server (package @assurly/mcp-server, bin assurly-mcp).
Add this server to .cursor/mcp.json next to your other MCP entries:
{
"mcpServers": {
"assurly": {
"command": "npx",
"args": ["-y", "@assurly/mcp-server"]
}
}
}After saving, restart Cursor (or reload MCP) and confirm the six assurly_* tools appear.
From your project directory:
claude mcp add assurly -- npx -y @assurly/mcp-serverRestart the session (or reload MCP) and confirm the six assurly_* tools appear.
Add this server to .vscode/mcp.json. VS Code uses the top-level key servers (not mcpServers):
{
"servers": {
"assurly": {
"command": "npx",
"args": ["-y", "@assurly/mcp-server"]
}
}
}After saving, reload MCP and confirm the six assurly_* tools appear.
Add this server to ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"assurly": {
"command": "npx",
"args": ["-y", "@assurly/mcp-server"]
}
}
}After saving, restart Windsurf (or reload MCP) and confirm the six assurly_* tools appear.
Any stdio MCP client can launch the server with npx. Point the client at:
{
"command": "npx",
"args": ["-y", "@assurly/mcp-server"]
}Run via npx -y @assurly/mcp-server (bin assurly-mcp). Confirm the six assurly_* tools appear after the client reloads MCP.
Make the gate automatic
A ship gate nobody remembers to invoke is not a gate. Paste this into .cursorrules, CLAUDE.md, or AGENTS.md so the agent calls Assurly before every deploy without being asked:
# Assurly ship gate
Before deploying, pushing to production, or claiming the app is ready to ship:
1. Call assurly_scan_path (or assurly_scan_files) on the project.
2. Fix every blocker; re-scan until the verdict is READY TO SHIP.
3. If a deployed URL or repo is in scope, call assurly_verdict. A blocked verdict is returned with isError: true — stop and do not ship.
4. After you claim a fix for a hosted finding: deploy, then call assurly_verdict again and confirm a post-deploy re-probe recorded verified_fixed for that rule. Fix outcomes include an observed timestamp — they reflect the last re-probe, not your working tree. An unverified claim is not done.
Do not skip this gate or ask the user whether to run it.Connect the hosted verdict
assurly_verdict requires ASSURLY_API_KEY. Create a key in the dashboard under Settings → API keys (shown once), then expose it to the MCP server. Optional: ASSURLY_API_URL defaults to https://assurly.dev.
Example Cursor .cursor/mcp.json with the key set (VS Code uses servers instead of mcpServers):
{
"mcpServers": {
"assurly": {
"command": "npx",
"args": ["-y", "@assurly/mcp-server"],
"env": {
"ASSURLY_API_KEY": "ask_your_key_here"
}
}
}
}Typical agent loop
- Agent writes or edits code.
- Call
assurly_scan_pathorassurly_scan_files. - Read blockers from the Ship Gate summary.
- Call
assurly_explain_rulefor remediation hints. - Fix issues and re-scan until the verdict is READY TO SHIP.
Troubleshooting
- Node too old. The server requires Node
^20.19.0 || >=22.12.0. Upgrade, then retrynpx -y @assurly/mcp-server. - Tools not appearing after install. Restart the client or reload MCP, then confirm the six
assurly_*tools are listed. - Missing API key.
ASSURLY_API_KEY is not set. Create a key in the Assurly dashboard (Settings → API keys) and expose it to this MCP server as ASSURLY_API_KEY. - Invalid or revoked key.
The Assurly API key is invalid or revoked (401). Issue a new key. - Wrong verdict arguments.
Provide exactly one of `url` or `repo`.
Pricing
The MCP server is free. Local scans and explaining blockers before deploy are part of the Free tier — the same distribution model as the URL scan.
Paid plans (Pro and OEM) add monitoring, private repos, auto-fix PRs, regression alerts, AI deep review, and the white-label keyed verdict. Pro includes a 3-day free trial. A payment method is required at checkout; cancel before day 3 and you pay nothing.