add_siteAdd SiteProvision a site into a slot a plan you ALREADY PAY FOR includes. Two different things can be meant by 'create a site'. Buying one is the checkout flow (create_checkout → update → complete). This is the other: most plans include several sites, and this uses one of them at no extra cost. site_starter includes 5, site_plus 8, site_pro 12, and the agency plans more. whoami and list_sites show what the account already holds. Prefer this over buying a second subscription when a slot is free.
Effect: unknownConfirm: explicit policy
cancel_checkoutCancel CheckoutAbandon an unpaid checkout and expire its Stripe payment link. Use this to clean up abandoned attempts rather than leaving them to sit. A completed checkout is never cancelled here — that would be a refund, and it is refused.
Effect: writeConfirm: explicit policy
claim_api_keyClaim API KeyClaim an API key using a claim token from the container. After calling request_api_key(), read the claim token from the path that call returned in claim_path, on that site's container, and pass it here. The token is single-use — once claimed, it cannot be used again. The API key is automatically activated for this MCP session.
Effect: account creationConfirm: explicit policy
complete_checkoutComplete CheckoutComplete checkout with payment and start site provisioning. The checkout must be in 'ready' status. Two payment methods: 'stripe_checkout' (default) returns a short, chat-safe payment URL. Present payment_url to the human — NOT stripe_checkout_url. After paying, poll get_checkout_status() until status becomes 'completed'. 'stripe_payment_method' charges a Stripe PaymentMethod directly. Requires payment_method_id. On success, returns the API key immediately.
Effect: unknownConfirm: explicit policy
create_checkoutCreate CheckoutStart a new checkout session to purchase a hosting plan. No authentication needed. After creating, call update_checkout to set buyer info, then complete_checkout to pay. The response carries a checkout_secret, returned ONCE, that every later step of this checkout requires. It is held in memory for this MCP session and sent automatically — but it is gone if the server restarts. If a session key is set, the checkout is owned by that account and the API key authorizes the later steps on its own, which is the durable path.
Effect: financial commitmentConfirm: explicit policy
get_app_statusGet App StatusGet app installation status and log. Poll this after install_app() to track progress. Requires: API key with read scope. Statuses: installing, running, stopped, failed, uninstalled.
Effect: readConfirm: explicit policy
get_checkout_statusGet Checkout StatusPoll a checkout session for status updates. Call this after complete_checkout to track payment and provisioning. Polling strategy: First 60 seconds: every 5 seconds; After 60 seconds: every 15 seconds; Stop after 10 minutes if not completed. Checkout statuses: not_ready, ready, awaiting_payment, in_progress, completed, canceled, failed. Terminal statuses: completed, canceled, failed.
Effect: readConfirm: explicit policy
get_site_statusGet Site StatusGet detailed status of a hosted site including resources, domains, and modules. Requires: API key with read scope.
Effect: readConfirm: explicit policy
get_walletGet WalletThe account's prepaid balance, and what THIS key may spend from it. Two ceilings, and both apply: the balance bounds the ACCOUNT, the allowance bounds this KEY within it. Plan against spendable_cents, which is the lower of the two. can_spend: false with a non-zero balance is normal and means this key has no budget allocated. Read-only. Money goes in through a human — an agent able to top up its own budget does not have one.
Effect: readConfirm: explicit policy
install_appInstall AppInstall an app template on a VPS/Cloud site. Starts a background installation. Poll get_app_status() for progress. Requires: API key with write scope. VPS or Cloud plan only. Templates: django, laravel, nextjs, nodejs, nuxtjs, rails, static.
Effect: unknownConfirm: explicit policy
list_appsList AppsList installed apps on a site. Requires: API key with read scope.
Effect: readConfirm: explicit policy
list_checkoutsList CheckoutsList checkouts belonging to the authenticated account. Requires: API key. Only checkouts with a recorded owner appear — every checkout created while authenticated, plus every checkout that reached payment. An anonymous checkout whose one-shot secret was lost cannot be listed; create checkouts authenticated to keep them addressable.
Effect: readConfirm: explicit policy
list_plansList PlansList available hosting plans with pricing and resources. No authentication needed. Optionally filter by track (single_site or agency) and include deprecated plans.
Effect: readConfirm: explicit policy
manage_dnsManage DNSCreate or delete DNS records for a site. Requires: API key with write scope. Actions: create or delete. Record types: A, AAAA, CNAME, MX, TXT, SRV.
Effect: unknownConfirm: explicit policy
registerRegisterRegister a new agent account and get an API key. No authentication needed. The returned API key grants read+write access to all BorealHost API endpoints. Store it securely — it cannot be retrieved again. The key is automatically activated for this session. If no email is provided, a synthetic agent identity is created. If an email is provided, it links to an existing or new human account.
Effect: account creationConfirm: explicit policy
request_api_keyRequest API KeyRequest an API key for a site YOU ARE RUNNING ON (challenge-response). ONLY USE THIS IF YOU ARE EXECUTING INSIDE THAT SITE'S OWN CONTAINER. If you bought or ordered the site from somewhere else, this is the wrong tool. Use get_checkout_status(checkout_id) on the checkout that paid for the site. Two-step verification flow: 1. A claim token is written into that site's container, at the per-site path the response gives you in claim_path. 2. Read that file and call claim_api_key(token) within 1 hour. Refused for sites on SHARED containers.
Effect: account creationConfirm: explicit policy
set_api_keySet API KeySet your BorealHost API key for this session. Call this if you already have an API key (from a previous registration, checkout completion, or the BorealHost panel). All subsequent tool calls will use this key for authentication. No need to call this after register() — the key is set automatically.
Effect: writeConfirm: explicit policy
set_site_typeSet Site TypeChange what a site's docroot IS, without deleting anything. Types: wordpress, php, php-nodb, static-site. NON-DESTRUCTIVE. Existing files stay on disk and existing databases are not dropped. They remain the customer's data and keep counting against their plan's quota — this changes how the site is SERVED, not what it holds. Moving to a type without PHP does not merely stop executing .php — it stops serving them. Shared hosting only.
Effect: writeConfirm: explicit policy
update_checkoutUpdate CheckoutSet buyer email and desired site slug on a checkout session. The checkout must be in 'not_ready' status. Setting requested_slug transitions status to 'ready' (required before completing).
Effect: writeConfirm: explicit policy
whoamiWho Am ICheck the current API key's account info, scopes, and site count. Requires: BOREALHOST_API_KEY env var (read scope).
Effect: readConfirm: explicit policy