MCP Matrix
One table per question, all of them derived from TOOL_REGISTRY and ToolGroup in src-tauri/src/mcp/server.rs. The registry is the source of truth; this page is a projection of it, and bash scripts/mcp-matrix.sh --check fails when the two disagree.
Tool Reference is the companion page: it carries argument schemas, worked examples and the prose a generator cannot write. This page carries the facts a human should never retype.
The surfaces, counted
| Surface | What defines it | Tools |
|---|---|---|
| Whole registry | every row of TOOL_REGISTRY | 272 |
| Default surface | ToolGroup::admitted_by(&ToolGroup::all(), …) | 181 |
| Opt-in | its toolset is admitted by neither, so it is off even under --toolsets all and must be named | 91 |
| Build: OSS | no #[cfg] gate on the row | 118 |
| Build: Pro board | tasks build features | 90 |
| Build: Visual editor | tasks + visual-editor build features | 60 |
| Build: Visual editor + extension arm | extension-driver + tasks + visual-editor build features | 4 |
Build tiers are cumulative in the obvious direction: a visual-editor build registers everything an OSS build does. They are read off each row's own #[cfg], which is the only thing that decides whether a tool is compiled in at all.
Toolsets
| Toolset | ToolGroup | On by default | Build | Tools | Description |
|---|---|---|---|---|---|
projects | ToolGroup::Projects | yes | OSS | 13 | Registry CRUD + setup: list, status, detect, add, update, remove, export, import, setup. |
lifecycle | ToolGroup::Lifecycle | yes | OSS | 4 | start, stop, restart, stop_all. |
diagnostics | ToolGroup::Diagnostics | yes | OSS | 4 | logs, doctor, sidecar_status. |
scaffold | ToolGroup::Scaffold | yes | OSS | 1 | setup_from_template — runs upstream scaffolders (network access). |
groups | ToolGroup::Groups | yes | OSS | 7 | Group CRUD + batch lifecycle: list, create, update, remove, start, stop, restart. |
tunnels | ToolGroup::Tunnels | yes | OSS | 5 | Read-only tunnel visibility: list active public tunnels, look up one by id, and list saved SSH connections (hosts). |
ssh-exec | ToolGroup::SshExec | no — name ssh-exec | OSS | 15 | Remote command execution on a saved SSH host (portbay_ssh_execute), plus the read-only alias directory that names the hosts it can run on (portbay_remote_hosts_list). |
runtimes | ToolGroup::Runtimes | yes | OSS | 4 | Runtime management: list detected versions, set defaults, add/remove manual paths. |
databases | ToolGroup::Databases | yes | OSS | 15 | Database engines + owned instances: list, create, lifecycle, link, auto-start. |
dns | ToolGroup::Dns | yes | OSS | 3 | DNS / domains: resolver status, DNS records, domain-suffix change. |
sandbox | ToolGroup::Sandbox | yes | OSS | 4 | Sandboxed Run (macOS Seatbelt): status, enable, disable, violations. |
inspector | ToolGroup::Inspector | yes | OSS | 2 | HTTP request inspector: recent Caddy requests, clear the log, replay (replay is app-only from this tool — see its description). |
certs | ToolGroup::Certs | yes | OSS | 3 | Local-HTTPS certificates: per-project cert info, reissue. |
migrate | ToolGroup::Migrate | no — name migrate | OSS | 3 | Migration import from other local-dev tools (Herd / ServBay / MAMP): detect sources, preview their sites, import into the registry. |
secrets | ToolGroup::Secrets | yes | OSS | 14 | PortBay's local secrets vault: set/list/status/validate/import/delete per-project secrets. |
secrets-transfer | ToolGroup::SecretsTransfer | no — name secrets-transfer | OSS | 2 | Bulk secret transfer between PortBay's vault and an EXTERNAL secret manager: portbay_secrets_import_from (pull every secret in) and portbay_secrets_export_to (push every secret out). |
tasks | ToolGroup::Tasks | yes | Pro board | 35 | Per-project task board + session hand-off: list/next/create/ack/update cards, read/append the rolling hand-off log. |
connectors | ToolGroup::Connectors | yes | Pro board | 11 | External business/task systems connected to PortBay. |
capture | ToolGroup::Capture | no — name capture | OSS | 4 | Screen capture: read-only capture history + (approval-gated) programmatic screenshot / OCR. |
workflows | ToolGroup::Workflows | no — name workflows | Pro board | 36 | Outcome workflow recipes + local case files. |
browser | ToolGroup::Browser | yes | Visual editor · Visual editor + extension arm | 31 | Visible browser companion sessions on a PortBay-managed Chrome profile. |
browser-io | ToolGroup::BrowserIo | yes — rides browser | Visual editor | 25 | The browser companion's STATE and WIRE half: cookies, Web Storage, network capture / mocking, frames, dialogs, file download and upload, and drag. |
imagegen | ToolGroup::Imagegen | no — name imagegen | OSS | 2 | On-device image generation (the portbay-imagegen diffusion sidecar). |
stt | ToolGroup::Stt | no — name stt | OSS | 2 | On-device speech-to-text: transcribe an existing audio file (the portbay-stt sidecar's transcribe-file op). |
tts | ToolGroup::Tts | no — name tts | OSS | 1 | On-device text-to-speech: synthesize speech from text into an audio FILE (the portbay-stt sidecar's tts-synthesize op on macOS, a system piper install on Linux). |
websearch | ToolGroup::Websearch | no — name websearch | Pro board | 3 | Web search through PortBay's pluggable search providers (DuckDuckGo / SearXNG keyless, Tavily / Brave keyed). |
verify | ToolGroup::Verify | no — name verify | Visual editor | 1 | Read-only run summaries from the Pro visual editor's Tier-2 auto-verify loop (P2.3). |
editor | ToolGroup::Editor | no — name editor | Visual editor | 7 | Read-only inspection of the Pro visual editor's persisted state for a BYO-agent (P2.4): the staged working diff and the visual-edit history ledger. |
delivery | ToolGroup::Delivery | no — name delivery | Pro board | 5 | The board-level delivery pipeline: plan a delivery from the Done column, run it, read it, resume it, cancel it. |
ssh-ops | ToolGroup::SshOps | no — name ssh-ops | OSS | 10 | SSH-OPS views of a saved host (capabilities, Docker, systemd services, health, security, exposure, backups, PaaS and Kubernetes reports, one container's redacted inspect, a bounded log tail) and the typed actions an assigned agent runs under its task grant. |
Tools
In registry order. Changes state is TOOL_REGISTRY's own is_mutating flag. Default says whether the tool is on the default surface; a no means its toolset must be named explicitly.
| Tool | Toolset | Changes state | Default | Build |
|---|---|---|---|---|
portbay_list_projects | projects | no | yes | OSS |
portbay_status | projects | no | yes | OSS |
portbay_target | projects | no | yes | OSS |
portbay_detect_project | projects | no | yes | OSS |
portbay_detect_workspace_apps | projects | no | yes | OSS |
portbay_list_recipes | projects | no | yes | OSS |
portbay_setup_from_recipe | projects | yes | yes | OSS |
portbay_add_project | projects | yes | yes | OSS |
portbay_update_project | projects | yes | yes | OSS |
portbay_remove_project | projects | yes | yes | OSS |
portbay_export_config | projects | yes | yes | OSS |
portbay_import_config | projects | yes | yes | OSS |
portbay_setup | projects | yes | yes | OSS |
portbay_start | lifecycle | yes | yes | OSS |
portbay_stop | lifecycle | yes | yes | OSS |
portbay_restart | lifecycle | yes | yes | OSS |
portbay_stop_all | lifecycle | yes | yes | OSS |
portbay_logs | diagnostics | no | yes | OSS |
portbay_doctor | diagnostics | no | yes | OSS |
portbay_release_preflight | diagnostics | yes | yes | OSS |
portbay_sidecar_status | diagnostics | no | yes | OSS |
portbay_setup_from_template | scaffold | yes | yes | OSS |
portbay_list_groups | groups | no | yes | OSS |
portbay_create_group | groups | yes | yes | OSS |
portbay_update_group | groups | yes | yes | OSS |
portbay_remove_group | groups | yes | yes | OSS |
portbay_start_group | groups | yes | yes | OSS |
portbay_stop_group | groups | yes | yes | OSS |
portbay_restart_group | groups | yes | yes | OSS |
portbay_list_tunnels | tunnels | no | yes | OSS |
portbay_tunnel_status | tunnels | no | yes | OSS |
portbay_list_ssh_tunnels | tunnels | no | yes | OSS |
portbay_ssh_tunnel_status | tunnels | no | yes | OSS |
portbay_list_ssh_connections | tunnels | no | yes | OSS |
portbay_ssh_execute | ssh-exec | yes | no | OSS |
portbay_remote_exec | ssh-exec | yes | no | OSS |
portbay_remote_files_list | ssh-exec | no | no | OSS |
portbay_remote_file_read | ssh-exec | no | no | OSS |
portbay_remote_file_write | ssh-exec | yes | no | OSS |
portbay_deploy | ssh-exec | yes | no | OSS |
portbay_deploy_status | ssh-exec | no | no | OSS |
portbay_deploy_recipes_list | ssh-exec | no | no | OSS |
portbay_deploy_rollback | ssh-exec | yes | no | OSS |
portbay_remote_hosts_list | ssh-exec | no | no | OSS |
portbay_project_deploy_target | ssh-exec | no | no | OSS |
portbay_remote_env_check | ssh-exec | no | no | OSS |
portbay_deploy_snippets_list | ssh-exec | no | no | OSS |
portbay_deploy_snippet_save | ssh-exec | yes | no | OSS |
portbay_deploy_snippet_run | ssh-exec | yes | no | OSS |
portbay_ssh_host_view | ssh-ops | no | no | OSS |
portbay_ssh_container_inspect | ssh-ops | no | no | OSS |
portbay_ssh_logs_tail | ssh-ops | no | no | OSS |
portbay_ssh_kube_exec | ssh-ops | yes | no | OSS |
portbay_ssh_kube_debug | ssh-ops | yes | no | OSS |
portbay_ssh_kube_read_as_root | ssh-ops | no | no | OSS |
portbay_ssh_container_action | ssh-ops | yes | no | OSS |
portbay_ssh_service_restart | ssh-ops | yes | no | OSS |
portbay_ssh_hardening_preview | ssh-ops | no | no | OSS |
portbay_ssh_hardening_apply | ssh-ops | yes | no | OSS |
portbay_list_runtimes | runtimes | no | yes | OSS |
portbay_set_default_runtime | runtimes | yes | yes | OSS |
portbay_add_runtime_path | runtimes | yes | yes | OSS |
portbay_remove_runtime_path | runtimes | yes | yes | OSS |
portbay_list_database_engines | databases | no | yes | OSS |
portbay_list_databases | databases | no | yes | OSS |
portbay_database_connection | databases | no | yes | OSS |
portbay_db_schema | databases | no | yes | OSS |
portbay_db_query | databases | no | yes | OSS |
portbay_db_explain | databases | no | yes | OSS |
portbay_db_execute | databases | yes | yes | OSS |
portbay_create_database | databases | yes | yes | OSS |
portbay_remove_database | databases | yes | yes | OSS |
portbay_start_database | databases | yes | yes | OSS |
portbay_stop_database | databases | yes | yes | OSS |
portbay_restart_database | databases | yes | yes | OSS |
portbay_link_database | databases | yes | yes | OSS |
portbay_unlink_database | databases | yes | yes | OSS |
portbay_set_database_auto_start | databases | yes | yes | OSS |
portbay_dns_status | dns | no | yes | OSS |
portbay_list_dns_records | dns | no | yes | OSS |
portbay_set_domain_suffix | dns | yes | yes | OSS |
portbay_sandbox_status | sandbox | no | yes | OSS |
portbay_sandbox_violations | sandbox | no | yes | OSS |
portbay_enable_sandbox | sandbox | yes | yes | OSS |
portbay_disable_sandbox | sandbox | yes | yes | OSS |
portbay_recent_requests | inspector | no | yes | OSS |
portbay_clear_requests | inspector | yes | yes | OSS |
portbay_cert_info | certs | no | yes | OSS |
portbay_reissue_cert | certs | yes | yes | OSS |
portbay_ensure_https | certs | yes | yes | OSS |
portbay_detect_import_sources | migrate | no | no | OSS |
portbay_preview_import | migrate | no | no | OSS |
portbay_import_projects | migrate | yes | no | OSS |
portbay_secret_set | secrets | yes | yes | OSS |
portbay_secrets_set | secrets | yes | yes | OSS |
portbay_secrets_list | secrets | no | yes | OSS |
portbay_secret_status | secrets | no | yes | OSS |
portbay_secret_validate | secrets | no | yes | OSS |
portbay_secrets_import | secrets | yes | yes | OSS |
portbay_secrets_import_from | secrets-transfer | yes | no | OSS |
portbay_secret_delete | secrets | yes | yes | OSS |
portbay_secret_rotate | secrets | yes | yes | OSS |
portbay_secret_reveal | secrets | yes | yes | OSS |
portbay_secrets_export_to | secrets-transfer | yes | no | OSS |
portbay_secret_adopt | secrets | yes | yes | OSS |
portbay_deployment_prepare | secrets | no | yes | OSS |
portbay_deployment_stage | secrets | yes | yes | OSS |
portbay_deployment_apply | secrets | yes | yes | OSS |
portbay_deployment_rollback | secrets | yes | yes | OSS |
portbay_capture_history | capture | no | no | OSS |
portbay_capture_get | capture | no | no | OSS |
portbay_capture_screen | capture | yes | no | OSS |
portbay_capture_ocr | capture | yes | no | OSS |
portbay_imagegen_models | imagegen | no | no | OSS |
portbay_imagegen_generate | imagegen | yes | no | OSS |
portbay_stt_models | stt | no | no | OSS |
portbay_stt_transcribe | stt | no | no | OSS |
portbay_tts_speak | tts | yes | no | OSS |
portbay_web_search | websearch | no | no | Pro board |
portbay_web_search_and_scrape | websearch | no | no | Pro board |
portbay_extract_page | websearch | no | no | Pro board |
portbay_tasks_list | tasks | no | yes | Pro board |
portbay_connectors_status | tasks | no | yes | Pro board |
portbay_workflow_list | workflows | no | no | Pro board |
portbay_workflow_plan | workflows | no | no | Pro board |
portbay_workflow_start | workflows | yes | no | Pro board |
portbay_workflow_generate | workflows | no | no | Pro board |
portbay_workflow_author | workflows | no | no | Pro board |
portbay_workflow_edit | workflows | no | no | Pro board |
portbay_workflow_validate_graph | workflows | no | no | Pro board |
portbay_workflow_recipe_validate | workflows | no | no | Pro board |
portbay_workflow_recipe_save | workflows | yes | no | Pro board |
portbay_workflow_run | workflows | yes | no | Pro board |
portbay_workflow_run_card | workflows | yes | no | Pro board |
portbay_workflow_run_snapshot | workflows | no | no | Pro board |
portbay_workflow_run_list | workflows | no | no | Pro board |
portbay_workflow_run_get | workflows | no | no | Pro board |
portbay_run_search | workflows | no | no | Pro board |
portbay_workflow_stop | workflows | yes | no | Pro board |
portbay_workflow_review_resolve | workflows | yes | no | Pro board |
portbay_workflow_step_resolve | workflows | yes | no | Pro board |
portbay_workflow_trigger_save | workflows | yes | no | Pro board |
portbay_workflow_trigger_list | workflows | no | no | Pro board |
portbay_workflow_trigger_delete | workflows | yes | no | Pro board |
portbay_workflow_trigger_set_enabled | workflows | yes | no | Pro board |
portbay_workflow_capabilities | workflows | no | no | Pro board |
portbay_workflow_dry_run | workflows | no | no | Pro board |
portbay_workflow_preflight | workflows | no | no | Pro board |
portbay_workflow_fixture_run | workflows | yes | no | Pro board |
portbay_workflow_recipe_get | workflows | no | no | Pro board |
portbay_workflow_recipe_delete | workflows | yes | no | Pro board |
portbay_workflow_recipe_versions | workflows | no | no | Pro board |
portbay_workflow_recipe_version_get | workflows | no | no | Pro board |
portbay_workflow_recipe_restore | workflows | yes | no | Pro board |
portbay_workflow_run_step_log | workflows | no | no | Pro board |
portbay_workflow_step_retry | workflows | yes | no | Pro board |
portbay_case_file_get | workflows | no | no | Pro board |
portbay_case_file_append | workflows | yes | no | Pro board |
portbay_workflow_tool_schema | workflows | no | no | Pro board |
portbay_browser_sessions | browser | no | yes | Visual editor |
portbay_browser_open | browser | yes | yes | Visual editor |
portbay_browser_navigate | browser | yes | yes | Visual editor |
portbay_browser_close | browser | yes | yes | Visual editor |
portbay_browser_submit | browser | yes | yes | Visual editor |
portbay_browser_snapshot | browser | no | yes | Visual editor |
portbay_browser_click_ref | browser | yes | yes | Visual editor |
portbay_browser_type_ref | browser | yes | yes | Visual editor |
portbay_browser_select | browser | yes | yes | Visual editor |
portbay_browser_key | browser | yes | yes | Visual editor |
portbay_browser_hover | browser | yes | yes | Visual editor |
portbay_browser_scroll | browser | yes | yes | Visual editor |
portbay_browser_batch | browser | yes | yes | Visual editor |
portbay_browser_fill | browser | yes | yes | Visual editor |
portbay_browser_click | browser | yes | yes | Visual editor |
portbay_browser_screenshot | browser | no | yes | Visual editor |
portbay_browser_sample | browser | no | yes | Visual editor |
portbay_browser_measure | browser | no | yes | Visual editor |
portbay_browser_canvas_read | browser | no | yes | Visual editor |
portbay_browser_shell_snapshot | browser | no | yes | Visual editor |
portbay_observe | browser | no | yes | Visual editor |
portbay_browser_say | browser | no | yes | Visual editor |
portbay_browser_console | browser | no | yes | Visual editor |
portbay_browser_wait | browser | no | yes | Visual editor |
portbay_browser_find | browser | no | yes | Visual editor |
portbay_browser_viewport | browser | yes | yes | Visual editor |
portbay_browser_network_capture | browser-io | no | yes | Visual editor |
portbay_browser_network_request | browser-io | no | yes | Visual editor |
portbay_browser_network_route | browser-io | yes | yes | Visual editor |
portbay_browser_network_unroute | browser-io | yes | yes | Visual editor |
portbay_browser_cookies_get | browser-io | no | yes | Visual editor |
portbay_browser_cookies_set | browser-io | yes | yes | Visual editor |
portbay_browser_cookies_clear | browser-io | yes | yes | Visual editor |
portbay_browser_storage_get | browser-io | no | yes | Visual editor |
portbay_browser_storage_set | browser-io | yes | yes | Visual editor |
portbay_browser_storage_clear | browser-io | yes | yes | Visual editor |
portbay_browser_frame | browser-io | no | yes | Visual editor |
portbay_browser_dialog | browser-io | yes | yes | Visual editor |
portbay_browser_download | browser-io | yes | yes | Visual editor |
portbay_browser_upload | browser-io | yes | yes | Visual editor |
portbay_browser_drag | browser-io | yes | yes | Visual editor |
portbay_browser_flick | browser-io | yes | yes | Visual editor |
portbay_browser_pointer | browser-io | yes | yes | Visual editor |
portbay_browser_pdf | browser-io | no | yes | Visual editor |
portbay_browser_http_auth | browser-io | yes | yes | Visual editor |
portbay_browser_clock | browser-io | yes | yes | Visual editor |
portbay_browser_error_budget | browser-io | no | yes | Visual editor |
portbay_browser_fixture_set | browser-io | yes | yes | Visual editor |
portbay_browser_across_viewports | browser-io | yes | yes | Visual editor |
portbay_browser_compare | browser | no | yes | Visual editor |
portbay_browser_extension_hosts | browser | no | yes | Visual editor + extension arm |
portbay_browser_extension_open | browser | yes | yes | Visual editor + extension arm |
portbay_browser_extension_status | browser | no | yes | Visual editor + extension arm |
portbay_browser_extension_close | browser | yes | yes | Visual editor + extension arm |
portbay_verify_runs | verify | no | no | Visual editor |
portbay_editor_working_diff | editor | no | no | Visual editor |
portbay_editor_history | editor | no | no | Visual editor |
portbay_editor_restore_preview | editor | no | no | Visual editor |
portbay_editor_restore | editor | yes | no | Visual editor |
portbay_editor_apply | editor | yes | no | Visual editor |
portbay_editor_state_preview | editor | yes | no | Visual editor |
portbay_editor_inspect | editor | no | no | Visual editor |
portbay_connector_accounts | connectors | no | yes | Pro board |
portbay_connector_search | connectors | no | yes | Pro board |
portbay_connector_list | connectors | no | yes | Pro board |
portbay_connector_get | connectors | no | yes | Pro board |
portbay_connector_create | connectors | yes | yes | Pro board |
portbay_connector_update | connectors | yes | yes | Pro board |
portbay_connector_comment | connectors | yes | yes | Pro board |
portbay_connector_delete | connectors | yes | yes | Pro board |
portbay_connector_send | connectors | yes | yes | Pro board |
portbay_mcp_invoke | connectors | yes | yes | Pro board |
portbay_mcp_servers | connectors | no | yes | Pro board |
portbay_task_next | tasks | no | yes | Pro board |
portbay_task_get | tasks | no | yes | Pro board |
portbay_task_schema | tasks | no | yes | Pro board |
portbay_task_create | tasks | yes | yes | Pro board |
portbay_task_ack | tasks | yes | yes | Pro board |
portbay_build | tasks | yes | yes | Pro board |
portbay_task_update | tasks | yes | yes | Pro board |
portbay_task_edit | tasks | yes | yes | Pro board |
portbay_task_assign | tasks | yes | yes | Pro board |
portbay_task_dispatch | tasks | yes | yes | Pro board |
portbay_task_cancel | tasks | yes | yes | Pro board |
portbay_task_check | tasks | yes | yes | Pro board |
portbay_task_checklist_add | tasks | yes | yes | Pro board |
portbay_task_comment | tasks | yes | yes | Pro board |
portbay_task_request_exit_approval | tasks | yes | yes | Pro board |
portbay_session_register | tasks | yes | yes | Pro board |
portbay_session_end | tasks | yes | yes | Pro board |
portbay_sessions_list | tasks | no | yes | Pro board |
portbay_who_owns | tasks | no | yes | Pro board |
portbay_commit_check | tasks | no | yes | Pro board |
portbay_message_send | tasks | yes | yes | Pro board |
portbay_inbox | tasks | yes (kept under --read-only) | yes | Pro board |
portbay_message_ack | tasks | yes | yes | Pro board |
portbay_handoff_get | tasks | no | yes | Pro board |
portbay_handoff_update | tasks | yes | yes | Pro board |
portbay_learning_add | tasks | yes | yes | Pro board |
portbay_learning_get | tasks | no | yes | Pro board |
portbay_task_complete | tasks | yes | yes | Pro board |
portbay_tasks_done | tasks | yes | yes | Pro board |
portbay_verification_enqueue | tasks | yes | yes | Pro board |
portbay_verification_next | tasks | yes | yes | Pro board |
portbay_verification_resolve | tasks | yes | yes | Pro board |
portbay_task_verify | tasks | yes | yes | Pro board |
portbay_delivery_prepare | delivery | yes | no | Pro board |
portbay_delivery_status | delivery | no | no | Pro board |
portbay_delivery_start | delivery | yes | no | Pro board |
portbay_delivery_resume | delivery | yes | no | Pro board |
portbay_delivery_cancel | delivery | yes | no | Pro board |
portbay_browser_a11y | browser-io | no | yes | Visual editor |
portbay_browser_profile_reset | browser-io | yes | yes | Visual editor |
The mutating flag has three readers, and they must agree
TOOL_REGISTRY's third field answers one question — does calling this tool change state? — and the tool's own annotations(read_only_hint = …) answers the same one. --read-only route filtering reads the first, voice_bridge::classify_tool_risk and every MCP client read the second, and context::automation::gates::ipc reads both and refuses on a disagreement rather than taking the permissive reading.
Of 272 registry rows, 272 carry a read_only_hint annotation in server.rs and 0 disagree with is_mutating.
Mutating, and kept under --read-only anyway
READ_ONLY_RETAINED is the seam for a routing exemption, so that no tool has to be registered non-mutating — a false behavioural claim every other reader of the flag would then believe.
| Tool | Why |
|---|---|
portbay_inbox | reading delivers, so it writes — but a read-only session must still be able to collect a warning another session sent it, and the write is confined to the delivery state of that session's own messages |
What a client sees at boot
With --dynamic-toolsets (the default), tools/list does not start with the surface above. It starts with the bootstrap tools — which are not registry rows, and so are in none of the counts on this page — plus any toolset pre-enabled through PORTBAY_MCP_BOOT_TOOLSETS. Everything else is reachable in the same session through portbay_enable_toolset.
| Bootstrap tool |
|---|
portbay_enable_toolset |
portbay_list_toolsets |
portbay_search_tools |
Without --dynamic-toolsets, the default surface is listed up front and an opt-in toolset is reachable only by naming it at startup.
Two definitions of the open-source surface
A tool is in the OSS build if its row carries no #[cfg] gate. ADVERTISED_OSS_TOOL_COUNT and the counts on Tool Reference are derived a second way — by toolset, from BOARD_OVERLAY_GROUPS and EDITOR_OVERLAY_GROUPS, with anything in neither list counted as OSS. The two can disagree, and where they do the #[cfg] is the one the compiler obeys.
By toolset partition: 123 OSS, 85 Pro board, 64 visual editor. By #[cfg]: 118 OSS.
5 tool(s) are counted as open-source by the toolset partition but are not compiled into an open-source build:
| Tool | Toolset | Gated on |
|---|---|---|
portbay_delivery_prepare | delivery | tasks |
portbay_delivery_status | delivery | tasks |
portbay_delivery_start | delivery | tasks |
portbay_delivery_resume | delivery | tasks |
portbay_delivery_cancel | delivery | tasks |
Toolsets in detail
Each description below is the toolset's own doc comment in server.rs, reproduced rather than rewritten.
projects
ToolGroup::Projects · 13 tools · on the default surface
Registry CRUD + setup: list, status, detect, add, update, remove, export, import, setup.
portbay_list_projects, portbay_status, portbay_target, portbay_detect_project, portbay_detect_workspace_apps, portbay_list_recipes, portbay_setup_from_recipe, portbay_add_project, portbay_update_project, portbay_remove_project, portbay_export_config, portbay_import_config, portbay_setup
lifecycle
ToolGroup::Lifecycle · 4 tools · on the default surface
start, stop, restart, stop_all.
portbay_start, portbay_stop, portbay_restart, portbay_stop_all
diagnostics
ToolGroup::Diagnostics · 4 tools · on the default surface
logs, doctor, sidecar_status.
portbay_logs, portbay_doctor, portbay_release_preflight, portbay_sidecar_status
scaffold
ToolGroup::Scaffold · 1 tool · on the default surface
setup_from_template — runs upstream scaffolders (network access).
portbay_setup_from_template
groups
ToolGroup::Groups · 7 tools · on the default surface
Group CRUD + batch lifecycle: list, create, update, remove, start, stop, restart.
portbay_list_groups, portbay_create_group, portbay_update_group, portbay_remove_group, portbay_start_group, portbay_stop_group, portbay_restart_group
tunnels
ToolGroup::Tunnels · 5 tools · on the default surface
Read-only tunnel visibility: list active public tunnels, look up one by id, and list saved SSH connections (hosts). No remote execution lives here — that is the deliberately separate [
ToolGroup::SshExec].
portbay_list_tunnels, portbay_tunnel_status, portbay_list_ssh_tunnels, portbay_ssh_tunnel_status, portbay_list_ssh_connections
ssh-exec
ToolGroup::SshExec · 15 tools · opt-in
Remote command execution on a saved SSH host (
portbay_ssh_execute), plus the read-only alias directory that names the hosts it can run on (portbay_remote_hosts_list). Held apart from every other group and deliberately excluded from [ToolGroup::all] (so it is off even under--toolsets all): an operator must namessh-execexplicitly to expose it. That explicit enablement is the consent gesture — PortBay's in-app "Run is the approval" model, expressed at the toolset boundary. Execute is mutating, so read-only mode strips it too; the alias list survives read-only.
portbay_ssh_execute, portbay_remote_exec, portbay_remote_files_list, portbay_remote_file_read, portbay_remote_file_write, portbay_deploy, portbay_deploy_status, portbay_deploy_recipes_list, portbay_deploy_rollback, portbay_remote_hosts_list, portbay_project_deploy_target, portbay_remote_env_check, portbay_deploy_snippets_list, portbay_deploy_snippet_save, portbay_deploy_snippet_run
runtimes
ToolGroup::Runtimes · 4 tools · on the default surface
Runtime management: list detected versions, set defaults, add/remove manual paths.
portbay_list_runtimes, portbay_set_default_runtime, portbay_add_runtime_path, portbay_remove_runtime_path
databases
ToolGroup::Databases · 15 tools · on the default surface
Database engines + owned instances: list, create, lifecycle, link, auto-start.
portbay_list_database_engines, portbay_list_databases, portbay_database_connection, portbay_db_schema, portbay_db_query, portbay_db_explain, portbay_db_execute, portbay_create_database, portbay_remove_database, portbay_start_database, portbay_stop_database, portbay_restart_database, portbay_link_database, portbay_unlink_database, portbay_set_database_auto_start
dns
ToolGroup::Dns · 3 tools · on the default surface
DNS / domains: resolver status, DNS records, domain-suffix change.
portbay_dns_status, portbay_list_dns_records, portbay_set_domain_suffix
sandbox
ToolGroup::Sandbox · 4 tools · on the default surface
Sandboxed Run (macOS Seatbelt): status, enable, disable, violations.
portbay_sandbox_status, portbay_sandbox_violations, portbay_enable_sandbox, portbay_disable_sandbox
inspector
ToolGroup::Inspector · 2 tools · on the default surface
HTTP request inspector: recent Caddy requests, clear the log, replay (replay is app-only from this tool — see its description).
portbay_recent_requests, portbay_clear_requests
certs
ToolGroup::Certs · 3 tools · on the default surface
Local-HTTPS certificates: per-project cert info, reissue.
portbay_cert_info, portbay_reissue_cert, portbay_ensure_https
migrate
ToolGroup::Migrate · 3 tools · opt-in
Migration import from other local-dev tools (Herd / ServBay / MAMP): detect sources, preview their sites, import into the registry.
Opt-in — left out of [
ToolGroup::all] and named explicitly (migrate). Purely a cost decision, not a consent one: migrating off Herd/ServBay/MAMP happens ONCE per machine, in practice through the app's own migration screen, and the three tools cost ~480 tokens oftools/liston every session forever — including the overwhelming majority that have nothing left to migrate. Same reasoning as [ToolGroup::SecretsTransfer]'s cost half: a tool nobody calls is not free, it is the most expensive kind of tool there is.
portbay_detect_import_sources, portbay_preview_import, portbay_import_projects
secrets
ToolGroup::Secrets · 14 tools · on the default surface
PortBay's local secrets vault: set/list/status/validate/import/delete per-project secrets. Every write is write-only — a value is never echoed back by any tool in this group, only names and metadata.
portbay_secret_set, portbay_secrets_set, portbay_secrets_list, portbay_secret_status, portbay_secret_validate, portbay_secrets_import, portbay_secret_delete, portbay_secret_rotate, portbay_secret_reveal, portbay_secret_adopt, portbay_deployment_prepare, portbay_deployment_stage, portbay_deployment_apply, portbay_deployment_rollback
secrets-transfer
ToolGroup::SecretsTransfer · 2 tools · opt-in
Bulk secret transfer between PortBay's vault and an EXTERNAL secret manager:
portbay_secrets_import_from(pull every secret in) andportbay_secrets_export_to(push every secret out).Opt-in like [
ToolGroup::SshExec] — left out of [ToolGroup::all] (off even under--toolsets all) and named explicitly (secrets-transfer). Two reasons, and both are load-bearing:
- Cost. These two carry the largest argument schemas on the whole surface — a provider enum plus every provider's own config fields, ~2,514 tokens between them. That was charged to every session in static mode, including the overwhelming majority that never move a secret anywhere. A tool nobody calls is not free; it is the most expensive kind of tool there is.
- Consent.
export_toEXFILTRATES every configured value off this machine (it is already human-approval gated at the call — seegate_secret_op'sSecretOp::Export). Naming the toolset is the same "the operator asked for this" gesturessh-execrequires, one layer earlier.The vault's own per-secret tools stay on the default surface under [
ToolGroup::Secrets]: a session that needs to set or read the status of one secret is ordinary work, where moving the whole vault is not.
portbay_secrets_import_from, portbay_secrets_export_to
tasks
ToolGroup::Tasks · 35 tools · on the default surface
Per-project task board + session hand-off: list/next/create/ack/update cards, read/append the rolling hand-off log. The live channel into PortBay's canonical task model.
portbay_tasks_list, portbay_connectors_status, portbay_task_next, portbay_task_get, portbay_task_schema, portbay_task_create, portbay_task_ack, portbay_build, portbay_task_update, portbay_task_edit, portbay_task_assign, portbay_task_dispatch, portbay_task_cancel, portbay_task_check, portbay_task_checklist_add, portbay_task_comment, portbay_task_request_exit_approval, portbay_session_register, portbay_session_end, portbay_sessions_list, portbay_who_owns, portbay_commit_check, portbay_message_send, portbay_inbox, portbay_message_ack, portbay_handoff_get, portbay_handoff_update, portbay_learning_add, portbay_learning_get, portbay_task_complete, portbay_tasks_done, portbay_verification_enqueue, portbay_verification_next, portbay_verification_resolve, portbay_task_verify
connectors
ToolGroup::Connectors · 11 tools · on the default surface
External business/task systems connected to PortBay. Reads are free; writes self-gate through the connector approval queue.
portbay_connector_accounts, portbay_connector_search, portbay_connector_list, portbay_connector_get, portbay_connector_create, portbay_connector_update, portbay_connector_comment, portbay_connector_delete, portbay_connector_send, portbay_mcp_invoke, portbay_mcp_servers
capture
ToolGroup::Capture · 4 tools · opt-in
Screen capture: read-only capture history + (approval-gated) programmatic screenshot / OCR. Like [
ToolGroup::SshExec] this is opt-in — left out of [ToolGroup::all] (off even under--toolsets all) and named explicitly (capture). An agent reading the user's live screen is privacy-sensitive, so screen-grab/OCR are mutating + approval-gated; the history view tools are read-only.
portbay_capture_history, portbay_capture_get, portbay_capture_screen, portbay_capture_ocr
workflows
ToolGroup::Workflows · 36 tools · opt-in
Outcome workflow recipes + local case files. Opt-in for dispatches that select a recipe or explicitly enable workflow tools.
portbay_workflow_list, portbay_workflow_plan, portbay_workflow_start, portbay_workflow_generate, portbay_workflow_author, portbay_workflow_edit, portbay_workflow_validate_graph, portbay_workflow_recipe_validate, portbay_workflow_recipe_save, portbay_workflow_run, portbay_workflow_run_card, portbay_workflow_run_snapshot, portbay_workflow_run_list, portbay_workflow_run_get, portbay_run_search, portbay_workflow_stop, portbay_workflow_review_resolve, portbay_workflow_step_resolve, portbay_workflow_trigger_save, portbay_workflow_trigger_list, portbay_workflow_trigger_delete, portbay_workflow_trigger_set_enabled, portbay_workflow_capabilities, portbay_workflow_dry_run, portbay_workflow_preflight, portbay_workflow_fixture_run, portbay_workflow_recipe_get, portbay_workflow_recipe_delete, portbay_workflow_recipe_versions, portbay_workflow_recipe_version_get, portbay_workflow_recipe_restore, portbay_workflow_run_step_log, portbay_workflow_step_retry, portbay_case_file_get, portbay_case_file_append, portbay_workflow_tool_schema
browser
ToolGroup::Browser · 31 tools · on the default surface
Visible browser companion sessions on a PortBay-managed Chrome profile. Included in [
ToolGroup::all] so it appears inportbay_list_toolsetsby default: an agent can callportbay_enable_toolset browserwithout the operator naming it at startup. The toolset is still not auto-enabled: dynamic mode hides it behindportbay_enable_toolsetlike every other group. Safety invariants (origin guard, credential deny-list, submit approval) are enforced at the op layer regardless. Available only when compiled withtasks+visual-editorfeatures.It also holds the four
portbay_browser_extension_*tools — the SECOND driver arm, the person's own signed-in browser through the PortBay Browser Agent extension — which additionally needextension-driverand so live in their own router. They are here rather than in [ToolGroup::BrowserIo] because that split defers tools which act on a session already open, and these are how a session on that arm comes to exist: an agent that enabledbrowserand could not see them would have no reachable way to say "drive the browser I am signed into".
portbay_browser_sessions, portbay_browser_open, portbay_browser_navigate, portbay_browser_close, portbay_browser_submit, portbay_browser_snapshot, portbay_browser_click_ref, portbay_browser_type_ref, portbay_browser_select, portbay_browser_key, portbay_browser_hover, portbay_browser_scroll, portbay_browser_batch, portbay_browser_fill, portbay_browser_click, portbay_browser_screenshot, portbay_browser_sample, portbay_browser_measure, portbay_browser_canvas_read, portbay_browser_shell_snapshot, portbay_observe, portbay_browser_say, portbay_browser_console, portbay_browser_wait, portbay_browser_find, portbay_browser_viewport, portbay_browser_compare, portbay_browser_extension_hosts, portbay_browser_extension_open, portbay_browser_extension_status, portbay_browser_extension_close
browser-io
ToolGroup::BrowserIo · 25 tools · on the default surface
The browser companion's STATE and WIRE half: cookies, Web Storage, network capture / mocking, frames, dialogs, file download and upload, and drag.
Split out of [
ToolGroup::Browser] for cost, not for consent. Enabling the browser toolset was measured at 9,217 tokens for a 30-tool group — 77% of that session's entire tool surface — and these fifteen are 3,268 of it while most browser work (open, snapshot, click, type, read) never touches one. Deferring them takes the firstenable_toolset browserdown by a third and loses no capability at all: a secondportbay_enable_toolset browser-iogets every one of them back, in the same session, against the same session id. This is the split Playwright MCP ships (23 of its 68 are on by default, the rest behind--caps), except that theirs is decided at launch and this one is decided when the need appears.It is not a second ceiling.
PORTBAY_MCP_TOOLSETSadmits it wherever it admitsbrowser(see [ToolGroup::admitted_by]), because nothing about the exposure changed — same managed profile, same origin allowlist, same approval gate, same credential refusal. A group that had to be named separately would silently drop fifteen tools from every config already written, and would put a cost decision into a vocabulary that is about consent.
portbay_browser_network_capture, portbay_browser_network_request, portbay_browser_network_route, portbay_browser_network_unroute, portbay_browser_cookies_get, portbay_browser_cookies_set, portbay_browser_cookies_clear, portbay_browser_storage_get, portbay_browser_storage_set, portbay_browser_storage_clear, portbay_browser_frame, portbay_browser_dialog, portbay_browser_download, portbay_browser_upload, portbay_browser_drag, portbay_browser_flick, portbay_browser_pointer, portbay_browser_pdf, portbay_browser_http_auth, portbay_browser_clock, portbay_browser_error_budget, portbay_browser_fixture_set, portbay_browser_across_viewports, portbay_browser_a11y, portbay_browser_profile_reset
imagegen
ToolGroup::Imagegen · 2 tools · opt-in
On-device image generation (the
portbay-imagegendiffusion sidecar). Opt-in — left out of [ToolGroup::all] (off even under--toolsets all) and named explicitly (imagegen). Kept opt-in because it is macOS-only, needs a multi-GB model downloaded first, and a diffusion run can burn GPU minutes — not something to expose by default. The prompt and image never leave the machine.
portbay_imagegen_models, portbay_imagegen_generate
stt
ToolGroup::Stt · 2 tools · opt-in
On-device speech-to-text: transcribe an existing audio file (the
portbay-sttsidecar'stranscribe-fileop). Opt-in like [ToolGroup::Imagegen] — macOS-only and model-dependent, so it is left out of [ToolGroup::all] and named explicitly (stt). The audio never leaves the machine.
portbay_stt_models, portbay_stt_transcribe
tts
ToolGroup::Tts · 1 tool · opt-in
On-device text-to-speech: synthesize speech from text into an audio FILE (the
portbay-sttsidecar'stts-synthesizeop on macOS, a systempiperinstall on Linux). Opt-in like [ToolGroup::Stt], and deliberately NOT folded into it: transcription reads a file the caller already has and writes nothing, while synthesis produces one, needs a voice pack downloaded first, and can hold the engine for minutes. Enabling one must not enable the other. The text never leaves the machine, and the result is a file handle — audio bytes in a step's output are a payload every downstream step pays for and no model can listen to.
portbay_tts_speak
websearch
ToolGroup::Websearch · 3 tools · opt-in
Web search through PortBay's pluggable search providers (DuckDuckGo / SearXNG keyless, Tavily / Brave keyed). Opt-in like [
ToolGroup::Imagegen] and [ToolGroup::Stt] — left out of [ToolGroup::all] (off even under--toolsets all) and named explicitly (websearch). Kept opt-in for the same reason thecommands::websearchseam is guarded byegress_policy: the query text leaves the machine to a third-party engine, and the Tavily/Brave lanes spend a metered API key. The tool itself is read-only — it fetches and normalises results and writes nothing.
portbay_web_search, portbay_web_search_and_scrape, portbay_extract_page
verify
ToolGroup::Verify · 1 tool · opt-in
Read-only run summaries from the Pro visual editor's Tier-2 auto-verify loop (P2.3). Opt-in like [
ToolGroup::Browser] — left out of [ToolGroup::all] and named explicitly (verify); only meaningful on atasks+visual-editorbuild.
portbay_verify_runs
editor
ToolGroup::Editor · 7 tools · opt-in
Read-only inspection of the Pro visual editor's persisted state for a BYO-agent (P2.4): the staged working diff and the visual-edit history ledger. Opt-in like [
ToolGroup::Verify] — left out of [ToolGroup::all] and named explicitly (editor); only meaningful on atasks+visual-editorbuild. Live-page control (selection, query, screenshot, apply) is deferred — the stdio MCP sidecar cannot reach the app-processLivePreviewStatechannel; see the P2.4 design note.
portbay_editor_working_diff, portbay_editor_history, portbay_editor_restore_preview, portbay_editor_restore, portbay_editor_apply, portbay_editor_state_preview, portbay_editor_inspect
delivery
ToolGroup::Delivery · 5 tools · opt-in
The board-level delivery pipeline: plan a delivery from the
Donecolumn, run it, read it, resume it, cancel it.Opt-in, and on consent rather than cost — left out of [
ToolGroup::all] (off even under--toolsets all) and named explicitly (delivery). One call here merges branches, pushes to a remote, invokes a configured deploy and deletes landed branches. An agent must not inherit that authority merely because it can edit a card: one that should be able to ship asks for this toolset, and one that should not, cannot reach it. Only meaningful on atasksbuild.
portbay_delivery_prepare, portbay_delivery_status, portbay_delivery_start, portbay_delivery_resume, portbay_delivery_cancel
ssh-ops
ToolGroup::SshOps · 10 tools · opt-in
SSH-OPS views of a saved host (capabilities, Docker, systemd services, health, security, exposure, backups, PaaS and Kubernetes reports, one container's redacted inspect, a bounded log tail) and the typed actions an assigned agent runs under its task grant.
Opt-in — left out of [
ToolGroup::all] (off even under--toolsets all) and named explicitly (ssh-ops). No view changes a host, but every call opens a session with the stored credentials and runs a probe on someone's server, which is the same "the operator asked for this" gesture asssh-exec. It is a separate group so an agent can be given the means to inspect and verify a host without the means to run arbitrary commands on it.The actions an assigned agent needs to finish and verify host work run under the caller's task grant, which no tool here can create or widen, and only in shapes PortBay builds: start/stop/restart a container, restart a systemd service, preview and apply a guided hardening fix, a one-shot pod exec, a Kubernetes debug container, and Kubernetes discovery as root.
portbay_ssh_host_view, portbay_ssh_container_inspect, portbay_ssh_logs_tail, portbay_ssh_kube_exec, portbay_ssh_kube_debug, portbay_ssh_kube_read_as_root, portbay_ssh_container_action, portbay_ssh_service_restart, portbay_ssh_hardening_preview, portbay_ssh_hardening_apply
