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.

[![CI](https://github.com/major/porkbun-mcp/actions/workflows/ci.yml/badge.svg)](https://github.com/major/porkbun-mcp/actions/workflows/ci.yml)
[![codecov](https://codecov.io/gh/major/porkbun-mcp/branch/main/graph/badge.svg)](https://codecov.io/gh/major/porkbun-mcp)
[![PyPI version](https://badge.fury.io/py/porkbun-mcp.svg)](https://pypi.org/project/porkbun-mcp/)
[![Python 3.13+](https://img.shields.io/badge/python-3.13+-blue.svg)](https://www.python.org/downloads/)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](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 -->