The Vidext Operator MCP server
Endpoint shapes, transport, resources, and the contract the server keeps.
The Vidext Operator MCP server is a remote, authenticated MCP server speaking JSON-RPC over streamable HTTP. Client installs and the browser-OAuth flow are covered in the quickstart; this page is the server contract.
One upstream endpoint
https://vidext.com/api/mcp/operatorThis stable URL serves Claude, ChatGPT, Cursor, Codex, and custom clients. It exposes multiple typed actions, not multiple upstream URLs. Cloudflare MCP Portal may aggregate this server with other upstream servers, but the portal does not replace authentication or authorization enforced here.
/api/mcp/context is separate and employee-only. It is a distinct security boundary, not another public Operator endpoint.
Cloudflare MCP Portal
Cloudflare's intended split is:
- Vidext remains one upstream MCP server at
https://vidext.com/api/mcp/operator. - If an organization wants Vidext plus other MCP servers behind one client connection, a Cloudflare MCP Portal provides
https://<portal-hostname>/mcp. - The user authenticates to Cloudflare Access for the portal and, when Require user auth is enabled, separately authorizes the Vidext upstream. Vidext still enforces its OAuth scopes, organization membership, and tool policy.
Cloudflare always namespaces portal tools as {server_id}_{tool_name}. Use a short server ID such as operator; for example, direct search_knowledge appears through the portal as operator_search_knowledge. Do not use vidext inside tool aliases. Portal aliases can improve names and descriptions, but the server-ID prefix remains.
Do not add the employee-only Context server to a public portal. It belongs only in a separately restricted internal portal, if one is needed.
Transport details
- Method
POST, plusOPTIONSpreflight with permissive CORS for remote clients. The endpoint is stateless and never opens a server-initiated stream, soGETandDELETEanswer405. Authorization is checked before the method, so those two answer401with a bearer challenge when the request carries no valid token. - The only exposed header is
WWW-Authenticate. The endpoint is stateless, so it never mints or acceptsMCP-Session-ID. - MCP protocol version
2026-07-28only. The 2025 era is no longer served: a request that omits the per-request_metaenvelope — including aninitializehandshake — is answered with JSON-RPC-32022(Unsupported protocol version) on HTTP 400, carryingdata.supported: ["2026-07-28"]. Use an MCP client that speaks 2026-07-28. - Every POST must carry the
Mcp-Methodheader naming the JSON-RPC method, plusMcp-Namewhere the method names an entity (the tool name ontools/call, the URI onresources/read). A missing or disagreeing header is answered with-32020on HTTP 400. server/discoverreplaces the handshake; its result carriessupportedVersions.- Exchanges answer with JSON. Keep sending
Accept: application/json, text/event-stream— a response upgrades to SSE if the server emits a related message before its result. - Unauthenticated requests get a JSON-RPC 401 carrying a bearer challenge that points at the OAuth metadata — clients handle this automatically. See Authentication.
Resources
Beyond tools, the server registers one MCP resource:
| Resource | URI | Purpose |
|---|---|---|
| Server card | mcp://server-card.json | Machine-readable server metadata for hosts that inspect resources after connecting. |
No MCP prompts are registered.
The contract the server keeps
- Identity and scope: every call runs as the authenticated user, inside the organization bound to the token. Authorization matches the app exactly — admins see organization-wide, members see what their teams grant.
- Tool errors are results, not crashes: failures return
isError: truewith structured details (including whether a retry is worthwhile), instead of transport failures. See Errors and limits. - Read-only means server-enforced: deterministic read tools bypass the model, and
consult_operatorremoves every Operator write tool before model execution. - Writes are admission-controlled:
ask_operatorrequires an idempotency key; read, consultation, and write calls have separate rate and concurrency limits.
Raw JSON-RPC
Prefer a real MCP client. For debugging with curl, authenticate first (see Authentication), then:
curl -X POST "https://vidext.com/api/mcp/operator" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "Authorization: Bearer <access_token>" \
-H "Mcp-Method: tools/list" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/list",
"params": {
"_meta": {
"io.modelcontextprotocol/protocolVersion": "2026-07-28",
"io.modelcontextprotocol/clientInfo": { "name": "curl", "version": "1.0.0" },
"io.modelcontextprotocol/clientCapabilities": {}
}
}
}'Drop the _meta envelope or the Mcp-Method header and the request is rejected — see the transport details above.
tools/list returns only the tools allowed by the token's scopes. Read tokens never receive ask_operator.
Last updated on