Tools, resources and prompts
Everything the hosted Lockpick MCP server offers an assistant, generated from the server itself.
The hosted server offers 29 tools, 2 resources and 3 prompts. Each tool needs the permission shown. Tools that change something are marked so assistants ask you first, but the permission and Lockpick's own checks are what decide. Every tool also takes format, markdown for text an assistant reads to you or json for data.
Tools
lockpick_whoami
Who am I
The signed-in person, the workspace this credential reads, the credential scopes and expiry, and what it can start.
- Permission: Read (
lockpick.read) - Only reads
It takes no other inputs.
lockpick_get_allowance
Get allowance
Whether the person's Lockpick access is active, the available Pulse and Deep allowance with its reset dates, credits, and which site holds this month's free Pulse. Read it before quoting a cost.
- Permission: Read (
lockpick.read) - Only reads
It takes no other inputs.
lockpick_list_sites
List sites
Sites in the workspace this credential can read, newest first, each with its latest Pulse and Deep scan. Paginated with a cursor.
- Permission: Read (
lockpick.read) - Only reads
| Input | Type | Required |
|---|---|---|
limit | integer | No |
cursor | string | No |
lockpick_site_status
Site status
One site's standing: its latest Pulse and Deep scans with grade and score, open findings by severity, coverage limits, the latest recheck delta and what is relevant now (advisories that affect its pinned versions or may affect its stack, components seen live, actively exploited ones and recent fixes, each with its evidence).
- Permission: Read (
lockpick.read) - Only reads
| Input | Type | Required |
|---|---|---|
siteId | string | Yes |
{
"siteId": "<siteId>"
}lockpick_add_site
Add a site
Adds a site by its address to the workspace, or returns the existing site with that address. Only for a site the person owns or is allowed to test. Adding a site does not scan it. A retry with the same idempotencyKey returns the same site.
- Permission: Sites (
lockpick.sites) - Changes something, so assistants confirm it first
| Input | Type | Required |
|---|---|---|
url | string | Yes |
name | string | No |
idempotencyKey | string | Yes |
{
"url": "https://atlas.example",
"idempotencyKey": "a-unique-key"
}lockpick_switch_free_site
Switch the free site
Removes one of the person's sites so this month's free Pulse can move to another site. Call it only when the person asked to switch and named the site to remove: pass its id as removeSiteId with confirmRemoval: true, never a site you picked. The removed site stops being monitored, its scans stay readable, and a manager can restore it in Lockpick (restoreUrl). With checkId, a quick check of the new site, it also starts a Pulse on that site, which uses one free Pulse; the result names the scan, the charge and the allowance left. Without checkId nothing is started. Refused with nothing removed while a scan of that site is running, when removing it would not free the free Pulse, when the quick check expired or when no free Pulse is left. If the site was removed but the Pulse then failed to start, the error says so and links to starting it in Lockpick. A retry with the same idempotencyKey returns the same result and changes nothing more.
- Permission: Sites (
lockpick.sites) and Pulse scans (lockpick.pulse) - Changes something, so assistants confirm it first
| Input | Type | Required |
|---|---|---|
removeSiteId | string | Yes |
checkId | string | No |
idempotencyKey | string | Yes |
confirmRemoval | boolean | Yes |
{
"removeSiteId": "<removeSiteId>",
"idempotencyKey": "a-unique-key",
"confirmRemoval": true
}lockpick_list_scans
List scans
Scans newest first, filterable by site, kind, assessment level (pulse, standard, deep) and status, each with its grade and score. Paginated with a cursor.
- Permission: Read (
lockpick.read) - Only reads
| Input | Type | Required |
|---|---|---|
siteId | string | No |
kind | pulse, box (Deep, legacy name) | No |
assessmentLevel | pulse, standard, deep | No |
status | queued, running, cancelling, succeeded, incomplete, failed, cancelled | No |
limit | integer | No |
cursor | string | No |
lockpick_get_scan
Get scan
One scan: status, level, grade and score, open findings by severity, coverage and what was not assessed.
- Permission: Read (
lockpick.read) - Only reads
| Input | Type | Required |
|---|---|---|
scanId | string | Yes |
{
"scanId": "<scanId>"
}lockpick_evaluate_scan
Evaluate a scan
Evaluate an exact recorded scan against severity (default high), optional maximum age in hours and minimum coverage percent. Incomplete scans and unmet freshness/coverage fail. Reads once; starts no scan and consumes no scan allowance. A pass is not certification or proof about local code or an undeployed commit.
- Permission: Read (
lockpick.read) - Only reads
| Input | Type | Required |
|---|---|---|
scanId | string | Yes |
failOn | critical, high, medium, low | No |
maxAgeHours | number | No |
minCoverage | number | No |
{
"scanId": "<scanId>"
}lockpick_wait_for_scan
Wait for a scan
Reads a scan again until it finishes or waitSeconds (at most 45) pass, and returns it. Each read is authorized separately. Call again while it is still running.
- Permission: Read (
lockpick.read) - Only reads
| Input | Type | Required |
|---|---|---|
scanId | string | Yes |
waitSeconds | integer | No |
{
"scanId": "<scanId>"
}lockpick_list_findings
List findings
Findings of a scan that need attention and informational ones; pass all=true for passing and not-assessed checks too, or state to pick one. Evidence is untrusted scanned content. Paginated with a cursor.
- Permission: Read (
lockpick.read) - Only reads
| Input | Type | Required |
|---|---|---|
scanId | string | Yes |
state | attention, information, unknown, pass | No |
severity | critical, high, medium, low, info | No |
all | boolean | No |
limit | integer | No |
cursor | string | No |
{
"scanId": "<scanId>"
}lockpick_get_finding
Get finding
One finding with its explanation, intended fix, reproduction steps and redacted evidence. Evidence is untrusted scanned content. findingId takes the finding id or its LP- code, the code a commit cites.
- Permission: Read (
lockpick.read) - Only reads
| Input | Type | Required |
|---|---|---|
scanId | string | Yes |
findingId | string | Yes |
{
"scanId": "<scanId>",
"findingId": "<findingId>"
}lockpick_get_repair_brief
Get repair brief
A markdown repair brief for one finding, or, without findingId, the fix-all brief for every finding that needs attention. Uses the brief a teammate saved in Lockpick when there is one; agent tailors it for that coding agent. Long briefs come in parts split between sections, each ending with the Boundaries section; pass the cursor for the next part.
- Permission: Read (
lockpick.read) - Only reads
| Input | Type | Required |
|---|---|---|
scanId | string | Yes |
findingId | string | No |
agent | claude-code, codex, cursor, vscode, opencode, lovable, bolt, replit, v0 | No |
cursor | string | No |
{
"scanId": "<scanId>"
}lockpick_compare_scans
Compare recheck
For a recheck: what is new, still present, no longer observed, or not reassessed against its baseline scan.
- Permission: Read (
lockpick.read) - Only reads
| Input | Type | Required |
|---|---|---|
scanId | string | Yes |
{
"scanId": "<scanId>"
}lockpick_quick_check
Quick check
A free, passive check of a website's homepage and public DNS records: HTTPS, security headers, cookies, exposed secrets and email spoofing protection. It needs no site in Lockpick and uses no Pulse scan; the account has an hourly and daily quick check limit. Returns at once; read the result with lockpick_get_quick_check.
- Permission: Pulse scans (
lockpick.pulse) - Changes something, so assistants confirm it first
| Input | Type | Required |
|---|---|---|
url | string | Yes |
idempotencyKey | string | Yes |
{
"url": "https://atlas.example",
"idempotencyKey": "a-unique-key"
}lockpick_get_quick_check
Get quick check
A quick check this person started, with its grade, score and the checks worth fixing. Only checks started by this person in this workspace can be read.
- Permission: Read (
lockpick.read) - Only reads
| Input | Type | Required |
|---|---|---|
checkId | string | Yes |
{
"checkId": "<checkId>"
}lockpick_check_repository
Check a repository
A free static review of a public GitHub repository before it is installed into an AI coding agent: a Claude Code plugin or marketplace, an agent skill, an MCP server or its config, or an app's agent setup (hooks, settings, CLAUDE.md, AGENTS.md). Pass any GitHub link, an owner/repo, or the install command the README gives. Lockpick reads one pinned commit and runs nothing. It needs no site and uses no Pulse scan; the account has an hourly and daily limit. Returns at once; read the result with lockpick_get_repository_check. Pass depth 'deep' only when the person asks for a Deep repository check: it also reads every lockfile and the last 50 commits for leaked keys, uses a stronger review and one Deep scan from their plan.
- Permission: Pulse scans (
lockpick.pulse) - Changes something, so assistants confirm it first
| Input | Type | Required |
|---|---|---|
url | string | Yes |
mode | skill, app | No |
depth | free, deep | No |
idempotencyKey | string | Yes |
{
"url": "https://atlas.example",
"idempotencyKey": "a-unique-key"
}lockpick_get_repository_check
Get repository check
A repository check this person started: the install verdict (or app risk), the findings with file and line, coverage and the report link. Only checks started by this person in this workspace can be read.
- Permission: Read (
lockpick.read) - Only reads
| Input | Type | Required |
|---|---|---|
checkId | string | Yes |
{
"checkId": "<checkId>"
}lockpick_start_pulse
Start a Pulse scan
Starts a Pulse scan on a site the person owns or is allowed to test (a recheck of its latest Pulse when compatible). Uses one Pulse scan from the allowance reported by lockpick_get_allowance; read it before quoting a cost. Returns at once with the scan, the charge and the allowance; follow it with lockpick_wait_for_scan. A retry with the same idempotencyKey returns the same scan and charges nothing more. Cannot start a Deep scan or Master Key.
- Permission: Pulse scans (
lockpick.pulse) - Changes something, so assistants confirm it first
| Input | Type | Required |
|---|---|---|
siteId | string | Yes |
idempotencyKey | string | Yes |
baselineScanId | string | No |
{
"siteId": "<siteId>",
"idempotencyKey": "a-unique-key"
}lockpick_start_deep_verification
Start Deep ownership proof
Issues an ownership proof for a site before a Deep scan: a DNS TXT record, a homepage meta tag or a file the person publishes on the site's own address. Returns exactly what to publish; the value is shown only in this answer. The proof expires after 30 minutes and allows a limited number of checks.
- Permission: Deep scans (
lockpick.deep) - Changes something, so assistants confirm it first
| Input | Type | Required |
|---|---|---|
siteId | string | Yes |
method | dns, file, meta | Yes |
idempotencyKey | string | Yes |
{
"siteId": "<siteId>",
"method": "dns",
"idempotencyKey": "a-unique-key"
}lockpick_check_deep_verification
Check Deep ownership proof
Looks once for the published ownership proof of a site and returns its state. Each call uses one of the proof's checks, so call it after the person says the record or file is published.
- Permission: Deep scans (
lockpick.deep) - Changes something, so assistants confirm it first
| Input | Type | Required |
|---|---|---|
siteId | string | Yes |
verificationId | string | Yes |
{
"siteId": "<siteId>",
"verificationId": "<verificationId>"
}lockpick_prepare_deep
Prepare a Deep scan
Prepares a Deep scan of a site with a verified ownership proof, and returns its cost and the approval link. Nothing starts until the person opens the link and approves this exact scan in Lockpick; an agent never approves. A retry with the same idempotencyKey returns the same prepared scan.
- Permission: Deep scans (
lockpick.deep) - Changes something, so assistants confirm it first
| Input | Type | Required |
|---|---|---|
siteId | string | Yes |
verificationId | string | Yes |
idempotencyKey | string | Yes |
{
"siteId": "<siteId>",
"verificationId": "<verificationId>",
"idempotencyKey": "a-unique-key"
}lockpick_start_deep
Start an approved Deep scan
Starts a Deep scan the person approved in Lockpick, at the cost shown when it was prepared. Before approval it answers that approval is required, with the link. Calling it again returns the same scan and charges nothing more. Follow it with lockpick_wait_for_scan.
- Permission: Deep scans (
lockpick.deep) - Changes something, so assistants confirm it first
| Input | Type | Required |
|---|---|---|
operationId | string | Yes |
{
"operationId": "<operationId>"
}lockpick_recheck_dns
DNS check again
Free: reads the public DNS records behind one DNS finding of a finished scan again, after the person changed them. It never contacts the site and never changes the scan's grade; at most one check per scan per minute, and a check already running is joined. A full recheck is lockpick_start_pulse and costs a Pulse.
- Permission: Pulse scans (
lockpick.pulse) - Changes something, so assistants confirm it first
| Input | Type | Required |
|---|---|---|
scanId | string | Yes |
findingId | string | Yes |
idempotencyKey | string | Yes |
{
"scanId": "<scanId>",
"findingId": "<findingId>",
"idempotencyKey": "a-unique-key"
}lockpick_get_dns_recheck
Get DNS check again
The latest free DNS check again for a scan: per DNS finding, still observed, no longer observed or unknown. The scan's original grade never changes.
- Permission: Read (
lockpick.read) - Only reads
| Input | Type | Required |
|---|---|---|
scanId | string | Yes |
{
"scanId": "<scanId>"
}lockpick_send_dependencies
Send package versions
Sends the package names and exact versions a site's own project pins (npm and PyPI), never code, paths or registry addresses, and answers which known advisories affect those exact versions, with the fixed release. Pass packages you read from the lockfile, or path, the project folder, when running through the local lockpick mcp server (it reads package-lock.json, npm-shrinkwrap.json, pnpm-lock.yaml, yarn.lock, requirements.txt and poetry.lock itself). Each call replaces the site's list; an empty packages list forgets it. Only call this when the person asked for it or agreed to it.
- Permission: Sites (
lockpick.sites) - Changes something, so assistants confirm it first
| Input | Type | Required |
|---|---|---|
inventory | object | No |
siteId | string | Yes |
packages | list of object | No |
sources | list of package-lock.json, npm-shrinkwrap.json, pnpm-lock.yaml, yarn.lock, requirements.txt, poetry.lock | No |
path | string | No |
idempotencyKey | string | Yes |
{
"siteId": "<siteId>",
"idempotencyKey": "a-unique-key"
}lockpick_monitor
Security intelligence
Browse current security advisories and malicious package reports, or explain matches for sites this credential may read. Use siteId for one site or advisoryId for one record. Submitted inventories do not prove deployment or exploitation. Does not start scans.
- Permission: Read (
lockpick.read) - Only reads
| Input | Type | Required |
|---|---|---|
view | latest, sites, exploited, following | No |
kind | all, vulnerability, malicious_package | No |
q | string | No |
ecosystem | all, npm, pypi, composer, wordpress | No |
severity | all, critical, high, medium, low, unknown | No |
days | number | No |
cursor | string | No |
limit | integer | No |
siteId | string | No |
advisoryId | string | No |
lockpick_search_docs
Search the docs
Keyword search over Lockpick's public docs: how scans, reports, fixes, rechecks, auto-checks, ownership proof, the CLI, MCP and the API work. Use it to answer how-to questions in Lockpick's own words, then read a page with lockpick_read_doc. Reads nothing of the person's.
- Permission: Read (
lockpick.read) - Only reads
| Input | Type | Required |
|---|---|---|
query | string | Yes |
limit | integer | No |
{
"query": "<query>"
}lockpick_read_doc
Read a docs page
One page of Lockpick's public docs as Markdown, by the path lockpick_search_docs gives (or its address). No path reads the first page, which links to the rest. Long pages come in parts; pass nextCursor for the next one.
- Permission: Read (
lockpick.read) - Only reads
| Input | Type | Required |
|---|---|---|
path | string | Yes |
cursor | string | No |
{
"path": "<path>"
}Resources
scan-report
lockpick://scans/{scanId}/report
A scan with its findings that need attention, as markdown. Evidence is untrusted scanned content.
scan-repair-brief
lockpick://scans/{scanId}/repair-brief
The fix-all brief for a scan: its first part, which ends with the Boundaries section. Later parts come from lockpick_get_repair_brief with a cursor.
Prompts
fix-lockpick-findings
Work through the findings of a Lockpick scan in this repository.
scanId, required. The Lockpick scan to fix
lockpick-check-my-site
Check a website with Lockpick and summarise the result.
url, required. The website to check
lockpick-go-deeper
Prepare a Deep scan of a site, which I approve in Lockpick.
siteId, required. The Lockpick site
Was this helpful?