porkbun-mcp-server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| PORKBUN_API_KEY | Yes | Your Porkbun API key (pk1_...) | |
| PORKBUN_SECRET_KEY | Yes | Your Porkbun secret key (sk1_...) | |
| PORKBUN_MCP_AUDIT_ENABLED | No | Set 'false' to disable audit logging | true |
| PORKBUN_MCP_AUDIT_HANDLER | No | Audit handler (jsonl, absolute path, or 'none' to disable) | jsonl |
| PORKBUN_PRICING_CACHE_TTL | No | Pricing cache TTL in seconds (default: 86400, '0' = no cache) | 86400 |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| pingA | Authenticated ping against Porkbun. Returns {"status", "yourIp"}. Useful as a readiness probe — confirms credentials work and your public IP is on Porkbun's allowlist (if you've enabled IP restriction). |
| get_pricingA | Public TLD pricing table from Porkbun. Served from a disk cache
(~/.cache/porkbun-mcp/pricing.json, XDG-aware) with a 24h TTL
(override via PORKBUN_PRICING_CACHE_TTL, seconds).
|
| get_account_balanceA | Current Porkbun account credit balance. |
| check_availabilityA | Check whether |
| check_bulk_availabilityA | Check availability for multiple domains. Client-side fan-out — one API call per domain. Per-domain errors surface in the results map without aborting the batch. |
| get_pricing_for_tldA | Pricing for a single TLD (e.g. 'com'). Derived from the same
cached pricing table as |
| list_supported_tldsA | All TLDs Porkbun supports for registration. Sorted alphabetically.
Derived from the same cached pricing table as |
| get_api_settingsA | Get the account's API spend control settings and current month's spend total. All amounts are in cents. |
| get_ipA | Get the caller's public IP address. No authentication required
(though our client always sends credentials, which is harmless).
Similar to |
| create_inviteA | Create a one-time account registration invite. The invite expires
in 48 hours. |
| get_invite_statusC | Check the status of a registration invite. Returns PENDING,
ACCEPTED (with |
| set_email_passwordB | Set the password for an email hosting account. |
| request_api_keyA | Initiate an API key authorization request. Returns a
|
| retrieve_api_keyB | Poll to check whether an API key authorization request has been approved. Returns PENDING while awaiting approval, or the public API key on approval. |
| get_marketplaceA | Browse domains listed for sale on the Porkbun marketplace.
Supports pagination ( |
| list_domainsA | List all domains in the Porkbun account. |
| get_url_forwardingC | List URL-forwarding rules for |
| get_domainA | Get detailed info for a single domain — expiry date, status, auto-renew setting, creation date, lock state, etc. |
| get_glueA | List glue records (host A/AAAA records at the registrar) for |
| list_labelsA | List all domain labels (Porkbun's tagging system). |
| register_domainA | Register a new domain using account credit. |
| renew_domainA | Renew a domain using account credit. |
| transfer_domainA | Initiate an inbound domain transfer. |
| get_transfer_statusC | Get the most recent transfer record for |
| list_transfersA | List all active inbound domain transfers (excludes completed and canceled transfers). |
| update_auto_renewA | Toggle auto-renewal for |
| create_glueA | Create a glue record (host A/AAAA records served by the registrar).
Required for custom nameservers like ns1.example.com that point at
IPs you control. |
| update_glueC | Replace the IPs on an existing glue record. action=GLUE_UPDATE. |
| delete_glueC | Remove a glue record by host name. action=GLUE_DELETE. |
| add_url_forwardB | Add a URL forward. |
| delete_url_forwardA | Remove a URL forward by record id (from get_url_forwarding). action=URLFWD_DELETE. |
| add_labelA | Create a Porkbun label and attach it to |
| remove_labelC | Detach a label from |
| get_name_serversC | Get the active nameservers for |
| update_name_serversA | Replace |
| list_dns_recordsA | List ALL DNS records for |
| get_dns_recordB | Fetch a single DNS record by Porkbun's record id. |
| get_dns_records_by_name_typeA | Filter DNS records by type ('A','TXT','MX',...) and subdomain (empty string for apex). Useful for checking whether a specific record exists without scanning the full zone. |
| create_dns_recordC | Create a DNS record on |
| edit_dns_recordA | Edit an existing DNS record by Porkbun's record id. Porkbun's
edit is a full replace — pass every field. |
| edit_dns_records_by_name_typeB | Bulk-edit every record matching (type, subdomain) on |
| delete_dns_recordC | Delete a DNS record by Porkbun's record id. |
| delete_dns_records_by_name_typeA | Bulk-delete every record matching (type, subdomain) on |
| bulk_create_dns_recordsA | Create multiple DNS records on |
| get_dnssec_recordsA | List the DS records Porkbun publishes for |
| create_dnssec_recordA | Publish a DNSSEC DS record at the registrar. Required: key_tag,
alg, digest_type, digest. Optional key_data_* fields apply only when
you're also publishing the DNSKEY-derived form. |
| delete_dnssec_recordA | Remove a DNSSEC DS record by key tag. |
| get_ssl_bundleA | Retrieve Porkbun's free DV SSL certificate bundle for |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 48 tools
Most tools have distinct purposes, but there is some overlap between 'list_dns_records' and 'get_dns_records_by_name_type', and between 'get_pricing' and 'get_pricing_for_tld'. Descriptions are clear enough to differentiate them, but an agent might occasionally misselect.
Tool names consistently follow a verb_noun pattern in snake_case. Prefixes like 'bulk_' and 'check_' are used predictably. There are no mixed conventions or chaotic naming.
With 48 tools, the server is quite heavy. While the domain is broad, many DNS operations could be consolidated into fewer, more parameterized tools. The count exceeds the typical well-scoped range and may overwhelm agents.
The tool set covers nearly every aspect of the Porkbun API: domain lifecycle, DNS management, DNSSEC, glue records, URL forwarding, pricing, account info, API keys, invites, SSL, email, and marketplace. No obvious gaps are present.