Pack local or remote codebases into AI-friendly files that LLMs and coding agents can read or search
Busymate DevTools is installed from its publisher's own source and answers where it runs, so this marketplace is not in the path of a single call. There is no address here to send one to, and a panel that pretended otherwise would be showing you an answer we made up. Install it and call it from your own client — the Installation tab has the entry for each one.
What it does
Capture, inspect & debug HTTPS traffic across iOS, Android, browsers & backends — 304 MCP tools.
Quickstart
# 1 — add it to Claude Code
claude mcp add --scope user --transport http busymate-devtools-mcp https://mcp.busymate.dev
# 2 — ask your agent for something these tools do
# get_product_pricing, list_breakpoint_events, get_device and 46 more
Busymate DevTools costs nothing on mcprush: there is no plan to choose here, no cap to set and nothing mcprush can bill you for.
Collected from a public index. Nobody has claimed this account, so nothing here was written by its author — claim it if it is yours.
Where are you running it?
Every route below installs the same thing and ends at the same approval screen. Nothing here runs on your machine and nothing runs on ours: this server answers at its publisher’s own address, and what you install is the connection straight to it.
This is a public server: it answers at its publisher’s own address and this marketplace is not in the path. Claude Code registers it in one command; --scope user makes it available in every project. The transport below is http, as the publisher's own manifest declares it.
claude mcp add --scope user --transport http busymate-devtools-mcp https://mcp.busymate.devReconnect, or start a new session, and the tools appear in the model’s tool list.
One config entry pointing straight at the publisher’s own address — this marketplace is not in the path, and nothing from this listing executes on your machine.
49 tools, with what each one reads, writes and reaches shown before you agree — the same list on every route above. Read the tool surface.
Tool surface
What the model actually sees. Descriptions are diffed on every release — see version history.
Return the canonical Busymate DevTools plan prices and cloud phone/browser rental rates, with numeric amounts, USD currency, billing periods and https://busymate.dev/pricing as the source. Check draft, publicationStatus and purchasable: draft figures are proposals awaiting approval, never live offers. Public read; no sign-in or account data.
No parameter schema on file.
List HELD (paused) breakpoint exchanges — the READ side of the breakpoint-continue flow (public.breakpoint_events; a row with resumed_at NULL is a request/response the proxy is holding RIGHT NOW, waiting for breakpoint_continue — feed it the returned request_id). YOUR OWN devices' events by default (owner-scoped to the calling account — the same reach the dashboard /breakpoints page gives you), or
| Parameter | Type | Required | Notes |
|---|---|---|---|
| all | boolean | no | devices:view operators only — held breakpoints for EVERY device instead of just YOUR OWN. |
| include_resumed | boolean | no | Include already-resumed rows (the recent history) — default false lists only currently-held pauses. |
| limit | number | no | Max rows (default 100, cap 500). |
Get one device row by uuid, name, OR its PAC PORT — the DIRECT resolver for a KNOWN device: when you already hold a device uuid/name (from traffic rows, audit events, another tool's result) or a per-device PAC/proxy endpoint, call this instead of browsing or paging list_devices. pac_port accepts EVERY spelling: a bare port (10807), the PAC hostname (10807.busymate.net), a full PAC URL (http://10
| Parameter | Type | Required | Notes |
|---|---|---|---|
| device_uuid | string | no | Device UUID (preferred) |
| deviceName | string | no | Device display name (fallback) |
| pac_port | string/number | no | The device's PAC/manual-proxy port, as a number (10807), a PAC hostname (10807.busymate.net), a PAC URL (http://10807.busymate.net/), or host:port. |
List devices, ONE PAGE at a time — YOUR OWN by default (owner-scoped to the calling account: the same reach the dashboard gives you), or the WHOLE fleet with all:true (devices:view operators only; re-verified server-side — for a non-operator all is rejected, never silently widened). PAGINATION (read this before concluding anything is absent): every response carries total (the EXACT count in
| Parameter | Type | Required | Notes |
|---|---|---|---|
| all | boolean | no | devices:view operators only — list EVERY device (the whole fleet) instead of just YOUR OWN. |
| owner_email | string | no | OPERATOR cross-user scope (devices:view required, re-verified in-handler fail-closed): list the devices owned by the account(s) whose email matches this substring (case-insensitive) — the dashboard /d |
| limit | number | no | Max devices per page (default 100, cap 500). The byte budget may return fewer — check has_more. |
| cursor | string | no | Resume token from the previous page's next_cursor. Must be used with the SAME order and scope it was issued for. |
| order | string | no | "last_seen" (default) = most-recently-seen first, best for browsing. "uuid" = the immutable key — the ONLY ordering that guarantees a complete, skip-free enumeration across pages. |
| fields | string | no | "slim" (default) = identity + status + PAC, null keys omitted. "full" adds model, os_version and the parent linkage (~2x bytes per row). |
| max_bytes | number | no | Page byte budget for the devices array (default 24000, min 2000, max 60000). Lower it for a small tool-result window. |
Get a device's live status: online is DERIVED truth (#776 — devices.last_seen_at within 90s, 150s for farm hosts; the same derivation as every other surface, so it can't latch stale), plus the device_status row (last_heartbeat_at, ip, vpn_state, source, reported_online = the raw stored flag, diagnostics only). Works even for a device that never wrote a status row (entries-only clients) — `online
| Parameter | Type | Required | Notes |
|---|---|---|---|
| device_uuid | string | no | — |
| deviceName | string | no | — |
THE ONE QUERY (#1157/#1160): the latest capture-health projection for ONE device — one device_health row, no scan, no on-device access needed. Answers "is the TLS-intercept engine armed, and if not, WHY": engine_state ('armed'|'inert') + engine_reason (e.g. no_ca_key) + state_established_at (when that state was first established, so a stale fact is visibly stale), the CA triple (ca_loaded / ca_k
| Parameter | Type | Required | Notes |
|---|---|---|---|
| device_uuid | string | no | — |
| deviceName | string | no | — |
The MULTI-PRODUCER device TELEMETRY event stream (#1160/#1208) — every DECISION and STATE TRANSITION reported about the capture pipeline by the iOS app OR by the PAC/proxy server (public.device_events, 14-day retention, weekly-partitioned). iOS kinds — this list is what the app ACTUALLY emits, corrected in #1232 after SEVEN of the fifteen declared categories turned out to have zero emit sites and
| Parameter | Type | Required | Notes |
|---|---|---|---|
| device_uuid | string | no | — |
| deviceName | string | no | — |
| category | string | no | Exact category, ACROSS ALL PRODUCERS. iOS emits: capture|cert|config|tunnel|app|auth|device|permission|control|applink|mitm|push. PAC/proxy emits: process|net|capture|config|tunnel|mitm|push. Server-a |
| action | string | no | Exact action verb (the dotted kind is category.action, e.g. capture + health). |
| outcome | string | no | Exact outcome (armed|inert|ok|fail|deny|start|stop|decrypted|…). |
| reason | string | no | Exact machine reason slug (e.g. no_ca_key). |
| host | string | no | Exact bare host. |
| boot_id | string | no | One process lifetime — pair with seq to walk a single boot's ordered stream. |
| level | string | no | Telemetry tier. |
| producer | string | no | Emitting PROCESS (detail.producer). 'ios' = the projection-eligible set (producer IS NULL or 'ios'), so legacy pre-#1208 rows are included; 'proxy-server' = the PAC/proxy publisher; any other lowercas |
| process_role | string | no | Emitting PROCESS ROLE (#1160, first-class column): app | tunnel | proxy-server. app-vs-tunnel is an INDEXED predicate, no jsonb scan. |
| user_id | string | no | auth.users.id (#1160) stamped AT EMIT — 'everything this user did on the device', across an account switch (never re-attributed to the current owner). |
| session_id | string | no | The GoTrue session id the event was emitted under (#1160). |
| install_id | string | no | Per-INSTALL uuid (#1160), destroyed on reinstall — 'every move since this install' (device.uuid is stable across reinstall, boot_id is per tunnel boot). |
| request_id | string | no | Correlation/trace id (#1390): JOINs public.audit_log.request_id — pull every device event for one traced operation (a pair attempt, sign-in) and its server-side audit consequence together. |
| failures | boolean | no | true → only outcome ∈ fail|deny|inert (the indexed failure path). |
| since | string | no | ISO — only events with at >= this. |
| until | string | no | ISO — only events with at <= this. |
| before_at | string | no | Keyset cursor (from next_cursor) — pass with before_id. |
| before_id | number | no | Keyset cursor (from next_cursor) — pass with before_at. |
Every device with AUDIT-mode telemetry currently armed — device_uuid + name, enabled, expires_at + expires_in, level, categories, who armed it (set_by_label) and when (set_at). The 'standing cost is never invisible' list (#1160 spec §5): audit mode is per-device + TTL-expiring, and this is where you see everything armed right now. YOUR OWN devices by default; devices:view operators see the whole f
No parameter schema on file.
PROVE whether PAC capture actually works for ONE device — the "is it really working?" answer, not "does it look configured". Runs 8 independent checks and returns a per-check verdict with a specific human fix: (1) connection mode — is the device even on pac (a vpn/off device is SAID SO plainly, never reported as broken PAC); (2) PAC port + URL — a pool port is allocated and http://<port>.bus
| Parameter | Type | Required | Notes |
|---|---|---|---|
| device_uuid | string | no | REQUIRED unless deviceName is given — the device to test. |
| deviceName | string | no | The device's name — an alternative to device_uuid; one of the two is REQUIRED. |
| window_minutes | number | no | Lookback for the traffic + decryption checks (default 60, min 5, max 1440). |
List saved screen-share RECORDINGS (#1916) — operator-captured mp4s of live share streams (the dashboard viewer's Record control), saved for later reference in public.screen_share_recordings. YOUR OWN recordings by default (owner-scoped to the calling account — the same reach the row RLS gives the dashboard), or every visible recording with all:true (devices:view operators only; re-verified by t
| Parameter | Type | Required | Notes |
|---|---|---|---|
| device_uuid | string | no | Only recordings of this device. |
| session_id | string | no | Only recordings captured during this screen-share session. |
| all | boolean | no | devices:view operators only — every visible recording instead of just YOUR OWN. |
| limit | number | no | Max rows (default 50, cap 200). |
Fetch ONE saved screen-share recording (#1916) by id — the metadata row plus, with with_url:true, a SHORT-TTL (600s) signed playback URL + a download URL for the mp4 (H.264 — plays in any <video> element / on iPhone). YOUR OWN recording by default; all:true (devices:view operators, dispatch-policed) reaches any visible recording. The internal storage_path is never surfaced — the signed URL is
| Parameter | Type | Required | Notes |
|---|---|---|---|
| id | string | yes | The recording id. |
| with_url | boolean | no | Also mint 600s signed playback + download URLs for the mp4. |
| all | boolean | no | devices:view operators only — reach a recording you do not own. |
YOUR account at a glance — ONE self-scoped read returning the calling account's profile (name, display_name, email, role, sign-in providers, user_id, created_at), your per-user default connection type (own value + the global default + the effective fold), your linked Telegram accounts, the devices YOU own (uuid/name/model/last_seen_at — the uuids feed get_device / rename_device / …), your Stripe s
No parameter schema on file.
Read a device's egress-IP set (#1432) — the device→proxy INGRESS / CONNECT-source ADMISSION IPs the proxy allowlists for it (the addresses it will ACCEPT this device's CONNECTs FROM), PLUS any manual dev overrides. These are the CONNECT-source ADMISSION IPs, NOT the target-visible egress ORIGIN the destination server sees (that origin is governed by the device's external (upstream) proxy — see set
| Parameter | Type | Required | Notes |
|---|---|---|---|
| device_uuid | string | no | — |
| deviceName | string | no | — |
Read a device's PAC egress FAIL POSTURE (#1657) — what the proxy does when the device is handed the #76 PAC DIRECT fallback (its PAC-fetch source IP is not yet in the CONNECT-source admission allowlist, routine on CGNAT). The setting egressFailPosture ∈ open | closed | auto rides settings_{global,device}.data and is resolved device→user→service→global by effective_settings_for_device (like the e
| Parameter | Type | Required | Notes |
|---|---|---|---|
| device_uuid | string | no | — |
| deviceName | string | no | — |
Count entries in a workspace (workspace_id or workspace_slug) with optional device/host/method/status/search filters.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| workspace_id | string | no | — |
| workspace_slug | string | no | — |
| device_uuids | array | no | — |
| hosts | array | no | — |
| methods | array | no | — |
| status_class | number | no | — |
| search_q | string | no | — |
| origin | string | no | — |
| after | string | no | — |
| before | string | no | — |
List the workspace's WIPE JOBS (public.entries_wipe_jobs, #2147) — the ONE source of truth for wipe progress, the same rows the dashboard's wipe banner renders. Each job: the EXACT device set, the narrowing predicate (hosts/methods/status_class/search_q/origin), total (from the live entry_dh_counts ledger; total_exact=false ⇒ an upper bound), deleted, percent, status (queued|running|done|failed|ca
| Parameter | Type | Required | Notes |
|---|---|---|---|
| workspace_id | string | no | — |
| workspace_slug | string | no | Defaults to 'default'. |
| job_id | string | no | — |
| status | string | no | queued | running | done | failed | cancelled | active |
| device_uuid | string | no | — |
| limit | number | no | 1–100, default 20. |
The ONE freshness surface for every dashboard counter (#2147): mode 'live' — entry_dh_counts is a LEDGER maintained in the write transaction of every insert / delete / wipe / partition drop and broadcast as COUNTS_DELTA (never an hourly snapshot); ledger_since; reconciled_at + drift_rows / drift_abs from the hourly RECONCILER (a bounded drift check that corrects idle groups); reconcile_stale=true
No parameter schema on file.
LOCATE captured entries by ANY keyword q — matched against the host/url/path AND the DECRYPTED request/response DATA: the request+response HEADERS and the request+response BODY text (#1577). Case-insensitive substring. Body/header matching covers full headers + the head of each body (first ~4KB request / ~8KB response) via a trigram index, and a body is indexed ONLY when its side's content-type
| Parameter | Type | Required | Notes |
|---|---|---|---|
| q | string | yes | — |
| device_uuid | string | no | — |
| after | string | no | — |
| before | string | no | — |
| order | string | no | — |
| limit | number | no | — |
LIST the newest captured traffic entries as SLIM feed rows (id, ts, device, kind, request_id, host, path, method, status, contentType, url — NO bodies/headers) — the dashboard main live feed's MCP-parity read (#778). No search term needed (unlike search_entries' required q). FULL /feed filter set (#819): scope to ONE device (device_uuid/deviceName), an EXACT host or a host_contains substring
| Parameter | Type | Required | Notes |
|---|---|---|---|
| device_uuid | string | no | Scope to one device by uuid. |
| deviceName | string | no | Scope to one device by display name. |
| host | string | no | EXACT hostname filter (e.g. 'api.busymate.net'). Use host_contains for a substring. |
| host_contains | string | no | Substring hostname filter, case-insensitive (e.g. 'doordash' matches every *.doordash.com host). |
| method | string | no | HTTP method filter, case-insensitive exact (e.g. GET, POST). |
| status | string | no | Response status filter: an exact code ('404') or a class ('2xx'|'4xx'|'5xx'). |
| owner_email | string | no | OPERATOR cross-user scope (devices:view required, re-verified): another user's account email (exact, case-insensitive) — the feed covers THAT user's devices. |
| owner_user_id | string | no | OPERATOR cross-user scope by user id (uuid) — the deterministic spelling the live-traffic widget re-poll uses. |
| after | string | no | Only entries with ts >= this ISO date/datetime. |
| before | string | no | Only entries with ts < this ISO date/datetime. |
| since_id | number | no | Only entries with id > this — the live-tail append cursor (pass the max id you already rendered). |
| order | string | no | Sort direction (default 'newest'). |
| limit | number | no | Max rows (default 30, cap 100). |
Get ONE captured entry's FULL detail by the id you already hold — method, URL, host, path, status, timing (duration_ms) + sizes, the request AND response HEADERS, and the request AND response BODIES (size-capped, truncation stated explicitly). The ID-SCOPED twin of inspect_requests (which is per-HOST): when a live feed row, an audit event or another tool hands you an entry_id (or a request_id)
| Parameter | Type | Required | Notes |
|---|---|---|---|
| entry_id | number | no | The entry's numeric id — the id field of a list_entries / search_entries row (preferred). |
| request_id | string | no | The capture request id (alternative locator); the newest matching entry is returned. |
| max_body_chars | number | no | Per-body character budget (default 8000, cap 40000). Anything beyond is reported as truncated, never silently dropped. |
Export captured entries as a HAR 1.2 log. Optionally scope by device, host, and date range.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| device_uuid | string | no | — |
| deviceName | string | no | — |
| host | string | no | — |
| since | string | no | — |
| before | string | no | — |
| limit | number | no | — |
Deep-inspect FULL captured request/response detail for ONE host — method, URL, request + response HEADERS, and request + response BODIES (size-capped). The tool for reverse-engineering how a real app/API works from its actual captured traffic (auth flows, required headers, payload shapes) and for building repro (curl/fetch). host MUST be a full hostname containing a dot (e.g. 'identity.doordash.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| host | string | yes | FULL hostname (must contain a dot), e.g. 'identity.doordash.com'. Bare brand words are rejected. |
| path_contains | string | no | Optional — only requests whose path contains this substring (e.g. 'login', 'token', 'auth'). |
| method | string | no | Optional HTTP method filter, e.g. POST. |
| status | number | no | Optional exact response status filter, e.g. 200. |
| device_uuid | string | no | — |
| deviceName | string | no | — |
| after | string | no | Optional — only requests with ts >= this ISO date/datetime, e.g. '2025-05-20'. |
| before | string | no | Optional — only requests with ts < this ISO date/datetime ('before/older than <date>'). |
| limit | number | no | Max requests (default 8, capped at 15). |
BOUNDED traffic aggregation for ONE device — the FIRST tool to call to report what a device is doing, find the busy/flooding host, or pick a host to clean up. REQUIRES a device (device_uuid or deviceName) — a host alone is NOT enough: if you don't know which device, ask the user (or check list_devices) BEFORE calling. NEVER scans or returns raw rows (use it instead of search_entries/inspect_re
| Parameter | Type | Required | Notes |
|---|---|---|---|
| device_uuid | string | no | REQUIRED unless deviceName is given — the device to summarize. |
| deviceName | string | no | The device's name — an alternative to device_uuid; one of the two is REQUIRED. |
| host | string | no | Omit for top hosts; pass a full hostname to get its top path-bases. |
| after | string | no | Only entries with ts >= this ISO date/datetime. |
| before | string | no | Only entries with ts < this ISO date/datetime. |
| limit | number | no | Max groups (default 25, capped 100). |
List every service group (full rows incl. ssl_proxy_domains) with each group's primary_agent + ordered agents[] from the service_group_agents join.
No parameter schema on file.
Get one service group by id or name.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| id | string | no | — |
| name | string | no | — |
List every tag (id, name, color, patterns).
No parameter schema on file.
Read settings_device for one device (device_uuid or deviceName).
| Parameter | Type | Required | Notes |
|---|---|---|---|
| device_uuid | string | no | — |
| deviceName | string | no | — |
Return the caller's OWN Stripe subscription(s) — status/price/product/quantity/period/trial/cancel-at-period-end (from stripe_subscriptions, owner-scoped to the caller's OAuth sub). A billing:view operator (admin via grants_all) may pass all_users:true for the whole fleet. Returns { count, subscriptions:[…] }. Phase 1 is Stripe TEST mode.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| all_users | boolean | no | billing:view/admin only — return EVERY account's subscriptions instead of just the caller's. |
List the caller's OWN Stripe invoices — status/amounts (minor units)/currency/hosted_invoice_url/period (from stripe_invoices, owner-scoped to the caller's OAuth sub), newest first. Optional limit (default 50, max 200). A billing:view operator may pass all_users:true for the fleet. Returns { count, invoices:[…] }.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| limit | number | no | Max invoices to return (1–200, default 50). |
| all_users | boolean | no | billing:view/admin only — return EVERY account's invoices. |
Return the caller's OWN metered usage rollup (metric captured_entries = count of captured entries per device per period; from stripe_usage_events, owner-scoped to the caller's OAuth sub) aggregated by period over a window. since_days (default 30, max 365), metric (default captured_entries). A billing:view operator may pass all_users:true for the fleet. Returns { metric, since, count, total
| Parameter | Type | Required | Notes |
|---|---|---|---|
| metric | string | no | Usage metric (default 'captured_entries'). |
| since_days | number | no | Look back this many days (1–365, default 30). |
| all_users | boolean | no | billing:view/admin only — return EVERY account's usage. |
| user_id | string | no | billing:view/admin only — a specific target user. |
Read what ONE device ENFORCES — the EFFECTIVE 4-tier block-rule union (global ++ service ++ user ++ device, de-duped by id, device wins then user then service then global) plus the SERVICE list (the applied service groups' rules, flattened in service-group name order), the device owner's USER list, and that device's per-device list. Pass device_uuid or deviceName. A rule shadowed on this device by
| Parameter | Type | Required | Notes |
|---|---|---|---|
| device_uuid | string | no | — |
| deviceName | string | no | — |
List YOUR to-dos from the /todo app (public.todos) — the shared "what to do / what's done" list you + the user both maintain. Owner-scoped to the calling account. Filters: status (open|in_progress|done|blocked), priority (low|medium|high|urgent), source (user|claude|ask), tag (one tag to match). By DEFAULT hides completed todos (the active worklist); pass include_done:true (or an explicit
| Parameter | Type | Required | Notes |
|---|---|---|---|
| status | string | no | Filter by status. |
| priority | string | no | Filter by priority. |
| source | string | no | Filter by who added it. |
| tag | string | no | Only todos carrying this tag. |
| include_done | boolean | no | Include completed todos (default false hides them). |
| limit | number | no | Max rows (default 200, cap 500). |
Get ONE of YOUR to-dos by id — its full row. Owner-scoped: an id you don't own returns not-found (never reveals another user's to-do). Returns { todo }.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| id | string | yes | The to-do's uuid (from list_todos). |
Browse the ADVISOR CENTER findings (public.advisor_findings) — the advisor-monitor's deduped audit/health findings you see on the dashboard /advisor view. Filter by severity (info|warning|alert), kind (a taxonomy slug like audit.denied_spike / advisor.security), and q (free-text over the finding title + kind + fingerprint). Newest-first (last_seen_at); keyset-paginate by passing the returned
| Parameter | Type | Required | Notes |
|---|---|---|---|
| severity | string | no | Filter by severity. |
| kind | string | no | Filter by taxonomy kind slug (e.g. audit.denied_spike, advisor.security). |
| q | string | no | Free-text substring over the finding title + kind + fingerprint. |
| limit | number | no | Max rows (default 50, cap 200). |
| before | string | no | Keyset cursor — the previous page's last last_seen_at (from next_cursor). |
Get ONE advisor finding in FULL by its fingerprint (from list_advisor_findings) — with its up-to-20 resolved (already-redacted) audit EVENTS, the SCOPED /audit deep link, and the /advisor permalink, so you can act with zero re-investigation. Returns { found, finding, events:[{id,at,surface,action,status,actor_label,target_kind,target_id,request_id}], deep_link (absolute https://dash.busymate.dev
| Parameter | Type | Required | Notes |
|---|---|---|---|
| fingerprint | string | yes | The finding fingerprint (from list_advisor_findings). |
Build a SHAREABLE package for ONE advisor finding — the max-context markdown + flat LLM prose + the permalink, so it can be dropped into a doc/chat/issue with full context (Finding · Analysis · Evidence · Deep links · Repro · Meta). Returns { format, permalink (https://dash.busymate.dev/advisor?sev&kind&f), advisor_url, markdown, llm_text } — format is an emphasis hint (markdown|llm|links) ECHOE
| Parameter | Type | Required | Notes |
|---|---|---|---|
| fingerprint | string | yes | The finding fingerprint. |
| format | string | no | Emphasis hint (default markdown); all fields returned. |
List issue reports from the one-tap reporter (public.issue_reports — the durable rows behind report_issue + the dashboard ⌘⇧1 dialog). YOUR OWN reports by default (owner-scoped to the calling account — the same reach the RLS gives you), or EVERY reporter's with all:true (audit:view operators only; re-verified server-side, fail-closed — for a non-operator all is rejected, never silently widened
| Parameter | Type | Required | Notes |
|---|---|---|---|
| all | boolean | no | audit:view operators only — EVERY reporter's reports instead of just YOUR OWN. |
| status | string | no | Filter by report status. |
| limit | number | no | Max rows (default 100, cap 500). |
List workspaces. YOUR OWN by default (owner-scoped to the caller — the reach the dashboard RLS owner arm gives you); all:true lists EVERY account's workspaces and needs the workspaces.view capability (re-verified in-handler, fail-closed). Omits archived unless include_archived.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| include_archived | boolean | no | — |
| all | boolean | no | List every account's workspaces instead of just your own. Requires the workspaces.view capability. |
Get one workspace by id or slug.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| id | string | no | — |
| slug | string | no | — |
List a workspace's tabs (workspace_id or workspace_slug).
| Parameter | Type | Required | Notes |
|---|---|---|---|
| workspace_id | string | no | — |
| workspace_slug | string | no | — |
List snapshot files in the snapshots storage bucket.
No parameter schema on file.
Get a 5-minute signed download URL for a snapshot file (name from list_snapshots).
| Parameter | Type | Required | Notes |
|---|---|---|---|
| name | string | yes | — |
List registered device push tokens (masked), PLATFORM-ROUTED (#1542): each device_push_tokens row carries a platform discriminator — ios = an APNs device token (push-notify's APNs leg), android = an FCM registration token (push-notify's FCM HTTP v1 leg). The column defaults ios, so legacy rows read ios. Optionally scope to one device.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| device_uuid | string | no | — |
| deviceName | string | no | — |
Read back a device's answer to an actionable push (#75) by the correlation_id returned from send_push. Returns the push_responses row { correlation_id, device_uuid, action (accept|reject|skip), context, responded_at, action_intent } or null if the user hasn't responded yet. action_intent (or null) carries the SERVER-RECORDED action-binding + its outcome: { action_kind, params, issued_by, created_a
| Parameter | Type | Required | Notes |
|---|---|---|---|
| correlation_id | string | yes | The correlation_id returned by send_push when actionable:true. |
Return the live fleet stats aggregate (get_stats_internal RPC). total_entries is the counters LEDGER (Σ entry_dh_counts.n — never an ANALYZE estimate) with total_entries_source ('ledger'|'snapshot') and total_entries_as_of (its stamp); status_class_mix / source_mix / top_domains / top_devices describe the sealed 24 h rollup (rollup_sealed_to, rollup_window_hours); entries_1h / entries_24h / reques
No parameter schema on file.
Return the latest infra status snapshot (service_status) MERGED with the Edge tier's self-reported deployed build. The VPS posts the StatusBody (overall, host{cpu,load,mem,uptime}, components[], and — when it supplies one — builds[]); this RECONCILES that builds[] against the Edge tier's own numbers and adds buildDrift (#987: the VPS cannot ask the Edge bundle what build it runs, so its supabase
No parameter schema on file.
Read the platform AUDIT TRAIL (public.audit_log) — the unified who-did-what-when-how ledger across every surface (mcp / busybro / dashboard / rest / db / auth / proxy / daemon / cron / ios / cdp / farm / edge:<fn> — #533: the surface is DERIVED at the DB trigger tier by HOW a write ARRIVED — a direct-Postgres write→db (the tamper class, also flagged by is_direct_pg), a device PostgREST write→ios/c
| Parameter | Type | Required | Notes |
|---|---|---|---|
| all | boolean | no | audit:view operators only — read EVERY actor's events (the fleet trail) instead of just YOUR OWN. |
| since | string | no | ISO timestamp — window start (default 24h ago; clamped to ≥ 90 days ago). |
| until | string | no | ISO timestamp — window end (default now). |
| surface | string | no | Exact surface filter (mcp|busybro|dashboard|rest|db|auth|proxy|daemon|cron|ios|cdp|farm|edge:<fn>). |
| status | string | no | Exact status filter (ok|denied|error|timeout). |
| actor_id | string | no | Exact actor id (OAuth sub / device uuid / db role). A FOREIGN actor requires audit:view (all:true). |
| actor_q | string | no | Substring match on actor_label or actor_id. |
| action_q | string | no | Substring match on the action (tool name / route / db:op:table). |
| target_q | string | no | Substring match on target_label/target_id/target_kind. |
| target_kind | string | no | Exact target_kind (e.g. 'devices', 'roles', 'settings_device'). |
| target_id | string | no | Exact target_id (paired with target_kind = the history deep-link). |
| request_id | string | no | Exact request_id (uuid) — correlate one action across layers. |
| direct_only | boolean | no | Only DIRECT-Postgres writes (is_direct_pg=true — the tamper signal). |
| q | string | no | Free-text substring across action/actor_label/target_label/actor_id/target_id/surface/db_session_user. |
| before_at | string | no | Keyset cursor — the previous page's last at (from next_cursor). |
| before_id | number | no | Keyset cursor — the previous page's last id (from next_cursor). |
| asc | boolean | no | Oldest-first (default false = newest-first). |
| limit | number | no | Max rows (default 100, cap 500). |
Get ONE audit-trail row in FULL by its id (from list_audit_events) — including the fields the list omits: the REDACTED detail (old→new diffs for allowlisted keys, redacted at write time — never raw args/secrets) and statement_excerpt (the left-400-char SQL for a direct-PG write). Owner-scoped: a row whose actor isn't YOU returns not-found (found:false) unless you hold audit:view (operators c
| Parameter | Type | Required | Notes |
|---|---|---|---|
| id | number | yes | The audit_log row id (from list_audit_events). |
| at | string | no | The row's at timestamp (ISO, from list_audit_events) — partition-prune hint. |
List the device↔service-group membership edges (public.device_service_groups) — the delegation boundary: which devices belong to which service group. Resolves device_name + service_group_name. Filters: service_group_id, device_uuid, limit (default 500, cap 1000). This is the ADMIN-CONTROLLED authz edge (never traffic-derived); it powers "users whose devices are in group X". Gated devices:vie
| Parameter | Type | Required | Notes |
|---|---|---|---|
| service_group_id | string | no | Filter to one service group's devices. |
| device_uuid | string | no | Filter to one device's groups. |
| limit | number | no | Max rows (default 500, cap 1000). |
- Every tool — any call limit is its publisher’s, not ours
- No card, and mcprush charges nothing for it
- Runs at its publisher’s own address — this marketplace is not in the path
- Nothing to cap, because mcprush bills nothing
What counts against your monthly calls
| Tool | Unit | Calls used | Out of the allowance |
|---|
Nothing here is billable: mcprush charges nothing to install Busymate DevTools or to call it, at any volume.
Two independent axes, because powerful and malicious are different questions. The grade is threat only. The capability level is blast radius, and it is never a penalty on the grade — it is priced as one subtract-only term in the score, where you can see it.
This listing is an address its publisher runs, and you connect to it directly — this marketplace is not in the path. The scanner reads packages and public source, and an address is neither. So there is no grade — not a withheld one, an unmeasured one.
Release history
This is an address its publisher runs: which release it serves is theirs to choose, so there is nothing here to pin. The history below is for reading; the current release on file is 1.0.481.
No release note was published with this version.
One review per account, from a signed-in account that does not publish this listing. Nothing else is asked — you can say what you think before you install it. Publishers can reply once per review, and a review can be edited or deleted by whoever wrote it.
Any signed-in account that does not publish Busymate DevTools can review it, once — before installing it or after. A review from an account that has installed it is marked as one.
Nobody has reviewed this listing. The rating on the card is the mean of the reviews written here and nothing else, so there is no rating until somebody writes the first — which takes a signed-in account that does not publish it, and nothing else.