Connect Cursor, VS Code, and ChatGPT

All of these clients talk to the same endpoint with the same credentials: https://api.opusdns.com/mcp, remote Streamable HTTP, browser OAuth. What differs is the config file and the key it nests the server under.

Client Remote HTTP Browser sign-in Bridge needed Approval prompt
Claude Code Yes Yes No In the client (Path A)
Claude desktop and web Yes Yes No In the client (Path A)
Cursor Yes Yes No Relayed by the agent (Path B)
VS Code Yes Yes No Relayed by the agent (Path B)
ChatGPT custom connectors Yes Yes No Relayed by the agent (Path B)
OpenAI Responses API mcp tool Yes No — needs a token you already hold No Relayed by the agent (Path B)
stdio-only clients No Through a bridge Yes Relayed by the agent (Path B)

The last column is about who draws the prompt, not about how strongly the action is gated — the gate is server-side either way. A client gets Path A only if it negotiates protocol revision 2026-07-28 and declares elicitation; everything else falls back to Path B, which works everywhere. See Approvals and confirmations.

ChatGPT adds a second gate the other clients do not have: signing in is one thing, seeing the tools is another, and the latter needs developer mode, which is not offered on the free plan. See ChatGPT.

Cursor

Write ~/.cursor/mcp.json for every project, or .cursor/mcp.json in a project root for one:

{
  "mcpServers": {
    "opusdns": {
      "url": "https://api.opusdns.com/mcp"
    }
  }
}

Then open Cursor's MCP settings; the server appears with a sign-in action. Complete the browser flow.

Some Cursor versions also expect an explicit "type": "http" alongside "url". Adding it is harmless on versions that do not require it.

VS Code

Write .vscode/mcp.json in the workspace, or use the MCP: Add Server command for a user-level install.

{
  "servers": {
    "opusdns": {
      "type": "http",
      "url": "https://api.opusdns.com/mcp"
    }
  }
}

VS Code nests servers under servers, not mcpServers. Copying a config from another client's documentation without changing that key is the most common reason the server never appears.

ChatGPT

Create a connector, paste https://api.opusdns.com/mcp, and set authentication to OAuth. The only OpusDNS-specific values are that URL and choosing OAuth.

Sign-in itself works on any plan: Dynamic Client Registration completes, the browser flow completes, and the server answers tools/list with its full tool list. Whether ChatGPT then shows those tools is a separate, plan-dependent question.

Outside developer mode, ChatGPT surfaces only tools named search and fetch. This server exposes neither, so on a plan without developer mode a connector that authenticated perfectly still reports no tools. Developer mode is available to Pro, Plus, Business, Enterprise, and Education accounts on the web — it does not exist on the free plan. This is an OpenAI product limitation; nothing on the OpusDNS side can lift it.

On a plan that offers it, the toggle is under Settings → Security and login. It has moved before — it lived under Connectors → Advanced until Connectors was renamed to Plugins — so treat OpenAI's documentation, not any particular path, as authoritative. With developer mode on, every tool this server exposes is available, writes included, subject to your confirmation settings.

Two limits survive developer mode: agent mode does not use custom connectors at all, and deep research uses them for reads only, which puts bulk_submit out of reach there.

OpenAI Responses API

For a programmatic agent rather than the ChatGPT app:

{
  "model": "gpt-5",
  "tools": [
    {
      "type": "mcp",
      "server_label": "opusdns",
      "server_url": "https://api.opusdns.com/mcp",
      "authorization": "<OpusDNS access token>",
      "require_approval": "always"
    }
  ]
}

This path takes a bearer token you have already obtained — it does not run an interactive OAuth flow, and the MCP endpoint does not accept API keys. You have to mint an access token yourself against https://auth.opusdns.com/realms/opusdns. The device-code grant is the practical option for a headless agent; request offline_access so you can refresh, because access tokens are short-lived. See OAuth details.

Keep require_approval on. The server gates writes on its own side regardless, but a model that cannot see an approval prompt will simply stop at the confirmation payload — see Approvals and confirmations.

Any other MCP client

Everything a client needs:

  • URLhttps://api.opusdns.com/mcp
  • Transport — Streamable HTTP. POST JSON-RPC with Accept: application/json, text/event-stream
  • Authentication — OAuth 2.1 authorization code with PKCE (S256). Dynamic Client Registration is supported, so no credential has to be provisioned by hand
  • Scopes to requestopenid profile email opusdns:mcp offline_access
  • Session — none. The server is stateless
  • CORS — open, and WWW-Authenticate is exposed, so a browser-based client can read the challenge

For a client that only speaks stdio, bridge it: npx -y mcp-remote https://api.opusdns.com/mcp.

Full discovery chain and token requirements: OAuth details.