Security reference
The access rules and safety settings of the server. Setting defaults are in the Configuration reference; how to apply them is in Secure the server; the reasoning is in Security model.Default posture
API keys
One key list guards REST (/api/**), MCP (/mcp) and /actuator/** (except /actuator/health). A client sends the key in Authorization: Bearer <key> or X-API-Key: <key>.
Responses
These refusals have no JSON body.Roles
A key limited to sessions reaches only
/api/sessions/{session}/..., /api/workflow/{session}/... and /api/executions/{executionId}/... of its own sessions. Every other path is refused with 403, including the global event stream, the worker list and the audit list; it never reaches /actuator/**.
POST /api/inputs/token-answer needs no key: it takes a one-time token made for one request and one tier, and answers 403 for a replayed, changed, expired or unknown token and 429 once an address has had 30 refused calls in a minute (or one request 10).
MCP tool roles
Eachtools/call is checked against the key’s role; a tool not in the role table needs ADMIN. A session-limited key must pass a sessionId it may reach, except for the tools that name no session (list_plugins, list_ai_backends, get_plugin_details, get_session_creation_instructions, get_plugin_creation_guide, list_supervisor_engines, get_supervisor_engine, get_supervisor_contract, list_supervisor_presets, whoami). For a key that is not an unrestricted ADMIN, an unparsable POST body is refused with 403 and one above 1 MiB with 413. The role of each tool is listed in the MCP tools reference.
Host and Origin checks
Active only while no key of any kind is configured.
A refused request gets
403 with no body.
Response headers
Audit actors
Control commands are recorded in the execution log with their sender; read them withGET /api/control/audit (limit 1 to 500, default 100; executionId).
Only control commands are audited, not ordinary reads and starts.
Input request authorisation
Agent credentials
A supervisor of typehttp is operated with its own credential, made by POST /api/supervisors/{id}/credential (ADMIN), shown once and kept as a SHA-256 hash. It works only on /api/agent/v1; no person’s key works there, and its actor kind is SUPERVISOR. GET on the same path shows issue time and last use, never the secret; DELETE, or disabling the supervisor, cuts it at once. Limits are yukta.agent.* in the Configuration reference.
Process execution
The allow-list names an executable, not what it does with its arguments; it is not a sandbox. A supervisor of engine type
process also needs its executable in the list and runs with an empty environment, reading one output line of at most 64 KB.
Outbound hosts
Entries are host names or IP addresses (case-insensitive) or
*.example.com (subdomains, not example.com). A call must pass the plugin’s list and every applicable egress list; an empty list does not restrict. The host is read from the URL, so https://good.com@evil.com/ counts as evil.com; names are not resolved. Link-local and metadata addresses (169.254.0.0/16, fe80::/10, metadata.google.internal, and their numeric spellings) are refused unless listed by name.
Model and tool call filters
Applied to everyLLM_CALL and MCP_TOOL_CALL node; a refused call fails as bad input and is not retried.
A pattern containing a comma (
a{1,3}) must be an indexed entry: yukta.llm.deny-input-patterns[0]=....
Secrets and variables
Limits
Expressions and scripts are written by trusted authors: whoever can save a definition (ADMIN) can already run code on the server.
Workers
Workers connect over plain TCP unless TLS is configured; both sides refuse that mode off the local machine unlessyukta.workers.allow-insecure=true. A worker runs only the plugin types in its own yukta.workers.plugin-types.