Automated Operations Get started

MCP integration guide

Point any agent at one endpoint

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
json · .mcp.json (per-project)
{
  "mcpServers": {
    "AutomatedOperations": {
      "type": "http",
      "url": "https://mcp.automatedoperations.com"
    }
  }
}

Claude Desktop

Anthropic desktop app for Mac and Windows.

json · ~/Library/Application Support/Claude/claude_desktop_config.json
{
  "mcpServers": {
    "AutomatedOperations": {
      "type": "http",
      "url": "https://mcp.automatedoperations.com"
    }
  }
}

Windows path: %APPDATA%\Claude\claude_desktop_config.json

Cursor

AI-first IDE.

json · ~/.cursor/mcp.json (or .cursor/mcp.json per-project)
{
  "mcpServers": {
    "AutomatedOperations": {
      "url": "https://mcp.automatedoperations.com"
    }
  }
}

Windsurf

Codeium's agentic IDE.

json · ~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "AutomatedOperations": {
      "serverUrl": "https://mcp.automatedoperations.com"
    }
  }
}

Codex CLI

OpenAI's coding CLI.

toml · ~/.codex/config.toml
[mcp_servers.AutomatedOperations]
url = "https://mcp.automatedoperations.com"
transport = "http"

Zed

High-performance collaborative editor.

json · ~/.config/zed/settings.json
{
  "context_servers": {
    "AutomatedOperations": {
      "source": "custom",
      "url": "https://mcp.automatedoperations.com"
    }
  }
}

VS Code

GitHub Copilot Chat / agent mode.

json · .vscode/mcp.json
{
  "servers": {
    "AutomatedOperations": {
      "type": "http",
      "url": "https://mcp.automatedoperations.com"
    }
  }
}

LiteLLM

Proxy and gateway for 100+ LLMs. Server-to-server, no browser in the loop — provide a static token (see Static-token access).

yaml · config.yaml (proxy)
mcp_servers:
  automated_operations:
    url: https://mcp.automatedoperations.com
    transport: http
    auth_type: bearer
    auth_value: os.environ/AO_TOKEN

litellm_settings:
  enable_mcp: true

Anthropic SDK

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.

typescript
import Anthropic from '@anthropic-ai/sdk';

const client = new Anthropic();

const res = await client.beta.messages.create({
  model: 'claude-sonnet-4-6',
  max_tokens: 1024,
  messages: [{ role: 'user', content: 'List failing pods in production.' }],
  mcp_servers: [
    {
      type: 'url',
      url: 'https://mcp.automatedoperations.com',
      name: 'AutomatedOperations',
      authorization_token: process.env.AO_TOKEN!
    }
  ]
});

OpenAI Agents / SDK

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.

Static-token access

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.

bash · curl
curl -X POST https://mcp.automatedoperations.com \
  -H "Authorization: Bearer $AO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

tools/list and tools/call require an MCP-bound token (from the connect-time role picker) — spec-compliant agent hosts get one automatically.