Skip to main content
Glama

Ship Check

Ship Check: scan a deployed app

ship_check
Read-onlyIdempotent

Before shipping, or right after deploying, an app built with Lovable, Bolt, Cursor, v0, Replit, Claude Code or similar, run ship_check on the live URL. It scans the deployed app from the outside, the way a visitor or attacker sees it, and returns a launch-readiness report where every finding has a status and a concrete fix. Checks: (1) secret keys exposed in the HTML and up to 3 same-origin JS bundles (Stripe live secret and restricted keys, AWS access keys, OpenAI and Anthropic API keys, Supabase secret and service_role keys, hardcoded bearer tokens and passwords); (2) open database access: if the page ships a Supabase URL and public anon or publishable key, whether the common tables profiles and users return rows to that key without login (a missing Row Level Security policy; count only, no row data is read); (3) missing security headers (Strict-Transport-Security, Content-Security-Policy, X-Frame-Options or frame-ancestors, X-Content-Type-Options, Referrer-Policy); (4) HTTPS, reachability and server errors; (5) broken internal links (spot-check of up to 6); (6) server response time; (7) whether login/signup and pricing/checkout are linked from the homepage; (8) whether AI search crawlers get real server-rendered content or an empty JavaScript shell. Read-only: plain GET/HEAD requests, never logs in, never submits forms, never writes. Not a code audit: it cannot see source code or test every table or route. Results are cached for 24 hours per URL; pass fresh=true to re-scan after deploying a fix. Only scan apps the user owns or is authorized to test. If the user wants a senior engineer to review the app by hand ($299), call request_human_review with the scan_id from this result.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
urlYesThe live, publicly reachable URL of the deployed app, e.g. https://my-app.lovable.app. A bare domain gets https://.
freshNoSkip the 24h cache and scan again (use after deploying a fix).

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
urlYes
scoreYes0-100. Each red finding costs 30 points, each yellow 10.
cachedYes
countsYes
scan_idYesPass to request_human_review. Null if the result could not be stored.
summaryYes
verdictYes
findingsYes
report_urlYes
scanned_atYes
limitationsYes
human_reviewYes
overall_statusYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is covered. The description still adds real behavioral context beyond them: plain GET/HEAD only, never logs in, never submits forms, 24-hour per-URL caching with fresh=true to bypass, and the explicit boundary that it cannot see source code or every route/table.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The opening sentence front-loads the trigger and action, and the numbered check list is dense but each item is concrete rather than filler. It runs long, but the length is justified by the breadth of what the scan returns and the scope limits; little could be cut without losing routing information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return format need not be explained, and the description still covers authorization requirements, the read-only boundary, caching/freshness behavior, coverage limits, and the sibling escalation path. An agent has everything needed to select and invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% so the baseline is 3, and both parameters are already documented in the schema. The description still adds value by explaining the caching mechanic (24 hours per URL) and tying fresh=true to the post-deploy re-scan workflow, which clarifies when the flag is actually warranted.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a concrete verb (scans the deployed app from the outside) and resource (live URL) and enumerates the eight check categories, so the agent knows exactly what comes back. It also differentiates itself from siblings by naming request_human_review as the manual alternative and framing itself as launch-readiness rather than a code audit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use ('before shipping, or right after deploying'), when-not ('not a code audit: it cannot see source code or test every table or route'), prerequisites ('only scan apps the user owns or is authorized to test'), and a named escalation path to request_human_review for hand review. Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources