Porkbun DNS 🐷
Manage DNS records, domains, DNSSEC, SSL certificates via MCP
★ 5MITai-ml
Install
Config snippet generator goes here (5 client tabs)
README
# porkbun-mcp
MCP server for the [Porkbun](https://porkbun.com/) DNS API.
Manage DNS records, domains, DNSSEC, SSL certificates, and more via the Model Context Protocol.
[](https://github.com/major/porkbun-mcp/actions/workflows/ci.yml)
[](https://codecov.io/gh/major/porkbun-mcp)
[](https://pypi.org/project/porkbun-mcp/)
[](https://www.python.org/downloads/)
[](https://opensource.org/licenses/MIT)
## Configuration
Set your Porkbun API credentials as environment variables:
```bash
export PORKBUN_API_KEY="pk1_..."
export PORKBUN_SECRET_KEY="sk1_..."
```
Get your API keys from the [Porkbun API Access page](https://porkbun.com/account/api).
## Read-Only Mode (Default)
By default, porkbun-mcp runs in **read-only mode** for safety. Write operations
(create, edit, delete) will return an error until explicitly enabled.
### Enabling Write Operations
To let the pig get muddy and make changes:
**Environment variable:**
```bash
export PORKBUN_GET_MUDDY=true
```
**CLI flag:**
```bash
uvx porkbun-mcp --get-muddy
```
## Usage
Run directly with [uvx](https://docs.astral.sh/uv/) (no installation required):
```bash
uvx porkbun-mcp
```
### SSE transport
```bash
uvx porkbun-mcp --transport sse
```
## MCP Client Configuration
### Claude Desktop
Add to `~/.config/claude/claude_desktop_config.json`:
```json
{
"mcpServers": {
"porkbun": {
"command": "uvx",
"args": ["porkbun-mcp", "--get-muddy"],
"env": {
"PORKBUN_API_KEY": "pk1_...",
"PORKBUN_SECRET_KEY": "sk1_..."
}
}
}
}
```
> **Note:** Remove `--get-muddy` from args for read-only mode (recommended for safety).
### Claude Code / Codex
Add to `~/.claude/settings.json`:
```json
{
"mcpServers": {
"porkbun": {
"command": "uvx",
"args": ["porkbun-mcp", "--get-muddy"],
"env": {
"PORKBUN_API_KEY": "pk1_...",
"PORKBUN_SECRET_KEY": "sk1_..."
}
}
}
}
```
### VS Code
Add to `.vscode/mcp.json` in your workspace (or use `MCP: Add Server` command):
```json
{
"servers": {
"porkbun": {
"command": "uvx",
"args": ["porkbun-mcp", "--get-muddy"],
"env": {
"PORKBUN_API_KEY": "pk1_...",
"PORKBUN_SECRET_KEY": "sk1_..."
}
}
}
}
```
### OpenCode
Add to your `opencode.json` configuration:
```json
{
"mcp": {
"porkbun": {
"type": "local",
"command": ["uvx", "porkbun-mcp", "--get-muddy"],
"environment": {
"PORKBUN_API_KEY": "pk1_...",
"PORKBUN_SECRET_KEY": "sk1_..."
}
}
}
}
```
## Available Tools
### DNS
- `dns_list` - List all DNS records for a domain
- `dns_get` - Get a specific DNS record by ID
- `dns_get_by_name_type` - Get DNS records by subdomain and type
- `dns_create` - Create a new DNS record
- `dns_edit` - Edit a DNS record by ID
- `dns_edit_by_name_type` - Edit DNS records by subdomain and type
- `dns_delete` - Delete a DNS record by ID
- `dns_delete_by_name_type` - Delete DNS records by subdomain and type
### Domains
- `domains_list` - List all domains in your account
- `domains_get_nameservers` - Get nameservers for a domain
- `domains_update_nameservers` - Update nameservers for a domain
- `domains_get_url_forwards` - Get URL forwarding rules
- `domains_add_url_forward` - Add a URL forwarding rule
- `domains_delete_url_forward` - Delete a URL forwarding rule
- `domains_check_availability` - Check domain availability and pricing
- `domains_get_glue_records` - Get glue records for a domain
### DNSSEC
- `dnssec_list` - List DNSSEC records for a domain
- `dnssec_create` - Create a DNSSEC record
- `dnssec_delete` - Delete a DNSSEC record
### SSL
- `ssl_retrieve` - Retrieve the SSL certificate bundle for a domain
### Pricing
- `pricing_get` - Get pricing for all available TLDs
### Utility
- `ping` - Test API connectivity and get your public IP
## Prompts
Pre-defined workflows to guide common DNS operations:
- `dns_setup` - Set up basic DNS for a new server (root A + www records)
- `dns_audit` - Audit DNS configuration for issues (duplicates, missing email records, low TTLs)
- `email_dns_setup` - Configure email DNS (MX, SPF, DKIM, DMARC)
- `update_server_ip` - Update DNS records when migrating to a new server IP
- `subdomain_setup` - Create A/CNAME records for a new subdomain
## Development
```bash
# Install dependencies
uv sync --dev
# Run all checks
make check
# Individual commands
make lint # ruff check
make format # ruff format
make typecheck # ty check
make test # pytest with coverage
```
## License
MIT
<!-- mcp-name: io.github.major/porkbun -->