Control Planes

July 23, 2026 ยท View on GitHub

CAO has three inbound management surfaces and one outbound extension surface. The right choice depends on who initiates the action and which transport that caller can use.

Surfaces at a glance

SurfaceDirectionCallerTransportBest for
Web UIInboundHuman operatorHTTP and WebSocketInteractive browser management
cao session and the session-management skillInboundHuman, script, CI job, or shell-capable agentShell to HTTPPortable automation and one-off commands
cao-ops-mcpInboundExternal MCP-capable agentMCP stdio to HTTPTyped fleet-management tools
PluginsOutboundcao-serverPython hooks to an external destinationNotifications, audit records, and observability

These surfaces manage CAO from outside a session. The separate cao-mcp-server is an orthogonal, in-session surface through which CAO agents coordinate with tools such as handoff, assign, and send_message. See the core MCP tools and the guide to choosing between assign and handoff.

Inbound and outbound traffic

The Web UI, shell CLI, and cao-ops-mcp send management requests into CAO. Plugins receive events from CAO and send them outward. A bidirectional integration therefore needs both an inbound command path and an outbound plugin.

All inbound surfaces ultimately use the local HTTP API. See the API overview for route families and generated OpenAPI for individual HTTP operations.

Web UI

The browser dashboard is bundled with cao-server and is the simplest surface for interactively inspecting sessions and terminals. Its setup, remote-access, and frontend-development details live in the Web UI guide.

Shell CLI

Use cao session commands for scripts, CI, cron, or any caller that can execute shell commands. cao launch creates sessions and cao shutdown removes them. The canonical command reference and agent-facing procedure are in the session-management skill.

cao-ops-mcp server

cao-ops-mcp exposes operations such as profile installation, session launch, and session inspection as typed MCP tools. Use it when a primary agent outside CAO already speaks MCP and benefits from tool discovery and structured arguments. The server forwards operations to a running cao-server; it does not replace the in-session cao-mcp-server.

Start cao-server before the MCP server. By default, both use http://localhost:9889; when CAO uses a custom endpoint, set CAO_API_HOST and CAO_API_PORT in the MCP server environment to match it.

For Claude Code, add this stdio server to .mcp.json:

{
  "mcpServers": {
    "cao-ops-mcp": {
      "command": "uvx",
      "args": [
        "--from",
        "git+https://github.com/awslabs/cli-agent-orchestrator.git@main",
        "cao-ops-mcp-server"
      ]
    }
  }
}

For other MCP clients, configure the equivalent stdio command:

uvx --from git+https://github.com/awslabs/cli-agent-orchestrator.git@main cao-ops-mcp-server

The current tools are grouped by purpose:

  • Profiles: list_profiles, get_profile_details, install_profile
  • Launch and messaging: launch_session, send_session_message
  • Terminal inspection: read_session_output, get_terminal_status, get_terminal_output
  • Session lifecycle: list_sessions, get_session_info, shutdown_session

MCP tool discovery is authoritative for clients. The declarations in ops_mcp_server/server.py are the source of truth when the server surface changes.

Choose the surface by caller:

CallerPreferred surface
Human in a browserWeb UI
Shell script, CI step, or cron jobcao session
External MCP-capable agentcao-ops-mcp
Agent that can execute shell but not MCPcao session through the skill
Custom applicationHTTP API

Outbound plugins

Plugins are Python extensions loaded by cao-server. They subscribe to lifecycle and message events and can forward those events to chat systems, logs, metrics, or other destinations. They are event consumers, not an inbound management protocol.

The plugins guide owns installation, supported events, troubleshooting, and authoring. The cao-plugin skill provides guided scaffolding.