{"$schema":"https://wellknown.network/schemas/agent-record-v1.json","schemaVersion":"1","id":"ag_ys5aaeh8e4yu","handle":"busymate-devtools","url":"https://wellknown.network/agents/busymate-devtools","links":{"self":"https://wellknown.network/agents/busymate-devtools/record.json","html":"https://wellknown.network/agents/busymate-devtools","markdown":"https://wellknown.network/agents/busymate-devtools/record.md","api":"https://wellknown.network/api/v1/agents/busymate-devtools","status":"https://wellknown.network/api/v1/agents/busymate-devtools/status","claim":"https://wellknown.network/agents/busymate-devtools/claim","claimApi":"https://wellknown.network/api/v1/claims","claimDescriptor":"https://wellknown.network/agents/busymate-devtools/claim.json","badge":"https://wellknown.network/agents/busymate-devtools/badge.svg","openapi":"https://wellknown.network/openapi.json","history":"https://wellknown.network/api/v1/agents/busymate-devtools/history","tools":"https://wellknown.network/api/v1/agents/busymate-devtools/tools"},"ard":{"identifier":"urn:air:mcp.busymate.dev:server:busymate-devtools","type":"application/mcp-server-card+json"},"kind":"mcp_server","declared":{"name":"Busymate DevTools","summary":"Capture, inspect & debug HTTPS traffic across iOS, Android, browsers & backends — 304 MCP tools.","description":"Capture, inspect & debug HTTPS traffic across iOS, Android, browsers & backends — 304 MCP tools.","publisher":{"name":"dev.busymate","url":null},"homepage":"https://busymate.dev/mcp","repository":"https://github.com/serebano/busymate-devtools","version":"1.0.481","license":null,"protocols":["mcp"],"tags":[],"pricing":null,"endpoints":[{"url":"https://mcp.busymate.dev","type":"mcp_streamable_http","auth":null,"probeable":true}],"skills":null,"tools":null,"extra":{"updatedAt":"2026-07-08T11:12:05.771828Z","publishedAt":"2026-07-08T11:12:05.771828Z","registryName":"dev.busymate/busymate-devtools"},"attribution":{"kind":"mcp_registry","name":"mcp_registry","repoUrl":"mcp_registry","summary":"mcp_registry","version":"mcp_registry","description":"mcp_registry","homepageUrl":"mcp_registry","publisherName":"mcp_registry"}},"derived":{"capabilities":[{"slug":"documents.invoice-processing","name":"Invoice Processing","confidence":1,"provenance":"derived"},{"slug":"commerce.pricing","name":"Pricing & Quotes","confidence":1,"provenance":"derived"},{"slug":"analytics.reporting","name":"Reporting & Dashboards","confidence":1,"provenance":"derived"},{"slug":"productivity.tasks","name":"Tasks & To-do","confidence":0.948,"provenance":"derived"},{"slug":"infra.browser-automation","name":"Browser Automation","confidence":0.911,"provenance":"derived"},{"slug":"automation.orchestration","name":"Agent Orchestration","confidence":0.554,"provenance":"derived"},{"slug":"content.writing","name":"Writing & Editing","confidence":0.54,"provenance":"derived"},{"slug":"dev.docs-lookup","name":"Documentation Lookup","confidence":0.54,"provenance":"derived"}],"categories":["analytics","automation","commerce","content","dev","documents","infra","productivity"],"language":"fr"},"observed":{"status":"live","statusReason":"Responded 51m ago.","lastOkAt":"2026-10-10T13:25:13.190Z","lastProbedAt":"2026-10-10T13:25:13.190Z","statusComputedAt":"2026-10-10T13:26:43.742Z","reliability30d":{"probes":111,"successRate":1,"p50Ms":268,"basis":"service","measures":{"availability":"availability","latency":"response time","tools":"tool surface observed","summary":"Checks reached the service itself."},"checks":{"total":109,"ok":109,"authBoundaryOk":0,"serviceOk":109,"note":"Counted from the observation rows for the window, checks of the server only (HTTP, A2A card, MCP initialize). ok = authBoundaryOk + serviceOk. `probes` is the sum of daily rollups and includes registry checks, so it can differ from `total`."}},"latestObservations":[{"at":"2026-10-10T13:25:13.190Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":227,"error":null,"detail":{"tools":[{"name":"get_product_pricing","description":"Return the canonical Busymate DevTools plan prices and cloud phone/browser rental rates, with numeric amounts, USD currency, billing periods and https://busymat"},{"name":"list_breakpoint_events","description":"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/respo"},{"name":"get_device","description":"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 e"},{"name":"list_devices","description":"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 `a"},{"name":"get_device_status","description":"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, "},{"name":"get_device_health","description":"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"},{"name":"list_device_events","description":"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 th"},{"name":"list_device_audit_modes","description":"Every device with AUDIT-mode telemetry currently armed — device_uuid + name, enabled, expires_at + expires_in, level, categories, who armed it (set_by_label) an"},{"name":"test_pac_connection","description":"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 retur"},{"name":"list_screen_share_recordings","description":"List saved screen-share RECORDINGS (#1916) — operator-captured mp4s of live share streams (the dashboard viewer's Record control), saved for later reference in "},{"name":"get_screen_share_recording","description":"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 "},{"name":"get_my_account","description":"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"},{"name":"get_device_egress_status","description":"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 d"},{"name":"get_device_egress_fail_posture","description":"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 "},{"name":"get_entry_count","description":"Count entries in a workspace (workspace_id or workspace_slug) with optional device/host/method/status/search filters."},{"name":"list_wipe_jobs","description":"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."},{"name":"get_entry_counts_freshness","description":"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 / d"},{"name":"search_entries","description":"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 req"},{"name":"list_entries","description":"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) "},{"name":"get_entry","description":"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 HEADER"},{"name":"export_har","description":"Export captured entries as a HAR 1.2 log. Optionally scope by device, host, and date range."},{"name":"inspect_requests","description":"Deep-inspect FULL captured request/response detail for ONE host — method, URL, request + response HEADERS, and request + response BODIES (size-capped). The tool"},{"name":"summarize_device_traffic","description":"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. R"},{"name":"list_service_groups","description":"List every service group (full rows incl. ssl_proxy_domains) with each group's primary_agent + ordered agents[] from the service_group_agents join."},{"name":"get_service_group","description":"Get one service group by id or name."},{"name":"list_tags","description":"List every tag (id, name, color, patterns)."},{"name":"get_device_settings","description":"Read settings_device for one device (device_uuid or deviceName)."},{"name":"get_subscription","description":"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"},{"name":"list_invoices","description":"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 OAut"},{"name":"get_usage","description":"Return the caller's OWN metered usage rollup (metric `captured_entries` = count of captured entries per device per period; from stripe_usage_events, owner-scope"},{"name":"get_block_rules_device","description":"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 t"},{"name":"list_todos","description":"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 accoun"},{"name":"get_todo","description":"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 }."},{"name":"list_advisor_findings","description":"Browse the ADVISOR CENTER findings (public.advisor_findings) — the advisor-monitor's deduped audit/health findings you see on the dashboard /advisor view. Filte"},{"name":"get_advisor_finding","description":"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 /audi"},{"name":"share_advisor_finding","description":"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 f"},{"name":"list_issue_reports","description":"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 defau"},{"name":"list_workspaces","description":"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"},{"name":"get_workspace","description":"Get one workspace by id or slug."},{"name":"list_tabs","description":"List a workspace's tabs (workspace_id or workspace_slug)."},{"name":"list_snapshots","description":"List snapshot files in the snapshots storage bucket."},{"name":"download_snapshot","description":"Get a 5-minute signed download URL for a snapshot file (name from list_snapshots)."},{"name":"list_push_tokens","description":"List registered device push tokens (masked), PLATFORM-ROUTED (#1542): each `device_push_tokens` row carries a `platform` discriminator — `ios` = an APNs device "},{"name":"get_push_response","description":"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_u"},{"name":"get_stats","description":"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 tota"},{"name":"get_status","description":"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{c"},{"name":"list_audit_events","description":"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 /"},{"name":"get_audit_event","description":"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"},{"name":"list_device_service_groups","description":"List the device↔service-group membership edges (public.device_service_groups) — the delegation boundary: which devices belong to which service group. Resolves d"}],"toolCount":49,"toolsHash":"33b4db3c2c3c24948e585aaa20c94365c399a26f836fd358fc7a1ab4688c6bfd","serverName":"busymate-devtools","capabilities":["tools","resources","prompts"],"serverVersion":"1.0.1.918","protocolVersion":"2025-06-18"}},{"at":"2026-10-10T07:24:47.921Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":249,"error":null,"detail":{"tools":[{"name":"get_product_pricing","description":"Return the canonical Busymate DevTools plan prices and cloud phone/browser rental rates, with numeric amounts, USD currency, billing periods and https://busymat"},{"name":"list_breakpoint_events","description":"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/respo"},{"name":"get_device","description":"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 e"},{"name":"list_devices","description":"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 `a"},{"name":"get_device_status","description":"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, "},{"name":"get_device_health","description":"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"},{"name":"list_device_events","description":"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 th"},{"name":"list_device_audit_modes","description":"Every device with AUDIT-mode telemetry currently armed — device_uuid + name, enabled, expires_at + expires_in, level, categories, who armed it (set_by_label) an"},{"name":"test_pac_connection","description":"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 retur"},{"name":"list_screen_share_recordings","description":"List saved screen-share RECORDINGS (#1916) — operator-captured mp4s of live share streams (the dashboard viewer's Record control), saved for later reference in "},{"name":"get_screen_share_recording","description":"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 "},{"name":"get_my_account","description":"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"},{"name":"get_device_egress_status","description":"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 d"},{"name":"get_device_egress_fail_posture","description":"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 "},{"name":"get_entry_count","description":"Count entries in a workspace (workspace_id or workspace_slug) with optional device/host/method/status/search filters."},{"name":"list_wipe_jobs","description":"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."},{"name":"get_entry_counts_freshness","description":"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 / d"},{"name":"search_entries","description":"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 req"},{"name":"list_entries","description":"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) "},{"name":"get_entry","description":"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 HEADER"},{"name":"export_har","description":"Export captured entries as a HAR 1.2 log. Optionally scope by device, host, and date range."},{"name":"inspect_requests","description":"Deep-inspect FULL captured request/response detail for ONE host — method, URL, request + response HEADERS, and request + response BODIES (size-capped). The tool"},{"name":"summarize_device_traffic","description":"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. R"},{"name":"list_service_groups","description":"List every service group (full rows incl. ssl_proxy_domains) with each group's primary_agent + ordered agents[] from the service_group_agents join."},{"name":"get_service_group","description":"Get one service group by id or name."},{"name":"list_tags","description":"List every tag (id, name, color, patterns)."},{"name":"get_device_settings","description":"Read settings_device for one device (device_uuid or deviceName)."},{"name":"get_subscription","description":"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"},{"name":"list_invoices","description":"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 OAut"},{"name":"get_usage","description":"Return the caller's OWN metered usage rollup (metric `captured_entries` = count of captured entries per device per period; from stripe_usage_events, owner-scope"},{"name":"get_block_rules_device","description":"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 t"},{"name":"list_todos","description":"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 accoun"},{"name":"get_todo","description":"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 }."},{"name":"list_advisor_findings","description":"Browse the ADVISOR CENTER findings (public.advisor_findings) — the advisor-monitor's deduped audit/health findings you see on the dashboard /advisor view. Filte"},{"name":"get_advisor_finding","description":"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 /audi"},{"name":"share_advisor_finding","description":"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 f"},{"name":"list_issue_reports","description":"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 defau"},{"name":"list_workspaces","description":"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"},{"name":"get_workspace","description":"Get one workspace by id or slug."},{"name":"list_tabs","description":"List a workspace's tabs (workspace_id or workspace_slug)."},{"name":"list_snapshots","description":"List snapshot files in the snapshots storage bucket."},{"name":"download_snapshot","description":"Get a 5-minute signed download URL for a snapshot file (name from list_snapshots)."},{"name":"list_push_tokens","description":"List registered device push tokens (masked), PLATFORM-ROUTED (#1542): each `device_push_tokens` row carries a `platform` discriminator — `ios` = an APNs device "},{"name":"get_push_response","description":"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_u"},{"name":"get_stats","description":"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 tota"},{"name":"get_status","description":"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{c"},{"name":"list_audit_events","description":"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 /"},{"name":"get_audit_event","description":"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"},{"name":"list_device_service_groups","description":"List the device↔service-group membership edges (public.device_service_groups) — the delegation boundary: which devices belong to which service group. Resolves d"}],"toolCount":49,"toolsHash":"33b4db3c2c3c24948e585aaa20c94365c399a26f836fd358fc7a1ab4688c6bfd","serverName":"busymate-devtools","capabilities":["tools","resources","prompts"],"serverVersion":"1.0.1.918","protocolVersion":"2025-06-18"}},{"at":"2026-10-10T01:25:12.863Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":213,"error":null,"detail":{"tools":[{"name":"get_product_pricing","description":"Return the canonical Busymate DevTools plan prices and cloud phone/browser rental rates, with numeric amounts, USD currency, billing periods and https://busymat"},{"name":"list_breakpoint_events","description":"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/respo"},{"name":"get_device","description":"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 e"},{"name":"list_devices","description":"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 `a"},{"name":"get_device_status","description":"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, "},{"name":"get_device_health","description":"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"},{"name":"list_device_events","description":"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 th"},{"name":"list_device_audit_modes","description":"Every device with AUDIT-mode telemetry currently armed — device_uuid + name, enabled, expires_at + expires_in, level, categories, who armed it (set_by_label) an"},{"name":"test_pac_connection","description":"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 retur"},{"name":"list_screen_share_recordings","description":"List saved screen-share RECORDINGS (#1916) — operator-captured mp4s of live share streams (the dashboard viewer's Record control), saved for later reference in "},{"name":"get_screen_share_recording","description":"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 "},{"name":"get_my_account","description":"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"},{"name":"get_device_egress_status","description":"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 d"},{"name":"get_device_egress_fail_posture","description":"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 "},{"name":"get_entry_count","description":"Count entries in a workspace (workspace_id or workspace_slug) with optional device/host/method/status/search filters."},{"name":"list_wipe_jobs","description":"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."},{"name":"get_entry_counts_freshness","description":"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 / d"},{"name":"search_entries","description":"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 req"},{"name":"list_entries","description":"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) "},{"name":"get_entry","description":"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 HEADER"},{"name":"export_har","description":"Export captured entries as a HAR 1.2 log. Optionally scope by device, host, and date range."},{"name":"inspect_requests","description":"Deep-inspect FULL captured request/response detail for ONE host — method, URL, request + response HEADERS, and request + response BODIES (size-capped). The tool"},{"name":"summarize_device_traffic","description":"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. R"},{"name":"list_service_groups","description":"List every service group (full rows incl. ssl_proxy_domains) with each group's primary_agent + ordered agents[] from the service_group_agents join."},{"name":"get_service_group","description":"Get one service group by id or name."},{"name":"list_tags","description":"List every tag (id, name, color, patterns)."},{"name":"get_device_settings","description":"Read settings_device for one device (device_uuid or deviceName)."},{"name":"get_subscription","description":"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"},{"name":"list_invoices","description":"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 OAut"},{"name":"get_usage","description":"Return the caller's OWN metered usage rollup (metric `captured_entries` = count of captured entries per device per period; from stripe_usage_events, owner-scope"},{"name":"get_block_rules_device","description":"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 t"},{"name":"list_todos","description":"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 accoun"},{"name":"get_todo","description":"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 }."},{"name":"list_advisor_findings","description":"Browse the ADVISOR CENTER findings (public.advisor_findings) — the advisor-monitor's deduped audit/health findings you see on the dashboard /advisor view. Filte"},{"name":"get_advisor_finding","description":"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 /audi"},{"name":"share_advisor_finding","description":"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 f"},{"name":"list_issue_reports","description":"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 defau"},{"name":"list_workspaces","description":"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"},{"name":"get_workspace","description":"Get one workspace by id or slug."},{"name":"list_tabs","description":"List a workspace's tabs (workspace_id or workspace_slug)."},{"name":"list_snapshots","description":"List snapshot files in the snapshots storage bucket."},{"name":"download_snapshot","description":"Get a 5-minute signed download URL for a snapshot file (name from list_snapshots)."},{"name":"list_push_tokens","description":"List registered device push tokens (masked), PLATFORM-ROUTED (#1542): each `device_push_tokens` row carries a `platform` discriminator — `ios` = an APNs device "},{"name":"get_push_response","description":"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_u"},{"name":"get_stats","description":"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 tota"},{"name":"get_status","description":"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{c"},{"name":"list_audit_events","description":"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 /"},{"name":"get_audit_event","description":"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"},{"name":"list_device_service_groups","description":"List the device↔service-group membership edges (public.device_service_groups) — the delegation boundary: which devices belong to which service group. Resolves d"}],"toolCount":49,"toolsHash":"33b4db3c2c3c24948e585aaa20c94365c399a26f836fd358fc7a1ab4688c6bfd","serverName":"busymate-devtools","capabilities":["tools","resources","prompts"],"serverVersion":"1.0.1.918","protocolVersion":"2025-06-18"}},{"at":"2026-10-09T19:27:24.321Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":247,"error":null,"detail":{"tools":[{"name":"get_product_pricing","description":"Return the canonical Busymate DevTools plan prices and cloud phone/browser rental rates, with numeric amounts, USD currency, billing periods and https://busymat"},{"name":"list_breakpoint_events","description":"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/respo"},{"name":"get_device","description":"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 e"},{"name":"list_devices","description":"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 `a"},{"name":"get_device_status","description":"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, "},{"name":"get_device_health","description":"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"},{"name":"list_device_events","description":"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 th"},{"name":"list_device_audit_modes","description":"Every device with AUDIT-mode telemetry currently armed — device_uuid + name, enabled, expires_at + expires_in, level, categories, who armed it (set_by_label) an"},{"name":"test_pac_connection","description":"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 retur"},{"name":"list_screen_share_recordings","description":"List saved screen-share RECORDINGS (#1916) — operator-captured mp4s of live share streams (the dashboard viewer's Record control), saved for later reference in "},{"name":"get_screen_share_recording","description":"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 "},{"name":"get_my_account","description":"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"},{"name":"get_device_egress_status","description":"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 d"},{"name":"get_device_egress_fail_posture","description":"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 "},{"name":"get_entry_count","description":"Count entries in a workspace (workspace_id or workspace_slug) with optional device/host/method/status/search filters."},{"name":"list_wipe_jobs","description":"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."},{"name":"get_entry_counts_freshness","description":"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 / d"},{"name":"search_entries","description":"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 req"},{"name":"list_entries","description":"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) "},{"name":"get_entry","description":"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 HEADER"},{"name":"export_har","description":"Export captured entries as a HAR 1.2 log. Optionally scope by device, host, and date range."},{"name":"inspect_requests","description":"Deep-inspect FULL captured request/response detail for ONE host — method, URL, request + response HEADERS, and request + response BODIES (size-capped). The tool"},{"name":"summarize_device_traffic","description":"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. R"},{"name":"list_service_groups","description":"List every service group (full rows incl. ssl_proxy_domains) with each group's primary_agent + ordered agents[] from the service_group_agents join."},{"name":"get_service_group","description":"Get one service group by id or name."},{"name":"list_tags","description":"List every tag (id, name, color, patterns)."},{"name":"get_device_settings","description":"Read settings_device for one device (device_uuid or deviceName)."},{"name":"get_subscription","description":"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"},{"name":"list_invoices","description":"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 OAut"},{"name":"get_usage","description":"Return the caller's OWN metered usage rollup (metric `captured_entries` = count of captured entries per device per period; from stripe_usage_events, owner-scope"},{"name":"get_block_rules_device","description":"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 t"},{"name":"list_todos","description":"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 accoun"},{"name":"get_todo","description":"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 }."},{"name":"list_advisor_findings","description":"Browse the ADVISOR CENTER findings (public.advisor_findings) — the advisor-monitor's deduped audit/health findings you see on the dashboard /advisor view. Filte"},{"name":"get_advisor_finding","description":"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 /audi"},{"name":"share_advisor_finding","description":"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 f"},{"name":"list_issue_reports","description":"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 defau"},{"name":"list_workspaces","description":"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"},{"name":"get_workspace","description":"Get one workspace by id or slug."},{"name":"list_tabs","description":"List a workspace's tabs (workspace_id or workspace_slug)."},{"name":"list_snapshots","description":"List snapshot files in the snapshots storage bucket."},{"name":"download_snapshot","description":"Get a 5-minute signed download URL for a snapshot file (name from list_snapshots)."},{"name":"list_push_tokens","description":"List registered device push tokens (masked), PLATFORM-ROUTED (#1542): each `device_push_tokens` row carries a `platform` discriminator — `ios` = an APNs device "},{"name":"get_push_response","description":"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_u"},{"name":"get_stats","description":"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 tota"},{"name":"get_status","description":"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{c"},{"name":"list_audit_events","description":"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 /"},{"name":"get_audit_event","description":"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"},{"name":"list_device_service_groups","description":"List the device↔service-group membership edges (public.device_service_groups) — the delegation boundary: which devices belong to which service group. Resolves d"}],"toolCount":49,"toolsHash":"33b4db3c2c3c24948e585aaa20c94365c399a26f836fd358fc7a1ab4688c6bfd","serverName":"busymate-devtools","capabilities":["tools","resources","prompts"],"serverVersion":"1.0.1.918","protocolVersion":"2025-06-18"}},{"at":"2026-10-09T13:30:38.148Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":414,"error":null,"detail":{"tools":[{"name":"get_product_pricing","description":"Return the canonical Busymate DevTools plan prices and cloud phone/browser rental rates, with numeric amounts, USD currency, billing periods and https://busymat"},{"name":"list_breakpoint_events","description":"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/respo"},{"name":"get_device","description":"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 e"},{"name":"list_devices","description":"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 `a"},{"name":"get_device_status","description":"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, "},{"name":"get_device_health","description":"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"},{"name":"list_device_events","description":"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 th"},{"name":"list_device_audit_modes","description":"Every device with AUDIT-mode telemetry currently armed — device_uuid + name, enabled, expires_at + expires_in, level, categories, who armed it (set_by_label) an"},{"name":"test_pac_connection","description":"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 retur"},{"name":"list_screen_share_recordings","description":"List saved screen-share RECORDINGS (#1916) — operator-captured mp4s of live share streams (the dashboard viewer's Record control), saved for later reference in "},{"name":"get_screen_share_recording","description":"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 "},{"name":"get_my_account","description":"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"},{"name":"get_device_egress_status","description":"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 d"},{"name":"get_device_egress_fail_posture","description":"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 "},{"name":"get_entry_count","description":"Count entries in a workspace (workspace_id or workspace_slug) with optional device/host/method/status/search filters."},{"name":"list_wipe_jobs","description":"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."},{"name":"get_entry_counts_freshness","description":"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 / d"},{"name":"search_entries","description":"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 req"},{"name":"list_entries","description":"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) "},{"name":"get_entry","description":"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 HEADER"},{"name":"export_har","description":"Export captured entries as a HAR 1.2 log. Optionally scope by device, host, and date range."},{"name":"inspect_requests","description":"Deep-inspect FULL captured request/response detail for ONE host — method, URL, request + response HEADERS, and request + response BODIES (size-capped). The tool"},{"name":"summarize_device_traffic","description":"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. R"},{"name":"list_service_groups","description":"List every service group (full rows incl. ssl_proxy_domains) with each group's primary_agent + ordered agents[] from the service_group_agents join."},{"name":"get_service_group","description":"Get one service group by id or name."},{"name":"list_tags","description":"List every tag (id, name, color, patterns)."},{"name":"get_device_settings","description":"Read settings_device for one device (device_uuid or deviceName)."},{"name":"get_subscription","description":"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"},{"name":"list_invoices","description":"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 OAut"},{"name":"get_usage","description":"Return the caller's OWN metered usage rollup (metric `captured_entries` = count of captured entries per device per period; from stripe_usage_events, owner-scope"},{"name":"get_block_rules_device","description":"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 t"},{"name":"list_todos","description":"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 accoun"},{"name":"get_todo","description":"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 }."},{"name":"list_advisor_findings","description":"Browse the ADVISOR CENTER findings (public.advisor_findings) — the advisor-monitor's deduped audit/health findings you see on the dashboard /advisor view. Filte"},{"name":"get_advisor_finding","description":"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 /audi"},{"name":"share_advisor_finding","description":"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 f"},{"name":"list_issue_reports","description":"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 defau"},{"name":"list_workspaces","description":"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"},{"name":"get_workspace","description":"Get one workspace by id or slug."},{"name":"list_tabs","description":"List a workspace's tabs (workspace_id or workspace_slug)."},{"name":"list_snapshots","description":"List snapshot files in the snapshots storage bucket."},{"name":"download_snapshot","description":"Get a 5-minute signed download URL for a snapshot file (name from list_snapshots)."},{"name":"list_push_tokens","description":"List registered device push tokens (masked), PLATFORM-ROUTED (#1542): each `device_push_tokens` row carries a `platform` discriminator — `ios` = an APNs device "},{"name":"get_push_response","description":"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_u"},{"name":"get_stats","description":"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 tota"},{"name":"get_status","description":"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{c"},{"name":"list_audit_events","description":"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 /"},{"name":"get_audit_event","description":"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"},{"name":"list_device_service_groups","description":"List the device↔service-group membership edges (public.device_service_groups) — the delegation boundary: which devices belong to which service group. Resolves d"}],"toolCount":49,"toolsHash":"33b4db3c2c3c24948e585aaa20c94365c399a26f836fd358fc7a1ab4688c6bfd","serverName":"busymate-devtools","capabilities":["tools","resources","prompts"],"serverVersion":"1.0.1.918","protocolVersion":"2025-06-18"}},{"at":"2026-10-09T06:22:38.827Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":168,"error":null,"detail":{"tools":[{"name":"get_product_pricing","description":"Return the canonical Busymate DevTools plan prices and cloud phone/browser rental rates, with numeric amounts, USD currency, billing periods and https://busymat"},{"name":"list_breakpoint_events","description":"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/respo"},{"name":"get_device","description":"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 e"},{"name":"list_devices","description":"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 `a"},{"name":"get_device_status","description":"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, "},{"name":"get_device_health","description":"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"},{"name":"list_device_events","description":"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 th"},{"name":"list_device_audit_modes","description":"Every device with AUDIT-mode telemetry currently armed — device_uuid + name, enabled, expires_at + expires_in, level, categories, who armed it (set_by_label) an"},{"name":"test_pac_connection","description":"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 retur"},{"name":"list_screen_share_recordings","description":"List saved screen-share RECORDINGS (#1916) — operator-captured mp4s of live share streams (the dashboard viewer's Record control), saved for later reference in "},{"name":"get_screen_share_recording","description":"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 "},{"name":"get_my_account","description":"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"},{"name":"get_device_egress_status","description":"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 d"},{"name":"get_device_egress_fail_posture","description":"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 "},{"name":"get_entry_count","description":"Count entries in a workspace (workspace_id or workspace_slug) with optional device/host/method/status/search filters."},{"name":"list_wipe_jobs","description":"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."},{"name":"get_entry_counts_freshness","description":"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 / d"},{"name":"search_entries","description":"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 req"},{"name":"list_entries","description":"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) "},{"name":"get_entry","description":"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 HEADER"},{"name":"export_har","description":"Export captured entries as a HAR 1.2 log. Optionally scope by device, host, and date range."},{"name":"inspect_requests","description":"Deep-inspect FULL captured request/response detail for ONE host — method, URL, request + response HEADERS, and request + response BODIES (size-capped). The tool"},{"name":"summarize_device_traffic","description":"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. R"},{"name":"list_service_groups","description":"List every service group (full rows incl. ssl_proxy_domains) with each group's primary_agent + ordered agents[] from the service_group_agents join."},{"name":"get_service_group","description":"Get one service group by id or name."},{"name":"list_tags","description":"List every tag (id, name, color, patterns)."},{"name":"get_device_settings","description":"Read settings_device for one device (device_uuid or deviceName)."},{"name":"get_subscription","description":"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"},{"name":"list_invoices","description":"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 OAut"},{"name":"get_usage","description":"Return the caller's OWN metered usage rollup (metric `captured_entries` = count of captured entries per device per period; from stripe_usage_events, owner-scope"},{"name":"get_block_rules_device","description":"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 t"},{"name":"list_todos","description":"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 accoun"},{"name":"get_todo","description":"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 }."},{"name":"list_advisor_findings","description":"Browse the ADVISOR CENTER findings (public.advisor_findings) — the advisor-monitor's deduped audit/health findings you see on the dashboard /advisor view. Filte"},{"name":"get_advisor_finding","description":"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 /audi"},{"name":"share_advisor_finding","description":"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 f"},{"name":"list_issue_reports","description":"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 defau"},{"name":"list_workspaces","description":"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"},{"name":"get_workspace","description":"Get one workspace by id or slug."},{"name":"list_tabs","description":"List a workspace's tabs (workspace_id or workspace_slug)."},{"name":"list_snapshots","description":"List snapshot files in the snapshots storage bucket."},{"name":"download_snapshot","description":"Get a 5-minute signed download URL for a snapshot file (name from list_snapshots)."},{"name":"list_push_tokens","description":"List registered device push tokens (masked), PLATFORM-ROUTED (#1542): each `device_push_tokens` row carries a `platform` discriminator — `ios` = an APNs device "},{"name":"get_push_response","description":"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_u"},{"name":"get_stats","description":"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 tota"},{"name":"get_status","description":"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{c"},{"name":"list_audit_events","description":"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 /"},{"name":"get_audit_event","description":"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"},{"name":"list_device_service_groups","description":"List the device↔service-group membership edges (public.device_service_groups) — the delegation boundary: which devices belong to which service group. Resolves d"}],"toolCount":49,"toolsHash":"33b4db3c2c3c24948e585aaa20c94365c399a26f836fd358fc7a1ab4688c6bfd","serverName":"busymate-devtools","capabilities":["tools","resources","prompts"],"serverVersion":"1.0.1.918","protocolVersion":"2025-06-18"}},{"at":"2026-10-09T00:26:00.834Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":249,"error":null,"detail":{"tools":[{"name":"get_product_pricing","description":"Return the canonical Busymate DevTools plan prices and cloud phone/browser rental rates, with numeric amounts, USD currency, billing periods and https://busymat"},{"name":"list_breakpoint_events","description":"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/respo"},{"name":"get_device","description":"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 e"},{"name":"list_devices","description":"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 `a"},{"name":"get_device_status","description":"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, "},{"name":"get_device_health","description":"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"},{"name":"list_device_events","description":"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 th"},{"name":"list_device_audit_modes","description":"Every device with AUDIT-mode telemetry currently armed — device_uuid + name, enabled, expires_at + expires_in, level, categories, who armed it (set_by_label) an"},{"name":"test_pac_connection","description":"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 retur"},{"name":"list_screen_share_recordings","description":"List saved screen-share RECORDINGS (#1916) — operator-captured mp4s of live share streams (the dashboard viewer's Record control), saved for later reference in "},{"name":"get_screen_share_recording","description":"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 "},{"name":"get_my_account","description":"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"},{"name":"get_device_egress_status","description":"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 d"},{"name":"get_device_egress_fail_posture","description":"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 "},{"name":"get_entry_count","description":"Count entries in a workspace (workspace_id or workspace_slug) with optional device/host/method/status/search filters."},{"name":"list_wipe_jobs","description":"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."},{"name":"get_entry_counts_freshness","description":"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 / d"},{"name":"search_entries","description":"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 req"},{"name":"list_entries","description":"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) "},{"name":"get_entry","description":"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 HEADER"},{"name":"export_har","description":"Export captured entries as a HAR 1.2 log. Optionally scope by device, host, and date range."},{"name":"inspect_requests","description":"Deep-inspect FULL captured request/response detail for ONE host — method, URL, request + response HEADERS, and request + response BODIES (size-capped). The tool"},{"name":"summarize_device_traffic","description":"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. R"},{"name":"list_service_groups","description":"List every service group (full rows incl. ssl_proxy_domains) with each group's primary_agent + ordered agents[] from the service_group_agents join."},{"name":"get_service_group","description":"Get one service group by id or name."},{"name":"list_tags","description":"List every tag (id, name, color, patterns)."},{"name":"get_device_settings","description":"Read settings_device for one device (device_uuid or deviceName)."},{"name":"get_subscription","description":"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"},{"name":"list_invoices","description":"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 OAut"},{"name":"get_usage","description":"Return the caller's OWN metered usage rollup (metric `captured_entries` = count of captured entries per device per period; from stripe_usage_events, owner-scope"},{"name":"get_block_rules_device","description":"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 t"},{"name":"list_todos","description":"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 accoun"},{"name":"get_todo","description":"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 }."},{"name":"list_advisor_findings","description":"Browse the ADVISOR CENTER findings (public.advisor_findings) — the advisor-monitor's deduped audit/health findings you see on the dashboard /advisor view. Filte"},{"name":"get_advisor_finding","description":"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 /audi"},{"name":"share_advisor_finding","description":"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 f"},{"name":"list_issue_reports","description":"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 defau"},{"name":"list_workspaces","description":"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"},{"name":"get_workspace","description":"Get one workspace by id or slug."},{"name":"list_tabs","description":"List a workspace's tabs (workspace_id or workspace_slug)."},{"name":"list_snapshots","description":"List snapshot files in the snapshots storage bucket."},{"name":"download_snapshot","description":"Get a 5-minute signed download URL for a snapshot file (name from list_snapshots)."},{"name":"list_push_tokens","description":"List registered device push tokens (masked), PLATFORM-ROUTED (#1542): each `device_push_tokens` row carries a `platform` discriminator — `ios` = an APNs device "},{"name":"get_push_response","description":"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_u"},{"name":"get_stats","description":"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 tota"},{"name":"get_status","description":"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{c"},{"name":"list_audit_events","description":"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 /"},{"name":"get_audit_event","description":"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"},{"name":"list_device_service_groups","description":"List the device↔service-group membership edges (public.device_service_groups) — the delegation boundary: which devices belong to which service group. Resolves d"}],"toolCount":49,"toolsHash":"33b4db3c2c3c24948e585aaa20c94365c399a26f836fd358fc7a1ab4688c6bfd","serverName":"busymate-devtools","capabilities":["tools","resources","prompts"],"serverVersion":"1.0.1.918","protocolVersion":"2025-06-18"}},{"at":"2026-10-08T18:26:53.635Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":241,"error":null,"detail":{"tools":[{"name":"get_product_pricing","description":"Return the canonical Busymate DevTools plan prices and cloud phone/browser rental rates, with numeric amounts, USD currency, billing periods and https://busymat"},{"name":"list_breakpoint_events","description":"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/respo"},{"name":"get_device","description":"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 e"},{"name":"list_devices","description":"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 `a"},{"name":"get_device_status","description":"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, "},{"name":"get_device_health","description":"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"},{"name":"list_device_events","description":"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 th"},{"name":"list_device_audit_modes","description":"Every device with AUDIT-mode telemetry currently armed — device_uuid + name, enabled, expires_at + expires_in, level, categories, who armed it (set_by_label) an"},{"name":"test_pac_connection","description":"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 retur"},{"name":"list_screen_share_recordings","description":"List saved screen-share RECORDINGS (#1916) — operator-captured mp4s of live share streams (the dashboard viewer's Record control), saved for later reference in "},{"name":"get_screen_share_recording","description":"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 "},{"name":"get_my_account","description":"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"},{"name":"get_device_egress_status","description":"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 d"},{"name":"get_device_egress_fail_posture","description":"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 "},{"name":"get_entry_count","description":"Count entries in a workspace (workspace_id or workspace_slug) with optional device/host/method/status/search filters."},{"name":"list_wipe_jobs","description":"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."},{"name":"get_entry_counts_freshness","description":"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 / d"},{"name":"search_entries","description":"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 req"},{"name":"list_entries","description":"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) "},{"name":"get_entry","description":"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 HEADER"},{"name":"export_har","description":"Export captured entries as a HAR 1.2 log. Optionally scope by device, host, and date range."},{"name":"inspect_requests","description":"Deep-inspect FULL captured request/response detail for ONE host — method, URL, request + response HEADERS, and request + response BODIES (size-capped). The tool"},{"name":"summarize_device_traffic","description":"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. R"},{"name":"list_service_groups","description":"List every service group (full rows incl. ssl_proxy_domains) with each group's primary_agent + ordered agents[] from the service_group_agents join."},{"name":"get_service_group","description":"Get one service group by id or name."},{"name":"list_tags","description":"List every tag (id, name, color, patterns)."},{"name":"get_device_settings","description":"Read settings_device for one device (device_uuid or deviceName)."},{"name":"get_subscription","description":"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"},{"name":"list_invoices","description":"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 OAut"},{"name":"get_usage","description":"Return the caller's OWN metered usage rollup (metric `captured_entries` = count of captured entries per device per period; from stripe_usage_events, owner-scope"},{"name":"get_block_rules_device","description":"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 t"},{"name":"list_todos","description":"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 accoun"},{"name":"get_todo","description":"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 }."},{"name":"list_advisor_findings","description":"Browse the ADVISOR CENTER findings (public.advisor_findings) — the advisor-monitor's deduped audit/health findings you see on the dashboard /advisor view. Filte"},{"name":"get_advisor_finding","description":"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 /audi"},{"name":"share_advisor_finding","description":"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 f"},{"name":"list_issue_reports","description":"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 defau"},{"name":"list_workspaces","description":"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"},{"name":"get_workspace","description":"Get one workspace by id or slug."},{"name":"list_tabs","description":"List a workspace's tabs (workspace_id or workspace_slug)."},{"name":"list_snapshots","description":"List snapshot files in the snapshots storage bucket."},{"name":"download_snapshot","description":"Get a 5-minute signed download URL for a snapshot file (name from list_snapshots)."},{"name":"list_push_tokens","description":"List registered device push tokens (masked), PLATFORM-ROUTED (#1542): each `device_push_tokens` row carries a `platform` discriminator — `ios` = an APNs device "},{"name":"get_push_response","description":"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_u"},{"name":"get_stats","description":"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 tota"},{"name":"get_status","description":"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{c"},{"name":"list_audit_events","description":"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 /"},{"name":"get_audit_event","description":"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"},{"name":"list_device_service_groups","description":"List the device↔service-group membership edges (public.device_service_groups) — the delegation boundary: which devices belong to which service group. Resolves d"}],"toolCount":49,"toolsHash":"33b4db3c2c3c24948e585aaa20c94365c399a26f836fd358fc7a1ab4688c6bfd","serverName":"busymate-devtools","capabilities":["tools","resources","prompts"],"serverVersion":"1.0.1.918","protocolVersion":"2025-06-18"}},{"at":"2026-10-08T11:23:24.086Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":229,"error":null,"detail":{"tools":[{"name":"get_product_pricing","description":"Return the canonical Busymate DevTools plan prices and cloud phone/browser rental rates, with numeric amounts, USD currency, billing periods and https://busymat"},{"name":"list_breakpoint_events","description":"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/respo"},{"name":"get_device","description":"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 e"},{"name":"list_devices","description":"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 `a"},{"name":"get_device_status","description":"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, "},{"name":"get_device_health","description":"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"},{"name":"list_device_events","description":"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 th"},{"name":"list_device_audit_modes","description":"Every device with AUDIT-mode telemetry currently armed — device_uuid + name, enabled, expires_at + expires_in, level, categories, who armed it (set_by_label) an"},{"name":"test_pac_connection","description":"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 retur"},{"name":"list_screen_share_recordings","description":"List saved screen-share RECORDINGS (#1916) — operator-captured mp4s of live share streams (the dashboard viewer's Record control), saved for later reference in "},{"name":"get_screen_share_recording","description":"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 "},{"name":"get_my_account","description":"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"},{"name":"get_device_egress_status","description":"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 d"},{"name":"get_device_egress_fail_posture","description":"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 "},{"name":"get_entry_count","description":"Count entries in a workspace (workspace_id or workspace_slug) with optional device/host/method/status/search filters."},{"name":"list_wipe_jobs","description":"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."},{"name":"get_entry_counts_freshness","description":"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 / d"},{"name":"search_entries","description":"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 req"},{"name":"list_entries","description":"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) "},{"name":"get_entry","description":"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 HEADER"},{"name":"export_har","description":"Export captured entries as a HAR 1.2 log. Optionally scope by device, host, and date range."},{"name":"inspect_requests","description":"Deep-inspect FULL captured request/response detail for ONE host — method, URL, request + response HEADERS, and request + response BODIES (size-capped). The tool"},{"name":"summarize_device_traffic","description":"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. R"},{"name":"list_service_groups","description":"List every service group (full rows incl. ssl_proxy_domains) with each group's primary_agent + ordered agents[] from the service_group_agents join."},{"name":"get_service_group","description":"Get one service group by id or name."},{"name":"list_tags","description":"List every tag (id, name, color, patterns)."},{"name":"get_device_settings","description":"Read settings_device for one device (device_uuid or deviceName)."},{"name":"get_subscription","description":"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"},{"name":"list_invoices","description":"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 OAut"},{"name":"get_usage","description":"Return the caller's OWN metered usage rollup (metric `captured_entries` = count of captured entries per device per period; from stripe_usage_events, owner-scope"},{"name":"get_block_rules_device","description":"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 t"},{"name":"list_todos","description":"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 accoun"},{"name":"get_todo","description":"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 }."},{"name":"list_advisor_findings","description":"Browse the ADVISOR CENTER findings (public.advisor_findings) — the advisor-monitor's deduped audit/health findings you see on the dashboard /advisor view. Filte"},{"name":"get_advisor_finding","description":"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 /audi"},{"name":"share_advisor_finding","description":"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 f"},{"name":"list_issue_reports","description":"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 defau"},{"name":"list_workspaces","description":"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"},{"name":"get_workspace","description":"Get one workspace by id or slug."},{"name":"list_tabs","description":"List a workspace's tabs (workspace_id or workspace_slug)."},{"name":"list_snapshots","description":"List snapshot files in the snapshots storage bucket."},{"name":"download_snapshot","description":"Get a 5-minute signed download URL for a snapshot file (name from list_snapshots)."},{"name":"list_push_tokens","description":"List registered device push tokens (masked), PLATFORM-ROUTED (#1542): each `device_push_tokens` row carries a `platform` discriminator — `ios` = an APNs device "},{"name":"get_push_response","description":"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_u"},{"name":"get_stats","description":"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 tota"},{"name":"get_status","description":"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{c"},{"name":"list_audit_events","description":"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 /"},{"name":"get_audit_event","description":"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"},{"name":"list_device_service_groups","description":"List the device↔service-group membership edges (public.device_service_groups) — the delegation boundary: which devices belong to which service group. Resolves d"}],"toolCount":49,"toolsHash":"33b4db3c2c3c24948e585aaa20c94365c399a26f836fd358fc7a1ab4688c6bfd","serverName":"busymate-devtools","capabilities":["tools","resources","prompts"],"serverVersion":"1.0.1.915","protocolVersion":"2025-06-18"}},{"at":"2026-10-08T04:26:47.075Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":271,"error":null,"detail":{"tools":[{"name":"get_product_pricing","description":"Return the canonical Busymate DevTools plan prices and cloud phone/browser rental rates, with numeric amounts, USD currency, billing periods and https://busymat"},{"name":"list_breakpoint_events","description":"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/respo"},{"name":"get_device","description":"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 e"},{"name":"list_devices","description":"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 `a"},{"name":"get_device_status","description":"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, "},{"name":"get_device_health","description":"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"},{"name":"list_device_events","description":"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 th"},{"name":"list_device_audit_modes","description":"Every device with AUDIT-mode telemetry currently armed — device_uuid + name, enabled, expires_at + expires_in, level, categories, who armed it (set_by_label) an"},{"name":"test_pac_connection","description":"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 retur"},{"name":"list_screen_share_recordings","description":"List saved screen-share RECORDINGS (#1916) — operator-captured mp4s of live share streams (the dashboard viewer's Record control), saved for later reference in "},{"name":"get_screen_share_recording","description":"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 "},{"name":"get_my_account","description":"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"},{"name":"get_device_egress_status","description":"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 d"},{"name":"get_device_egress_fail_posture","description":"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 "},{"name":"get_entry_count","description":"Count entries in a workspace (workspace_id or workspace_slug) with optional device/host/method/status/search filters."},{"name":"list_wipe_jobs","description":"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."},{"name":"get_entry_counts_freshness","description":"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 / d"},{"name":"search_entries","description":"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 req"},{"name":"list_entries","description":"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) "},{"name":"get_entry","description":"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 HEADER"},{"name":"export_har","description":"Export captured entries as a HAR 1.2 log. Optionally scope by device, host, and date range."},{"name":"inspect_requests","description":"Deep-inspect FULL captured request/response detail for ONE host — method, URL, request + response HEADERS, and request + response BODIES (size-capped). The tool"},{"name":"summarize_device_traffic","description":"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. R"},{"name":"list_service_groups","description":"List every service group (full rows incl. ssl_proxy_domains) with each group's primary_agent + ordered agents[] from the service_group_agents join."},{"name":"get_service_group","description":"Get one service group by id or name."},{"name":"list_tags","description":"List every tag (id, name, color, patterns)."},{"name":"get_device_settings","description":"Read settings_device for one device (device_uuid or deviceName)."},{"name":"get_subscription","description":"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"},{"name":"list_invoices","description":"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 OAut"},{"name":"get_usage","description":"Return the caller's OWN metered usage rollup (metric `captured_entries` = count of captured entries per device per period; from stripe_usage_events, owner-scope"},{"name":"get_block_rules_device","description":"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 t"},{"name":"list_todos","description":"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 accoun"},{"name":"get_todo","description":"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 }."},{"name":"list_advisor_findings","description":"Browse the ADVISOR CENTER findings (public.advisor_findings) — the advisor-monitor's deduped audit/health findings you see on the dashboard /advisor view. Filte"},{"name":"get_advisor_finding","description":"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 /audi"},{"name":"share_advisor_finding","description":"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 f"},{"name":"list_issue_reports","description":"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 defau"},{"name":"list_workspaces","description":"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"},{"name":"get_workspace","description":"Get one workspace by id or slug."},{"name":"list_tabs","description":"List a workspace's tabs (workspace_id or workspace_slug)."},{"name":"list_snapshots","description":"List snapshot files in the snapshots storage bucket."},{"name":"download_snapshot","description":"Get a 5-minute signed download URL for a snapshot file (name from list_snapshots)."},{"name":"list_push_tokens","description":"List registered device push tokens (masked), PLATFORM-ROUTED (#1542): each `device_push_tokens` row carries a `platform` discriminator — `ios` = an APNs device "},{"name":"get_push_response","description":"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_u"},{"name":"get_stats","description":"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 tota"},{"name":"get_status","description":"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{c"},{"name":"list_audit_events","description":"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 /"},{"name":"get_audit_event","description":"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"},{"name":"list_device_service_groups","description":"List the device↔service-group membership edges (public.device_service_groups) — the delegation boundary: which devices belong to which service group. Resolves d"}],"toolCount":49,"toolsHash":"33b4db3c2c3c24948e585aaa20c94365c399a26f836fd358fc7a1ab4688c6bfd","serverName":"busymate-devtools","capabilities":["tools","resources","prompts"],"serverVersion":"1.0.1.915","protocolVersion":"2025-06-18"}}],"tools":[{"name":"get_product_pricing","description":"Return the canonical Busymate DevTools plan prices and cloud phone/browser rental rates, with numeric amounts, USD currency, billing periods and https://busymat"},{"name":"list_breakpoint_events","description":"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/respo"},{"name":"get_device","description":"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 e"},{"name":"list_devices","description":"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 `a"},{"name":"get_device_status","description":"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, "},{"name":"get_device_health","description":"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"},{"name":"list_device_events","description":"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 th"},{"name":"list_device_audit_modes","description":"Every device with AUDIT-mode telemetry currently armed — device_uuid + name, enabled, expires_at + expires_in, level, categories, who armed it (set_by_label) an"},{"name":"test_pac_connection","description":"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 retur"},{"name":"list_screen_share_recordings","description":"List saved screen-share RECORDINGS (#1916) — operator-captured mp4s of live share streams (the dashboard viewer's Record control), saved for later reference in "},{"name":"get_screen_share_recording","description":"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 "},{"name":"get_my_account","description":"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"},{"name":"get_device_egress_status","description":"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 d"},{"name":"get_device_egress_fail_posture","description":"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 "},{"name":"get_entry_count","description":"Count entries in a workspace (workspace_id or workspace_slug) with optional device/host/method/status/search filters."},{"name":"list_wipe_jobs","description":"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."},{"name":"get_entry_counts_freshness","description":"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 / d"},{"name":"search_entries","description":"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 req"},{"name":"list_entries","description":"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) "},{"name":"get_entry","description":"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 HEADER"},{"name":"export_har","description":"Export captured entries as a HAR 1.2 log. Optionally scope by device, host, and date range."},{"name":"inspect_requests","description":"Deep-inspect FULL captured request/response detail for ONE host — method, URL, request + response HEADERS, and request + response BODIES (size-capped). The tool"},{"name":"summarize_device_traffic","description":"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. R"},{"name":"list_service_groups","description":"List every service group (full rows incl. ssl_proxy_domains) with each group's primary_agent + ordered agents[] from the service_group_agents join."},{"name":"get_service_group","description":"Get one service group by id or name."},{"name":"list_tags","description":"List every tag (id, name, color, patterns)."},{"name":"get_device_settings","description":"Read settings_device for one device (device_uuid or deviceName)."},{"name":"get_subscription","description":"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"},{"name":"list_invoices","description":"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 OAut"},{"name":"get_usage","description":"Return the caller's OWN metered usage rollup (metric `captured_entries` = count of captured entries per device per period; from stripe_usage_events, owner-scope"},{"name":"get_block_rules_device","description":"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 t"},{"name":"list_todos","description":"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 accoun"},{"name":"get_todo","description":"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 }."},{"name":"list_advisor_findings","description":"Browse the ADVISOR CENTER findings (public.advisor_findings) — the advisor-monitor's deduped audit/health findings you see on the dashboard /advisor view. Filte"},{"name":"get_advisor_finding","description":"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 /audi"},{"name":"share_advisor_finding","description":"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 f"},{"name":"list_issue_reports","description":"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 defau"},{"name":"list_workspaces","description":"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"},{"name":"get_workspace","description":"Get one workspace by id or slug."},{"name":"list_tabs","description":"List a workspace's tabs (workspace_id or workspace_slug)."},{"name":"list_snapshots","description":"List snapshot files in the snapshots storage bucket."},{"name":"download_snapshot","description":"Get a 5-minute signed download URL for a snapshot file (name from list_snapshots)."},{"name":"list_push_tokens","description":"List registered device push tokens (masked), PLATFORM-ROUTED (#1542): each `device_push_tokens` row carries a `platform` discriminator — `ios` = an APNs device "},{"name":"get_push_response","description":"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_u"},{"name":"get_stats","description":"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 tota"},{"name":"get_status","description":"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{c"},{"name":"list_audit_events","description":"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 /"},{"name":"get_audit_event","description":"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"},{"name":"list_device_service_groups","description":"List the device↔service-group membership edges (public.device_service_groups) — the delegation boundary: which devices belong to which service group. Resolves d"}],"package":null,"toolSurface":{"id":"ts_v5m7e8ddeq48","endpointId":"ep_ghkpyfn3vas9","hash":"33b4db3c2c3c24948e585aaa20c94365c399a26f836fd358fc7a1ab4688c6bfd","toolCount":49,"serverName":"busymate-devtools","serverVersion":"1.0.1.915","protocolVersion":"2025-06-18","firstSeenAt":"2026-10-06T21:24:41.139Z","lastSeenAt":"2026-10-10T13:25:13.190Z","observations":15,"toolNames":["get_product_pricing","list_breakpoint_events","get_device","list_devices","get_device_status","get_device_health","list_device_events","list_device_audit_modes","test_pac_connection","list_screen_share_recordings","get_screen_share_recording","get_my_account","get_device_egress_status","get_device_egress_fail_posture","get_entry_count","list_wipe_jobs","get_entry_counts_freshness","search_entries","list_entries","get_entry","export_har","inspect_requests","summarize_device_traffic","list_service_groups","get_service_group","list_tags","get_device_settings","get_subscription","list_invoices","get_usage","get_block_rules_device","list_todos","get_todo","list_advisor_findings","get_advisor_finding","share_advisor_finding","list_issue_reports","list_workspaces","get_workspace","list_tabs","list_snapshots","download_snapshot","list_push_tokens","get_push_response","get_stats","get_status","list_audit_events","get_audit_event","list_device_service_groups"],"distinctSurfaces":2},"endpointFacts":[{"id":"ep_ghkpyfn3vas9","url":"https://mcp.busymate.dev","type":"mcp_streamable_http","factsCheckedAt":"2026-10-07T22:23:33.158Z","auth":{"observedAt":"2026-10-07T22:23:33.195Z","authRequired":false,"scheme":null,"resourceMetadata":{"url":"https://mcp.busymate.dev/.well-known/oauth-protected-resource","resource":"https://mcp.busymate.dev","authorizationServers":["https://mcp.busymate.dev"],"scopesSupported":["mcp"]},"authorizationServer":{"url":"https://mcp.busymate.dev/.well-known/oauth-authorization-server","issuer":"https://mcp.busymate.dev","grantTypesSupported":["authorization_code","refresh_token"],"codeChallengeMethodsSupported":["S256"],"tokenEndpointAuthMethodsSupported":["none"],"dynamicClientRegistration":true,"dpopSigningAlgValuesSupported":[],"clientIdMetadataDocumentSupported":null},"conformance":{"dpop":false,"rfc8414":true,"rfc9728":true,"pkceS256":true,"clientIdMetadataDocument":false,"dynamicClientRegistration":true}},"tls":{"observedAt":"2026-10-07T22:23:33.225Z","protocol":"TLSv1.3","chainValid":true,"chainError":null,"hostMatches":true,"subject":"api.busymate.dev","issuer":{"commonName":"YE2","organization":"Let's Encrypt"},"validFrom":"2026-08-18T16:10:06.000Z","validTo":"2026-11-16T16:10:05.000Z","daysToExpiry":37,"sanCount":2,"fingerprint256":"78:64:8B:F1:86:DF:FA:1A:B1:C3:86:7A:B6:81:2F:42:DF:50:12:DE:36:C6:FD:9F:57:57:1F:A8:EF:0B:63:13"}}]},"verification":{"claimed":false,"claimedAt":null,"proofs":[]},"provenance":{"sources":[{"source":"mcp_registry","key":"dev.busymate/busymate-devtools","url":"https://registry.modelcontextprotocol.io/v0/servers/dev.busymate%2Fbusymate-devtools","firstSeenAt":"2026-09-05T22:18:29.484Z","fetchedAt":"2026-10-09T13:21:50.545Z","normalizedAt":"2026-10-09T13:21:50.545Z"}]},"firstSeenAt":"2026-09-05T22:18:29.484Z","updatedAt":"2026-10-10T13:27:36.660Z"}