Skip to main content

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.