These docs are an early preview — some sections are still being expanded.
Vidext Docs

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/operator

This 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:

  1. Vidext remains one upstream MCP server at https://vidext.com/api/mcp/operator.
  2. If an organization wants Vidext plus other MCP servers behind one client connection, a Cloudflare MCP Portal provides https://<portal-hostname>/mcp.
  3. 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, plus OPTIONS preflight with permissive CORS for remote clients. The endpoint is stateless and never opens a server-initiated stream, so GET and DELETE answer 405. Authorization is checked before the method, so those two answer 401 with 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 accepts MCP-Session-ID.
  • MCP protocol version 2026-07-28 only. The 2025 era is no longer served: a request that omits the per-request _meta envelope — including an initialize handshake — is answered with JSON-RPC -32022 (Unsupported protocol version) on HTTP 400, carrying data.supported: ["2026-07-28"]. Use an MCP client that speaks 2026-07-28.
  • Every POST must carry the Mcp-Method header naming the JSON-RPC method, plus Mcp-Name where the method names an entity (the tool name on tools/call, the URI on resources/read). A missing or disagreeing header is answered with -32020 on HTTP 400.
  • server/discover replaces the handshake; its result carries supportedVersions.
  • 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:

ResourceURIPurpose
Server cardmcp://server-card.jsonMachine-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: true with 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_operator removes every Operator write tool before model execution.
  • Writes are admission-controlled: ask_operator requires 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

On this page