mcpField
P
Porkbun

Porkbun

本地服务
foreverworks.github.io云与基础设施22 天前更新

关于 Porkbun

用于管理 Porkbun 域名、DNS、托管、邮件和账户信息的 MCP 服务。工具按工具集选择加载;购买、收费、所有权变更和秘密信息披露均需批准。

主要功能

  1. 01查询并注册域名
  2. 02管理 DNS 和 DNSSEC 记录
  3. 03发布静态网站并配置托管
  4. 04设置邮箱、转发和 Webhook
  5. 05选择要加载的工具集
  6. 06购买及秘密信息处理需批准

适用场景

  1. 01查询域名可用性并按预算注册
  2. 02编辑记录前备份 DNS 区域
  3. 03将静态网站发布到域名托管
  4. 04查看账单或将 DNS 转至 Cloudflare

MCP 相关

通过 MCP 工具提供 Porkbun 账户和域名管理功能,包括 DNS、托管、邮件、转移和账单。购买、收费、所有权变更及秘密信息披露需客户端批准;可选择工具集限制可用工具。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"com-foreverworks-porkbun": {
"command": "npx",
"args": [
"-y",
"@foreverworks/mcp-porkbun"
],
"env": {
"PORKBUN_API_KEY_FILE": "<PORKBUN_API_KEY_FILE>",
"PORKBUN_SECRET_API_KEY_FILE": "<PORKBUN_SECRET_API_KEY_FILE>",
"PORKBUN_OUTBOX_DIR": "<PORKBUN_OUTBOX_DIR>",
"PORKBUN_TOOLSETS": "<PORKBUN_TOOLSETS>"
}
}
}
}
启动命令npx -y @foreverworks/mcp-porkbun
需要配置的环境变量
PORKBUN_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+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npm@foreverworks/mcp-porkbun0.1.2

工具

113

收录的工具列表 · 更新于 2 天前

参数类型必填说明
costinteger否`cost_cents` 的弃用别名,单位相同(整数美分)。请改用 `cost_cents`。
domainstring是要购买的域名,例如 `example.com`
dry_runboolean否验证并计算价格,不扣款或取得域名。
cost_centsinteger否来自 get_closeout 的确切 totalPrice。仅在 dry_run 时使用 0。必填。单位为整数美分:803 表示 $8.03,而不是 $803。
pay_with_cardboolean否使用用户 Stripe Link Agent 钱包(MPP)中的银行卡支付此次购买,并进行预授权:仅在购买成功时扣款。请先告知用户金额。
card_payment_idstring否来自先前 PAYMENT_REQUIRED(pay_with_card)的 cardPaymentId,且其 payUrl 已完成支付。请与该调用相同的参数一并发送。

详细介绍

Porkbun 图标 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。”

安装

在 VS Code 中安装 在 Cursor 中安装 下载 Claude Desktop 版

使用 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 密钥对
  1. 登录 porkbun.com,并打开 API Access。
  2. 为此服务单独创建一个密钥,以便单独限制和撤销。Porkbun 只会显示一次秘密密钥:请立即复制密钥的两部分。
  3. 可选择限制密钥(在此处设置,或稍后点击密钥旁的齿轮图标):Allowed IPs、Allowed domains 和 Permissions(Full access、Read-only、Manage, but no purchases 或自定义权限范围)。超出这些限制的调用会失败且不会造成任何更改。
  4. 将密钥的两部分分别保存到只有你可读的文件中(chmod 600),并将 PORKBUN_API_KEY_FILE 和 PORKBUN_SECRET_API_KEY_FILE 指向这些文件。
  5. 为相应域名启用 API 访问:在同一页面点击 Opt In All Domains,或在 Domain Management 下为每个域名启用 API Access。未启用时,对该域名的所有调用都会失败。
工具集

服务器交给客户端的每个工具定义,都会随客户端发出的每个请求一起传输,而 Porkbun 的工具定义很长。PORKBUN_TOOLSETS 用逗号分隔要加载的工具集。其他工具集中的工具完全不会加载,服务器的指令会告知助手哪些工具集缺失,因此助手可以告诉你,而不是另寻办法。未设置、为空或设为 all 时,则像以前一样加载所有工具集。

工具集加载内容
domains可用性和价格、注册和续费、自动续费、联系人。
dnsDNS 记录、还原点、扫描、导入和导出区域、名称服务器、preflight_domain,以及免费 TLS 证书(get_ssl_bundle)。
dnssec注册局的 DS 记录,以及 preflight_domain。
glue胶水记录,适用于在其所服务域名下命名的名称服务器。
forwardsURL 转发和电子邮件转发。
hosting静态托管和 WordPress Cloud:套餐、deploy_site、文件、WordPress 密码。
mailboxes电子邮件托管邮箱:购买、设置、续费、密码。
cloudflare将 DNS 迁移到你自己的 Cloudflare 账户,以及其中的区域、记录和代理。
transfers转入域名,使用 check_domain 查询价格,并使用 scan_dns_records 和 import_dns_records 处理其区域。
marketplace他人出售的名称:Porkbun Marketplace、二级市场、清仓域名。
webhooksWebhook 端点、密钥及其投递记录。
account充值和自动充值、验证账户的电子邮件和电话、发票。
docsPorkbun 的 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 则保留列出的所有工具,但会拒绝写入操作。

首次运行

  1. 请助手运行 Porkbun 的 ping。它会检查连接和密钥对,并显示密钥的作用域。
  2. 请助手查询 API 支出设置(get_api_settings)和余额(get_balance):本月账户还可以支出多少,以及购买所用的余额。
  3. 购买和充值需要经过验证的电子邮件和电话。如果调用返回 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_domainread检查单个域名是否可以注册以及价格。
check_domainsread一次调用即可检查最多 25 个域名的可用性和价格。
configure_auto_topup资金设置充值金额,和/或开启或关闭自动充值。
confirm_email_verificationwrite使用验证邮件中的验证码验证账户电子邮箱地址(验证码来自 send_email_verification_code,或过去 3 天内收到的任何验证邮件)。
confirm_phone_verificationwrite使用用户从 send_phone_verification_code 收到的验证码验证账户电话号码。
connect_domains_to_cloudflarewrite将域名加入队列,以迁移到客户自己的 Cloudflare 账户:Porkbun 会在该账户中创建区域、复制其保存的 DNS 记录,并将注册局名称服务器改为 Cloudflare。
create_cloudflare_recordwrite在域名的 Cloudflare 区域中创建 DNS 记录。
create_dns_recordwrite在已验证账户中的域名上创建 DNS 记录。
create_dnssec_recordwrite为域名向注册局提交 DNSSEC DS 记录。
create_email_forwardwrite转发该域名上的一个地址(例如:
create_glue_recordwrite为域名上的主机创建胶水记录。
create_hosting资金为账户中的域名开通托管服务:安全静态托管或 WordPress 云托管(托管式 WordPress 网站),由 sku 选择。
create_mailbox资金使用账户余额支付,或直接用银行卡支付(pay_with_card)。 购买一个电子邮件托管邮箱(每年 $36.00,自动续订;当前价格为 list_mailboxes 中的 price),并在同一次调用中完成设置。
create_url_forwardwrite为域名添加 URL 转发规则。
create_webhook资金注册 Webhook 端点。
create_wp_credentials资金仅限 WordPress 云托管。
delete_cloudflare_recordwrite从域名的 Cloudflare 区域中删除 DNS 记录。
delete_dns_recordwrite根据数字 record_id 删除单条 DNS 记录(通过 list_dns_records 获取)。
delete_dnssec_recordwrite从域名的注册局中移除 DNSSEC DS 记录,按密钥标签识别。
delete_email_forwardwrite删除一条邮件转发规则,需提供其 address 和 forward_to(通过 list_email_forwards 获取;一个地址可以转发到多个邮箱,因此两项都必需)。
delete_glue_recordwrite删除域名上指定主机的胶水记录。
delete_hostingwrite取消域名的安全静态托管;Porkbun 会安排拆除。
delete_hosting_filewrite删除域名安全静态托管空间中 path 指定的文件或目录。
delete_url_forwardwrite根据 id 删除 URL 转发规则(通过 list_url_forwards 获取)。
delete_webhookwrite根据 ID 删除 Webhook 端点。
delete_wp_credentialswrite仅限 WordPress 云托管。
deploy_sitewrite将静态文件上传到域名的安全静态托管空间。
diff_dns_restore_pointread在进行任何更改前,将 DNS 还原点与实时区域进行比较。
disconnect_cloudflarewrite移除此账户保存的 Cloudflare 连接。
edit_cloudflare_recordwrite更新域名 Cloudflare 区域中的 DNS 记录。
export_dns_zoneread将域名的 DNS 记录保存为 BIND 区域文件(RFC 1035),放入此服务的发件箱:包含 list_dns_records 返回的所有记录,位于 $ORIGIN <domain>. 之下,主机名使用绝对形式,MX 和 SRV 记录包含优先级,TXT 文本以 255 字节字符串加引号表示,每条记录的备注作为注释。
get_api_settingsread获取账户的 API 支出控制设置和实际执行的限额,单位为美分。
get_auto_topupread读取账户的自动充值配置:是否开启、触发充值的余额阈值、充值金额、是否确实已保存付款方式,以及 effectiveAmount:此刻调用 top_up_account_credit 将收取的金额。
get_balanceread获取已验证 Porkbun 账户的可用账户余额。
get_closeoutread获取一个清仓域名及其 totalPrice:实际应付金额,即清仓价格加上随附的注册年限费用。
get_cloudflare_connectionread检查此 Porkbun 账户是否已连接到 Cloudflare 账户,以及连接的是哪个账户。
get_cloudflare_domain_statusread获取单个域名的 Cloudflare 迁移状态,包括创建后的 Cloudflare 区域 ID,以及 Porkbun 替换的名称服务器(会保留这些信息以便撤销迁移)。
get_cloudflare_queueread列出此账户请求的所有 Cloudflare 迁移,以及每个域名的状态和消息。
get_cloudflare_recordsread列出 Cloudflare 当前保存的域名实时 DNS 记录,包括每条记录是否启用橙色云代理(proxied)以及是否支持代理(proxiable)。
get_cloudflare_zoneread获取 Cloudflare 当前报告的域名区域信息(状态、暂停状态、名称服务器、激活日期),而非 Porkbun 队列记录中的信息。
get_cloudflare_zone_settingsread读取迁移后所需的 Cloudflare 区域设置:SSL 模式、always_use_https、automatic_https_rewrites、min_tls_version、development_mode、cache_level。
get_contactsread获取已验证账户中某个域名的四类联系人(注册人、管理员、技术联系人、账单联系人)及其当前字段值(姓名、组织、地址、电话、电子邮箱)。
get_domainread获取已验证账户中单个域名的元数据:状态、顶级域、创建日期、到期日期、安全锁、WHOIS 隐私、自动续订、API 访问许可,以及(可选)标签。
get_hostingread获取域名的安全静态托管状态(套餐、服务器、试用、到期日期、自动续订);如果域名没有托管服务,则返回 null。
get_invoiceread获取一张发票的数据:账单接收方、付款方式(仅显示银行卡品牌和后四位)、每个明细项目的产品、期限、产生的域名到期日期和状态,以及以美分计的总额、退款额和净额。
get_invoice_pdfread将发票 PDF(与 porkbun.com 上的“Download PDF”文档相同)保存到此服务的发件箱。
get_nameserversread获取已验证账户中为域名配置的当前名称服务器。
get_pricingread获取 Porkbun 当前价格:各顶级域的注册、续订和转移价格(美元)。
get_registration_requirementsread以 JSON Schema 格式获取某个顶级域的注册要求。
get_ssl_bundle资金将 Porkbun 为域名签发的免费 TLS 证书及其私钥保存到此服务的发件箱,而非直接返回私钥。
get_transfer_setupread报告待处理入站转移的状态和等待事项:是否停留在 PENDINGDNS、DNS 区域是否存在、其中有多少条记录、域名当前指向何处,以及下一步操作。
get_transfer_statusread获取某个域名特定入站转移的状态。
get_webhookread根据数字 ID 获取单个 Webhook 端点,包括其签名密钥和投递状态(连续失败次数、上次成功/失败情况)(此服务会隐藏其密钥)。
get_webhook_deliveryread根据 ID 获取单次 Webhook 投递,包括已发送(或将要发送)的完整 JSON 负载及投递状态。
get_webhook_event_typesread列出 Webhook 端点可以订阅的事件类型。
import_dns_recordswrite一次调用即可在 Porkbun 域名上创建多条 DNS 记录:这是 scan_dns_records 的配套工具,用于确保转移后的域名继续正常工作。
list_cloudflare_inventoryread列出账户中的所有域名及其 Cloudflare 迁移资格:state 为 eligible / warn / blocked / connected / inprogress,每个域名都附有易读的原因(DNSSEC 已启用、自定义名称服务器、使用 Porkbun 托管服务等)。
list_dns_recordsread列出已验证账户中某个域名的所有 DNS 记录。
list_dns_restore_pointsread列出域名 DNS 区域保存的版本,按时间从新到旧排序。
list_dnssec_recordsread列出当前已为域名提交至注册局的所有 DNSSEC DS 记录。
list_doc_topicsread列出 Porkbun API 文档中可用的主题。
list_domainsread列出已验证 Porkbun 账户中的域名。
list_email_forwardsread列出域名的邮件转发规则:该域名上的每个 address 及其投递到的 forwardTo 邮箱(一个地址可转发到多个邮箱)。
list_glue_recordsread列出域名的胶水记录。
list_hosting_filesread列出域名安全静态托管空间中可选 path 下的文件/目录名称。
list_hosting_plansread列出可通过 API 开通的托管套餐及其价格(单位为美分;传入 create_hosting 的 acknowledged_cost_cents)、计费周期、试用时长和功能。
list_invoicesread列出账户的发票(每笔订单一张),按时间从新到旧排序,并显示每张发票的日期、状态(PAID、PARTIALLY_REFUNDED、REFUNDED 或 UNPAID)、以美分计的净额及包含的域名。
list_mailboxesread列出域名的电子邮件托管邮箱(域名上的实际收件箱,可通过 IMAP/POP 或 Webmail 读取),包括 status、address、是否为免费 trial 以及 expires。
list_marketplaceread浏览 Porkbun Marketplace 上待售的域名:由其他 Porkbun 客户自行挂牌,而非新注册的域名。
list_transfersread列出已验证账户中所有进行中及近期的入站域名转移。
list_url_forwardsread列出为某个域名配置的所有 URL 转发规则。
list_webhook_deliveriesread列出近期 Webhook 投递尝试,按时间从新到旧排序;可查看所有端点,或筛选单个端点。
list_webhooksread列出已验证账户中注册的 Webhook 端点(此服务会隐藏其密钥)。
list_wp_credentialsread仅限 WordPress 云托管。
make_hosting_dirwrite在域名的安全静态托管空间中创建 path 指定的目录(以及任何缺失的父目录)。
mock_callread无需任何凭据即可获取任意 API 端点的符合架构的示例响应:无需进行任何设置。
pingread验证 Porkbun API 连接和凭据。
preflight_domainread在更改域名之前,检查该更改是否会导致域名无法正常工作。
prepare_transferwrite为待处理的入站转移创建 Porkbun DNS 区域,以便在域名迁移前添加记录。
preview_cloudflare_moveread精确显示域名迁移到 Cloudflare 时将复制和舍弃哪些 DNS 记录,但不会将任何操作加入队列。
read_docread以 Markdown 格式阅读 Porkbun 文档页面。
register_domain资金使用账户余额支付,或直接用银行卡支付(pay_with_card)。 在已验证的 Porkbun 账户中注册新域名。
renew_domain资金使用账户余额支付,或直接用银行卡支付(pay_with_card)。 续订已验证账户中的现有域名。
renew_mailbox资金使用账户余额支付,或直接用银行卡支付(pay_with_card)。 立即为电子邮件托管邮箱续订一年,价格为 list_mailboxes 中的 renewalPrice($36.00;仍符合条件的邮箱可享受旧价格)。
resend_webhookwrite将之前的 Webhook 投递重新加入其端点的队列。
restore_dns_zonewrite将域名的 DNS 区域恢复为已保存的还原点。
retry_cloudflare_domainwrite将 Cloudflare 迁移失败或已跳过的域名重新加入队列。
rollback_cloudflare_domainwrite撤销已完成的 Cloudflare 迁移:将域名的名称服务器改回 Porkbun,并恢复 Porkbun 仍保留的 DNS 配置。
rotate_webhook_secret资金为 Webhook 端点生成新的签名密钥,并返回带有新密钥的端点。
scan_dns_recordsread查询域名当前发布的权威名称服务器,以发现其 DNS 记录。
search_aftermarketread查找在二级市场出售的已注册域名:包括 Afternic、Sedo、Atom、NameBright 和 DAX 上的挂牌及拍卖,以及 Porkbun Marketplace;合并结果并为每个名称保留最低价格。
search_closeoutsread搜索过期域名清仓:未在拍卖中售出的域名现以固定价格出售,该价格会按计划逐步下降。
search_docsread按关键词搜索完整的 Porkbun API 参考文档,并以 Markdown 格式返回最相关的部分(端点/主题)。
send_email_verification_codewrite向用户 Porkbun 账户中的电子邮箱发送验证码,以解除 VERIFICATION_REQUIRED 状态(购买和充值需要验证电子邮箱和电话号码)。
send_phone_verification_codewrite向用户 Porkbun 账户中的电话号码发送短信验证码,以解除 VERIFICATION_REQUIRED 状态(购买和充值需要验证电话号码和电子邮箱;新账户注册时无需验证电话号码)。
set_cloudflare_proxywrite为域名的 DNS 记录开启或关闭 Cloudflare 代理(橙色云)。
set_cloudflare_zone_settingswrite更改已迁移域名的 Cloudflare 区域设置。
set_email_password资金更改电子邮件托管邮箱的密码(须为 list_mailboxes 中列出的有效邮箱)。
setup_mailbox资金为等待设置的邮箱设置地址和密码(该邮箱已付款,或是注册域名时附带的免费试用邮箱)。
start_transfer资金将待处理的入站转移提交至注册局。
test_webhookwrite向端点发送 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_recordwrite根据数字 record_id 更新现有 DNS 记录(通过 list_dns_records 获取)。
update_glue_recordwrite更新与现有胶水记录关联的 IP 地址。
update_nameserverswrite替换已验证账户中域名的名称服务器。
update_transfer_auth_codewrite替换因授权码错误而停滞的入站转移的授权码,并重新将其加入队列;无需取消、退款后再重新提交。
update_webhookwrite更新 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。

  1. 阅读这些提交和已发布的差异 (npm diff --diff=@porkbunllc/[email protected] --diff=@porkbunllc/mcp-server@<new>), 尤其是所有新增或更改的描述:凡是会花费资金、收取卡款或返回密钥的工具,都归入 MONEY,无论其注释如何。新的付款方式或发放密钥的工具,都需要检查 offer.ts;如果某个版本以服务无法识别的措辞提供 USDC,服务将在启动时停止。
  2. npm install -w @foreverworks/mcp-porkbun --save-exact @porkbunllc/mcp-server@<new>
  3. 运行 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 托管的端点会为每个连接提供专属密钥,配合账户的支出限额,权限授予比本服务使用的单一密钥对更加细致。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。