Check or regenerate this reference whenever MCP tool registrations change;
stale hand-maintained counts have already drifted from 14 assumed tools to 26
live tools.
This is the current 28-tool set registered in
packages/functions/src/mcp-server.ts.
All tools run in the workspace derived from the authenticated API key or OAuth
identity. In the input column, ? means optional; null is a required explicit
JSON null where shown.
Breaking change (#137): Unknown top-level MCP tool arguments are now rejected instead of silently ignored.
The JSON-RPC tool response has isError: true and names the offending key in an MCP error -32602 (InvalidParams) message.
| Tool |
Input |
Purpose and caller note |
get_started |
{} |
Returns a concise concept map and the recommended cross-tool sequence for building and running a workflow, adding a connection-backed brick, and subscribing a trigger. |
list_plugins |
{} |
Lists public plugins and private plugins installed in the workspace, including connection types, brick contracts, and trigger definitions. Execution and trigger lifecycle endpoints are never returned. |
delete_plugin |
{ id } |
Deletes a private plugin owned by the authenticated workspace and all its versions. Public plugins cannot be deleted. Remove its connections and trigger instances first. Returns { id, deleted }. |
submit_feedback |
{ title, body } |
Submits a Flowbrew observation, complaint, or bug for human review; title is limited to 120 characters and body to 4,000. |
list_feedback |
{ status? } |
Lists workspace feedback newest first; status filters by open, accepted, rejected, or resolved. Results contain only id, title, body, a friendly status label, resolution, created_at, and updated_at; internal issue links are never returned. |
list_connections |
{ projectId: string | null } |
With null, lists workspace connections only; with a verified project ID, lists workspace plus same-project connections. Returns metadata and status, never credentials or audit fields. |
create_connection |
{ pluginId, connectionTypeKey, label, projectId: string | null } |
Creates a credential-less pending_verification connection using the existing owner and scope checks. Returns { connectionId, consoleUrl }; a human completes credential entry and validation in the console using their normal browser session. |
| Tool |
Input |
Purpose and caller note |
create_trigger_instance |
{ triggerDefinitionId, scope, projectId, config, connectionId } |
Registers a workspace- or project-scoped trigger. projectId and connectionId are required fields that may be null; the instance becomes active only after plugin acknowledgment. This does not subscribe any workflow; call create_trigger_subscription afterward to receive events. |
list_trigger_instances |
{} |
Lists trigger instances in the workspace. Inactive instances do not expose a public endpoint. |
reconnect_trigger_instance |
{ id, connectionId } |
Tears down the old binding, binds the selected connection (or null where allowed), and registers a fresh ingestion credential. |
disable_trigger_instance |
{ id } |
Immediately invalidates ingestion and removes the public endpoint, then requests idempotent plugin teardown. |
enable_trigger_instance |
{ id } |
Re-registers a disabled instance with a fresh ingestion credential and activates it only after acknowledgment. |
delete_trigger_instance |
{ id } |
Tears down and deletes an instance. Delete all of its subscriptions first. |
create_trigger_subscription |
{ triggerInstanceId, workflowId } |
Subscribes one scope-compatible workflow. Duplicate pairs are rejected and each trigger instance permits at most five subscriptions. |
delete_trigger_subscription |
{ id } |
Deletes one subscription in the authenticated workspace. There is currently no subscription-list tool, so retain the creation result’s ID. |
| Tool |
Input |
Purpose and caller note |
list_api_keys |
{} |
Lists key IDs, labels, timestamps, and revocation state without exposing raw key values. |
revoke_api_key |
{ apiKeyId } |
Revokes a key by ID in the workspace; it never reads or returns the raw value. |
create_project |
{ name } |
Creates an organizational project in the workspace; names are limited to 100 characters. |
list_projects |
{} |
Lists projects in the workspace. |
rename_project |
{ id, name } |
Renames a project in the workspace; names are limited to 100 characters. |
delete_project |
{ id } |
Deletes an empty project. Workflows are never silently deleted or detached, so references must be removed first. |
| Tool |
Input |
Purpose and caller note |
create_workflow |
{ name, projectId? } |
Creates an empty shell, optionally in a verified project. It has no deployed code until a description-driven update_workflow succeeds. |
list_workflows |
{ projectId? } |
Lists workflows: omit projectId for all, pass a project ID for that project, or pass null for workspace-global workflows only. |
update_workflow |
{ id, description?, name?, projectId? } |
Either generates and compile-gates a complete new version from plain language, or changes metadata. Do not combine description with name/projectId; projectId: null makes it workspace-global. Compilation does not execute the candidate, and failure leaves the live version unchanged. |
delete_workflow |
{ id } |
Deletes the definition and all deployed code versions and frees its name. Instance and trigger history remains as an audit log until its own TTL expires. |
start_workflow |
{ idempotencyKey, workflowId?, name?, payload? } |
Starts the current version and immediately returns { instanceId }; it does not await completion. Supply workflowId or name, and a non-empty workspace-scoped idempotency key; a retry with the same key resolves to the same instance. Payload must be a JSON object and becomes event.payload.input. |
list_instances |
{ workflowId? } |
Lists persisted instances, optionally for one workflow, with best-effort live status. |
read_instance |
{ instanceId } |
Reads an instance on the exact registration it started on. A call may long-poll for about 50 seconds, so do not wrap each call in an additional retry-sleep loop. |