关于 Porkbun
用于管理 Porkbun 域名、DNS、托管、邮件和账户信息的 MCP 服务。工具按工具集选择加载;购买、收费、所有权变更和秘密信息披露均需批准。
主要功能
- 01查询并注册域名
- 02管理 DNS 和 DNSSEC 记录
- 03发布静态网站并配置托管
- 04设置邮箱、转发和 Webhook
- 05选择要加载的工具集
- 06购买及秘密信息处理需批准
适用场景
- 01查询域名可用性并按预算注册
- 02编辑记录前备份 DNS 区域
- 03将静态网站发布到域名托管
- 04查看账单或将 DNS 转至 Cloudflare
MCP 相关
通过 MCP 工具提供 Porkbun 账户和域名管理功能,包括 DNS、托管、邮件、转移和账单。购买、收费、所有权变更及秘密信息披露需客户端批准;可选择工具集限制可用工具。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
npx -y @foreverworks/mcp-porkbunPORKBUN_API_KEY_FILE密钥Path of a file holding your Porkbun API key (pk1_...).PORKBUN_SECRET_API_KEY_FILE密钥Path of a file holding your Porkbun secret API key (sk1_...).PORKBUN_OUTBOX_DIRWhere the tools that save a file (an SSL bundle, an invoice PDF, a DNS zone export, a new mailbox's password) write it. Without it those tools answer with a configuration error; every other tool works.PORKBUN_TOOLSETSThe toolsets whose tools the server loads, separated by commas, e.g. dns,forwards. Empty loads every toolset.本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
113收录的工具列表 · 更新于 2 天前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| cost | integer | 否 | `cost_cents` 的弃用别名,单位相同(整数美分)。请改用 `cost_cents`。 |
| domain | string | 是 | 要购买的域名,例如 `example.com` |
| dry_run | boolean | 否 | 验证并计算价格,不扣款或取得域名。 |
| cost_cents | integer | 否 | 来自 get_closeout 的确切 totalPrice。仅在 dry_run 时使用 0。必填。单位为整数美分:803 表示 $8.03,而不是 $803。 |
| pay_with_card | boolean | 否 | 使用用户 Stripe Link Agent 钱包(MPP)中的银行卡支付此次购买,并进行预授权:仅在购买成功时扣款。请先告知用户金额。 |
| card_payment_id | string | 否 | 来自先前 PAYMENT_REQUIRED(pay_with_card)的 cardPaymentId,且其 payUrl 已完成支付。请与该调用相同的参数一并发送。 |
详细介绍
Porkbun MCP 服务
通过 AI 助手管理你的 Porkbun 账户:查找并注册域名、编辑 DNS 和 DNSSEC、发布静态网站、转入域名或将其 DNS 迁移到 Cloudflare、设置邮箱和 Webhook,以及查看发票。工具由 Porkbun 提供(@porkbunllc/mcp-server),另包含区域文件导出,并为其添加了安全防护。所有会产生费用、确认收费、变更域名所有者或提供机密信息的工具都标记为 money:客户端会先征求你的同意;超出账户每月 API 限额的收费会在请求到达 Porkbun 之前被拒绝。
你需要一个 Porkbun 账户和一对 API 密钥(pk1_... 和 sk1_...),并将密钥的两部分分别存入文件,同时为需要管理的域名启用 API 访问权限。购买费用从账户余额中扣除,也可以通过 Stripe Link 使用银行卡支付。若要保存文件(证书、发票 PDF、区域文件或邮箱密码),服务还需要一个用于保存文件的目录。
你可以这样提问
- “我的哪些域名会在未来三个月内到期?其中哪些关闭了自动续费?”
- “talonbakery.com 是否可用?如果每年费用低于 $15,就注册它。”
- “备份 example.com 的 DNS,然后将 shop.example.com 指向 203.0.113.10。”
- “将 ./dist 中的网站发布到 example.com 的静态托管服务。”
- “如果我把 example.org 迁移到我的 Cloudflare 账户,会丢失哪些 DNS 记录?”
- “将上个月的 Porkbun 发票保存为 PDF。”
安装
使用 Claude Code:
claude mcp add porkbun -e PORKBUN_API_KEY_FILE="<path to API key file>" -e PORKBUN_SECRET_API_KEY_FILE="<path to Secret API key file>" -- npx -y @foreverworks/mcp-porkbun
Claude Desktop(Settings、Developer、Edit Config)和大多数其他客户端都以 JSON 格式读取相同的命令:
{
"mcpServers": {
"porkbun": {
"command": "npx",
"args": ["-y", "@foreverworks/mcp-porkbun"],
"env": {
"PORKBUN_API_KEY_FILE": "<path to API key file>",
"PORKBUN_SECRET_API_KEY_FILE": "<path to Secret API key file>"
}
}
}
}
每种方式都会在 Node 22.19 或更高版本上运行已发布的软件包。VS Code 和 Claude Desktop 捆绑包会在添加服务时逐项询问设置;可选项留空即可。Cursor 则会从环境变量读取各项设置(例如 ${env:PORKBUN_API_KEY_FILE}),因此请在启动 Cursor 前设置好这些变量。上面的命令只设置必需项;其余设置请参阅配置。
从克隆版本安装
git clone https://github.com/foreverworks/mcps.git && cd mcps
npm ci && npm run build
claude mcp add porkbun -e PORKBUN_API_KEY_FILE="<path to API key file>" -e PORKBUN_SECRET_API_KEY_FILE="<path to Secret API key file>" -- node "$PWD/servers/porkbun/dist/index.js"
在 JSON 配置中,命令为 node,其唯一参数是 servers/porkbun/dist/index.js 的完整路径。若要通过 HTTP 在多个客户端之间共享同一个运行实例,请参阅 docs/deploying.md。
配置
| 变量 | 必需 | 含义 |
|---|---|---|
PORKBUN_API_KEY_FILE | 是,或设置 PORKBUN_API_KEY | 存放 API 密钥(pk1_...)的文件。如果指定了文件但文件不存在或为空,则会导致 config 失败,不会回退到其他方式。 |
PORKBUN_SECRET_API_KEY_FILE | 是,或设置 PORKBUN_SECRET_API_KEY | 存放秘密 API 密钥(sk1_...)的文件。 |
PORKBUN_API_KEY、PORKBUN_SECRET_API_KEY | 否 | 密钥本身,用于本地 stdio 运行(Porkbun 自己的服务读取的变量名)。 |
PORKBUN_OUTBOX_DIR | 对于会保存文件的工具必需 | 文件的保存位置,权限模式为 0640(服务运行用户及目录所属组可访问)。无默认值:未设置时,get_ssl_bundle、get_invoice_pdf、export_dns_zone 以及不带 password 答案的 create_mailbox 或 setup_mailbox 会返回 config;其他工具均可正常使用。 |
PORKBUN_BASE_URL、PORKBUN_DOCS_BASE | 否 | 由 Porkbun 的包读取:API 基础 URL(默认 https://api.porkbun.com/api/json/v3)以及文档工具获取内容的地址(默认 https://porkbun.com)。请保持未设置。 |
PORKBUN_X402_PRIVATE_KEY、PORKBUN_X402_MAX_CENTS | 否 | 由 Porkbun 的包读取,用于以 USDC 付款;本服务不提供此功能。请勿设置。 |
PORKBUN_TOOLSETS | 否 | 要加载的工具集,以逗号分隔;未设置时加载所有工具集(工具集)。 |
密钥会在首次需要它们的调用时读取,因此文档工具
(read_doc、search_docs、list_doc_topics)、get_pricing 和
mock_call 无需密钥即可使用。密钥不会被记录或返回:审计日志行不包含参数或结果。
限制出站流量的部署会设置
MCP_EGRESS_ALLOW=api.porkbun.com,porkbun.com。deploy_site 和
import_dns_records 会从 MCP_FILE_ROOTS 读取文件。这两项以及各服务共用的其他变量,详见
docs/configuration.md。
获取 API 密钥对
- 登录 porkbun.com,并打开 API Access。
- 为此服务单独创建一个密钥,以便单独限制和撤销。Porkbun 只会显示一次秘密密钥:请立即复制密钥的两部分。
- 可选择限制密钥(在此处设置,或稍后点击密钥旁的齿轮图标):Allowed IPs、Allowed domains 和 Permissions(Full access、Read-only、Manage, but no purchases 或自定义权限范围)。超出这些限制的调用会失败且不会造成任何更改。
- 将密钥的两部分分别保存到只有你可读的文件中(
chmod 600),并将PORKBUN_API_KEY_FILE和PORKBUN_SECRET_API_KEY_FILE指向这些文件。 - 为相应域名启用 API 访问:在同一页面点击 Opt In All Domains,或在 Domain Management 下为每个域名启用 API Access。未启用时,对该域名的所有调用都会失败。
工具集
服务器交给客户端的每个工具定义,都会随客户端发出的每个请求一起传输,而 Porkbun 的工具定义很长。PORKBUN_TOOLSETS 用逗号分隔要加载的工具集。其他工具集中的工具完全不会加载,服务器的指令会告知助手哪些工具集缺失,因此助手可以告诉你,而不是另寻办法。未设置、为空或设为 all 时,则像以前一样加载所有工具集。
| 工具集 | 加载内容 |
|---|---|
domains | 可用性和价格、注册和续费、自动续费、联系人。 |
dns | DNS 记录、还原点、扫描、导入和导出区域、名称服务器、preflight_domain,以及免费 TLS 证书(get_ssl_bundle)。 |
dnssec | 注册局的 DS 记录,以及 preflight_domain。 |
glue | 胶水记录,适用于在其所服务域名下命名的名称服务器。 |
forwards | URL 转发和电子邮件转发。 |
hosting | 静态托管和 WordPress Cloud:套餐、deploy_site、文件、WordPress 密码。 |
mailboxes | 电子邮件托管邮箱:购买、设置、续费、密码。 |
cloudflare | 将 DNS 迁移到你自己的 Cloudflare 账户,以及其中的区域、记录和代理。 |
transfers | 转入域名,使用 check_domain 查询价格,并使用 scan_dns_records 和 import_dns_records 处理其区域。 |
marketplace | 他人出售的名称:Porkbun Marketplace、二级市场、清仓域名。 |
webhooks | Webhook 端点、密钥及其投递记录。 |
account | 充值和自动充值、验证账户的电子邮件和电话、发票。 |
docs | Porkbun 的 API 文档,以及 mock_call 的示例答复。 |
ping、get_balance 和 get_api_settings 始终会加载:ping 是开始操作和诊断故障的入口;五个工具集中的每笔购买都会从余额中扣款,并计入每月 API 支出上限。
无论加载了哪些内容,购买仍属于 money,发送前仍会检查是否超出上限。名称如果不是工具集,服务器就会在启动时停止,并列出可用的工具集。src/mcp/toolsets.ts 按名称放置每个工具;如果 Porkbun 软件包的某个工具没有被放置,测试就会失败,服务器也不会启动。使用 scripts/measure-tokens.ts 在 2026-10-23 测量(GPT-4 分词器)时,所有工具集加载后,工具列表包含 113 个工具,约 44,200 个词元;加载 dns,forwards 时,包含 23 个工具、8,800 个词元;加载 domains,account 时,包含 25 个工具、12,300 个词元。
仅加载 DNS 和转发:
{
"mcpServers": {
"porkbun": {
"command": "npx",
"args": ["-y", "@foreverworks/mcp-porkbun"],
"env": {
"PORKBUN_TOOLSETS": "dns,forwards",
"PORKBUN_API_KEY_FILE": "/path/to/porkbun-api-key",
"PORKBUN_SECRET_API_KEY_FILE": "/path/to/porkbun-secret-api-key"
}
}
}
}
工具集会移除工具;MCP_MAX_ACCESS=read 则保留列出的所有工具,但会拒绝写入操作。
首次运行
- 请助手运行 Porkbun 的
ping。它会检查连接和密钥对,并显示密钥的作用域。 - 请助手查询 API 支出设置(
get_api_settings)和余额(get_balance):本月账户还可以支出多少,以及购买所用的余额。 - 购买和充值需要经过验证的电子邮件和电话。如果调用返回
VERIFICATION_REQUIRED,助手会发送相应验证码(send_email_verification_code、send_phone_verification_code),你再读出验证码进行确认。
工具
read 不会更改任何内容;write 会更改账户、DNS 或托管内容,但不会花费资金,也不会提供任何密钥;money 会花费或承诺资金、更改域名所有者,或提供密钥;客户端会在每次调用前征求你的同意。
共有 113 个工具:54 个 read、39 个 write、20 个 money。工具根据运行中的服务器生成,因为它们遵循 Porkbun 的软件包;此处加载了所有工具集(工具集说明了哪些工具集会一起加载)。每行内容是工具描述的第一句话:来自 Porkbun,或在与本服务器不同时经过修订,或是本服务器为 deploy_site、get_ssl_bundle、get_invoice_pdf 和 export_dns_zone 编写的描述。
| 工具 | 访问权限 | 功能 |
|---|---|---|
buy_closeout | 资金 | 使用账户余额支付,或直接用银行卡支付(pay_with_card)。 按当前价格购买一个清仓域名并申领该名称。 |
cancel_transfer | 资金 | 取消已付款的入站转移并退款。 请先向用户确认。 |
check_domain | read | 检查单个域名是否可以注册以及价格。 |
check_domains | read | 一次调用即可检查最多 25 个域名的可用性和价格。 |
configure_auto_topup | 资金 | 设置充值金额,和/或开启或关闭自动充值。 |
confirm_email_verification | write | 使用验证邮件中的验证码验证账户电子邮箱地址(验证码来自 send_email_verification_code,或过去 3 天内收到的任何验证邮件)。 |
confirm_phone_verification | write | 使用用户从 send_phone_verification_code 收到的验证码验证账户电话号码。 |
connect_domains_to_cloudflare | write | 将域名加入队列,以迁移到客户自己的 Cloudflare 账户:Porkbun 会在该账户中创建区域、复制其保存的 DNS 记录,并将注册局名称服务器改为 Cloudflare。 |
create_cloudflare_record | write | 在域名的 Cloudflare 区域中创建 DNS 记录。 |
create_dns_record | write | 在已验证账户中的域名上创建 DNS 记录。 |
create_dnssec_record | write | 为域名向注册局提交 DNSSEC DS 记录。 |
create_email_forward | write | 转发该域名上的一个地址(例如: |
create_glue_record | write | 为域名上的主机创建胶水记录。 |
create_hosting | 资金 | 为账户中的域名开通托管服务:安全静态托管或 WordPress 云托管(托管式 WordPress 网站),由 sku 选择。 |
create_mailbox | 资金 | 使用账户余额支付,或直接用银行卡支付(pay_with_card)。 购买一个电子邮件托管邮箱(每年 $36.00,自动续订;当前价格为 list_mailboxes 中的 price),并在同一次调用中完成设置。 |
create_url_forward | write | 为域名添加 URL 转发规则。 |
create_webhook | 资金 | 注册 Webhook 端点。 |
create_wp_credentials | 资金 | 仅限 WordPress 云托管。 |
delete_cloudflare_record | write | 从域名的 Cloudflare 区域中删除 DNS 记录。 |
delete_dns_record | write | 根据数字 record_id 删除单条 DNS 记录(通过 list_dns_records 获取)。 |
delete_dnssec_record | write | 从域名的注册局中移除 DNSSEC DS 记录,按密钥标签识别。 |
delete_email_forward | write | 删除一条邮件转发规则,需提供其 address 和 forward_to(通过 list_email_forwards 获取;一个地址可以转发到多个邮箱,因此两项都必需)。 |
delete_glue_record | write | 删除域名上指定主机的胶水记录。 |
delete_hosting | write | 取消域名的安全静态托管;Porkbun 会安排拆除。 |
delete_hosting_file | write | 删除域名安全静态托管空间中 path 指定的文件或目录。 |
delete_url_forward | write | 根据 id 删除 URL 转发规则(通过 list_url_forwards 获取)。 |
delete_webhook | write | 根据 ID 删除 Webhook 端点。 |
delete_wp_credentials | write | 仅限 WordPress 云托管。 |
deploy_site | write | 将静态文件上传到域名的安全静态托管空间。 |
diff_dns_restore_point | read | 在进行任何更改前,将 DNS 还原点与实时区域进行比较。 |
disconnect_cloudflare | write | 移除此账户保存的 Cloudflare 连接。 |
edit_cloudflare_record | write | 更新域名 Cloudflare 区域中的 DNS 记录。 |
export_dns_zone | read | 将域名的 DNS 记录保存为 BIND 区域文件(RFC 1035),放入此服务的发件箱:包含 list_dns_records 返回的所有记录,位于 $ORIGIN <domain>. 之下,主机名使用绝对形式,MX 和 SRV 记录包含优先级,TXT 文本以 255 字节字符串加引号表示,每条记录的备注作为注释。 |
get_api_settings | read | 获取账户的 API 支出控制设置和实际执行的限额,单位为美分。 |
get_auto_topup | read | 读取账户的自动充值配置:是否开启、触发充值的余额阈值、充值金额、是否确实已保存付款方式,以及 effectiveAmount:此刻调用 top_up_account_credit 将收取的金额。 |
get_balance | read | 获取已验证 Porkbun 账户的可用账户余额。 |
get_closeout | read | 获取一个清仓域名及其 totalPrice:实际应付金额,即清仓价格加上随附的注册年限费用。 |
get_cloudflare_connection | read | 检查此 Porkbun 账户是否已连接到 Cloudflare 账户,以及连接的是哪个账户。 |
get_cloudflare_domain_status | read | 获取单个域名的 Cloudflare 迁移状态,包括创建后的 Cloudflare 区域 ID,以及 Porkbun 替换的名称服务器(会保留这些信息以便撤销迁移)。 |
get_cloudflare_queue | read | 列出此账户请求的所有 Cloudflare 迁移,以及每个域名的状态和消息。 |
get_cloudflare_records | read | 列出 Cloudflare 当前保存的域名实时 DNS 记录,包括每条记录是否启用橙色云代理(proxied)以及是否支持代理(proxiable)。 |
get_cloudflare_zone | read | 获取 Cloudflare 当前报告的域名区域信息(状态、暂停状态、名称服务器、激活日期),而非 Porkbun 队列记录中的信息。 |
get_cloudflare_zone_settings | read | 读取迁移后所需的 Cloudflare 区域设置:SSL 模式、always_use_https、automatic_https_rewrites、min_tls_version、development_mode、cache_level。 |
get_contacts | read | 获取已验证账户中某个域名的四类联系人(注册人、管理员、技术联系人、账单联系人)及其当前字段值(姓名、组织、地址、电话、电子邮箱)。 |
get_domain | read | 获取已验证账户中单个域名的元数据:状态、顶级域、创建日期、到期日期、安全锁、WHOIS 隐私、自动续订、API 访问许可,以及(可选)标签。 |
get_hosting | read | 获取域名的安全静态托管状态(套餐、服务器、试用、到期日期、自动续订);如果域名没有托管服务,则返回 null。 |
get_invoice | read | 获取一张发票的数据:账单接收方、付款方式(仅显示银行卡品牌和后四位)、每个明细项目的产品、期限、产生的域名到期日期和状态,以及以美分计的总额、退款额和净额。 |
get_invoice_pdf | read | 将发票 PDF(与 porkbun.com 上的“Download PDF”文档相同)保存到此服务的发件箱。 |
get_nameservers | read | 获取已验证账户中为域名配置的当前名称服务器。 |
get_pricing | read | 获取 Porkbun 当前价格:各顶级域的注册、续订和转移价格(美元)。 |
get_registration_requirements | read | 以 JSON Schema 格式获取某个顶级域的注册要求。 |
get_ssl_bundle | 资金 | 将 Porkbun 为域名签发的免费 TLS 证书及其私钥保存到此服务的发件箱,而非直接返回私钥。 |
get_transfer_setup | read | 报告待处理入站转移的状态和等待事项:是否停留在 PENDINGDNS、DNS 区域是否存在、其中有多少条记录、域名当前指向何处,以及下一步操作。 |
get_transfer_status | read | 获取某个域名特定入站转移的状态。 |
get_webhook | read | 根据数字 ID 获取单个 Webhook 端点,包括其签名密钥和投递状态(连续失败次数、上次成功/失败情况)(此服务会隐藏其密钥)。 |
get_webhook_delivery | read | 根据 ID 获取单次 Webhook 投递,包括已发送(或将要发送)的完整 JSON 负载及投递状态。 |
get_webhook_event_types | read | 列出 Webhook 端点可以订阅的事件类型。 |
import_dns_records | write | 一次调用即可在 Porkbun 域名上创建多条 DNS 记录:这是 scan_dns_records 的配套工具,用于确保转移后的域名继续正常工作。 |
list_cloudflare_inventory | read | 列出账户中的所有域名及其 Cloudflare 迁移资格:state 为 eligible / warn / blocked / connected / inprogress,每个域名都附有易读的原因(DNSSEC 已启用、自定义名称服务器、使用 Porkbun 托管服务等)。 |
list_dns_records | read | 列出已验证账户中某个域名的所有 DNS 记录。 |
list_dns_restore_points | read | 列出域名 DNS 区域保存的版本,按时间从新到旧排序。 |
list_dnssec_records | read | 列出当前已为域名提交至注册局的所有 DNSSEC DS 记录。 |
list_doc_topics | read | 列出 Porkbun API 文档中可用的主题。 |
list_domains | read | 列出已验证 Porkbun 账户中的域名。 |
list_email_forwards | read | 列出域名的邮件转发规则:该域名上的每个 address 及其投递到的 forwardTo 邮箱(一个地址可转发到多个邮箱)。 |
list_glue_records | read | 列出域名的胶水记录。 |
list_hosting_files | read | 列出域名安全静态托管空间中可选 path 下的文件/目录名称。 |
list_hosting_plans | read | 列出可通过 API 开通的托管套餐及其价格(单位为美分;传入 create_hosting 的 acknowledged_cost_cents)、计费周期、试用时长和功能。 |
list_invoices | read | 列出账户的发票(每笔订单一张),按时间从新到旧排序,并显示每张发票的日期、状态(PAID、PARTIALLY_REFUNDED、REFUNDED 或 UNPAID)、以美分计的净额及包含的域名。 |
list_mailboxes | read | 列出域名的电子邮件托管邮箱(域名上的实际收件箱,可通过 IMAP/POP 或 Webmail 读取),包括 status、address、是否为免费 trial 以及 expires。 |
list_marketplace | read | 浏览 Porkbun Marketplace 上待售的域名:由其他 Porkbun 客户自行挂牌,而非新注册的域名。 |
list_transfers | read | 列出已验证账户中所有进行中及近期的入站域名转移。 |
list_url_forwards | read | 列出为某个域名配置的所有 URL 转发规则。 |
list_webhook_deliveries | read | 列出近期 Webhook 投递尝试,按时间从新到旧排序;可查看所有端点,或筛选单个端点。 |
list_webhooks | read | 列出已验证账户中注册的 Webhook 端点(此服务会隐藏其密钥)。 |
list_wp_credentials | read | 仅限 WordPress 云托管。 |
make_hosting_dir | write | 在域名的安全静态托管空间中创建 path 指定的目录(以及任何缺失的父目录)。 |
mock_call | read | 无需任何凭据即可获取任意 API 端点的符合架构的示例响应:无需进行任何设置。 |
ping | read | 验证 Porkbun API 连接和凭据。 |
preflight_domain | read | 在更改域名之前,检查该更改是否会导致域名无法正常工作。 |
prepare_transfer | write | 为待处理的入站转移创建 Porkbun DNS 区域,以便在域名迁移前添加记录。 |
preview_cloudflare_move | read | 精确显示域名迁移到 Cloudflare 时将复制和舍弃哪些 DNS 记录,但不会将任何操作加入队列。 |
read_doc | read | 以 Markdown 格式阅读 Porkbun 文档页面。 |
register_domain | 资金 | 使用账户余额支付,或直接用银行卡支付(pay_with_card)。 在已验证的 Porkbun 账户中注册新域名。 |
renew_domain | 资金 | 使用账户余额支付,或直接用银行卡支付(pay_with_card)。 续订已验证账户中的现有域名。 |
renew_mailbox | 资金 | 使用账户余额支付,或直接用银行卡支付(pay_with_card)。 立即为电子邮件托管邮箱续订一年,价格为 list_mailboxes 中的 renewalPrice($36.00;仍符合条件的邮箱可享受旧价格)。 |
resend_webhook | write | 将之前的 Webhook 投递重新加入其端点的队列。 |
restore_dns_zone | write | 将域名的 DNS 区域恢复为已保存的还原点。 |
retry_cloudflare_domain | write | 将 Cloudflare 迁移失败或已跳过的域名重新加入队列。 |
rollback_cloudflare_domain | write | 撤销已完成的 Cloudflare 迁移:将域名的名称服务器改回 Porkbun,并恢复 Porkbun 仍保留的 DNS 配置。 |
rotate_webhook_secret | 资金 | 为 Webhook 端点生成新的签名密钥,并返回带有新密钥的端点。 |
scan_dns_records | read | 查询域名当前发布的权威名称服务器,以发现其 DNS 记录。 |
search_aftermarket | read | 查找在二级市场出售的已注册域名:包括 Afternic、Sedo、Atom、NameBright 和 DAX 上的挂牌及拍卖,以及 Porkbun Marketplace;合并结果并为每个名称保留最低价格。 |
search_closeouts | read | 搜索过期域名清仓:未在拍卖中售出的域名现以固定价格出售,该价格会按计划逐步下降。 |
search_docs | read | 按关键词搜索完整的 Porkbun API 参考文档,并以 Markdown 格式返回最相关的部分(端点/主题)。 |
send_email_verification_code | write | 向用户 Porkbun 账户中的电子邮箱发送验证码,以解除 VERIFICATION_REQUIRED 状态(购买和充值需要验证电子邮箱和电话号码)。 |
send_phone_verification_code | write | 向用户 Porkbun 账户中的电话号码发送短信验证码,以解除 VERIFICATION_REQUIRED 状态(购买和充值需要验证电话号码和电子邮箱;新账户注册时无需验证电话号码)。 |
set_cloudflare_proxy | write | 为域名的 DNS 记录开启或关闭 Cloudflare 代理(橙色云)。 |
set_cloudflare_zone_settings | write | 更改已迁移域名的 Cloudflare 区域设置。 |
set_email_password | 资金 | 更改电子邮件托管邮箱的密码(须为 list_mailboxes 中列出的有效邮箱)。 |
setup_mailbox | 资金 | 为等待设置的邮箱设置地址和密码(该邮箱已付款,或是注册域名时附带的免费试用邮箱)。 |
start_transfer | 资金 | 将待处理的入站转移提交至注册局。 |
test_webhook | write | 向端点发送 webhook.test 事件,以确认端点可访问且签名验证正常工作。 |
top_up_account_credit | 资金 | 向用户已保存的付款方式收取费用(amount_cents 为整数美分:803 表示收取 $8.03;请先告知用户美元金额),并立即将款项存入其 Porkbun 账户余额。 |
top_up_with_card_mpp | 资金 | 获取付款链接,用户可通过 MPP(Machine Payments Protocol)使用银行卡支付来充值账户余额;付款使用其 Agent 钱包中的 Stripe Shared Payment Token(Stripe Link Agent Wallet)。 |
transfer_domain | 资金 | 使用账户余额支付,或直接用银行卡支付(pay_with_card)。 将外部域名转入 Porkbun。 |
update_auto_renew | 资金 | 开启或关闭已验证账户中某个域名的自动续订。 |
update_contacts | 资金 | 编辑域名的联系人信息。 |
update_dns_record | write | 根据数字 record_id 更新现有 DNS 记录(通过 list_dns_records 获取)。 |
update_glue_record | write | 更新与现有胶水记录关联的 IP 地址。 |
update_nameservers | write | 替换已验证账户中域名的名称服务器。 |
update_transfer_auth_code | write | 替换因授权码错误而停滞的入站转移的授权码,并重新将其加入队列;无需取消、退款后再重新提交。 |
update_webhook | write | 更新 Webhook 端点。 |
工具如何分类
src/mcp/policy.ts 会在安全的情况下推导类别:Porkbun 标记为 readOnlyHint: true 的工具属于读取类。只有 MONEY 和 WRITE 由人工保留,每个工具只列出一次;既没有 readOnlyHint、也不属于这两类的工具会阻止服务在启动时运行,因此,任何可能产生费用的新 Porkbun 工具都会在发布前经过审查。电子邮件和电话验证属于写入操作:验证码会发送给你,而不是助手。export_dns_zone 属于读取操作:它会列出记录并写入文件。
未纳入的工具
四个沙盒工具(create_sandbox_key、sandbox_topup、sandbox_reset、sandbox_trigger_webhook)只响应沙盒密钥,而此服务持有的是正式密钥;Porkbun 自己的正式密钥配置也会将它们排除在外。还有四个工具被有意排除(src/infra/vendor/offer.ts),它们每次购买都包含 pay_with_usdc 和 usdc_checkout_id 参数:USDC 支付需要在服务环境中配置钱包密钥,或者在此服务看不到的情况下完成结账;而交给助手的 API 密钥则会泄露。
| 工具 | 不提供的原因 |
|---|---|
top_up_with_usdc | 它通过 x402 使用 USDC 为账户充值,而此服务不会执行加密货币支付。 |
get_usdc_topup_status | 它会读取 USDC 结账状态,但此处没有任何工具会创建这类结账。 |
request_api_key | 它的返回值(requestToken、codeVerifier)足以让任何人获取新的正式密钥对。 |
retrieve_api_key | 它会向助手提供正式 API 密钥对。 |
资金操作
每个 money 工具都会在 tools/list 中标记为此类,客户端会要求你批准每次调用(Claude Code 在所有权限模式下都会这样做)。设置 MCP_CONFIRM=elicit 后,服务会改为自行询问你,并用一行文字说明操作、域名和金额;金额根据参数中的整数分值计算,不进行除法。试运行也需要确认,其提示行以 DRY RUN, no charge: 开头。例如:
porkbun: register example.com for $11.08 from Porkbun account credit
porkbun: turn auto top-up ON: charge the saved card $50.00 whenever credit drops below $10.00
porkbun: DRY RUN, no charge: provision hosting PIXIESECURESTATICM2 on example.com at $3.00 per period, auto-renewing
如果一次调用提供的两个金额不一致(cost_cents 和旧版 cost),提示行会指出这一点,并且 Porkbun 的程序包会在发送任何内容之前拒绝该调用。
| 工具 | 属于资金操作的原因 |
|---|---|
register_domain、renew_domain、buy_closeout、transfer_domain | 使用账户余额,或通过 Stripe Link 使用你的银行卡付款。 |
create_mailbox、renew_mailbox | 购买一个邮箱一年的使用期限,并自动续费。 |
create_hosting | 订阅:首次为域名配置时提供 15 天试用期,此后每次续费都会收取套餐费用;重新配置会立即收费。 |
top_up_account_credit、top_up_with_card_mpp | 立即从已保存的银行卡扣款,或打开一个链接,在你批准后通过 Stripe Link 从银行卡扣款。 |
configure_auto_topup | 允许在余额不足时从银行卡扣款。 |
update_auto_renew | 开启后,每次到期都会扣款;关闭后,域名会过期。 |
start_transfer、cancel_transfer | 释放已付款且处于保留状态的转移(域名会离开其注册商),或撤回转移并退还订单款项。 |
update_contacts | 更改注册人会产生新的记录所有者。 |
get_ssl_bundle、setup_mailbox | 将私钥或生成的邮箱密码保存到发件箱中,任何读取该内容的人都会持有这个秘密。 |
create_wp_credentials | 创建一个 WordPress 应用程序密码,仅显示一次;administrator 角色可以运行代码。 |
set_email_password | 所有使用旧密码登录的邮件应用都会停止工作。 |
create_webhook、rotate_webhook_secret | 提供端点的签名密钥;轮换后,接收方将无法再用旧密钥验证签名。 |
先检查每月限额
Porkbun 会按日历月限制账户通过 API 购买所能花费的金额(支出限额),以及通过 API 充值的金额(充值限额)。每项限额由账户持有人自行设定;如果未设定,则为 $100,也可以完全不设限。Porkbun 只有在收到超出限额的调用后才会拒绝,因此,在执行 register_domain、renew_domain、transfer_domain、buy_closeout、create_mailbox、renew_mailbox、top_up_account_credit 和 top_up_with_card_mpp 之前,本服务会读取限额(get_api_settings),并拒绝超过剩余额度的扣款:
{"error": {"kind": "over_limit", "code": "MONTHLY_SPEND_LIMIT_EXCEEDED", "cap": "spend",
"message": "register_domain would charge $11.08, more than the $5.00 left of this month's monthly API spend limit ($100.00, Porkbun's default for an account that set none; $95.00 spent so far); nothing was sent to Porkbun",
"figures": {"currency": "USD", "charge": "11.08", "limit": "100.00", "used": "95.00", "remaining": "5.00", "source": "default"}}}
code 是 Porkbun 原本会返回的内容。检查的金额与确认行中的金额来自同一个参数(src/domain/charges.ts),因此你批准的金额就是实际检查的金额。在限额范围内,调用会按原样发送给 Porkbun,Porkbun 自身的检查也仍会执行。以下情况交由 Porkbun 处理:试运行(会报告限额本身)、create_hosting(首次开通是免费试用,再次开通则会收费,且参数无法说明属于哪种情况)、未提供 amount_cents 的充值,以及会在之后收费的 configure_auto_topup 和 update_auto_renew。如果无法读取限额,本服务会拒绝扣款,而不会猜测。
结果中的机密信息
除 money 工具外,结果中的所有机密字段都会被替换为说明文字:这些字段与 Porkbun 在其应用目录连接中自行隐藏的字段一致(其 profiles.js 中的 redactKeys,目前为 secret)。这对 list_webhooks 和 get_webhook 很重要:Porkbun 将它们标记为只读,但它们会返回各端点的签名密钥。只有通过你在客户端请求批准的调用,机密信息才会离开本服务;账户持有人也可以在 porkbun.com/account/api 查看这些信息。你在调用中传入的密码会经过对话:set_email_password 需要密码,而 create_mailbox 和 setup_mailbox 可以让 Porkbun 生成密码。如果设置了 MCP_CONFIRM=none,系统不会征求任何人的批准;采用这一设置的部署方也就接受了这一点。
故障排除
config:“no Porkbun API key pair is configured for this server”。 设置
PORKBUN_API_KEY_FILE 和 PORKBUN_SECRET_API_KEY_FILE
(获取 API 密钥对)。
服务无法启动:PORKBUN_TOOLSETS names "...", which is not a toolset。 修正名称;消息中列出了可用项
(工具集)。
助手提示某个工具不在此服务上。 其工具集未包含在
PORKBUN_TOOLSETS 中:将其添加进去,或取消设置该变量以加载所有工具集。
config 提到了 PORKBUN_OUTBOX_DIR。 工具要保存文件,却没有可用位置:将
该变量设置为服务可写入的目录。由于 Porkbun 只显示一次密码,因此在任何购买发生之前,
系统会拒绝可能生成密码的邮箱调用。
某个域名的 api 调用失败,而其他域名正常。 该域名未启用 API 访问权限:
在 Domain Management 中开启,或在 API 页面选择 Opt In All Domains。
api 返回 IP_NOT_ALLOWED、DOMAIN_NOT_ALLOWED 或
INSUFFICIENT_SCOPE。 密钥自身的限制拒绝了该调用。请在
porkbun.com/account/api 修改限制。
api 返回 INSUFFICIENT_FUNDS。 账户余额不足,差额见消息内容。使用
pay_with_card: true 重试调用,或充值后再试(通过 top_up_account_credit,或访问
porkbun.com/account/credit)。
api 返回 VERIFICATION_REQUIRED。 验证账户的电子邮件和电话号码
(首次运行,第 3 步)。
over_limit。 未发送任何内容。只有账户持有人才能在
porkbun.com/account/api 提高限额;在此之前,
请减少支出或等到下一个日历月。
input 或 refused。 此服务自身的检查(例如 DS 摘要长度错误、DKIM 密钥无法解析)
或 Porkbun 的程序包(例如两个金额不一致)拒绝了这些参数。消息会指出需要修改的内容;
未发送任何内容。
bad_bundle。 Porkbun 发来的私钥与证书不匹配,因此未保存任何内容。请稍后重试;
如果问题持续存在,请从 porkbun.com 下载证书包(Domain Management、SSL)并检查。
drift。 Porkbun 的响应缺少此服务会读取的字段(例如证书包中的
privatekey、发票中的 contentBase64 或 caps)。未保存或扣除任何费用;请报告此问题。
network 表示 Porkbun 未响应:请一分钟后重试。egress
表示目标主机不在 MCP_EGRESS_ALLOW 中;该变量需要包含 api.porkbun.com 和
porkbun.com。
工作原理
封装,而非移植
本仓库中的其他服务都通过手动方式或依据已发布的架构来建模其 API。此服务则有意改为封装 Porkbun 的程序包:
- API 由 Porkbun 维护。 其工具描述包含自身规则(注册必须回显的确切价格、如何避免
转移搁置导致服务中断,以及
INSUFFICIENT_FUNDS的含义)。移植会产生第二份副本, 而且总会略微滞后。 - 它迭代很快。 在 npm 上,0.22.0 到 0.52.0 只用了七周。
- **它缺少的是工具周边的内容:**密钥来源、谁可以调用、记录哪些内容、客户端必须确认什么, 以及如何展示失败信息。
因此,工具名称、描述、输入架构、注解和处理程序均来自 Porkbun,并在启动时从固定版本的程序包中
读取(src/infra/vendor.ts)。该程序包不提供类型声明,因此会解析每个用到的导出项:
形状发生变化的版本会导致服务停止,而不会让服务凭猜测继续运行。结果是 Porkbun 的 JSON;
失败格式为
{ "error": { kind, message, remedy, code?, status? } },根据 src/infra/porkbunPort/vendorErrors.ts
中的 Porkbun 错误文本排序。初始化时会原样发送 Porkbun 的服务说明。
使用文件,而非手动输入字节
共封装了 10 个 Porkbun 工具(在 src/mcp/register.ts 中标记为 WRAPPED),每个工具都会在启动时检查 Porkbun 工具的输入是否仍与封装器发送的内容一致。
其中 4 个工具可避免让模型接触字节:
deploy_site:Porkbun 的工具会将每个文件作为 base64 放在参数中,一个字符出错就可能导致错误资源被发布而未被察觉。 此处,文件可以是{ path, local_path }(位于服务的文件根目录内),也可以是{ path, content_base64, sha256 }(由脚本写入,并校验哈希),大小最多为 10 MB。 响应会添加sent_files,其中包含每个文件发送时的 sha256 和大小;无法读取或内容不匹配的文件不会上传。get_ssl_bundle:私钥必须属于叶证书,两者分别保存为<domain>.fullchain.pem和<domain>.privkey.pem(如果指定save_dir,则保存在该目录中;该目录必须位于输出目录内)。 响应会提供每个文件的路径、大小和 sha256,以及证书的主题、名称、颁发者、有效期和指纹。get_invoice_pdf:Porkbun 返回的 base64 内容长达数万字符;系统会严格解码,要求内容以 PDF 格式标记开头,并与 Porkbun 声明的大小一致,然后以 Porkbun 的文件名保存。 Porkbun 的其他字段仍会保留,其中包括有效期为 15 分钟的downloadUrl。create_mailbox和setup_mailbox:Porkbun 生成的密码会保存为<address>.password,响应中的password字段只会说明密码保存位置,不会提供密码本身。 请将密码移至密码管理器,并删除该文件。
证书、发票和区域文件会作为资源链接(resource_link)加入结果,因此客户端无需读取 JSON 即可打开它们;邮箱密码则不会链接。
发送前检查
create_dnssec_record:DS 记录若与区域的密钥不匹配,会导致所有执行验证的解析器都无法解析该域名。 如果提供了dnskey(签名工具打印的那一行),系统会在进行基本密钥检查后计算 DS(RFC 4034 5.1.4):ECDSA 密钥必须位于其椭圆曲线上,Ed25519 或 Ed448 密钥必须具有正确长度,RSA 模数必须为 512 到 4096 位。 手动输入的 DS 字段必须相符,Porkbun 的 4 个keyData*字段也必须相符。 如果未提供密钥,则会检查字段格式(密钥标签、算法、摘要类型,以及长度为 40、64 或 96 个字符的十六进制摘要)。 已根据 RFC 4034、4509 和 6605 中的示例进行测试。- DKIM 和 SPF:在
create_dns_record、update_dns_record以及import_dns_records的每条记录中,v=DKIM1记录必须包含可解析的密钥(至少为 1024 位的 RSA 密钥,或 32 字节的 ed25519 密钥;空的p=表示撤销密钥)。v=spf1记录不得有明显错误:未知机制、错误的地址或前缀、缺少域名的 include、位于all之后的项、第二个v=spf1或redirect=,以及超过 10 次查询。 import_dns_records还可接收records_file(JSON 数组)或zone_file(见下文)来代替手动输入的记录,并使用 Porkbun 自己的记录架构解析;响应会添加文件的 sha256、大小和记录数。update_nameservers会检查每个名称(符合 RFC 1123、完整限定、不是 IP 地址且无重复),并在响应中提供nameservers: { before, after }。
区域文件
export_dns_zone 会将 list_dns_records 返回的内容保存为 <domain>.zone
(RFC 1035),并返回文件路径、大小、sha256 和各类型的记录数量:可在大规模更改前备份、比较不同时期的区域文件,或将其迁移到另一家 DNS 托管商。所有者名称相对于 $ORIGIN <domain>.,且不包含 SOA 记录(Porkbun 使用自己的 SOA)。相同的记录始终会生成相同的字节,因此可以用 diff 比较两次导出。
import_dns_records 使用 zone_file 读取此类文件或其他托管商导出的文件,支持 $ORIGIN、带单位的 $TTL、@、相对名称、空所有者名称、圆括号、注释和带转义的引号字符串。SOA、NS 和 DNSSEC 签名数据会被搁置,并列在 zone_file.ignored 中。文件不会部分导入:如果存在域名外的名称、Porkbun 不支持的类型(支持 A、AAAA、CNAME、ALIAS、MX、TXT、SRV、CAA、TLSA、SSHFP、HTTPS 和 SVCB)、非 IN 类、$INCLUDE、$GENERATE 或无法解析的行,整个文件都会被拒绝,并列出每个问题及其所在行号。
更新固定版本
package.json 将 "@porkbunllc/mcp-server": "0.52.0" 固定为精确版本。它还引入了 @x402/core、@x402/evm 和 viem,这些依赖仅用于签署本服务从不要求支付的 USDC 款项。Porkbun 不维护变更日志:每个版本都是一个主题以版本号开头的提交,见
oborseth/Porkbun-MCP。
- 阅读这些提交和已发布的差异
(
npm diff --diff=@porkbunllc/[email protected] --diff=@porkbunllc/mcp-server@<new>), 尤其是所有新增或更改的描述:凡是会花费资金、收取卡款或返回密钥的工具,都归入MONEY,无论其注释如何。新的付款方式或发放密钥的工具,都需要检查offer.ts;如果某个版本以服务无法识别的措辞提供 USDC,服务将在启动时停止。 npm install -w @foreverworks/mcp-porkbun --save-exact @porkbunllc/mcp-server@<new>- 运行
npm run check,然后运行npx tsx scripts/check-docs.ts --write porkbun。如果有未分类的工具、过期的名称,或 Porkbun 自己的购买、充值和密钥工具列表与资金类别不再匹配,策略测试就会失败;如果错误消息被改写,vendorErrors.test.ts就会失败。
npx tsx scripts/smoke.ts 会使用你的密钥对以只读方式运行已构建的服务:调用 ping、list_domains 和 get_balance,不会调用任何写入或资金工具,即使是试运行也不会。
限制
- 结果会被转发,而非建模。 Porkbun 丢弃的字段不会出现在结果中;
get_ssl_bundle、get_invoice_pdf和扣款前读取的额度除外,这些情况下会以drift表示。 - 这些检查能发现字符丢失,但无法发现所有字符更改。 RSA 密钥(DKIM、DNSKEY)中的字符即使被更改,仍可能解析为某个密钥;而 ECDSA 密钥几乎总是会因此偏离其曲线。建议使用
dnskey,它会完全移除带类型的摘要。系统会计算 SHA-1、SHA-256 和 SHA-384 的 DS;对于 GOST 或 SM3 摘要,只检查格式。 - SPF 按原样检查。 不会跟踪
include,此处也不会查询 DNS。其他记录类型由 Porkbun 验证;由扫描驱动的导入会导入 Porkbun 找到的内容,本服务不会看到这些内容。 - 区域文件。 CAA、TLSA、SSHFP、HTTPS 和 SVCB 会按原样保留。Porkbun 会导出 ALIAS,但并非所有 DNS 服务都能读取此类型。备注会在导出时成为注释,且不会在导入时读回。
- 一组正在使用的密钥对。 沙盒工具需要 Porkbun 自己的服务,并使用沙盒密钥。不提供 USDC 付款和 API 密钥生成:请使用余额或银行卡付款,并前往 porkbun.com/account/api 创建密钥。
Porkbun 的其他服务
搜索日期:2026-10-15。Porkbun 发布了自己的服务,本服务运行的就是它:
@porkbunllc/mcp-server(在 MCP Registry 中为com.porkbun/mcp),由 Porkbun 提供:使用 stdio,密钥对通过环境变量配置。Porkbun 也通过 Streamable HTTP 托管该服务,OAuth 登录会为客户端签发专属 API 密钥(可设定范围或撤销),并提供范围更窄的端点,不包含购买或充值操作。账户本身还支持设置每月支出限额、试运行,以及限制 IP、域名和权限的密钥。
社区服务覆盖了同一 API 的部分功能:
- PyPI 上的
porkbun-mcp:域名、DNS、DNSSEC 和 SSL;除非通过变量启用写入,否则为只读。 - npm 上的
porkbun-mcp:默认只读。 - GitHub 上的
porkbun-mcp-server。
本服务补充了 Porkbun 服务留给客户端处理的部分:每个工具都有分类,每次涉及资金的调用都会在同一行确认(资金);发送扣款请求前会检查每月限额;密钥不会出现在结果中(结果中的密钥);文件通过路径而不是模型输入的 base64 字节传递(使用文件而非输入字节);发送前会检查负载(发送前检查);支持导出和导入区域文件(区域文件);还有自己的服务形式:密钥存储在文件中,通过 HTTP 为每个客户端分配令牌,并为每次调用记录一行审计日志。
作为交换,Porkbun 托管的端点会为每个连接提供专属密钥,配合账户的支出限额,权限授予比本服务使用的单一密钥对更加细致。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。