# Connect ChatGPT or Claude to Porkbun (hosted MCP, no install)

Porkbun runs its MCP server for you at **`https://mcp.porkbun.com/mcp`**. Add that URL to ChatGPT, Claude, Claude Code, Cursor or any client that supports remote MCP servers, sign in to Porkbun once, and the assistant can manage your domains in the conversation. There is nothing to install, and no API key to create, copy or paste.

It is the same server as the npm package (`@porkbunllc/mcp-server`), with the same tools and the same guardrails, minus the four sandbox-only tools. Use the npm package instead if you want to run it yourself, pin a version, or point it at a sandbox (`pk1_sb_`) key.

## What you are granting

Approving a connection gives that app **full access to your account through the API** — the same as an API key:

- read your domains, DNS, SSL certificates, balance and settings
- change DNS, nameservers, forwarding, contacts and auto-renew
- **spend money**: register, renew and transfer domains, provision hosting, and top up account credit from your saved card

The consent screen says this before you approve, and shows which app you are connecting and where it will send you back.

Your API settings still apply to a connection, exactly as they do to a key:

- **Per-domain API access.** The app can only touch domains that are opted in to API access (from the Details panel next to each domain in Domain Management), unless you have opted in every domain at https://porkbun.com/account/api.
- **Monthly API spend limit**, set at https://porkbun.com/account/api. Set one before you connect.
- **Top-up caps.** Purchases spend prepaid account credit and never charge a card on their own; only a top-up does, within daily and monthly caps. You get an email for every charge.

## Connect

You need a Porkbun account, and the domains you want the assistant to manage opted in to API access (see above).

### Claude (claude.ai, Claude Desktop)

On **Free, Pro and Max** plans (Free allows one custom connector):

1. Open **Customize → Connectors**, click **+**, then **Add custom connector**.
2. Name it `Porkbun` and paste the URL `https://mcp.porkbun.com/mcp`. Leave **Advanced settings** alone: Porkbun needs no OAuth client ID or secret, because Claude registers itself.
3. Click **Add**, then **Connect**. A Porkbun page opens: sign in if asked, check what it lists, and click **Allow Claude**.
4. In a chat, click **+** at the lower left, choose **Connectors**, and switch **Porkbun** on.

On **Team and Enterprise** plans, an owner adds it once for everyone:

1. **Organization settings → Connectors → Add**, hover over **Custom**, choose **Web**.
2. Paste `https://mcp.porkbun.com/mcp` and click **Add** (again, no OAuth client ID or secret).
3. Each member then opens **Customize → Connectors**, finds Porkbun, clicks **Connect**, and clicks **Allow Claude** on the Porkbun page, signed in to their own Porkbun account.

A connector added on the web also appears in Claude Desktop.

### Claude Code

```bash
claude mcp add --transport http --scope user porkbun https://mcp.porkbun.com/mcp
```

`--scope user` makes it available in every project; leave it out to add it to the current project only. Then, in a Claude Code session:

1. Run `/mcp`.
2. Select `porkbun` and choose to authenticate. Your browser opens the Porkbun page (if it doesn't, open the link Claude Code prints).
3. Sign in if asked, click **Allow Claude Code**, and go back to the terminal.

### ChatGPT

Custom MCP servers need **developer mode**, available on the web for Plus, Pro, Business, Enterprise and Edu. On a Business or Enterprise workspace, an admin may need to allow it first (**Workspace Settings → Permissions & Roles → Connected Data**).

1. Open **Settings → Security and login** and turn on **Developer mode**.
2. Open **Plugins** and click **+**.
3. Enter a name (`Porkbun`) and a short description (for example "Manage my Porkbun domains and DNS"). Under **Connection**, choose a public endpoint and enter `https://mcp.porkbun.com/mcp`, including the `/mcp` part.
4. Create it. ChatGPT detects that Porkbun needs a sign-in; follow the prompt, sign in if asked, and click **Allow ChatGPT**. ChatGPT then lists the tools it found.
5. Start a new conversation and add Porkbun from the **tools menu** in the message box.

ChatGPT asks you to confirm before running a tool that changes something. When Porkbun adds or changes tools, open the connection under **Plugins** and choose **Refresh**.

### Cursor and other clients

Any client that supports remote MCP over Streamable HTTP with OAuth works with the bare URL:

```json
{
  "mcpServers": {
    "porkbun": { "url": "https://mcp.porkbun.com/mcp" }
  }
}
```

The client discovers the authorization server on its own and opens the consent screen the first time it connects.

Menus in these apps move often. If a step above does not match what you see, look for "connectors", "custom MCP server" or "remote MCP" in the app's settings; the URL is the only thing Porkbun needs.

## Choose an endpoint

The hosted server has three addresses. They share the same sign-in, account and connection; the address only decides which tools the assistant is offered.

| Endpoint | Leaves out | Use it for |
|---|---|---|
| `https://mcp.porkbun.com/mcp` | Only the sandbox tools, which need a sandbox key | Adding Porkbun yourself (the default) |
| `https://mcp.porkbun.com/mcp/no-purchases` | Anything that buys or charges (registering, renewing, transferring, closeouts, new hosting, credit, auto-renew), and secrets (SSL private keys, WordPress passwords, webhook signing secrets) | The version in the ChatGPT and Claude app directories; an assistant that should never spend money |
| `https://mcp.porkbun.com/mcp/no-topups` | Charging your card for credit, and changing auto top-up | An assistant that may buy with existing credit but must never charge a card |

To switch, add the endpoint you want as a custom connector with the steps above, and remove the old one.

## Check it works

Ask the assistant to "ping Porkbun" or "what's my Porkbun balance?". `ping` answering with `credentialsValid: true` means the connection is live.

## See, limit and disconnect connections

Every connection is its own API key, listed at https://porkbun.com/account/api as **"_app name_ (connected app)"** — for example "Claude (connected app)". Connecting the same app again reuses that key rather than creating another.

- **Limit it to certain domains:** open the key's settings and fill in **Allowed domains**. The app can then only touch those domains, on top of per-domain API access.
- **No IP restriction:** every call a connection makes comes from Porkbun's connector server, not from you, so an IP allowlist could only cut the app off. The settings page hides that field for connected-app keys.
- **Disconnect:** disable or delete that key. The app loses access within seconds, even mid-conversation. Connecting again later creates a fresh key.
- **Limits:** per-domain API access, the monthly spend limit and the top-up caps all apply to it, as above.

## Safety

The API's own guardrails hold no matter which assistant is driving:

- **Dry runs.** Every billable or destructive call can be rehearsed first; a good assistant will quote you the price and ask before registering.
- **No double charges.** Writes carry an idempotency key, so a retried call replays the original result.
- **Labelled tools.** Every tool declares whether it only reads and whether it destroys something, which is what clients use to decide when to ask you first.
- **Tokens, not keys.** The app never sees an API key or secret. It holds short-lived tokens it cannot turn into one.

## Troubleshooting

- **The app keeps asking you to sign in again** — the connection's key was disabled or deleted. Approve again to create a new one.
- **Purchases fail for lack of funds** — the assistant tells you how much is missing. If a card is saved on the account, some assistants (ChatGPT, for one) can top up your credit for you after telling you the dollar amount and asking; the Claude apps will not charge a card, and hand it back to you. Either way you can add credit yourself with **buy account credit** at https://porkbun.com/account/credit, then ask it to try again.
- **Porkbun from an app directory can't buy things or top up** — the versions listed in the ChatGPT and Claude directories leave some tools out to follow the directories' rules: no purchases, and no secrets such as SSL private keys or WordPress passwords. For everything, add the full server yourself as a custom connector with the URL `https://mcp.porkbun.com/mcp`, using the steps above. You can remove the directory version afterwards.
- **A domain you own is refused or missing** — it is not opted in to API access, or it is on a different Porkbun account than the one you signed in with when you approved.

## For MCP client developers

Standard MCP authorization (spec revision 2025-06-18); nothing Porkbun-specific to implement.

| | |
|---|---|
| MCP endpoint | `https://mcp.porkbun.com/mcp` — Streamable HTTP, stateless, JSON responses |
| Narrower variants | `/mcp/no-purchases` (without any tool that spends money, and without the ones that return a secret: SSL private keys, WordPress app passwords, webhook signing secrets; the ChatGPT and Claude directory listings use it) and `/mcp/no-topups` (without only the card top-up tools). Same sign-in and tokens; they change which tools the assistant is offered, not what the connection is allowed to do |
| Protected resource metadata (RFC 9728) | `https://mcp.porkbun.com/.well-known/oauth-protected-resource` for `/mcp`; `…/oauth-protected-resource/mcp/no-topups` and `…/mcp/no-purchases` for the variants |
| Authorization server metadata (RFC 8414) | `https://porkbun.com/.well-known/oauth-authorization-server` |
| Client registration | Dynamic Client Registration (RFC 7591) at `/oauth2/register`, or a Client ID Metadata Document (use its HTTPS URL as `client_id`) |
| Client type | Public clients only (`token_endpoint_auth_method: none`). PKCE with `S256` is required |
| Redirect URIs | `https`, or `http` on a loopback address. Loopback redirects match on any port |
| Scopes | `api offline_access` |
| `resource` (RFC 8707) | Send the exact endpoint URL you connect to (e.g. `https://mcp.porkbun.com/mcp`) on the authorize and token requests; it must be the same on both |
| Tokens | Access token 1 hour. Refresh token 60 days, **rotated on every use**; reusing an old refresh token revokes the whole chain |
| Revocation (RFC 7009) | `/oauth2/revoke` |
| Authorization response | Includes `iss` (RFC 9207); check it |
| Money parameters | Integer US cents, and every one is named `…_cents` (`cost_cents: 1108` is $11.08). If you render tool arguments for a user to approve, show them as dollars |

An unauthenticated or expired request to `/mcp` gets `401` with `WWW-Authenticate: Bearer resource_metadata="…"`. Refresh on that 401 — tool errors are never used to signal an expired token.

The hosted server calls the API from one address for every user. The API knows that address: per-IP rate limits and IP-based fraud signals do not apply to connector traffic (per-key limits and the account, email and payment checks still do), and records such as order IPs are labelled as the connector's rather than presented as the customer's.


---

## More

- Guides (how-tos): https://porkbun.com/llms/guides
- Topic index: https://porkbun.com/llms
- Full reference (one file): https://porkbun.com/llms-full.txt
- OpenAPI spec (full schemas): https://porkbun.com/api/json/v3/spec
- Short overview: https://porkbun.com/llms.txt
- Official MCP server: https://porkbun.com/mcp (`npx -y @porkbunllc/mcp-server`)
- Create API keys: https://porkbun.com/account/api
