Ultra integrates with Ona cloud dev environments so that every MCP call made by the Ona Agent flows through Ultra. Configure a deploy key first; then add the devcontainer so install and migration run automatically with no manual steps inside the container.Documentation Index
Fetch the complete documentation index at: https://docs.ultra.security/llms.txt
Use this file to discover all available pages before exploring further.
Linking to your Ultra Hub tenant
The devcontainer hooks (below) get Ultra proxying MCP traffic locally. To send traces and audit events to your Ultra Hub tenant, the environment needs to authenticate.Deploy key
Use a deploy key in Ona’s environment variables—interactiveultra login is not available in Ona cloud dev environments. This path is zero-touch for end users and works well for team and fleet deployments.
Create a deploy key
In Ultra Hub, go to Settings → Security → Deploy Keys and create a workspace-scoped deploy key. See Deploy keys for details.
Set environment variables
In your Ona organization’s environment variables or secrets, add:
| Variable | Description |
|---|---|
ULTRA_DEPLOY_KEY | The deploy key you created |
Quick start
Add a.devcontainer/devcontainer.json to your repo (or merge these hooks into an existing one):
What happens on first boot
ThepostCreateCommand runs once when the environment is built:
- Installs the Ultra binary into
/usr/local/bin/ultravia the install script. ultra install --client ona --yescreates.ona/mcp-config.json(and the.ona/directory if missing) and addsultratomcpServers. Existing entries are preserved.ultra migrate --from ona --all --yesmoves any pre-existing MCP server entries from.ona/mcp-config.jsoninto Ultra’s upstream config (~/.config/ultra/config.yaml), so the Ona Agent only seesultraand every tool call routes through it.
postStartCommand runs on every subsequent environment start. It re-runs migrate to catch any MCP servers you added to .ona/mcp-config.json between sessions. Both commands are idempotent.
After the hooks finish, .ona/mcp-config.json looks like:
Verification
After rebuilding, confirm Ultra is wired correctly:Merging with an existing devcontainer
If your repo already has a.devcontainer/devcontainer.json with its own lifecycle hooks, chain the Ultra commands onto the end:
Troubleshooting
ultra install prints 'Ona is not installed'
ultra install prints 'Ona is not installed'
The Ona detector reports
Installed=true only when ONA_WORKSPACE_ID is set or the ona CLI is on PATH. This is always true inside an Ona environment. If you see this error outside an Ona environment, that’s expected..ona/mcp-config.json created in the wrong directory
.ona/mcp-config.json created in the wrong directory
Ultra walks up from the current working directory looking for an existing
.ona/ folder. If none is found, it writes under the current working directory. The devcontainer hooks run from the workspace folder (/workspaces/<repo>), so the file lands at /workspaces/<repo>/.ona/mcp-config.json.Ona Agent still calls servers directly
Ona Agent still calls servers directly
The Agent reads
.ona/mcp-config.json at session start. Restart the Agent or open a new Ona session after the devcontainer hooks finish.Traces visible locally but not in the Hub
Traces visible locally but not in the Hub
Confirm the environment is linked. Run
ultra doctor inside the container — it reports link status and identity resolution. If the deploy key isn’t picked up, verify ULTRA_DEPLOY_KEY is set in the Ona environment.Re-running setup manually
Both commands are safe to re-run at any time:.ona/mcp-config.json and want them pulled into Ultra’s upstream config without rebuilding the environment.