Build it governed from the first commit.
Whatever you’re developing — an AI application, an MCP server, an agent, an Agent Skill — run it through the Brutor AI Platform and it ships with routing, guardrails, approvals, quotas and a full audit trail. Open standards, no SDK lock-in.
# OpenAI-compatible chat completions — point your client at /v1/proxy/llm $ curl -X POST https://gateway.brutor.ai/v1/proxy/llm/chat/completions -H "Authorization: Bearer sk_brutor_..." -H "Content-Type: application/json" -d '{"model":"gpt-4o","messages":[{"role":"user","content":"Hello"}]}' # Same gateway, MCP tools — no client changes $ curl -X POST https://gateway.brutor.ai/v1/proxy/mcp/{server_id} -H "Authorization: Bearer sk_brutor_..." -d '{"jsonrpc":"2.0","method":"tools/call","params":{...}}'
Drop in the gateway URL. Your code stays the same.
We didn’t invent a new protocol. The Brutor AI Gateway speaks OpenAI’s API for LLMs, MCP’s JSON-RPC 2.0 for tools and skills, and A2A for agents. OAuth flows are brokered at the gateway, OpenTelemetry traces flow out on every call. There’s no Brutor SDK to install, no proprietary client to maintain, no lock-in to migrate away from.
That’s why pointing any OpenAI SDK, any MCP-aware client, or any A2A-spec agent at the gateway is usually a one-line config change — and from that line on, every call is governed.
Pick your lane. Governance comes with it.
Six kinds of builders use the platform. Whichever you are, the same control plane sits under your work — guardrails, budgets, approvals, audit — and every lane has a hands-on guide at docs.brutor.ai.
“I’m building an AI application”
You want LLM routing and guardrails without wiring them yourself. One OpenAI-compatible endpoint fronts OpenAI, Anthropic, Bedrock, Gemini, Azure, Mistral and self-hosted models — with PII redaction, prompt-injection checks, budgets and failover applied to every call.
Guide: Call LLMs through the gatewayclient = OpenAI( base_url="https://gateway.brutor.ai/v1/proxy/llm", api_key="sk_brutor_...", ) client.chat.completions.create( model="claude-sonnet-4-6", # routed + guardrailed messages=[...] )
“I’m building an MCP server”
Register your server once and every agent in the org reaches it through the gateway — which brokers OAuth, enforces per-group tool allow-lists and argument policies, applies guardrails to inputs and outputs, and audits every tools/call.
# your server, registered once: https://tools.acme.dev/mcp → server_id: acme-tools # every caller now goes through governance POST /v1/proxy/mcp/acme-tools Authorization: Bearer sk_brutor_...
“I’m building an agent”
Route your agent’s LLM and tool calls through the gateway, then publish it to other teams as an A2A agent — signed card at the spec well-known URL, message turns brokered, guardrails on inbound and outbound traffic alike.
Guides: Build an agent & A2AGET /.well-known/agent-card/{tenant_id}/{card_name}.json POST /a2a/{tenant_id}/{card_name}/message:send POST /a2a/{tenant_id}/{card_name}/message:stream
“I’m authoring Agent Skills”
Package versioned agent workflows — instructions, scripts, resources, templates. Agents discover and load them by progressive disclosure over MCP; every step is guardrailed, quota’d, approval-gated and audited, and skill code only ever runs in Brutor’s sandbox.
Guide: Agent SkillsPOST /v1/proxy/mcp/system-agent-skill-server-{tenant} # discover → load → act, each step governed { "method": "tools/call", "params": { "name": "skills__load", "arguments": { "skill_name": "revenue-report" } } } # then: skills__run_script · skills__read_resource · skills__render_template
“I’m building a chat client or portal”
Use the same Portal API the Brutor User Portal runs on: sign-in, accessible models, MCP servers, knowledge bases, approvals and notifications. Bring your own UI — every request your users make stays inside governance.
Guide: Build a custom portalPOST /v1/portal/auth/login GET /v1/portal/models/ GET /v1/portal/servers/ GET /v1/portal/knowledgebases/ GET /v1/portal/approvals
“I’m grounding AI in our own data”
Upload to a per-team knowledge base, retrieve with hybrid search, ground answers in your own documents. Embeddings stay inside your infrastructure, and access follows the same resource-group model as everything else.
Reference: Portal & KB APIPOST /v1/admin/knowledge-base/collections/{id}/documents POST /v1/admin/knowledge-base/collections/{id}/search { "query": "Q3 EMEA renewal terms", "top_k": 8 }
New: full documentation at docs.brutor.ai.
Hands-on guides for every builder above, full API references for every surface, and a quickstart that gets the whole platform running in about ten minutes.
Quickstart & governance tour.
Run the full stack with Docker Compose, send your first governed LLM call, then trip a budget, a rate limit and a PII guardrail on purpose.
Start in 10 minutesGuides for every persona.
LLM API, agents, MCP clients and servers, coding agents, custom portals, A2A, Agent Skills, OAuth, setup scripts — each one hands-on with runnable requests.
Browse the developer guidesEvery endpoint, documented.
LLM proxy, Portal API, Admin API, MCP / A2A / OAuth / Skills, environment variables, ports and services — request and response bodies included.
Open the API referenceAlready using Claude Code, Goose, LangChain or Open WebUI?
Point them at the gateway. Every governance, audit and quota feature applies — no SDK changes, no client patches.
Open WebUI
Run Open WebUI with the gateway as its OpenAI-compatible model source. Users log in to Open WebUI; the gateway sees the API key behind it.
docker run -d -p 3000:8080 -e OPENAI_API_BASE_URL="https://gateway.brutor.ai/v1/proxy/llm" -e OPENAI_API_KEY="sk_brutor_..." ghcr.io/open-webui/open-webui:main
Goose
Configure Goose’s built-in OpenAI provider with your gateway URL and API key. MCP servers configured at the Brutor side flow in automatically.
# ~/.config/goose/config.yaml provider: openai host: "https://gateway.brutor.ai/v1/proxy/llm" api_key: "sk_brutor_..." model: "gpt-4o"
LangChain & LangGraph
Use the standard ChatOpenAI client with a base URL override. Every LLM call, tool call and chain step lands in your audit log.
llm = ChatOpenAI( base_url="https://gateway.brutor.ai/v1/proxy/llm", api_key="sk_brutor_...", model="claude-sonnet-4-6", )
Claude Code
Point Claude Code at the gateway. Per-developer keys, request & tool-call audit, with the rest of your client toolchain unchanged.
# ~/.claude/settings or env export ANTHROPIC_BASE_URL="https://gateway.brutor.ai" export ANTHROPIC_AUTH_TOKEN="sk_brutor_..."
Developing your own MCP servers?
Test, debug and inspect any MCP server.
Walk through OAuth flows, list and call tools, view raw JSON-RPC requests and responses side by side — all without writing a client.
Open the WorkbenchHands-on Udemy course.
Build MCP servers from scratch — protocol fundamentals, OAuth, tool design, and connecting your servers to the Brutor AI Gateway.
Take the courseBuild on the Brutor AI Gateway — free, today.
Includes the gateway, a sandboxed playground, and the MCP Workbench. Full guides and references for everything on this page live at docs.brutor.ai.