Skip to content

Platform

Integrations documentation

Connect AI providers, agent frameworks, enterprise systems, data systems and identity providers, and receive events over webhooks and MCP.

OpsAI connects to four different kinds of thing, and they are not the same kind of connection. Getting that distinction right first saves a lot of confusion later — particularly the expectation that governing an agent framework requires integrating with it.

Four kinds of connection

  • Agent frameworks — governed at the boundary they call out through. No integration, no SDK, no code inside your agent.
  • Enterprise systems — OpsAI holds a credential and carries out authorized actions. 11 connected in the sample estate.
  • Model providers — routed to, and pinned. 6 providers across 7 models.
  • Identity providers — read from, for the accountable humans and for discovery. OpsAI is not an IdP and does not want to be.

Agent frameworks

There is no framework integration, and this is the single most common misunderstanding about the product. An AI system built in LangGraph, CrewAI, AutoGen, Semantic Kernel or a hand-rolled loop is governed identically, because governance attaches where the system calls out to something that can change state rather than inside its control flow.

In practice that means one of two shapes. Either your AI system calls actions.evaluate before it acts and honours the answer, or the action goes through an OpsAI-held connection and the evaluation happens implicitly. The second is stronger, because it does not depend on your code choosing to ask.

Any framework, same two lines
from opsai import OpsAI

opsai = OpsAI()

# Whatever proposed this — a graph node, a crew task, a cron job.
decision = opsai.actions.evaluate(
    agent="refund-resolver",
    action="issue.refund",
    subject="ORD-40122",
    amount={"currency": "INR", "value": 18400},
)

if decision.outcome == "authorized":
    razorpay.refunds.create(..., grant=decision.grant)

Enterprise systems

A connection holds a credential and declares the actions it permits. The register in the sample estate lists 12 systems, of which 11 are connected.

One is not: Workday. It is listed rather than hidden, because an inventory that only shows what works is not an inventory. If a system you need is not connected, the answer is that it is not connected — and the register says so rather than implying otherwise by omission.

List connections
const { data } = await opsai.connections.list();

for (const connection of data) {
  console.log(connection.system, connection.connected, connection.allows);
}

Model providers

A model is a governed dependency with an owner, a pinned snapshot, a place it runs and an approved use. OpsAI routes to it according to a rule the organization wrote — see model routing for how a rule is expressed, and note that a rule cites a requirement of yours rather than a claim about which model is better.

Hosting is the field a compliance review asks about first, because it determines whether request content leaves your perimeter. The three values are vendor API, private endpoint and self-hosted.

Webhooks

OpsAI emits an event for every decision, every hold, every expiry and every escalation. Signed with a shared secret, delivered at least once, and idempotent on the event id — so a duplicate delivery is safe to process twice.

Verify a webhook
import { verifyWebhook } from '@opsai/sdk';

export async function POST(request: Request) {
  const body = await request.text();

  const event = verifyWebhook({
    body,
    signature: request.headers.get('opsai-signature'),
    secret: process.env.OPSAI_WEBHOOK_SECRET,
  });

  // Throws on a bad signature rather than returning a falsy value, so a
  // forgotten check cannot silently accept forged events.
  switch (event.type) {
    case 'action.held':
      return notifyApprover(event.data);
    case 'action.expired':
      return recordExpiry(event.data);
  }
}

The action.expired event is the one worth wiring first. A hold that expires is a decision nobody made, and it is the event most likely to be invisible in your own systems. The full event list.

MCP

OpsAI exposes an MCP server so an assistant can read the estate — the inventory, the policy register, a specific trace, the current posture. It is deliberately read-only.

mcp.json
{
  "mcpServers": {
    "opsai": {
      "command": "npx",
      "args": ["-y", "@opsai/mcp-server@latest"],
      "env": { "OPSAI_API_KEY": "sk_read_..." }
    }
  }
}

MCP reference lists every tool the server exposes and the scope each one needs.