Porkbun
Connect Claude, ChatGPT or Cursor to Porkbun via MCP. Manage domains, DNS, registration, renewal, and transfers with an API key and secret.
Example questions
Try asking your AI client
-
Which Porkbun domains can this API key manage?
-
Show the DNS records for example.com.
-
Is testdomain-example.com available, and what does registration cost?
-
Add a dry-run A record for www.example.com pointing at 203.0.113.10.
-
Which domains expire in the next 30 days?
Overview
Connect Porkbun so AI clients can list domains, inspect and edit DNS, and register, renew, or transfer domains - without pasting API keys into prompts.
Register, renew, and transfer spend Porkbun account credit. Always run a dry run first, then confirm the domain and price with the user.
Prerequisites
- A Porkbun account with API Access enabled
- A stackgate.ai account
- Enough Porkbun credit if you plan to register, renew, or transfer
Getting credentials
- Sign in to Porkbun and open Account → API Access.
- Create an API key. Copy the public API key (
pk1_…) and the secret API key (sk1_…). The secret is shown once. - Enable API access on each domain you want to manage, or use Opt In All Domains.
- Leave IP restriction empty for hub keys. Restrict by domain allowlist instead. stackgate.ai does not publish static egress IPs.
- In stackgate.ai, open My Integrations → Porkbun.
- Click Activate, paste the API key and secret, and save. stackgate.ai tests the keys with Porkbun
/pingbefore storing them.
Sandbox keys start with pk1_sb_ / sk1_sb_. Use them only against Porkbun's sandbox host.
See the Porkbun API documentation.
Credentials reference
| Field | Required | Where to find it | Notes |
|---|---|---|---|
| API key | Yes | Account → API Access | Public key, starts with pk1_. Stored encrypted. |
| Secret API key | Yes | Account → API Access | Shown once at creation. Stored encrypted. |
Using with AI clients
- Dedicated endpoint:
POST /mcp/porkbunwith a Sanctum bearer token - Private gateway: one config for all integrations - use
porkbun__*namespaced tools - Business gateway: same namespaced tools when Porkbun is enabled for the company
Key tools:
- ping, list_domains, get_domain - confirm keys and find domains with API access
- check_domain, get_pricing, get_registration_requirements - availability and price before register
- list_dns_records, create_dns_record, update_dns_record, delete_dns_record - DNS (subdomain only in
name, never the FQDN) - register_domain, renew_domain, transfer_domain - spends credit; use
dry_run=truefirst - get_ssl_bundle - includes a private key; do not paste it into public chats
After connecting, use Edit tool access to restrict tools (for example DNS only, no register).
See Documentation for HTTP authentication and private gateway setup.
Test the integration
List Porkbun domains this API key can manage.
Show DNS records for example.com.
Check whether testdomain-example.com is available and what it costs.
Create a dry-run A record for www.example.com pointing at 203.0.113.10.
Typical tools: list_domains, list_dns_records, check_domain, create_dns_record.
Troubleshooting
| Problem | Likely cause | Fix |
|---|---|---|
| 422 integration not configured | Credential form not completed | Add API key and secret under My Integrations |
| Porkbun rejected these API keys | Wrong key, secret, or API Access off | Recreate the key pair and confirm Opt In All Domains or per-domain access |
| 403 DOMAIN_NOT_ALLOWED | Domain not opted in to this key | Enable API Access on that domain |
| 403 IP_NOT_ALLOWED | Key has an IP allowlist | Clear IP restriction on the Porkbun key; restrict by domain instead |
| 429 RATE_LIMIT_EXCEEDED | Porkbun rate limit (check_domain is about 1 per 10 seconds) |
Wait Retry-After seconds; avoid polling availability |
| DNS change did not go live | Domain uses Cloudflare via Porkbun | Porkbun /dns edits Porkbun's copy; live resolution may stay on Cloudflare |
Security and revocation
- Disconnect in My Integrations → Porkbun to delete the stored keys from stackgate.ai.
- Revoke or rotate keys in Porkbun Account → API Access.
- Keys are stored encrypted. Tool calls are audit logged. Keys are never accepted as tool arguments.
Limitations
- Register, renew, and transfer spend Porkbun credit and must match the quoted cost in pennies.
check_domainis rate-limited (about 1 check per 10 seconds).- Hub keys should not use Porkbun IP restriction. Use domain allowlists.
get_ssl_bundlereturns a private key. Treat it as a secret.- Porkbun hosting, WordPress, and Cloudflare-connect endpoints are not exposed.
Available tools
-
ping
Verify Porkbun API credentials and return the caller IP.
-
get_pricing
Get Porkbun registration, renewal, and transfer pricing across TLDs.
-
check_domain
Check whether a domain is available and return current registration, renewal, and transfer prices. Rate-limited (about 1 check per 10 seconds).
-
get_registration_requirements
Get whether a TLD is API-registerable plus the /domain/create payload as JSON Schema and any registry eligibility fields.
-
list_domains
List domains in the Porkbun account. Paginate with start (up to 1000 per page). Prefer api_access=yes to see domains this key can manage.
-
get_domain
Get metadata for one domain in the connected Porkbun account.
-
get_balance
Get Porkbun account credit balance.
-
get_api_settings
Get monthly API spend-control settings and current-month spend.
-
get_nameservers
Get the current nameservers for a domain.
-
list_dns_records
List editable DNS records for a domain (SOA and default Porkbun NS records are omitted).
-
get_dns_record
Get a single DNS record by numeric ID.
-
list_dns_records_by_name_type
List DNS records for a domain that match a record type and optional subdomain.
-
list_dnssec_records
List DNSSEC DS records published at the registry for a domain.
-
list_url_forwards
List URL forwarding rules for a domain.
-
list_glue_records
List glue records (host-to-IP mappings) for a domain.
-
list_transfers
List in-progress and recent inbound domain transfers.
-
get_transfer_status
Get the status of an inbound transfer for a domain.
-
get_ssl_bundle
Retrieve the free Porkbun-issued SSL certificate bundle for a domain. The response includes the private key; treat it as a secret and do not paste it into public chats.
-
get_contacts
Get a domain's registrant, admin, tech, and billing contacts.
-
list_marketplace
Browse Porkbun aftermarket listings with optional filters.
-
get_webhook_event_types
List event types a Porkbun webhook endpoint can subscribe to.
-
list_webhooks
List webhook endpoints (URL, events, status, delivery health).
-
get_webhook
Get a single webhook endpoint by ID.
-
list_webhook_deliveries
List recent webhook delivery attempts (about 30 days of history).
-
get_webhook_delivery
Get a single webhook delivery including the signed payload.
-
register_domain
Register a domain using Porkbun account credit. Call check_domain first, then dry_run=true, then confirm domain and price with the user. cost must match the quote in pennies. agree_to_terms must be yes.
-
renew_domain
Renew a domain using Porkbun account credit. Confirm cost from check_domain or get_pricing. Prefer dry_run=true first.
-
transfer_domain
Initiate an inbound domain transfer. Requires the EPP auth code and a matching transfer cost in pennies. Transfers take several days; poll get_transfer_status.
-
update_auto_renew
Turn auto-renewal on or off for one or more domains.
-
update_nameservers
Replace the nameserver list for a domain (full replace, not append). Prefer dry_run=true first.
-
update_contacts
Update domain contacts. Provide contacts (per-role object) or contact (applied to all four roles). Fields: firstName, lastName, organization, address1, address2, address3, city, state, postalCode, country (ISO 3166-1 alpha-2), phone, phoneCountryCode, fax, email.
-
create_dns_record
Create a DNS record. name is the subdomain only (www, *, or omit for apex). Prefer dry_run=true before creating.
-
update_dns_record
Edit a DNS record by numeric ID. Prefer dry_run=true before changing live records.
-
delete_dns_record
Delete a DNS record by numeric ID. Prefer dry_run=true first.
-
update_dns_records_by_name_type
Replace the content of all DNS records matching a subdomain and type.
-
delete_dns_records_by_name_type
Delete all DNS records matching a subdomain and type.
-
create_dnssec_record
Submit a DNSSEC DS record to the registry for a domain.
-
delete_dnssec_record
Delete a DNSSEC record from the registry by key tag. Most registries delete all records matching the key data.
-
create_url_forward
Create a URL forwarding rule for a domain or subdomain.
-
delete_url_forward
Delete a URL forwarding rule by ID.
-
create_glue_record
Create a glue record (host-to-IP mapping) at the registry.
-
update_glue_record
Replace the IP list for a glue record.
-
delete_glue_record
Delete a glue record by host label.
-
create_webhook
Register an HTTPS endpoint to receive signed Porkbun events. The signing secret is returned once.
-
update_webhook
Change a webhook endpoint URL, events, or status (ACTIVE or DISABLED).
-
rotate_webhook_secret
Generate a new signing secret for a webhook endpoint. The new secret is returned once.
-
test_webhook
Send a webhook.test event to confirm reachability and signature verification.
-
resend_webhook
Re-queue a past webhook delivery (reuses the original event ID).
-
delete_webhook
Delete a webhook endpoint.
MCP endpoint:
https://stackgate.ai/mcp/porkbun
(HTTP) or via the
private gateway.