OK! Gotcha

AI Unleashed.
Risks Contained.

Your autonomous agents are powerful. OK!Gotcha ensures they're also safe, compliant, and aligned. Integrate human insight seamlessly, whether via SDK/API or lightweight MCP.

The High Stakes of Unchecked AI

Without proper safeguards, autonomous AI systems can quickly turn from powerful tools into significant liabilities.

Cascading Errors

Agentic systems accelerate innovation... but errors can amplify instantly across systems.

Tap for example

Oversight Gaps

Integrating LLM tools via MCP offers agility... but critical oversight is often an integration afterthought.

Tap for example

Compliance Complexity

Compliance is non-negotiable... yet proving it with autonomous actions is challenging and resource-intensive.

Tap for example

Eroding Trust

Trust is paramount... but black box operations without clear human checkpoints breed skepticism.

Tap for example
Animated workflow: AI Agent to Validation, requires Human approval, then returns.API / SDK / MCPWebhookRequest ApprovalApprovedApproval RequiredGranted
AI Agent
Human

OK!Gotcha: The Intelligent Bridge

Between AI Potential and Human Assurance.

Define Granular Approvals

Intercept critical AI actions before execution based on your custom rules.

Integrate Your Way

Seamless SDK/API for deep agent control, plus a dedicated MCP server for lightweight tool validation.

Ensure Full Compliance

Capture immutable audit trails for every decision point, satisfying regulatory needs.

Control Made Simple. Integration Flexible.

Choose your integration path.

SDK Integration

Direct integration via SDK calls for complete control

import { OkGotcha } from '@okgotcha/sdk';
import OpenAI from 'openai';

const ok = OkGotcha();

// Define tools
const tools = {
  getAccountBalance: async (accountId: string): Promise<number> => {
    return 10000; // Example implementation
  },
  
  transferFunds: ok.requireApproval({
    title: "Fund Transfer",
    description: "Transfer funds between accounts",
    approvers: ["finance-team", "security-team"]
  })(async (fromAccount: string, toAccount: string, amount: number): Promise<boolean> => {
    // Implementation here
    return true;
  })
};

// Define OpenAI tools schema
const openaiTools = [
  {
    type: "function",
    function: {
      name: "getAccountBalance",
      description: "Get the current balance of an account",
      parameters: {
        type: "object",
        properties: {
          accountId: { type: "string" }
        },
        required: ["accountId"]
      }
    }
  },
  {
    type: "function",
    function: {
      name: "transferFunds",
      description: "Transfer funds between accounts",
      parameters: {
        type: "object",
        properties: {
          fromAccount: { type: "string" },
          toAccount: { type: "string" },
          amount: { type: "number" }
        },
        required: ["fromAccount", "toAccount", "amount"]
      }
    }
  }
];

// Example usage
const processTransfer = async (amount: number, fromAccount: string, toAccount: string) => {
  const balance = await tools.getAccountBalance(fromAccount);
  
  if (balance >= amount) {
    return await tools.transferFunds(fromAccount, toAccount, amount);
  }
  return false;
}

Perfect for: Developers building complex agentic systems that need fine-grained control over the approval flow.

MCP Integration

Lightweight integration via Model Context Protocol

import { OkGotcha } from '@okgotcha/sdk';
import OpenAI from 'openai';

const ok = OkGotcha();

// Define tools
const tools = {
  getAccountBalance: async (accountId: string): Promise<number> => {
    return 10000; // Example implementation
  },
  
  transferFunds: ok.requireApproval({
    title: "Fund Transfer",
    description: "Transfer funds between accounts",
    approvers: ["finance-team", "security-team"]
  })(async (fromAccount: string, toAccount: string, amount: number): Promise<boolean> => {
    // Implementation here
    return true;
  })
};

// Define OpenAI tools schema
const openaiTools = [
  {
    type: "function",
    function: {
      name: "getAccountBalance",
      description: "Get the current balance of an account",
      parameters: {
        type: "object",
        properties: {
          accountId: { type: "string" }
        },
        required: ["accountId"]
      }
    }
  },
  {
    type: "function",
    function: {
      name: "transferFunds",
      description: "Transfer funds between accounts",
      parameters: {
        type: "object",
        properties: {
          fromAccount: { type: "string" },
          toAccount: { type: "string" },
          amount: { type: "number" }
        },
        required: ["fromAccount", "toAccount", "amount"]
      }
    }
  }
];

// Create OpenAI client
const openai = new OpenAI();

// Example of using tools with OpenAI
async function processUserRequest(userInput: string) {
  const messages = [{ role: "user", content: userInput }];
  
  let response = await openai.chat.completions.create({
    model: "gpt-3.5-turbo-1106",
    messages,
    tools: openaiTools,
    tool_choice: "auto"
  });

  while (response.choices[0].message.tool_calls) {
    messages.push(response.choices[0].message);
    
    for (const toolCall of response.choices[0].message.tool_calls) {
      const toolName = toolCall.function.name;
      const toolArgs = JSON.parse(toolCall.function.arguments);
      
      const toolResult = await tools[toolName](...Object.values(toolArgs));
      
      messages.push({
        role: "tool",
        name: toolName,
        content: JSON.stringify(toolResult),
        tool_call_id: toolCall.id
      });
    }

    response = await openai.chat.completions.create({
      model: "gpt-3.5-turbo-1106",
      messages,
      tools: openaiTools
    });
  }

  return response.choices[0].message.content;
}

// Use the tools
const result = await processUserRequest(
  "Transfer $5000 from account 123 to account 456"
);

Perfect for: LLM tools and zero-code implementations where simplicity is key.

Both approaches provide the same core functionality with different integration paths

View Full Documentation

The Features You Need. The Confidence You Deserve.

Flexible Workflows

Tailor multi-step approvals, assign roles based on context, set conditions, and define escalation paths.

Dual Integration Power

Native SDKs for deep integration + Lightweight MCP server for tool-based checks. Your architecture, your choice.

Ironclad Audit Trails

Immutable, timestamped records for compliance, debugging, and full visibility. Filter by source (SDK/API vs. MCP).

Real-time Oversight

Monitor pending requests, review history, manage users, and configure settings from a central dashboard.

Seamless Notifications

Keep approvers informed instantly via Email, Slack, Microsoft Teams, or custom webhooks.

Enterprise Ready

Built with security first: SSO integration (SAML/OAuth), Role-Based Access Control for granular permissions.

Built for everyone in your organization.

Scale Confidently, Govern Effectively

Protect your business from costly AI errors, ensure adherence to policies and regulations, and foster innovation with robust guardrails. Reduce liability and build stakeholder trust.

Simple, Transparent Pricing

Pay only for what you use with our straightforward pricing model.

$5
per approver / month

Give your team members approval rights across all your AI workflows.

Unlimited approvals
SDK/API + MCP access
Full audit logs
Integrations: Email/Slack/Teams/etc
Customizable approval flows
99.9% uptime SLA
Email support
No credit card required to start

Enterprise Options

Need custom deployment, dedicated support, or volume discounts?

Contact our sales team →

Free to start

No credit card required. Start with a 14-day trial to test all features.

Cancel anytime

No long-term contracts. Pay month to month and cancel when you need.

Volume discounts

Price breaks available for teams with 20+ approvers.