The AO Toolkit, installed on your infrastructure, syncs with Automated
Operations over a secure outbound channel — telemetry up, on-demand
diagnostics down. This MCP endpoint serves the enriched context to your
agents. Add the URL — your agent host handles auth.
Endpoint
https://mcp.automatedoperations.com
Same URL for every client. Streamable HTTP transport. OAuth 2.1
discovery via RFC 9728 / 8414 / 7591 / 8707 — your agent host runs
the spec dance the first time you connect; you sign in through the
browser and pick a role.
One-command setup · every client
bash · any machine
npx @ao-mcp/setup
Detects the clients installed on your machine — all pre-selected,
deselect any you don't want — writes each config with a backup, and
verifies the connection. Needs Node 20+. Prefer manual? Per-client
snippets below.
OAuth-compliant clients · recommended
bash · Claude Code
claude mcp add --transport http AutomatedOperations https://mcp.automatedoperations.com
First connection opens a browser for consent, you pick a role, you
confirm. The agent gets a scoped token; you never touch it. Same
pattern in Cursor, Windsurf, Claude Desktop, and every other
spec-compliant MCP-HTTP host — see per-client snippets below.
Claude Code
Anthropic's terminal-native coding agent. OAuth flow runs in the
browser on first connect.
bash · CLI
claude mcp add --transport http AutomatedOperations https://mcp.automatedoperations.com
Direct API integration. Server-side context — supply a static
token (see
Static-token access). TypeScript shown; the Python SDK takes the same
mcp_servers shape.
Tool-calling shim for non-MCP-native models. Server-side; supply a
static token (see
Static-token access).
python · Agents SDK
import os
from agents import Agent, Runner
from agents.mcp import MCPServerStreamableHttp
ao = MCPServerStreamableHttp(
name="AutomatedOperations",
params={
"url": "https://mcp.automatedoperations.com",
"headers": {"Authorization": f"Bearer {os.environ['AO_TOKEN']}"},
},
)
agent = Agent(
name="ops",
instructions="You are an SRE. Use AO tools to investigate.",
mcp_servers=[ao],
)
result = await Runner.run(agent, "Why is checkout p99 latency up?")
print(result.final_output)
Don't see your client?
If your tool speaks MCP over streamable HTTP or SSE, the configuration
above will work — just rename the keys to match your client's schema. If
it doesn't, we maintain shims for OpenAI tool-calling and Google Vertex
tool-use that wrap the same backend. Email us with your client and we
will help you wire it up the same day.
For ops, CI, scripted automation, and raw-protocol debugging where
a browser-driven OAuth flow isn't practical. Mint a token once,
set it as a bearer header. Production tokens come from
POST /auth/login on
ao-cloud; in a local
make demo stack,
make jwt prints one.