Skip to content

MCP Tool Reference

probe-mcp exposes 84 tools, all prefixed probe_…. They’re grouped here by feature. For each tool: a one-line description, the input schema, and what comes back. Every result is wrapped in MCP’s content: [{type: "text", text: "..."}] envelope; for tools that return structured data, the text is pretty-printed JSON from the underlying REST API.

Need wiring? See MCP Setup.

  • Required parameters are marked. Everything else is optional.
  • Type is the JSON Schema type accepted by the MCP inputSchema.
  • Returns describes what the AI sees in content[0].text after the call resolves.
  • IDs returned by probe_list_traffic are integers; collection / session / script-rule / flow / remote-fs connection IDs are strings.

List recent HTTP/HTTPS traffic. Use filters to narrow the result.

ParameterTypeDescription
limitintegerMax entries (default 20, capped at 500).
offsetintegerPagination offset.
hoststringSubstring match against host.
methodstringHTTP method filter (e.g. GET).
status_minintegerMinimum status code.
status_maxintegerMaximum status code.
has_errorbooleanOnly entries with status ≥ 400.
since_idintegerOnly entries with id > since_id (poll for new traffic).
sinceintegerOnly entries with timestamp >= since (ms since epoch).

Returns: {items, total, offset, limit} where items[] are summaries — id, method, url, host, status_code, content_type, duration_ms, timestamp, client_addr, has_response.

Full detail of a single entry, including headers and bodies.

ParameterTypeRequiredDescription
idintegeryesTraffic entry id from probe_list_traffic.

Returns: the full entry — request and response headers as [[key, value], …], request and response bodies as strings (or null), timing, content type, client address.

Search by URL path or body content.

ParameterTypeRequiredDescription
querystringyesSubstring matched against URL and body.
limitintegerDefault 20.

Returns: the same shape as probe_list_traffic.

Quick health snapshot — uptime, entry count, capture status, API port, version. No parameters.

Returns: {status, version, capturing, entry_count, uptime_secs, api_port}.

Drop every captured entry from memory. No parameters. Returns: "All traffic cleared.".

Delete one entry by id.

ParameterTypeRequired
idintegeryes

Returns: "Traffic entry <id> deleted.".

Whether traffic is being recorded right now and the current entry count. No parameters.

Returns: {capturing, entry_count}.

Start or stop recording. Traffic still flows through the proxy when capture is off — it just isn’t logged.

ParameterTypeRequired
enabledbooleanyes

Returns: "Traffic capture enabled." or "Traffic capture disabled.".

Re-send a captured request and return the new response.

ParameterTypeRequired
idintegeryes

Returns: a JSON object containing the new response (status, headers, body, timing). The replay also lands as a fresh entry in the traffic list.

Compare two captured entries — method, URL, status, headers, body. Useful for “did the replay match the original?” or “what changed between two similar calls?”.

ParameterTypeRequiredDescription
left_idintegeryesThe “before” entry id.
right_idintegeryesThe “after” entry id.

Returns: a JSON diff — added/removed/changed fields per section.

Export an entry as a runnable cURL command.

ParameterTypeRequired
idintegeryes

Returns: the cURL string.

Export an entry as raw HTTP text — request line + headers + body, then the response if there is one.

ParameterTypeRequired
idintegeryes

Returns: the raw HTTP text.

Breakpoint rules pause matching traffic so the AI (or you) can edit it before it continues. Use probe_list_intercepts to see what’s currently paused, then probe_resume_intercept to release it.

ParameterTypeRequiredDefaultDescription
patternstringyesHost or URL pattern to match.
intercept_requestbooleantruePause matching requests.
intercept_responsebooleantruePause matching responses.

Returns: "Breakpoint created for '<pattern>'.".

Remove a breakpoint by its pattern.

ParameterTypeRequired
patternstringyes

List every active breakpoint. No parameters. Returns: array of breakpoint definitions.

Remove all breakpoints in one call. No parameters.

List requests currently paused, waiting for a decision. No parameters. Returns: array of {id} for each paused request.

Release a paused request, optionally rewriting it.

ParameterTypeRequiredDescription
idintegeryesIntercepted request id.
abortbooleanIf true, abort with 502.
status_codeintegerOverride response status.
headersarray of [key, value]Override response headers.
bodystringOverride response body.
urlstringOverride request URL (request-phase intercepts only).

Returns: "Intercept <id> resumed." (or aborted).

A request to an intercept host is paused for inspection. Different from a breakpoint pattern: this matches strict hostnames.

ParameterTypeRequired
hoststringyes
ParameterTypeRequired
hoststringyes

List every intercepted host. No parameters.

Traffic to a blocked host is forwarded silently — no log entry, no breakpoint, no rule application. Use this to silence noise from analytics or telemetry hosts.

ParameterTypeRequired
hoststringyes
ParameterTypeRequired
hoststringyes

No parameters. Returns: array of host strings.

Block by client label — a process name (loopback) or IP address (remote phone). Same silent-forward behaviour as blocked hosts.

ParameterTypeRequiredDescription
labelstringyesProcess name or IP.
ParameterTypeRequired
labelstringyes

No parameters. Returns: array of label strings.

Probe has two throttle layers. The global throttle applies to every request; the scoped throttle rules apply per host/url-glob/app and run on top of it. The MCP can read both, and write the global one. Scoped rules are read-only here — Probe’s UI owns persistence and pushes the list on every mutation.

Set the global bandwidth cap.

ParameterTypeRequiredDescription
bytes_per_secondintegeryesBandwidth in bytes/sec.

Turn off the global throttle. No parameters.

Current global throttle status and limit. No parameters.

List the scoped throttle rules. Each rule has its own profile (down/up bps, DNS delay, loss percentage) and matches by host, url glob, or app. No parameters.

Run JS through Probe’s embedded QuickJS engine — either ad-hoc against a request you describe, or as a registered rule that auto-applies to matching traffic.

Run a script once in test mode and return its result. Doesn’t touch live traffic.

ParameterTypeRequiredDescription
scriptstringyesJS source.
variablesobjectVariables exposed via pro.variables.
requestobjectOptional request context (method, url, headers, body).
responseobjectOptional response context (status, headers, body).

Returns: the engine’s full output — console messages, assertion pass/fail, mutated request/response, and any thrown error.

List every script rule and the global scripting on/off flag. No parameters.

Add a rule that auto-applies JS to matching traffic.

ParameterTypeRequiredDefaultDescription
namestringyesHuman-readable name.
url_patternstringyesURL glob (supports *).
methodstring*HTTP method, or * for all.
request_scriptstring""Runs on requests.
response_scriptstring""Runs on responses.
apply_to_requestbooleantrue
apply_to_responsebooleantrue

The new rule’s id is generated server-side as mcp_<ms>.

Patch an existing rule — only fields you pass are changed.

ParameterTypeRequiredDescription
idstringyesRule id.
namestring
methodstring
url_patternstring
request_scriptstring
response_scriptstring
apply_to_requestboolean
apply_to_responseboolean
enabledboolean
ParameterTypeRequired
idstringyes

Master switch. When off, no script rules fire.

ParameterTypeRequired
enabledbooleanyes

Probe organises captured traffic into session tabs in the UI. The active recording tab fills with new traffic; other tabs are read-only snapshots. Saved sessions live on disk under ~/.probe/sessions/.

List every active tab — name, entry count, which one is the recording tab. No parameters.

Fetch the entries inside a specific tab.

ParameterTypeRequired
idstringyes

List sessions persisted to disk. No parameters.

Fetch the entries inside a saved session.

ParameterTypeRequired
idstringyes

The Composer is Probe’s request builder — Postman-like collections, environments, and inline auth. The compose tools are how the AI builds and fires off requests against your saved targets.

List every collection — name, request/folder/environment counts. No parameters.

Full collection content.

ParameterTypeRequired
idstringyes

Create a collection. Saves to disk and shows up immediately in Probe.

ParameterTypeRequiredDescription
namestringyesCollection name.
requestsarrayInline requests (each {name, method, url, headers, queryParams, body, contentType}).
foldersarrayFolders with nested requests ({name, requests, folders}).
environmentsarrayEnvironments with {name, variables: [{key, defaultValue}]}.
default_headersarrayHeaders applied to every request.
default_authobjectDefault auth (e.g. {type: 'bearer', token: '...'}).

Returns: the new collection’s id.

Add a single request to an existing collection.

ParameterTypeRequiredDefaultDescription
collection_idstringyes
namestringyes
methodstringGET
urlstringSupports {{variable}} syntax.
headersarray[{key, value, enabled}].
query_paramsarray[{key, value, enabled}].
bodystring
content_typestring
folder_idstringSubfolder placement.
authobjectPer-request auth override.

Add an environment with variables.

ParameterTypeRequiredDescription
collection_idstringyes
namestringyese.g. Development.
variablesarrayyes[{key, defaultValue, currentValue?, enabled?, isSecret?}].

Resolve variables and send the request. The resulting traffic also lands in the log.

ParameterTypeRequiredDescription
collection_idstringyes
request_idstringyes
environmentstringEnv name or id.
variablesobjectPer-call overrides (highest precedence).

Returns: {status, headers, body, duration_ms, …}.

Map Local rules serve a canned response from disk or an inline string instead of contacting the origin. See Map Local for the full feature doc.

List every rule and the master enable flag. No parameters.

Preview which rule (if any) would intercept a given request — no side effects.

ParameterTypeRequired
methodstringyes
urlstringyes

Returns: {matched: true, rule: {…}} or {matched: false}.

Create a new rule. id is optional — generated as mcp_<ms> if you don’t supply one.

ParameterTypeRequiredDescription
url_patternstringyesWildcard *, e.g. api.example.com/users/*.
sourcestringyeslocal_file or inline_body.
idstring
methodstringDefault GET.
match_all_methodsboolean
enabledboolean
file_pathstringAbsolute path. Required when source is local_file.
inline_bodystringRequired when source is inline_body.
inline_formatstringjson, xml, html, or text.
status_codeintegerDefault 200.
response_headersobjectString → string map.
delay_msintegerArtificial latency.

Full replace by id (not patch). Required fields match create, plus id.

ParameterTypeRequired
idstringyes

404 if id doesn’t exist.

Flip a single rule’s enabled flag.

ParameterTypeRequired
idstringyes

Master switch. When off, no rule matches.

ParameterTypeRequired
enabledbooleanyes

Map Remote rules redirect matching requests to a different upstream — same shape as Map Local rules but the destination is another origin instead of a canned body. See Map Remote.

The MCP-vs-UI persistence caveat above applies here too.

List every rule and the master enable flag. No parameters.

Preview which rule would redirect a given request, plus the rewritten URL.

ParameterTypeRequired
methodstringyes
urlstringyes

Returns: the matching rule and the resolved destination URL, or {matched: false}.

ParameterTypeRequiredDescription
source_schemestringyeshttp or https.
source_hoststringyes
source_pathstringyesWildcards * are captured in order.
dest_schemestringyeshttp or https.
dest_hoststringyes
dest_pathstringyesEach * is filled with captures from source_path.
idstringGenerated as mcp_mr_<ms> if omitted.
source_portintegerDefaults to 443/80 by scheme.
dest_portinteger
methodstringDefault GET.
match_all_methodsboolean
enabledboolean
preserve_original_host_headerbooleanWhen true, forward client’s Host header instead of rewriting to dest_host.

Full replace by id. Required: id plus the same set as create.

ParameterTypeRequired
idstringyes
ParameterTypeRequired
idstringyes
ParameterTypeRequired
enabledbooleanyes

The Mock server is a standalone HTTP listener (default port 9100) that serves canned responses to clients that hit it directly — unlike Map Local, there’s no proxying involved. See Mock Server for the full feature doc.

List every Mock rule and the master enable flag. No parameters.

Get the Mock server listener status: whether it is running and on which port. No parameters.

Check whether a given method+path would be served by any active Mock rule — no side effects.

ParameterTypeRequired
methodstringyes
pathstringyes

Returns: {matched: true, rule: {…}} or {matched: false}.

Create a new rule. id is optional — generated as mcp_<ms> if you don’t supply one.

ParameterTypeRequiredDescription
url_patternstringyesPath with * wildcards, e.g. /api/users/*.
idstring
namestring
methodstringEmpty matches any method.
enabledboolean
status_codeintegerDefault 200.
status_textstringOptional custom reason phrase.
headersarray of [name, value]
bodystring
body_is_base64booleanDecode body from base64 for binary responses.
latency_msintegerArtificial delay before responding.

Full replace by id (not patch). Required: id plus url_pattern.

ParameterTypeRequired
idstringyes

404 if id doesn’t exist.

Flip a single rule’s enabled flag.

ParameterTypeRequired
idstringyes

Master switch. When off, no rule matches and the server answers 404 for everything.

ParameterTypeRequired
enabledbooleanyes

Start the standalone listener.

ParameterTypeRequiredDefaultDescription
portinteger9100Port to listen on.

Errors if the port is already in use or the server is already running.

Stop the standalone listener. No parameters.

API Flows are Probe’s node-based request chains — build once in the app (like Postman Flows), then drive them from the AI. Flows are Dart-owned: the two list/get tools read what the app has persisted, probe_run_flow asks the running app to actually execute the chain. See Flows in CI for the headless-automation angle these tools plug into.

List every saved flow — id, name, node count, edge count, created/updated timestamps. No parameters.

Returns: each flow’s id, name, nodeCount, edgeCount, createdAt, updatedAt. Use the id with probe_get_flow / probe_run_flow.

Full flow definition: nodes (request/condition/start/subflow, with extractions and assertions), edges, and canvas viewport.

ParameterTypeRequiredDescription
flow_idstringyesId from probe_list_flows.

Returns: the stored flow JSON, plus a derived subflowIds array — the deduped target ids of every subflow node, so a client can discover a flow’s sub-flow dependencies without walking node payloads itself.

Execute a flow end-to-end and return its run report.

ParameterTypeRequiredDescription
flow_idstringyesId from probe_list_flows.
environmentobjectVariable overrides for this run (name → value), forwarded to the executor.

Returns: per-node results (status, extracted values, assertion outcomes, resolved URL), overall passed/failed/skipped counts, and total duration.

The Probe app must be running — this bridges to the UI to fire the flow’s real HTTP requests. Fails with 503 if the app isn’t running, 504 if it doesn’t answer in time (runs can take up to two minutes).

Thin wrappers over the Files feature’s remote-fs REST routes — the same SFTP/FTP/FTPS/S3/WebDAV engine backing the app’s Files browser. There is no connect tool: credentials stay entirely in the Probe UI path. Open a connection in the app first, then drive it from here by connection_id (see probe_list_remote_fs_connections).

List every open Files connection. No parameters.

Returns: each connection’s id, protocol, host, server label, home path, and whether the transport is encrypted.

List a directory’s entries on an open connection.

ParameterTypeRequiredDescription
connection_idstringyesId from probe_list_remote_fs_connections.
pathstringyesAbsolute remote directory path, e.g. /var/www.

Returns: each entry’s name, path, isDir, size, and (when the backend reports them) modifiedMs, permissions, owner, symlinkTarget.

Create a directory.

ParameterTypeRequiredDescription
connection_idstringyes
pathstringyesAbsolute path of the directory to create.

Rename or move an entry.

ParameterTypeRequiredDescription
connection_idstringyes
fromstringyesCurrent absolute path.
tostringyesNew absolute path.

Delete one or more entries in a single call.

ParameterTypeRequiredDescription
connection_idstringyes
pathsarray of {path, is_dir}yesEntries to delete. is_dir defaults to false — needed by backends like S3 that distinguish an object from a prefix.

Enqueue a download from the connection to a local file.

ParameterTypeRequiredDescription
connection_idstringyes
remote_pathstringyesAbsolute remote source path.
local_pathstringyesAbsolute local destination path.

Returns: {transferId} immediately — poll probe_remote_fs_transfers to watch progress and completion.

Enqueue an upload of a local file to the connection.

ParameterTypeRequiredDescription
connection_idstringyes
local_pathstringyesAbsolute local source path.
remote_pathstringyesAbsolute remote destination path.

Returns: {transferId}, same as probe_remote_fs_download.

List the Files transfer queue. No parameters.

Returns: every download/upload the engine is tracking — transferId, connectionId, kind, state (queued/running/paused/done/cancelled/error), remote/local paths, and byte offset.

Inspect WebSocket frames Probe captured through the proxy. These are read-only snapshots of a bounded in-memory store — the proxy observes frames MITM’d through it; it does not open sockets. See WebSocket for the UI side.

List captured WebSocket connections. No parameters.

Returns: each connection’s connId, logId (the traffic entry of the upgrade handshake, or null if uncorrelated), url, openedTs, closedTs, closed, and frameCount. Use connId with probe_ws_get_frames.

Get the captured frames for one connection.

ParameterTypeRequiredDescription
conn_idintegeryesconnId from probe_ws_list_connections.

Returns: each frame’s dir (in = server → client, out = client → server), opcode (text/binary/ping/pong/close), text (text payload, or base64 for binary — capped at 64 KB), sizeBytes (true payload size), and truncated.

Every tool returns the same MCP envelope on failure:

{
"content": [{"type": "text", "text": "Error: <reason>"}],
"isError": true
}

Common reasons:

  • Missing required parameter: <name> — schema violation.
  • Probe app (PID <n>) is no longer running. — Probe was quit since probe-mcp started.
  • Cannot reach Probe API: … — port in handshake is unreachable.
  • HTTP-status messages from the underlying REST API (404, 401, 500, 503, 504, …). probe_run_flow is the one tool that can 503/504 under normal use — see its entry above.
  • MCP Setup — wire probe-mcp into your client.
  • Internal REST API — what each tool calls under the hood.
  • Scripting — what pro.* exposes inside probe_execute_script.
  • Flows in CI — running probe_run_flow unattended, outside an interactive AI session.