Build tools
Every tool and command an AI app gets on GoRunner’s build server.
The server is https://api.gorunner.io/mcp/build, speaking MCP over streamable HTTP. An app gets the tools its permissions allow: 9, 10, 12 or 13. See Choose what an AI app may do.
The server tells each app to search apps, read the schema and validate before writing anything, then create, publish and run. The Build a workflow command adds: keep it a draft, run it as a test and read the run before suggesting publish.
In Embed: The build server is /mcp/embed/<account>/build, offered only when the product turns on MCP building.
Read
Each one only reads.
gorunner_search_piecesAlways offeredSearch apps. Finds the apps this installation runs: each one’s ID, name, category, whether it needs a connection, and its actions and triggers. If none matches, it says to call the service’s API with the HTTP Request app instead.
Takes
query,category.gorunner_get_piece_schemaAlways offeredGet an app’s schema. Reads the real fields of one action or trigger: names, types, choices and which are required.
narrowpicks the fields that apply for a value, such as a body type.Takes
pieceId(required),actionId,triggerId,narrow,version.gorunner_list_workflowsworkflow:readList workflows. Lists the workspace’s workflows, each with its whole definition, or without it when
viewissummary. 20 by default, up to 100.Takes
query,status,limit,view.gorunner_get_workflowworkflow:readGet workflow. Reads one workflow’s draft and its
definitionRev, which an update sends back asexpectedRev.Takes
workflowId(required).gorunner_validate_workflowworkflow:readValidate workflow. Checks a definition without saving it. Each problem says where it is and what would be allowed there. Pass
workflowIdwhen you check changes to an existing workflow, so each step is judged at the version it will run. One it can’t find is ignored, with a note.Takes
definition(required),workflowId.gorunner_upgrade_code_stepworkflow:readUpgrade a Code step. Converts one Code step of a draft from version 1.0.0 to 2.0.0 and returns the new step, what changed and what to review. It writes nothing: the app saves the result with
gorunner_update_workflow.Takes
workflowId(required),step(required).gorunner_list_connectionsconnection:readList connections. Lists the workspace’s connections: ID, name and app. Never their secrets.
Takes nothing.
gorunner_get_runrun:readGet run. Reads one run: its state, times, and each step’s input and output.
stepreturns one step when the run is too big.Takes
runId(required),step.gorunner_list_runsrun:readList runs. Lists recent runs, newest first. Production runs only, unless
environmentistestorall.Takes
workflowId,status,environment,limit.
Run
Each call can send email, write to databases and call other services.
gorunner_run_workflowworkflow:runRun workflow. Starts a run:
testruns the draft,productionthe published version. It waits up to 20 seconds by default (0 to 30), then answers with the run. Send the sameidempotencyKeywhen it retries.Takes
workflowId(required),environment(required),triggerData,waitSeconds,idempotencyKey.
Write
Drafts change only when these run. Production changes only on publish.
gorunner_create_workflowworkflow:writeCreate workflow. Makes a new workflow, always as a draft. It never changes an existing one.
Takes
name(required),description,definition.gorunner_update_workflowworkflow:writeUpdate workflow. Replaces a draft’s whole definition. With
expectedRev, it is refused if someone saved the workflow since. Production keeps running the published version.Takes
workflowId(required),definition(required),expectedRev,name.gorunner_publish_workflowworkflow:publishPublish workflow. Publishes the draft, so production runs it. For a webhook trigger, this makes its address. It is refused, with the reason, if the workflow wouldn’t run.
Takes
workflowId(required).
Workspaces
Added when a connection reaches 2 or more workspaces.
gorunner_list_workspaces2 or more workspacesList workspaces. Lists the workspaces the connection reaches, with which tools work in each. Every other tool then takes a
workspaceargument.
Commands
Apps list these as commands you pick, such as a slash menu. None of them publishes.
build_workflowMay write draftsBuild a workflow. Describe the automation in your own words. It is built, checked and test-run as a draft, and nothing goes live unless you say so.
Takes
goal(required).diagnose_failureDiagnose a failed run. Finds the latest failed run, of one workflow or any, reads what the failing step returned, and suggests a fix.
Takes
workflow.explain_workflowExplain a workflow. Explains what starts the workflow, what it does, and what it still needs before it can run.
Takes
workflow(required).
What no tool does
No tool deletes anything, creates a connection or reads a secret. An app can build a workflow that needs a connection you haven’t made: it saves as a draft, and publishing names the step that needs one.
A tool calls the same API you do, with your permissions, and a refusal is the same. A production run an app starts shows the trigger MCP in Runs.
One answer may be up to 96 KB. Past that, the app is told to narrow it: step for a run, query or category for apps, query, a smaller limit or view: "summary" for a list. A run too big to return has still started: the app is told its ID and not to start it again.
null on an argument means the same as leaving it out, so a required one is refused as missing. Inside a value, such as a definition, it stays as it is.
Each server’s tools count against your app’s own tool limit, so connect the build server only where you build.