Tool reference

The 58 tools OpZero exposes over MCP, grouped by what they are for. You will rarely name one directly — Claude picks them from what you ask — but this is the map of what is possible.

Read this as a menu, not a manual
Every parameter table below is generated from the definitions the server actually serves, so it cannot drift from reality. What it does not tell you is which tool to reach for; that is in concepts. If you are ever unsure in a conversation, ask Claude to call help.

Orientation

Where to start when you are not sure what is possible, what you already have, or why a call was rejected.

helpread only

The full tool catalogue with usage notes. Pass a topic to narrow it to one area or a single tool.

ParameterTypeDescription
topicstringOptional filter: a section (e.g. "deploy", "assistants", "projects") or a tool name (e.g. "deploy_react_artifact"). Unknown topics return the list of valid topics.
get_system_statusread only

Your plan, usage, active projects, recent deployments, and how much of each per-plan cap is consumed. The cheapest way to confirm the connection works.

Takes no parameters.

ask_opzero_assistantread only

Ask a question about your own account in plain language. Answers over your recent activity, and renders an adaptive view on hosts that support MCP Apps.

ParameterTypeDescription
questionreqstringQuestion to ask (e.g., 'What deployments are in progress?', 'Is my preview ready?', 'How many projects do I have?')
include_contextbooleanInclude system context (projects, deployments, previews) automatically (default: true)
diagnose_authread only

Your token type, identity, roles, scopes, real session expiry, and the health of every OAuth discovery endpoint. Run this first on any auth error.

Takes no parameters.

Publishing pages and apps

Getting something live. The four deploy tools differ in how much you write: markdown is the least, files is the most control.

deploy_markdown

Send raw markdown, get a themed page. Full GitHub-flavoured markdown, light/dark toggle, title lifted from the first heading. The lowest-effort way to publish.

ParameterTypeDescription
markdownreqstringRaw markdown content. Supports GitHub Flavored Markdown: headings, bold, italic, links, images, code blocks, tables, task lists, strikethrough, blockquotes.
titlestringPage title (auto-extracted from first heading if not provided)
themedark | light | autoColor theme: auto (system preference, default), dark, or light
namestringSite name for the URL (auto-generated if not provided)
targetcloudflare | netlify | vercelHosting provider: cloudflare (fastest, default), netlify, or vercel
force_newbooleanWhen false (default), reuses an existing project with the same name and redeploys to it. Set true to always create a fresh project.
deploy_themed

Send body HTML, get it wrapped in the OpZero design system — glass nav, typography, colour palette. Standard HTML elements are styled for you.

ParameterTypeDescription
titlestringPage title (shown in nav and browser tab)
contentreqstringHTML content for the page body. Use OpZero CSS classes: oz-card (card container), oz-grid (auto grid), oz-btn-primary (cyan button), oz-btn-secondary (outline button), oz-gradient (gradient text), oz-hero (centered hero section), oz-glow (glow effect), oz-status (live indicator). Standard HTML (h1-h6, p, ul, table, pre/code, blockquote) is styled automatically.
themedark | light | autoColor theme: auto (system preference, default), dark, or light
namestringSite name for the URL (auto-generated if not provided)
stylelanding | article | dashboardLayout: article (800px centered, default), landing (hero-focused), dashboard (1200px wide)
targetcloudflare | netlify | vercelHosting provider: cloudflare (fastest, default), netlify, or vercel
force_newbooleanWhen false (default), reuses an existing project with the same name and redeploys to it. Set true to always create a fresh project.
deploy_html

Deploy one complete HTML document. Tailwind utility classes are compiled automatically, so no CDN script or config is needed.

ParameterTypeDescription
htmlreqstringHTML content to deploy (can include inline CSS/JS). Tailwind utility classes are auto-compiled — no CDN script needed.
namestringOptional site name (auto-generated if not provided)
targetcloudflare | netlify | vercelHosting provider: cloudflare (fastest, default), netlify, or vercel
force_newbooleanWhen false (default), reuses an existing project with the same name and redeploys to it. Set true to always create a fresh project.
deploy_files

Deploy a multi-file site — HTML, CSS, JS, assets — with full file-level control. Tailwind is still compiled for you.

ParameterTypeDescription
projectIdstringExisting project ID to deploy to (optional - creates new if not provided)
namestringProject name (auto-generated if not provided)
targetcloudflare | netlify | vercelHosting provider: cloudflare (fastest, default), netlify, or vercel
filesreqobject<string, string>Object mapping file paths to contents. Tailwind utility classes in HTML files are auto-compiled. Example: {'index.html': '<html>...</html>', 'styles.css': '...'}
force_newbooleanWhen false (default), reuses an existing project with the same name and redeploys to it. Set true to always create a fresh project.
deploy_react_artifact

Deploy a React component as a live site with zero build, via ESM.sh. React, Recharts, and Lucide are built in. Set ai and storage to turn it into a real application with a backend.

ParameterTypeDescription
codereqstringReact component code (JSX/TSX). Can use imports from react, recharts, lucide-react. Should export a default component. May call window.claude.complete(prompt) and window.storage when ai/storage are enabled.
namestringSite name (auto-generated if not provided)
titlestringPage title (optional, defaults to 'React App')
dependenciesobject<string, string>Additional ESM.sh dependencies to include in import map. Format: { 'package-name': 'version' }
targetcloudflare | netlify | vercelHosting provider: cloudflare (fastest, default), netlify, or vercel. Must be cloudflare when ai/storage are enabled.
aibooleanEnable server-side AI: window.claude.complete / oz.ai stream through the Vercel AI Gateway (Haiku/GPT-mini default allowlist, owner-funded, hard-capped). Default false (plain static artifact).
storagebooleanEnable persistence: window.storage / oz.storage give per-user (and shared) key-value storage, and oz.files / window.files give per-user file storage (bytes with a media type under a path, 3MB each) on the same store. Default false.
system_promptstringPinned system prompt for the AI binding, set server-side; the client cannot override it. Optional.
force_newbooleanWhen false (default), reuses an existing project with the same name and redeploys to it. Set true to always create a fresh project.
get_templateread only

Ready-to-deploy starter files: the branded opzero theme (recommended), landing, portfolio, blog, static, vite-react, or react-esm.

ParameterTypeDescription
templatereqlanding | portfolio | blog | static | vite-react | react-esm | opzeroTemplate type: opzero (branded theme with light/dark mode — RECOMMENDED), landing (marketing page), portfolio (personal site), blog (article site), static (basic HTML), vite-react (React app with Vite), react-esm (zero-build React via ESM.sh)
update_deployment

Patch a live site by merging a partial file map into its latest deployment. Unmentioned files are preserved; an empty string deletes one.

ParameterTypeDescription
project_namestringProject name to update
project_idstringProject UUID to update (alternative to project_name)
filesreqobject<string, string>Partial file map to merge. Keys are file paths, values are new contents. These overwrite matching files; unmentioned files are preserved. Set a value to empty string to delete a file.
preview_pageread only

Render one of your deployed pages inline in the conversation, on hosts that support MCP Apps. Identify it by URL, project ID, or project name.

ParameterTypeDescription
urlstringHTTPS URL of a page on opzero.sh (e.g. https://my-site.opzero.sh). Provide exactly one of url, project_id, or project_name.
project_idstringProject UUID — its deployed URL is looked up automatically. Use this to disambiguate when several projects share a name.
project_namestringName of one of your projects — its deployed URL is looked up automatically. Errors if the name is ambiguous; use project_id then.
live_canvas

An interactive widget showing your live site next to a prompt box. Edits typed there arrive back in the conversation, and the page hot-reloads once you apply them.

ParameterTypeDescription
htmlstringHTML to deploy as the initial canvas content. Tailwind utility classes are auto-compiled. Provide exactly one of html, project_id, or project_name.
namestringOptional project name when deploying html (reuses an existing project with the same name, else auto-generated).
project_idstringAttach the canvas to this existing project (UUID).
project_namestringAttach the canvas to the existing project with this name. Errors if ambiguous; use project_id then.

Projects and domains

Managing the containers your deployments live in.

list_projectsread only

Everything you have deployed, with URLs and status. Filter by status, hosting target, name, or staleness.

ParameterTypeDescription
statusactive | archived | deleted | allFilter by project status (default: active)
targetcloudflare | netlify | vercelFilter by hosting provider
name_containsstringSearch projects by name (case-insensitive partial match)
sort_bycreated | last_deploy | nameSort order (default: last_deploy)
stale_daysnumberOnly show projects with no deploy in this many days
limitnumberMax results to return (default: 50, max: 100)
get_project_detailsread only

One project by name or ID: metadata, current URLs, custom domain, status, and a summary of its latest deployment.

ParameterTypeDescription
namestringProject name to look up
project_idstringProject UUID to look up
create_project

Create an empty project container. Usually unnecessary — the deploy tools create one for you.

ParameterTypeDescription
namereqstringProject name
descriptionstringWhat this project is about
targetcloudflare | netlify | vercelHosting provider (default: cloudflare)
rename_project

Change a project name without touching its contents or deployment history.

ParameterTypeDescription
namestringCurrent project name (alternative to project_id)
project_idstringProject UUID to rename
new_namereqstringNew project name
project_archivedestructive

Hide a project from default listings without deleting it. Reversible with the unarchive action.

ParameterTypeDescription
namestringProject name to archive/unarchive
project_idstringProject UUID to archive/unarchive
namesstring[]Array of project names to bulk archive/unarchive (max 10)
actionarchive | unarchiveWhether to archive or unarchive. Default: archive. Note that "archive" deletes a hosted MCP server's Worker and "unarchive" does not recreate it.
project_cleanupread only

Audit your account for duplicates, stale projects, and throwaway test deploys. Recommends, never deletes.

Takes no parameters.

project_deletedestructive

Take a project offline. Soft by default, with a seven-day window in which redeploying the name restores it; hard delete is immediate and permanent.

ParameterTypeDescription
namestringProject name to delete
project_idstringProject UUID to delete
namesstring[]Array of project names to bulk delete (max 10)
hardbooleanPermanently delete now (record + deployments) with no grace period. The live runtime is taken offline in both modes. Default false.
set_custom_domaindestructive

Point your own domain at a project, or remove the current one. Requires Pro or Team, plus a CNAME record you add at your registrar.

ParameterTypeDescription
project_idstringProject UUID to change the domain for (from list_projects)
namestringProject name (alternative to project_id, from list_projects)
domainstringCustom domain to set (e.g. "example.com" or "app.example.com"). Do not include protocol, path, or port. Mutually exclusive with `remove`.
removebooleanSet true to remove the project's current custom domain. This takes the site off that domain. Mutually exclusive with `domain`.

Deployment history

Inspecting what shipped, and moving between versions.

list_deploymentsread only

Recent deployments across all projects, or scoped to one.

ParameterTypeDescription
projectIdstringFilter by project (optional)
limitnumberHow many to return (default: 10)
get_deployment_detailsread only

Everything about one deployment, including the full deployed file contents — the way to recover source a conversation has lost.

ParameterTypeDescription
deploymentIdreqstringThe deployment ID to inspect
get_deployment_statusread only

Status, status detail, URL, file count, and size for a deployment, or the last five for a project.

ParameterTypeDescription
deployment_idstringSpecific deployment ID to get details for
project_namestringProject name to get the last 5 deployments for
redeploy

Rebuild a project from its stored source. MCP server projects go through the full pipeline again, preserving auth mode and runtime.

ParameterTypeDescription
namestringProject name to redeploy
project_idstringProject UUID to redeploy
deployment_idstringOptional: specific deployment ID to redeploy from (defaults to latest)
rollback_deployment

Republish an older deployment’s files as a new deployment. Forward-only, so nothing is destroyed.

ParameterTypeDescription
deployment_idreqstringThe deployment ID to rollback to
delete_deployment_recorddestructive

Permanently remove one deployment record from history.

ParameterTypeDescription
deployment_idreqstringThe deployment ID to delete

App runtime and file storage

The backend your deployed apps get for free — server-side inference, key-value records, and file storage you can also reach from the conversation.

configure_bindings

Turn AI or storage on or off for a running app without redeploying its code. Also where you change the pinned system prompt, widen the model allowlist, or adjust caps. Live within about a minute.

ParameterTypeDescription
project_idreqstringProject ID (from list_projects or a deploy response)
aiobjectAI binding settings; omitted fields keep their current values
storageobjectStorage binding settings. Gates both oz.storage (key/value records) and oz.files (file storage) — they are two halves of one binding.
inject_sdkbooleanServe the oz.js SDK for this app (default true when any binding is enabled)
storage_list_filesread only

List a project’s stored files. Metadata only, never content. Defaults to the shared scope; pass a user ID for one end user’s files.

ParameterTypeDescription
project_idstringProject ID (from list_projects or a deploy response). Pass this or project.
projectstringProject name, if you do not have the id.
prefixstringOnly list paths starting with this prefix, e.g. "reports/". Case-sensitive.
user_idstringAddress one end user's personal scope instead of the project-wide shared scope.
afterstringResume after this path (pass the previous page's cursor).
limitnumberPage size. Default 200, max 1000.
reversebooleanScan in descending path order.
storage_read_fileread only

Read one file. Text by default, base64 for binary, or metadata only. Files over 256KB come back as metadata rather than inlined.

ParameterTypeDescription
project_idstringProject ID. Pass this or project.
projectstringProject name, if you do not have the id.
pathreqstringFile path, e.g. "reports/q1.csv".
user_idstringRead from one end user's personal scope instead of the shared scope.
encodingtext | base64 | noneHow to return the content. Default 'text'.
storage_write_file

Write a file (3MB max) where the app and its MCP servers can read it. Publish it at a credential-free URL with public.

ParameterTypeDescription
project_idstringProject ID. Pass this or project.
projectstringProject name, if you do not have the id.
pathreqstringFile path, e.g. "reports/q1.csv". Printable ASCII only (transliterate non-ASCII names and put the display name in metadata). Slashes allowed; no "..", leading/trailing slash, whitespace, or % ? # < > | * characters.
contentstringText content, stored as UTF-8. Pass exactly one of content or content_base64.
content_base64stringBase64-encoded bytes, for binary files. Pass exactly one of content or content_base64.
content_typestringMedia type to store and serve. Defaults to a guess from the path extension.
publicbooleanPublish at a credential-free URL. Writes to the shared scope; cannot be combined with user_id.
user_idstringWrite into one end user's personal scope instead of the shared scope.
metadataobjectArbitrary JSON kept alongside the file (max 4KB serialized).
storage_delete_filedestructive

Delete a file, and with it any public URL it was served from.

ParameterTypeDescription
project_idstringProject ID. Pass this or project.
projectstringProject name, if you do not have the id.
pathreqstringFile path to delete.
user_idstringDelete from one end user's personal scope instead of the shared scope.

Assistants

Your own agent — model, pinned instructions, and tool backends — behind a chat endpoint.

deploy_assistant

Create an assistant from a model, a system prompt, and connections to MCP servers that already exist. Served from one of your app subdomains via oz.assistant(slug).

ParameterTypeDescription
namereqstringHuman-readable name for the assistant (e.g. "Support Bot")
slugstringURL-safe identifier (lowercase, hyphens). Auto-generated from name if not provided. Used in oz.assistant(slug) and the /__oz/assistant/<slug>/chat endpoint.
modelstringVercel AI Gateway model ID (default: anthropic/claude-haiku-4.5). Any gateway model works: anthropic/claude-sonnet-4, openai/gpt-4o, etc.
system_promptstringSystem prompt that defines the assistant's behavior. Pinned server-side — clients cannot override it.
mcp_serversobject[]MCP servers the assistant connects to and calls as tools — points at servers that ALREADY EXIST (one of OpZero's own mcps/* services, or any Streamable HTTP MCP server you already host elsewhere). This does not deploy or create a new MCP server for you; there is no deploy_* tool that turns arbitrary code into an MCP server. Each connected server's tools are discovered at request time and made available to the model.
max_tokensnumberMax output tokens per response (default: 2048)
max_stepsnumberMax tool-use rounds per request (default: 8, max: 20). Higher values let the assistant chain more tool calls.
rate_limit_per_minutenumberPer-IP rate limit (default: 30 requests/minute)
list_assistantsread only

Your assistants with their slugs, models, connected servers, and status.

ParameterTypeDescription
statusactive | archived | allFilter by status (default: active)
limitnumberMax results (default: 50, max: 100)
get_assistantread only

One assistant’s full config and its chat endpoint URL.

ParameterTypeDescription
slugstringAssistant slug
assistant_idstringAssistant UUID
update_assistant

Change the model, prompt, connected servers, or limits. Effective immediately, no redeploy.

ParameterTypeDescription
slugstringAssistant slug to update
assistant_idstringAssistant UUID to update
namestringUpdated name
modelstringUpdated model ID
system_promptstringUpdated system prompt
mcp_serversobject[]Updated list of already-running MCP servers to connect to (replaces the full list). Points at existing Streamable HTTP servers, same as in deploy_assistant — does not create or deploy a new one.
max_tokensnumberUpdated max output tokens
max_stepsnumberUpdated max tool-use rounds
rate_limit_per_minutenumberUpdated rate limit
delete_assistantdestructive

Delete an assistant. Its chat endpoint stops responding at once.

ParameterTypeDescription
slugstringAssistant slug to delete
assistant_idstringAssistant UUID to delete
chat_with_assistant

Talk to one of your assistants server-side — the way to test one before any app exists. Returns the whole reply plus a trace of each tool-use round.

ParameterTypeDescription
slugreqstringSlug of one of your deployed assistants (see list_assistants). Must be active.
promptstringSingle-turn shorthand: one user message. Provide either prompt or messages.
messagesobject[]Conversation to send, oldest first (max 100). The assistant keeps no history of its own, so replay every turn it should see. Provide either messages or prompt.

Hosted MCP servers

Write a server, hand it to OpZero, get a live endpoint that is verified to speak MCP.

get_mcp_server_templateread only

A known-good scaffold to build from: minimal, fetch-api, oauth1-api, storage, files, widget, sync, or python. Start here rather than from scratch.

ParameterTypeDescription
kindminimal | fetch-api | oauth1-api | storage | files | widget | sync | pythonTemplate kind. Default minimal. storage demonstrates ctx.user + per-user ctx.storage; files demonstrates per-user ctx.files (byte content under paths) plus publishing to a credential-free public URL; widget demonstrates an MCP Apps view authored as its own .html file and linked to tools; sync demonstrates a scheduled() handler on a cron, a plain-HTTP ingest tool, and ranged value queries for rollups; python is the minimal server authored in Python against the opzero_mcp runtime.
deploy_mcp_server

Build and deploy TypeScript or Python source as a hosted MCP server on a stable endpoint, with your chosen auth mode and an optional cron schedule.

ParameterTypeDescription
namestringProject name for the MCP server.
filesreqobject<string, string>Source files keyed by path. TypeScript: include server.ts, index.ts, server.js, index.js, main.ts, or main.js; only @opzero/mcp-runtime and zod may be imported; files ending in .html, .css, .svg, .txt, or .md bundle as importable strings (import html from './view.html') — author MCP Apps widget views as .html files and pass the import to widget({ html }). Python: include server.py, index.py, or main.py with a module-level server = define_server(...) from opzero_mcp; only the Python standard library, opzero_mcp, workers, js, and pyodide may be imported (get_mcp_server_template kind "python" shows the shape).
runtimecloudflare | vercelRuntime target. Default cloudflare. Vercel requires account entitlement.
auth_modetoken | public | oauthtoken requires a shared Bearer token, public is unauthenticated, oauth validates per-user tokens through OpZero's authorization server and scopes access to you (the deployer) with audience-bound tokens so other users cannot call your server.
secretsobject<string, string>Environment secrets exposed as ctx.env.KEY and stored encrypted.
project_idstringExisting MCP server project ID to redeploy into.
force_newbooleanCreate a fresh project even if a matching name exists.
allow_public_shared_storagebooleanpublic auth_mode only: allow ctx.storage shared-scope operations (off by default because any anonymous caller could mutate shared state).
schedulestringCron expression (UTC, 5 fields, or @hourly/@daily/@weekly/@monthly) that runs the server's exported scheduled() handler — a deployed server cannot wake itself, so this is how sync/rollup servers run unattended. Minimum interval is 5 minutes (the scheduler tick). Omit to keep the current schedule on redeploy; pass an empty string to remove it.
get_mcp_server_logsread only

Deployment health, recent deploy records, and a live Cloudflare tail when one is available. The first stop when a server misbehaves.

ParameterTypeDescription
project_idstringMCP server project UUID. Provide this or project_name.
project_namestringMCP server project name. Provide this or project_id.
limitintegerRecent deployment record count. Default 10.
sincestringISO timestamp lower bound for deployment records.
list_mcp_app_widgetsread only

Which MCP Apps widgets your server exposes and which tools render into each — including tools pointing at a widget that does not exist.

ParameterTypeDescription
project_idstringMCP server project UUID. Provide this or project_name.
project_namestringMCP server project name. Provide this or project_id.
set_mcp_server_secret

Set an encrypted environment secret, exposed to the server as ctx.env.KEY. Cloudflare picks it up immediately.

ParameterTypeDescription
project_idreqstringThe MCP server project ID.
keyreqstringEnvironment variable name.
valuereqstringSecret value. It is write-only and never returned.
list_mcp_server_secretsread only

The secret keys configured on a server. Values are never returned.

ParameterTypeDescription
project_idreqstringThe MCP server project ID.
delete_mcp_server_secretdestructive

Remove an environment secret.

ParameterTypeDescription
project_idreqstringThe MCP server project ID.
keyreqstringSecret key to delete.
rotate_mcp_server_tokendestructive

Replace a token-mode server’s access token. The old one stops working immediately; the new one is shown exactly once.

ParameterTypeDescription
project_idreqstringThe MCP server project ID.

Gateways

One MCP endpoint fronting many backends, behind an exposure policy.

create_gateway

A federated endpoint at gw.opzero.sh/g/<slug>/mcp. Choose the exposure mode carefully — search is right for Claude.ai.

ParameterTypeDescription
namereqstringHuman-readable name for the gateway (e.g. "Support Bot Tools")
slugstringURL-safe identifier (lowercase, hyphens). Auto-generated from name if not provided. The gateway endpoint is gw.opzero.sh/g/<slug>/mcp. "default" is reserved.
descriptionstringWhat this gateway is for
exposure_modeauto | inline | search | pinnedHow tools are exposed. search (recommended, and required for clients that snapshot tools/list like Claude.ai): a constant three-tool surface (search_tools, invoke_read_tool for backend tools explicitly marked read-only, invoke_write_tool for everything else) whose shape never changes, with live discovery at call time. inline (all tools merged into tools/list, namespaced <ns>_<tool>): only for clients that re-list every session (Claude Code, API mcp_servers) with small fixed toolsets — the surface changes whenever backends do, which strands snapshot caches. pinned: chosen tools inline + meta-tools for the rest. auto: resolves to search whenever track_all_deployed is true (open-ended tool population must not flip surface shape mid-lifecycle); otherwise inline until the tool count exceeds inline_tool_limit, then search. Default: auto.
inline_tool_limitnumberTool-count threshold where auto mode flips from inline to search (default 40)
track_all_deployedbooleanWhen true, every active deployed MCP server is federated automatically without explicit backend rows (default false; the default gateway has this on)
list_gatewaysread only

Your gateways with endpoints and backend counts. Materializes the default gateway on first call.

ParameterTypeDescription
limitnumberMax gateways to return (default 50)
get_gatewayread only

One gateway in full: exposure policy, backend attachments with namespaces, and per-backend health.

ParameterTypeDescription
slugstringGateway slug
gateway_idstringGateway UUID (alternative to slug)
update_gateway

Change the name, exposure mode, inline limit, pinned tools, or tracking flag. Live within about thirty seconds.

ParameterTypeDescription
slugstringGateway slug
gateway_idstringGateway UUID (alternative to slug)
namestringNew name
descriptionstringNew description
exposure_modeauto | inline | search | pinnedNew exposure mode. search is recommended for any gateway consumed by Claude.ai (constant three-tool surface immune to tools/list snapshot caching); inline suits only re-listing clients with small fixed toolsets; auto resolves to search whenever track_all_deployed is true.
inline_tool_limitnumberNew auto-mode threshold
pinned_toolsstring[]Qualified tool names (<namespace>_<tool>) shown inline in pinned mode
track_all_deployedbooleanAutomatically federate all deployed MCP servers
add_gateway_backend

Attach a hosted server, an external MCP server, or an assistant, under a namespace that prefixes its tool names. Use an external connection for third-party credentials.

ParameterTypeDescription
gateway_slugstringGateway to attach to (or use gateway_id)
gateway_idstringGateway UUID (alternative to gateway_slug)
typereqopzero_mcp | external_mcp | assistantBackend type
namespacereqstringTool-name prefix, unique per gateway (lowercase alphanumeric + underscores, e.g. "shop")
server_idstringopzero_mcp: the project id (UUID from list_projects) or the mcp_server id (from get_project_details). Both resolve to the project's current MCP endpoint.
assistant_slugstringassistant: the assistant slug
assistant_idstringassistant: the assistant UUID (alternative to assistant_slug)
urlstringexternal_mcp: the Streamable HTTP MCP endpoint URL. Optional when connection is given (the connection supplies its own server url); pass it anyway to point a connection at a self-hosted instance of the same service.
connectionstringexternal_mcp only: use one of your external connections (create_connection) as this backend's credential. Accepts the connection label, the provider slug, or the connection id from list_connections. The gateway fetches a fresh access token per call and refreshes it automatically, so this is the right choice for any OAuth service. Attaching also grants this backend access to the connection; remove_gateway_backend revokes that grant. Requires your MCP identity to be linked (link_identity) - external connections are never released to an identity matched only by an unverified email. Mutually exclusive with auth_bearer and use_caller_token.
auth_bearerstringexternal_mcp only: bearer token the gateway sends to this backend. Stored encrypted; never returned. Mutually exclusive with use_caller_token.
use_caller_tokenbooleanexternal_mcp only: forward each caller's own OpZero bearer token to the backend instead of a stored credential, so the backend sees the caller as themselves. Only allowed for OpZero service-owned endpoints (currently https://code.opzero.sh) — never tenant app subdomains or hosted MCP hosts, which run user-controlled code; the token is never sent anywhere else. Mutually exclusive with auth_bearer. Example: federate your CodeZ Hub machines through a gateway with url "https://code.opzero.sh/mcp", namespace "hub", use_caller_token true.
tool_allowliststring[]Backend-local tool names to expose (omit for all tools)
positionnumberSort order in listings (default 0)
remove_gateway_backenddestructive

Detach a backend. The backend itself survives; any connection grant it held through this gateway is revoked.

ParameterTypeDescription
backend_idreqstringThe gateway backend attachment UUID
delete_gatewaydestructive

Delete a gateway and its attachments. Backends are untouched. The default gateway cannot be deleted.

ParameterTypeDescription
slugstringGateway slug
gateway_idstringGateway UUID (alternative to slug)

External connections

OAuth grants to third-party MCP servers, stored encrypted and released only to workloads you name.

create_connection

Connect Notion, Linear, Sentry, Neon, Vercel, or any RFC 9728 server. Returns a one-time authorize URL; the grant is stored encrypted and refreshed for you.

ParameterTypeDescription
providerstringCatalog provider slug (notion, linear, sentry, neon, vercel). Omit when passing an explicit url.
urlstringStreamable HTTP MCP endpoint of any external server. Required for servers not in the catalog; also overrides a catalog entry so you can point at a self-hosted instance. The server must publish RFC 9728 protected resource metadata.
labelstringName for this connection, e.g. "Work Notion". Defaults to the provider name. Lets you hold several accounts with the same provider.
grant_to_kindgateway_backend | assistant | mcp_serverOptionally attach the resulting connection to a workload in the same step (otherwise use grant_connection later). Connections are never ambient: nothing can use one until it is granted.
grant_to_idstringId of the workload to grant. Required with grant_to_kind.
list_connectionsread only

Your connections with status, granted scope, and which workloads may use each. Status needs_reauth means the grant must be recreated.

ParameterTypeDescription
limitnumberMax connections to return (default 50)
grant_connection

Let one workload use one connection, or revoke that permission. This is the consent boundary — nothing is ambient.

ParameterTypeDescription
connection_idreqstringConnection UUID from list_connections
subject_kindreqgateway_backend | assistant | mcp_serverWhat kind of workload is being granted access
subject_idreqstringId of the workload: gateway backend id (get_gateway), assistant id (list_assistants), or mcp_server id (get_project_details)
notestringOptional note recording why this grant exists
revokebooleanRemove the grant instead of creating it
delete_connectiondestructive

Revoke at the provider where supported, delete the stored credential, and drop every grant on it.

ParameterTypeDescription
connection_idreqstringConnection UUID from list_connections
Next
Other clients

Connecting from Claude Code, Cursor, Codex, and raw HTTP.