Unofficial MCP server for Porkbun DNS management
Project description
Porkbun DNS MCP Server
MCP server for managing Porkbun DNS records through a FastMCP interface.
Version: 0.1.3 Status: Internal Bodai integration component
Quick Links
Quality & CI
Crackerjack is the standard quality-control and CI/CD gate for Porkbun DNS MCP changes. Local verification should mirror the Crackerjack workflow used across the Bodai ecosystem.
Overview
Porkbun DNS MCP exposes DNS record management workflows through a FastMCP server. It is focused on record lookup, creation, update, and deletion for domains managed through Porkbun while keeping provider credentials and request validation in a narrow integration boundary.
This server is intentionally separate from porkbun-domain-mcp. DNS owns record-level operations; domain owns registration, renewal, transfer, and pricing workflows.
Capabilities
Implemented tool surface:
- Record listing: list all DNS records for a domain
- Record lookup: retrieve a specific DNS record by ID
- Record creation: create A, AAAA, CNAME, MX, TXT, NS, SRV, CAA, or ALIAS records
- Record editing: update selected fields on an existing DNS record
- Record deletion: remove a DNS record by ID
- Credential health metadata: report whether API credentials are configured
- HTTP health routes:
/healthand/healthzfor MCP client and process supervision checks
Quick Start
Prerequisites
- Python 3.13+
- UV package manager
- Porkbun API key and secret key
Local Setup
git clone https://github.com/lesleslie/porkbun-dns-mcp.git
cd porkbun-dns-mcp
uv sync --group dev
Run With Credentials
export PORKBUN_DNS_API_KEY="your-api-key"
export PORKBUN_DNS_SECRET_KEY="your-secret-key"
uv run porkbun-dns-mcp start
uv run porkbun-dns-mcp health
The default HTTP bind is 127.0.0.1:3042.
CLI Commands
The CLI is built with mcp-common and provides the standard lifecycle command surface used by Bodai MCP servers.
uv run porkbun-dns-mcp start # Start the HTTP MCP server
uv run porkbun-dns-mcp stop # Stop the managed server process
uv run porkbun-dns-mcp restart # Restart the managed server process
uv run porkbun-dns-mcp status # Show process status
uv run porkbun-dns-mcp health # Run the local health probe
MCP Server Configuration
Claude / Codex Style Configuration
Add the server to an MCP client configuration:
{
"mcpServers": {
"porkbun-dns": {
"command": "uv",
"args": ["run", "porkbun-dns-mcp", "start"],
"cwd": "/Users/les/Projects/porkbun-dns-mcp",
"env": {
"PORKBUN_DNS_API_KEY": "your-api-key",
"PORKBUN_DNS_SECRET_KEY": "your-secret-key"
}
}
}
}
Use your secret manager for live credentials rather than committing them to client config.
Health Checks
curl http://127.0.0.1:3042/health
curl http://127.0.0.1:3042/healthz
Tool Reference
| Tool | Purpose | Required Inputs |
|---|---|---|
list_dns_records |
List all DNS records for a domain | domain |
get_dns_record |
Retrieve one DNS record by ID | domain, record_id |
create_dns_record |
Create a DNS record | domain, record_type, name, content |
edit_dns_record |
Update selected fields on a DNS record | domain, record_id |
delete_dns_record |
Delete a DNS record | domain, record_id |
Supported record types are A, AAAA, CNAME, MX, TXT, NS, SRV, CAA, and ALIAS.
Tool responses follow a consistent ToolResponse shape:
{
"success": true,
"message": "Found 4 DNS records for example.com",
"data": {},
"error": null,
"next_steps": []
}
Configuration
Committed defaults live in settings/porkbun-dns.yaml. Runtime overrides should come from environment variables or a local .env file that is not committed.
| Setting | Environment Variable | Default |
|---|---|---|
| API key | PORKBUN_DNS_API_KEY |
empty |
| Secret key | PORKBUN_DNS_SECRET_KEY |
empty |
| Base URL | PORKBUN_DNS_BASE_URL |
https://porkbun.com/api/json/v3 |
| Timeout | PORKBUN_DNS_TIMEOUT |
30.0 |
| Max retries | PORKBUN_DNS_MAX_RETRIES |
3 |
| HTTP host | PORKBUN_DNS_HTTP_HOST |
127.0.0.1 |
| HTTP port | PORKBUN_DNS_HTTP_PORT |
3042 |
| Log level | PORKBUN_DNS_LOG_LEVEL |
INFO |
| JSON logs | PORKBUN_DNS_LOG_JSON |
true |
Project Structure
porkbun_dns_mcp/
cli.py # mcp-common lifecycle CLI
client.py # Porkbun DNS API client boundary
config.py # Pydantic settings and logging
models.py # Typed DNS record models
server.py # FastMCP application factory
tools/dns_tools.py # Registered MCP tools
settings/
porkbun-dns.yaml # Committed defaults
tests/
test_schema_validation.py
Development
uv sync --group dev
uv run pytest
uv run ruff check porkbun_dns_mcp tests
uv run ruff format porkbun_dns_mcp tests
uv run pyright porkbun_dns_mcp
Use targeted tests when isolating schema behavior:
uv run pytest tests/test_schema_validation.py -v
Security Notes
- Do not commit Porkbun API keys, secret keys, real customer domains, or sensitive record values.
- Treat DNS mutations as production-impacting operations.
- Review generated
delete_dns_recordandedit_dns_recordcalls before exposing them to unattended agent workflows. - Scrub real domain details from fixtures, screenshots, and troubleshooting logs.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file porkbun_dns_mcp-0.1.4.tar.gz.
File metadata
- Download URL: porkbun_dns_mcp-0.1.4.tar.gz
- Upload date:
- Size: 249.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.23 {"installer":{"name":"uv","version":"0.11.23","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9e8c58ead7153247a2b3baad93c2c88a922176b219531d3cdbd9c1989297ef64
|
|
| MD5 |
9ad021d2f08219244f8a54518039ae99
|
|
| BLAKE2b-256 |
dd0802670b1ad3790d6446d5945fc44e302c652c6219f05dc9e9331d90c71092
|
File details
Details for the file porkbun_dns_mcp-0.1.4-py3-none-any.whl.
File metadata
- Download URL: porkbun_dns_mcp-0.1.4-py3-none-any.whl
- Upload date:
- Size: 19.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.23 {"installer":{"name":"uv","version":"0.11.23","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f7fa8e8e49ccdaaac92c3dcf9c6eeff73b2c307533e74e9237d77b26ddce9bd7
|
|
| MD5 |
1b82421f5ba66913483625ef3a8d7ee9
|
|
| BLAKE2b-256 |
433e5dbf2956701a19119c53b1e6a0c4821f672ca4609cccd454edde851537c8
|