Quickstart

Connect a client, ask a question, make a change. About ten minutes, most of it read-only.

This walkthrough uses production (https://api.opusdns.com/mcp) — the endpoint you will keep using. Steps 1–3 only read and preview; nothing changes until you approve step 4. If you would rather rehearse against throwaway domains first, there is a free sandbox — see step 5.

Before you start

  • An OpusDNS account.
  • An MCP client that speaks remote Streamable HTTP. This page uses Claude Code because it is a single command; every other client is on Connect your client.

You do not need an API key. The MCP endpoint authenticates with OAuth in your browser and rejects API keys.

1. Add the server

claude mcp add --transport http opusdns https://api.opusdns.com/mcp

Then run /mcp inside Claude Code, pick opusdns, and complete the sign-in that opens in your browser. There is nothing to paste back.

Check it worked:

claude mcp list

The server should be listed as connected. If it is not, the symptom is almost certainly in Troubleshooting.

2. Ask a read question

Read questions answer straight away — nothing to approve, because nothing changes.

"How many domains do I have, and what is expiring in the next 90 days?"

The model calls portfolio_summary, which takes no arguments and returns one small object:

{
  "status": "ok",
  "operationId": "get_domain_summary_v1_domains_summary_get",
  "httpStatus": 200,
  "data": {
    "domains": {
      "total_count": 28,
      "by_tld": { "com": 7, "de": 8, "net": 4, "org": 5, "io": 4 },
      "expiring_soon": { "next_30_days": 6, "next_60_days": 9, "next_90_days": 11 }
    }
  },
  "truncated": false
}

That single call is why the tools stay usable on a large portfolio: the answer is a summary, not a list of every domain.

3. Preview a change

Now a change. Ask for something narrow:

"Show me what would happen if I turned off auto-renew on every .io domain."

The model calls bulk_preview. It resolves the selector against your portfolio server-side and shows you the plan — it submits nothing and asks for no approval:

{
  "templateType": "domain_update_bulk",
  "template": { "renewal_mode": "expire" },
  "selector": { "tld": ["io"] },
  "sampleSize": 3
}

The reply's matchedDomains is the number that matters. Read it before you approve anything — it is the difference between changing four domains and changing four thousand.

4. Approve the change

This step changes live domains. Check matchedDomains from step 3 first, and keep the selector narrow. To rehearse the write itself against throwaway domains, run the same steps against the sandbox — step 5.

"Yes, do it."

The model calls bulk_submit with the same arguments. This one writes, so it stops and asks you first. Depending on your client you either get an approval prompt in the client itself, or a confirmation_required payload the model relays to you; both are described in Approvals and confirmations.

The prompt names the command, the count and the filters:

Approve: domain_update_bulk on 4 domain(s) matching tld=["io"] (POST /v1/jobs)? Risk: writes data.

Approve it, and the answer carries a batch_id:

{
  "status": "ok",
  "operationId": "create_batch_v1_jobs_post",
  "httpStatus": 201,
  "data": { "batch_id": "batch_01k3n0m5xrf9pab6t2wqzhkvr3", "jobs_created": 4 },
  "truncated": false
}

Ask "is that batch done?" and the model calls job_batch_status with that id.

5. Optional: the sandbox

If you want to try writes without touching live domains, the sandbox runs the same nine tools against a free, fully isolated account. Same client, one different URL:

claude mcp add --transport http opusdns-sandbox https://sandbox.opusdns.com/mcp

It is a separate account and a separate sign-in, so its domains and your production domains never see each other. You can keep both connected at once — give them distinct names, as above. See Adding the sandbox alongside production.

What just happened

  • You never typed a domain name. The selector described the set, and the server resolved it against your portfolio.
  • The change went out as one Jobs batch, not as a loop of single calls.
  • Nothing ran before you approved it, and the approval was bound to the exact set of domains the preview matched. If that set changes, you are asked again.
  • The batch outlives the conversation. Closing the client neither pauses nor cancels it.

Next