Security for teams that ship with agents
A security engineer your coding agent can call.
ShipLock reads your repository, live stack and traffic, and hands your agent the facts over MCP, including what it could not read. Your agent proposes the fix. You click to open the pull request.
Free in preview · read only until you click
check this repo with ShipLock, fix the worst one
shiplock · get_security_context
41 routes read · 1 critical · 2 files not read
shiplock · list_findings
CRITICAL GET /api/invoices/[id]any signed-in user reads another workspace's invoices
Read app/api/invoices/[id]/route.ts
14 .from("invoices").select("*").eq("id", id)no workspace filter on this query
shiplock · get_fix
add .eq("workspace_id", session.workspaceId) · mechanical
Proposed. Open the pull request in ShipLock: one click, one receipt.
How it works
One loop. Three hands on it.
Read
ShipLockEvery deterministic check. Unread stays unread.
Attack
Your agentProposes attacks, checked against the quoted lines.
Map
ShipLockWrong routes and what they reach.
Fix
YouA pull request on your click, with a receipt. ShipLock never merges or deploys.
Watch
ShipLockPR checks, rechecks, live config and traffic.
For your agent
Built to be read by machines.
Your agent does the thinking, on your subscription. ShipLock gives it typed facts with sources and re-reads every line it cites.
- Hosted MCPshiplock.dev/api/mcp/server
- Read only toolsNo scan, write or merge tool
- Plain text/llms.txt
claude mcp add --transport http shiplock https://shiplock.dev/api/mcp/server --header "Authorization: Bearer $SHIPLOCK_TOKEN"
- list_findings
- get_fix
- get_security_context
- get_guardrails
- list_intelligence_tasks
- get_intelligence_task
- submit_intelligence_result
- open_fix_pull_request
- get_fix_pull_request
- report_self_check
Why code alone is not enough
Code is half the picture.
A route can look correct and still leak. Row policies live in your database, not your repository. Your live site can call addresses your repository does not have. A small hole matters when it is hit 2,000 times a minute. Connect them, read only, and ShipLock reads them together.
Example
Together. One account is exporting every row of invoices. No single layer says that alone.
Why access control
The bugs we look for keep shipping.
170+ live apps, one missing row policy
AI-built apps shipped tables without row-level security. The public key read every row.
Read the source →Ownership bugs resist pattern matching
Correct in isolation, wrong for the caller.
Read the source →Broken access control, still number one
The rule it breaks is specific to your product.
Read the source →More in incidents and the OWASP mapping.