Skip to content

#190 · MCP, API, and CLI: Run the Whole Platform From Your Agent

Availability: General Availability Operations tagged Beta in the API reference, and the CLI commands and MCP tools built on them, may still change.

Your agent now runs the full fix loop in Escape. It pulls an issue with its reproduction and exploit, generates a fix, retests it, exports the results as SARIF, and fails the build on any open issue at or above the severity you set. The public API covers 326 operations, up from 186. Every MCP tool is backed by an escape-cli command, so what your agent does in a conversation, your pipeline does in a script. Tools that delete or change resources in bulk require confirm: true, and bulk issue updates support a dry run.

What's New

Findings and Remediation

  • Evidence on every issue: GET /issues/{issueId} and escape-cli issues get return the reproduction, the exploit, the attack chain, and a fix prompt.
  • Severity changes with a reason: Issue updates accept a severity object with value and reason, so you record why you changed it.
  • Bulk issue updates: POST /issues/bulk-update returns ids, count, and dryRun. Send "dryRun": true to preview the matching IDs without changing them. A partial failure reports how many issues were already updated. Preview from the CLI with escape-cli issues bulk-update --severity LOW --status IGNORED --dry-run, then drop --dry-run to apply.
  • AI remediation: POST /issues/{issueId}/ai-remediation starts a fix, and POST /issues/{issueId}/ai-remediation/feedback rates it. In the CLI: issues remediation generate, get, and feedback.
  • Retests: retests start, retests list, and retests get prove a fix without a full scan.
  • Sharper filters: GET /issues accepts projectIds, categories, assetTypes, assetStatuses, aiFalsePositive, agentic, targetIds, securityTestUids, blacklistedIds, blacklistedNames, noTags, and dnf.
  • Workflows on issues: issues trigger-workflow runs a manual workflow on one issue. POST /issues/bulk-workflow and issues bulk-workflow run it on every issue a filter matches.
  • Saved views: /views lists, creates, updates, reorders, and deletes the views you share with the UI. GET /views/{viewId}/issues lists the issues of a view.

Scans and AI Pentesting

  • What a scan did: GET /scans/{scanId}/configuration, /statistics, and /compliance, with scans configuration, scans statistics, and scans compliance.
  • Attack scenarios (Beta): GET /scans/{scanId}/scenarios and scans scenarios list the scenarios an AI pentest explored, filtered by vector and search.
  • Target filters: GET /scans/{scanId}/targets filters on coverage, issues, severities, methods, and search.
  • Scan filters: GET /scans accepts commitBranch, latestBranchScans, assetTypes, tagIds, noTags, problemCodes, problemSeverities, search, and dnf.
  • CI severity gates: scans watch --fail-on-severity HIGH and scans start --watch --fail-on-severity HIGH fail the build when a finished scan has an open issue at or above HIGH. The GitHub Action enforces fail_on_severities (default HIGH).
  • Stop and diagnose: scans cancel, scans ignore, scans problems, and profiles problems.
  • Target validation (Beta): POST /validations checks that a target is reachable and in scope before you create a profile. validations start and validations get do the same from the CLI.
  • AI pentest profiles: profiles update edits an AI pentest profile after creation and reads its settings back. POST /profiles/bulk-update and profiles bulk-update change several profiles in one call.
  • Continuous pentest (Beta): create, update, enable, and disable under /profiles/{profileId}/continuous-pentest, and with profiles continuous-pentest.
  • Regression tests (Beta): nine operations under /regression-tests cover create, update, delete, run, stop, history, and clarifications. The CLI group is regression-tests.
  • Knowledge files (Beta): /knowledge-files lists, uploads, and deletes the documents that give an AI pentest its context. Over MCP, knowledge-files upload takes text content inline with --content.

Assets and Schemas

  • Asset filters: GET /assets accepts classes, domains, environments, frameworks, integrationIds, ownerEmails, ports, risks, severities, tagIds, technologyKeys, and dnf.
  • Bulk import: POST /assets/bulk-import and assets bulk-import.
  • Asset deletion: DELETE /assets/{assetId} returns 200 with {"message": "Asset deleted successfully"}, matching the documented schema. escape-cli assets delete and the MCP server accept both the previous and current response shapes.
  • Schema download: GET /assets/{assetId}/content returns a signed URL for an uploaded schema. assets download fetches it.
  • Clear a field: assets update --description '' and empty tag, owner, project, or schema lists now clear the value. profiles update keeps an explicit null, so you clear proxyId, context.additional, and offLimitsAreas.

Reporting and Analytics

  • SARIF and CSV (Beta): GET /exports/issues/sarif, /exports/issues/csv, and /exports/assets/csv. In the CLI: issues export --format sarif|csv and assets export --format csv.
  • Security KPIs: GET /statistics/issues, /statistics/endpoints, and /statistics/trends. statistics trends --project-id scopes the trend to projects.
  • Compliance: GET /compliance, /compliance/per-application, and /compliance/enabled. compliance enable sets the frameworks you track (Beta).
  • Reports (Beta): GET /jobs lists export jobs. jobs rename and jobs send-artefacts name a report and email it.
  • Security-test catalog: GET /security-tests lists every test with its scanner, asset type, and severity. security-tests update and bulk-update tune them for the organization (Beta).

Integrations and Workflows

  • Run and inspect: POST /integrations/{kind}/{id}/test and /sync, GET /integrations/{kind}/{id}/runs, with integrations test, sync, and runs.
  • Ticket lookups: GET /integrations/jira/{id}/projects, /integrations/jira/{id}/issue-types, and /integrations/azure-boards/{id}/areas return what you need to configure a ticket workflow. In the CLI: integrations jira-projects, jira-issue-types, and azure-areas.
  • Repositories and vaults: integrations repositories lists the repositories granted to the GitHub App. integrations vaults lists the vaults a provider exposes.
  • Vault variables (Beta): /vault-variables and /vaults manage the secret references your authentication uses. Values are write-only: the API never returns them.
  • Workflows: workflows pause, workflows executions, and GET /workflows/{id}/executions.

Organization Administration

  • Settings: GET /organization-settings reads the SLA policy and AI system prompt. org-settings update and org-settings scanner-configuration create change them (Beta).
  • People and access: PUT /users/{userId} and users deactivate deactivate a user. GET /permissions lists the permission catalog. DELETE /projects/{projectId} and DELETE /roles/{roleId} now respond.
  • Pagination and search: /roles, /custom-rules, /users, and /tags accept cursor and size. The array body stays, and the next cursor comes back in the X-Next-Cursor header.
  • Audit logs: GET /audit/logs filters by target, alongside action, actor, and search.
  • Private locations: GET /locations/{locationId}/logs and PUT /locations/{locationId}/tags, with locations logs and locations tags.
  • Account state: GET /me reports subscription and trial state.
  • Copilot chats (Beta): five operations under /ai-chats, and the ai-chats CLI group.

MCP Server

  • More administration tools: Stats, audit logs, tags, asset updates, and role bindings are available from your agent.
  • A confirmation gate: tools that delete or change resources in bulk require confirm: true.
  • Paged results: list tools return 50 results and a nextCursor. scans list, scans agents, and scans targets page with --cursor and --size.
  • Truthful schemas: tool inputs and outputs match what the tools accept and return, dry runs included. -o schema never calls the API.
  • Bounded waits: emails_wait returns a pending result when no email arrives before its deadline. Resume with the returned after and seenIds, or poll with emails_list.
  • Filters that filter: array filters such as --project-id, --target-id, and --name on issues list and scans list now reach the API as real values.
  • Room for slow work: assets create waits up to 15 minutes for a schema build instead of 30 seconds.

Requirements and Limits

  • PUT /organization-settings, PUT /compliance/enabled, and the security-test updates require an administrator.
  • An inline export larger than the MCP response limit fails with a message asking you to narrow where. Use jobs trigger-export for full reports.
  • GET /integrations/jira/{id}/projects returns up to 1,000 projects per call without parameters, then X-Next-Cursor.
  • Every CLI command listed here ships in escape-cli 1.12.0.

Compatibility

Hard-breaking

  • Tags (API): PUT /tags/{tagId}/{tagId} is gone. Use PUT /tags/{tagId}. Upgrade the CLI if escape-cli tags update returns 404.
  • Audit logs (API): action and actor on GET /audit/logs match exactly, and actor matches the ID, not the email. Filters combine, so calls return fewer rows. Move partial and email searches to search.
  • Projects (API): PUT /projects/{id} now validates slug: lowercase alphanumerics and hyphens, up to 256 characters. It used to ignore it.
  • Bulk issue update (API and CLI): POST /issues/bulk-update requires a non-empty where or "all": true, mutually exclusive. More than 10,000 matches return 400 instead of being silently truncated. escape-cli issues bulk-update requires at least one of --issue-id, --asset-id, --severity, --profile-id, --tag-id, --scanner-kind, or --all. --all is mutually exclusive with filter flags.
  • Integrations (API): GET, PUT, and DELETE /integrations/{kind}/{id} return 404 when the integration is of another kind than the URL.
  • AI pentest profiles (API): PUT /profiles/{id} and POST /profiles/bulk-update return 400 for a recurring schedule (cron or schedule.cron), useAllAvailableExtraAssets, or defaultProxyType: ESCAPE. Recurrence is continuous pentest.
  • Asset update (API): PUT /assets/{id} returns 400 when the body carries a field the asset class ignores, and 404 for an unknown asset.
  • Asset delete (API): DELETE /assets/{assetId} returns an object with a message string instead of a bare true. If your script parsed the body as a boolean, check the status code instead: 200 means the asset was deleted.
  • Profile list (API): the asset on each GET /profiles row no longer carries children, sources, statistics, or rawData. Read them from GET /assets/{assetId}.
  • Subdomain blocklist (API): the subdomain_enumeration configuration key is gone from profile configurations. If your scan configuration listed exclusion domains there, move them to scope.blocklist — subdomain enumeration applies the global scope domain rules, and rules left on the removed key are ignored.
  • Wiz workflow action (API): a Wiz export action requires integrationId.
  • Scan watching (CLI): scans watch and scans start --watch exit non-zero on failed, canceled, or unfinished scans, and errors print to stderr.
  • Job watching (CLI): jobs get --watch and jobs trigger-export --watch print one final state, fail on FAILED or CANCELLED, and stop after --timeout (default 15 minutes). --stream restores the per-poll output.
  • Tools (MCP): scans_watch is removed. Poll with scans_get.

Soft-breaking

  • AI pentest profiles: GET reports schedule and cron as null.
  • Profile schemas: isActive is true for every schema attached to a profile.
  • Beta tags: 74 operations carry the Beta tag, up from 5. Regenerated clients see the new tag.

Non-breaking

  • Every new operation, query parameter, response field, CLI command, and CLI flag listed above.

MCP Server Docs → Public API Docs → Scans CLI Docs →

Questions?

Have a question? Reach out on your dedicated support channel, or email us at support@escape.tech.