Platform Tools
Platform tools are built into sypho itself — call them through your MCP client
pointed at SYPHO_MCP_URL, same as any other tool. Unlike MCP
tools, most of them don't need to be allowlisted in your manifest's tools — see each
tool below for whether it does.
Structured data
structured_data_get, structured_data_save, structured_data_query — namespaced,
versioned JSON storage. See Knowledge Management for the full
reference.
secret_save
Write a secret by alias, never by raw key.
{
"tool": "secret_save",
"args": {
"alias": "slack_webhook",
"value": "https://hooks.slack.com/services/..."
}
}
The alias must match a read_write entry under your manifest's
secrets, and must actually be declared for the run.
The write lands on the run's own application/tenant — a tenant run updates its tenant's
override, never a secret other tenants share. Values are redacted from step history and
audit logs.
slack_notify
Post a message to the run's configured Slack workspace.
{
"tool": "slack_notify",
"args": {
"text": "Ticket #482 escalated — needs a human look."
}
}
Requires the deployment to have a Slack integration configured; there's nothing to declare in the manifest.
request_guidance
The one blocking primitive — ask a human a question and wait for an answer. Every "stuck," "uncertain," or "needs review" pattern is just a different question string into this same call.
{
"tool": "request_guidance",
"args": {
"question": "This refund is above the auto-approval limit — proceed?",
"context": "Order #10293, refund amount $412.00"
}
}
By default the call blocks until a human responds. Frameworks that can't hold a
connection open indefinitely can instead pass wait: false and get back
{"status": "pending_human_answer", "step_id": "..."} immediately — the step stays
blocked, and the run resumes from where it left off once a human answers, even on a
different runner host.
spawn_sub_run / list_sub_agents
Delegate to another agent as a sub-run, and discover which agents are currently allowed
to be delegated to. Which agents a run may spawn is controlled by the manifest's
allowed_sub_agents / deny_sub_agents — see Entrypoints.
A delegated sub-run currently inherits the parent run's full secrets and deployment
verbatim — scope it with allowed_sub_agents accordingly.