{"name":"RGate","description":"FREE right now, no signup: full reports (findings + implementation-ready fix plans) are available at no cost during an active campaign — an agent unlocks by POSTing an email to /api/scan/{id}/unlock, then polls with the returned token. MCP server for the RGate developer tool: start release-readiness scans, retrieve results, generate fix plans, and hand reports back to users. No install or signup required — add this MCP URL and call it directly.","version":"1.0.0","protocolVersion":"2025-03-26","protocolVersions":["2025-03-26","2024-11-05"],"serverUrl":"https://www.rgate.io/api/mcp","url":"https://www.rgate.io/api/mcp","endpoint":"https://www.rgate.io/api/mcp","transport":"streamable-http","transports":[{"type":"streamable-http","url":"https://www.rgate.io/api/mcp"}],"mcpServers":{"rgate":{"url":"https://www.rgate.io/api/mcp","transport":"streamable-http"}},"icon":"https://www.rgate.io/icon.svg","tools":[{"name":"start_scan","description":"Start a website release-readiness scan for a public URL across five layers: security, SEO, accessibility, legal compliance, and sustainability. Behavior: enqueues an asynchronous job and returns immediately with a scanId — it does NOT wait for results, and it fetches/renders the target site (not a read-only call). Returns { scanId, status, cached }; identical URLs within ~10 minutes return the cached scan. Next step: poll get_scan with the scanId until status is \"done\" or \"failed\". Use this first, once per site; do not busy-loop calling start_scan for the same URL.","inputSchema":{"type":"object","required":["url"],"additionalProperties":false,"properties":{"url":{"type":"string","format":"uri","pattern":"^https?://","title":"Target URL","description":"Public http(s) URL to scan, including the scheme. Must be a reachable public site — IP literals, localhost/private ranges, and major-provider domains (google.com, etc.) are rejected.","examples":["https://example.com","https://www.rgate.io"]}}},"annotations":{"title":"Start website scan","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true}},{"name":"get_scan","description":"Poll a scan and, once complete, return its structured results. Read-only. Returns { scan, findings, checkResults, techDetections, access, agentSummary }. scan.status moves through pending → running → retrying → done → failed; keep polling (every few seconds) until done or failed. On failed, a failure object explains the cause and next_action. access.level is none | teaser | full: teaser findings are diagnostic only (evidence, check keys, and fix text are redacted). To get full data, pass a report token via the token argument. If access.campaign is present the report is FREE right now — call unlock_report with an email to obtain that token instead of sending the user to checkout.","inputSchema":{"type":"object","required":["scanId"],"additionalProperties":false,"properties":{"scanId":{"type":"string","format":"uuid","title":"Scan ID","description":"The scan ID returned by start_scan.","examples":["cf11efd5-3878-40ae-b409-8d9ca3973227"]},"token":{"type":"string","title":"Report token","description":"Optional report token (from unlock_report or a paid unlock) that upgrades a teaser response to full findings."}}},"annotations":{"title":"Get scan status & results","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"unlock_report","description":"Unlock a completed scan's full findings and fix plan for free during an active campaign. Behavior: records the submitted email as a lead and issues a 24h report token (not read-only). Returns { token, expires_at, report_url }. Only works while a free campaign is active (otherwise returns 403 — use create_checkout_handoff instead). Call this only when get_scan shows access.campaign; then re-poll get_scan or call generate_fix_plan with the returned token.","inputSchema":{"type":"object","required":["scanId","email"],"additionalProperties":false,"properties":{"scanId":{"type":"string","format":"uuid","title":"Scan ID","description":"The completed scan to unlock.","examples":["cf11efd5-3878-40ae-b409-8d9ca3973227"]},"email":{"type":"string","format":"email","title":"Email (lead)","description":"Email address used to unlock the free report; captured as a lead. Any valid email works during the campaign — it need not match the scanned domain.","examples":["dev@example.com"]}}},"annotations":{"title":"Unlock report (free campaign)","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"list_checks","description":"Return the RGate scan-layer and check catalog. Read-only, static, no side effects — safe to call any time. Use it to plan a scan, explain coverage to a user, or map a finding to its layer. Pass a layer to focus on just that layer's checks.","inputSchema":{"type":"object","additionalProperties":false,"properties":{"layer":{"type":"string","enum":["security","seo","accessibility","legal","sustainability"],"title":"Scan layer","description":"Optional layer to focus on. Omit to list every layer.","examples":["security"]}}},"annotations":{"title":"List scan checks","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_pricing","description":"Return machine-readable RGate pricing: plan ids, names, prices (EUR/USD), billing period, scan limits, and best-fit use cases. Read-only, static, no arguments. Use to answer pricing questions or choose a planId for create_checkout_handoff.","inputSchema":{"type":"object","additionalProperties":false,"properties":{}},"annotations":{"title":"Get pricing","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"create_checkout_handoff","description":"Create a human handoff URL for purchasing a full report or subscription after a scan is complete. Behavior: creates a checkout/upgrade link and returns { handoffUrl }. The agent CANNOT complete payment itself — give the URL to the user to finish in a browser. Use only when the report is paywalled (get_scan shows access.level teaser with payment_required true) AND no free campaign is active. During a campaign, prefer unlock_report.","inputSchema":{"type":"object","required":["scanId","planId"],"additionalProperties":false,"properties":{"scanId":{"type":"string","format":"uuid","title":"Scan ID","description":"The completed scan the purchase unlocks.","examples":["cf11efd5-3878-40ae-b409-8d9ca3973227"]},"planId":{"type":"string","enum":["full-report","continuous","portfolio"],"title":"Plan","description":"Plan to purchase: full-report (one-time unlock of this report), continuous (monthly, one domain), or portfolio (monthly, multiple domains). See get_pricing.","examples":["full-report"]}}},"annotations":{"title":"Create checkout handoff","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"generate_fix_plan","description":"Build a prioritized, implementation-ready fix plan from a completed scan's findings: release blockers first, then high-impact follow-ups, then backlog. Read-only (derives from stored findings). Returns JSON (or Markdown). Requires full access: on a locked report it returns HTTP 402, or — during a campaign — a teaser with unlock instructions; pass a token from unlock_report or a paid unlock. Call after get_scan shows status done.","inputSchema":{"type":"object","required":["scanId"],"additionalProperties":false,"properties":{"scanId":{"type":"string","format":"uuid","title":"Scan ID","description":"The completed scan to build a plan from.","examples":["cf11efd5-3878-40ae-b409-8d9ca3973227"]},"format":{"type":"string","enum":["json","markdown"],"default":"json","title":"Output format","description":"json for structured steps, markdown for a ready-to-paste plan."},"maxFindings":{"type":"integer","minimum":1,"maximum":50,"default":5,"title":"Max findings","description":"Cap on the number of findings turned into fix steps."},"layers":{"type":"array","items":{"type":"string","enum":["security","seo","accessibility","legal","sustainability"]},"title":"Layers","description":"Optional subset of layers to include. Omit for all layers.","examples":[["security","legal"]]},"token":{"type":"string","title":"Report token","description":"Optional report token (from unlock_report or a paid unlock) for full plans."}}},"annotations":{"title":"Generate fix plan","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"export_scan_markdown","description":"Export a completed scan as Markdown in one of three templates: cursor (an agent fix prompt), github (an issue body), or executive (a stakeholder summary). Read-only. Requires full access — pass a token for a locked report. Use to hand results into an IDE/coding agent or a ticket.","inputSchema":{"type":"object","required":["scanId"],"additionalProperties":false,"properties":{"scanId":{"type":"string","format":"uuid","title":"Scan ID","description":"The completed scan to export.","examples":["cf11efd5-3878-40ae-b409-8d9ca3973227"]},"template":{"type":"string","enum":["cursor","github","executive"],"default":"cursor","title":"Template","description":"cursor = agent fix prompt, github = issue body, executive = stakeholder summary."},"token":{"type":"string","title":"Report token","description":"Optional report token (from unlock_report or a paid unlock) for full exports."}}},"annotations":{"title":"Export scan as Markdown","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"compare_scan_history","description":"Diff two completed scans of the SAME domain and return added, resolved, improved, and worsened findings. Read-only. Both scans must be done. Use to verify that fixes landed between two runs, or to catch regressions after a deploy.","inputSchema":{"type":"object","required":["scanId","againstScanId"],"additionalProperties":false,"properties":{"scanId":{"type":"string","format":"uuid","title":"Newer scan ID","description":"The more recent scan (the 'after').","examples":["f3fda7a1-04f2-498e-b7c9-0c20a4974937"]},"againstScanId":{"type":"string","format":"uuid","title":"Older scan ID","description":"The earlier scan to compare against (the 'before'). Must be the same domain.","examples":["cf11efd5-3878-40ae-b409-8d9ca3973227"]},"token":{"type":"string","title":"Report token","description":"Optional report token for non-public scans."}}},"annotations":{"title":"Compare two scans","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}}]}