accueil / serveurs / Données & BDD / ai.borealhost/mcp
ai.borealhost/mcp
serveur MCP (Model Context Protocol) · BorealHost 1.27.0
Référencé dans l'annuaire. Seul le pentest comportemental fait foi, et il n'a pas encore été exécuté sur ce serveur.
Est-ce que ai.borealhost/mcp est sûr ?
Au dernier audit MCP Hub, le serveur MCP « ai.borealhost/mcp » est classé « Non encore testé ». Référencé dans l'annuaire. Seul le pentest comportemental fait foi, et il n'a pas encore été exécuté sur ce serveur. Le verdict est réévalué en continu ; consultez la fiche pour l'état à jour.
Méthode : MCP Hub analyse la description de chaque outil (couche 1) et, pour le verdict fort, exécute le serveur dans une micro-VM isolée avec leurres et réseau bloqué (couche 2). On publie des noms et des compteurs, jamais le contenu brut renvoyé par un outil.
Les 184 outils
- add_cron≈ 142 tokens
Add a cron job to a site. Requires: API key with write scope. Args: slug: Site identifier schedule: Cron schedule (e.g. "*/5 * * * *", "0 2 * * *") command: Command to execute Returns: {"added": true, "result": {...}}
Paramètres, retour & exemple (3)
Paramètresslug· string · requiscommand· string · requisschedule· string · requis
Exemple d'appel{"name": "add_cron", "arguments": {"slug": "texte", "command": "texte", "schedule": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - add_domain_dns≈ 318 tokens
Add a DNS record to a domain. Requires: API key with write scope. Args: domain_name: Full domain name (e.g. "example.com") record_type: "A", "AAAA", "CNAME", "MX", "TXT", or "SRV" value: Record value (e.g. "1.2.3.4" for A, "mail.example.com" for MX) subdomain: Subdomain part (e.g. "www", "mail"). Empty for apex domain. priority: MX priority (required for MX records) The DNS provider manages the effective TTL and does not expose a per-record value through this service. Returns: {"success": true, "record": {"id": "...", "type": "A", "subdomain": "www", "value": "1.2.3.4"}} Errors: VALIDATION_ERROR: Missing value, invalid record type NOT_FOUND: Domain not found
Paramètres, retour & exemple (5)
Paramètresvalue· string · requispriority· integer · optionnelsubdomain· string · optionneldomain_name· string · requisrecord_type· string · requis
Exemple d'appel{"name": "add_domain_dns", "arguments": {"value": "texte", "domain_name": "texte", "record_type": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - add_firewall_rule≈ 204 tokens
Add an IP firewall rule (allow or deny) and reload Nginx. Supports IPv4, IPv6, and CIDR notation. Max 100 rules per site. If a rule already exists for the IP, the action is updated. Requires: API key with write scope. Args: slug: Site identifier ip: IP address or CIDR (e.g. "1.2.3.4", "10.0.0.0/8", "2001:db8::/32") action: "deny" (block) or "allow" (whitelist). Default: "deny" Returns: {"added": true, "ip": "1.2.3.4", "action": "deny"}
Paramètres, retour & exemple (3)
Paramètresip· string · requisslug· string · requisaction· string · optionnel
Exemple d'appel{"name": "add_firewall_rule", "arguments": {"ip": "texte", "slug": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - add_mailbox_alias≈ 113 tokens
Add an alias on the same domain, preserving existing aliases.
Paramètres, retour & exemple (4)
Paramètresactor· string · optionnelalias· string · requisemail· string · requisreason· string · optionnel
Exemple d'appel{"name": "add_mailbox_alias", "arguments": {"alias": "texte", "email": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - add_port_forward≈ 578 tokens
Publish a container port on the node's public IP (TCP or UDP). This is how inbound UDP reaches a container. There is no other way: the container's own address is private, and the IP allow/deny rules of add_firewall_rule cannot route anything. PORT PRESERVATION MATTERS. Leave external_port at 0 and a port is allocated from 10000-19999 — your service becomes reachable, but on a DIFFERENT number. That is fine for HTTP or ssh and broken for every protocol that carries its own port inside the payload: STUN, TURN, RTP/WebRTC, SIP, WireGuard, QUIC. For those, pass external_port equal to internal_port. A media server needs a contiguous span, not one port — pass internal_port_end. A span is always published unchanged and counts as ONE rule against your limit. Some ports are refused because the host or its neighbours already answer on them: 22, 80, 443, 2222, 9201, 51820, and the bands 9210-9250, 9310-9350 and 20000-20099. The last one is why the "forward UDP 20000-20999 for Janus" recipe printed in most Nextcloud Talk guides will not work here — pick a span above it, e.g. 20100-20599. Requires: API key with write scope. Args: slug: Site identifier internal_port: Port your service listens on inside the container protocol: "tcp" or "udp". Default: "tcp" label: Free-text note shown in the panel external_port: Publish on this exact port; 0 allocates one from the pool internal_port_end: End of a contiguous range (inclusive); 0 means one port Returns: {"id": "...", "external_port": 3478, "internal_port": 3478, "protocol": "udp", "status": "active", "public_address": "203.0.113.5:3478", "port_preserved": true}
Paramètres, retour & exemple (6)
Paramètresslug· string · requislabel· string · optionnelprotocol· string · optionnelexternal_port· integer · optionnelinternal_port· integer · requisinternal_port_end· integer · optionnel
Exemple d'appel{"name": "add_port_forward", "arguments": {"slug": "texte", "internal_port": 1}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - add_redirect≈ 197 tokens
Add an HTTP redirect rule to a site. Requires: API key with write scope. Args: slug: Site identifier source_path: Path to redirect, must start with "/" (e.g. "/old-page") target_url: Destination URL redirect_type: 301 (permanent, default) or 302 (temporary) Returns: {"id", "source_path", "target_url", "redirect_type"}
Paramètres, retour & exemple (4)
Paramètresslug· string · requistarget_url· string · requissource_path· string · requisredirect_type· integer · optionnel
Exemple d'appel{"name": "add_redirect", "arguments": {"slug": "texte", "target_url": "texte", "source_path": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - add_site≈ 574 tokens
Provision 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. Sites under ONE subscription share one CPU pool, one disk quota and one rate-limit bucket — that shared budget is what the plan sells. Two subscriptions split it, so the customer pays twice for capacity they had. Requires: API key with write scope, on the account that owns the plan. Args: slug: Sub-domain for the new site (lowercase, digits, hyphens) subscription_id: The subscription whose slot to use client_name: Display name for the site (optional) domain: Custom domain; defaults to <slug>.borealhost.ai site_type: wordpress (default) | php | php-nodb | static-site. Choose here rather than provisioning WordPress and calling set_site_type afterwards — that installs a WordPress you then abandon in the docroot, and it costs a minute of provisioning. Returns: {"subscription_id": "uuid", "provisioning_job_id": "uuid", "slug": "my-second-site", "domain": "my-second-site.borealhost.ai", "status": "provisioning"} Poll get_site_status(slug) until it reports active. Errors: VALIDATION_ERROR: Plan includes a single site, slug taken, or every slot is in use (the message reports used/total) NOT_FOUND: Unknown subscription, or it belongs to another account
Paramètres, retour & exemple (5)
Paramètresslug· string · requisdomain· string · optionnelsite_type· string · optionnelclient_name· string · optionnelsubscription_id· string · requis
Exemple d'appel{"name": "add_site", "arguments": {"slug": "texte", "subscription_id": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - add_ssh_key≈ 217 tokens
Inject your SSH public key into a site's container for direct SSH access. The key is appended to /home/admin/.ssh/authorized_keys. Only available for VPS/dedicated plans. Requires: API key with write scope. Args: slug: Site identifier public_key: SSH public key string. Supported types: ssh-ed25519, ssh-rsa, ecdsa-sha2-nistp256/384/521 Returns: {"success": true, "message": "SSH key added", "ssh_command": "ssh admin@184.107.x.x"} Errors: VALIDATION_ERROR: Invalid or unsupported key format FORBIDDEN: Plan does not support SSH
Paramètres, retour & exemple (2)
Paramètresslug· string · requispublic_key· string · requis
Exemple d'appel{"name": "add_ssh_key", "arguments": {"slug": "texte", "public_key": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - add_subdomain≈ 317 tokens
Create and route a subdomain of a site-linked domain. Creates the DNS A record (if absent) pointing at the site's server, then configures the nginx vhost and SSL certificate on that server. The domain must already be linked to a site (see link_domain). Idempotent: if the DNS record already exists and points at the site's server, the nginx/SSL steps are (re)applied — safe to re-call, e.g. to retry SSL after DNS propagation. May take up to 3 minutes when a certificate is issued. Requires: API key with write scope. Args: domain_name: Registrable domain linked to a site (e.g. "example.com") subdomain: Subdomain label only, no dots (e.g. "blog") Returns: {"fqdn": "blog.example.com", "domain": "example.com", "site": "my-site", "message": "..."} Errors: NOT_FOUND: Domain not found VALIDATION_ERROR: Domain not linked to a site, invalid label, or an existing record points at a different server
Paramètres, retour & exemple (2)
Paramètressubdomain· string · requisdomain_name· string · requis
Exemple d'appel{"name": "add_subdomain", "arguments": {"subdomain": "texte", "domain_name": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - adopt_compute_instance≈ 344 tokens
Turn an instance you are ALREADY running into a persistent volume. Use this when you launched something, set it up, and then decided you want to keep it. Nothing reboots and no data moves — the machine you have becomes the volume, and you can detach it afterwards to stop paying for compute while keeping the machine. Beats creating a volume and rebuilding. Only instances launched with an ssh_public_key qualify. One launched with your own user_data carries only your key, and a key cannot be added to a machine we cannot already log into — check "managed_ssh" on the instance. Requires: API key with write scope, and an active subscription. Args: instance_id: A running lsw.* instance you own name: Label for the volume (defaults to the instance name) Returns: Volume dict with state "attached", wrapping that same instance. No snapshot exists yet — the first one is taken on detach or snapshot. Errors: CONFLICT: Not running, already a volume, BorealHost Metal, or launched without BorealHost management access
Paramètres, retour & exemple (2)
Paramètresname· string · optionnelinstance_id· string · requis
Exemple d'appel{"name": "adopt_compute_instance", "arguments": {"instance_id": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - attach_compute_volume≈ 376 tokens
Restore a detached volume onto a fresh instance — optionally a new type. Pass a different instance_type to move the same machine to different hardware: this is the closest thing to changing instance type that the provider allows, since it has no resize API at all. The restore runs at first boot and the machine reboots into itself, so the instance answers SSH BEFORE it is ready. Poll get_compute_volume and give it a few minutes (measured: ~6 min for a 10 GB GPU machine end to end). The machine keeps its SSH host keys, so your client will not warn about a changed host identity. Requires: API key with write scope. Args: volume_id: A volume in state "detached" ssh_public_key: Required — installed via cloud-init at boot instance_type: Defaults to the type it last ran on root_disk_size: GB. May grow, never shrink below the volume's size. Returns: Volume dict with state "attached" and a new instance. Errors: CONFLICT: Volume is not detached, or has no snapshot yet
Paramètres, retour & exemple (4)
Paramètresvolume_id· string · requisinstance_type· string · optionnelroot_disk_size· integer · optionnelssh_public_key· string · requis
Exemple d'appel{"name": "attach_compute_volume", "arguments": {"volume_id": "texte", "ssh_public_key": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - browse_backup≈ 282 tokens
List one bounded page of immediate children in a backup directory. This returns names and metadata only, never file contents. Use ``next_cursor`` from the response as ``cursor`` to request the next page. Requires: API key with read scope. Args: slug: Site identifier backup_id: UUID of a completed backup path: Absolute directory path as it existed in the backup cursor: Resume after this entry name (optional) limit: Maximum entries, from 1 through 100 Errors: SNAPSHOT_SCOPE_CHANGED: The path is allowed by today's schedule but was not included when this backup was created; choose an included path or a newer backup.
Paramètres, retour & exemple (5)
Paramètrespath· string · requisslug· string · requislimit· integer · optionnelcursor· string · optionnelbackup_id· string · requis
Exemple d'appel{"name": "browse_backup", "arguments": {"path": "texte", "slug": "texte", "backup_id": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - cache_flush≈ 88 tokens
Flush all caches (Redis + WP object cache). Requires: API key with write scope. Args: slug: Site identifier Returns: {"flushed": true}
Paramètres, retour & exemple (1)
Paramètresslug· string · requis
Exemple d'appel{"name": "cache_flush", "arguments": {"slug": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - cache_status≈ 112 tokens
Get cache status (Redis, WP object cache, hit rates). Requires: API key with read scope. Args: slug: Site identifier Returns: {"redis_running": true, "object_cache_enabled": true, "hit_rate": 0.95, "memory_used_mb": 12}
Paramètres, retour & exemple (1)
Paramètresslug· string · requis
Exemple d'appel{"name": "cache_status", "arguments": {"slug": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - cache_toggle≈ 115 tokens
Enable or disable the WordPress object cache. Requires: API key with write scope. Args: slug: Site identifier enable: true to enable, false to disable Returns: {"enabled": true}
Paramètres, retour & exemple (2)
Paramètresslug· string · requisenable· boolean · requis
Exemple d'appel{"name": "cache_toggle", "arguments": {"slug": "texte", "enable": true}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - cancel_checkout≈ 188 tokens
Abandon 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. Args: checkout_id: Checkout session ID Returns: The checkout, with status "canceled". Errors: VALIDATION_ERROR: Checkout was already paid — cancel the subscription from the panel instead FORBIDDEN: Missing checkout_secret and no owning API key
Paramètres, retour & exemple (1)
Paramètrescheckout_id· string · requis
Exemple d'appel{"name": "cancel_checkout", "arguments": {"checkout_id": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - cancel_scheduled_snapshot≈ 152 tokens
Cancel a scheduled snapshot. Requires: API key with write scope. Args: slug: Site identifier schedule_id: UUID of the scheduled snapshot to cancel Returns: {"success": true, "message": "Scheduled snapshot cancelled"} Errors: NOT_FOUND: Schedule not found or already executed
Paramètres, retour & exemple (2)
Paramètresslug· string · requisschedule_id· string · requis
Exemple d'appel{"name": "cancel_scheduled_snapshot", "arguments": {"slug": "texte", "schedule_id": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - claim_api_key≈ 228 tokens
Claim 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. Args: claim_token: The claim token string read from the container file Returns: {"api_key": "bh_...", "key_prefix": "bh_...", "site_slug": "my-site", "scopes": ["read", "write"], "message": "API key created and activated..."} Errors: VALIDATION_ERROR: Invalid, expired, or already-claimed token
Paramètres, retour & exemple (1)
Paramètresclaim_token· string · requis
Exemple d'appel{"name": "claim_api_key", "arguments": {"claim_token": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - clear_mailbox_forwarding≈ 129 tokens
Clear forwarding; when Sieve exists, requires explicit clear_all_filters=true.
Paramètres, retour & exemple (4)
Paramètresactor· string · optionnelemail· string · requisreason· string · optionnelclear_all_filters· boolean · optionnel
Exemple d'appel{"name": "clear_mailbox_forwarding", "arguments": {"email": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - cloudflare_proxy_status≈ 147 tokens
Get Cloudflare proxy (CDN) status for a site. Shows whether traffic is routed through Cloudflare's CDN (orange cloud) or goes direct to origin (grey cloud / DNS-only). Requires: API key with read scope. Args: slug: Site identifier Returns: {"domain": "my-site.borealhost.ai", "has_record": true, "proxied": true, "ip": "1.2.3.4"}
Paramètres, retour & exemple (1)
Paramètresslug· string · requis
Exemple d'appel{"name": "cloudflare_proxy_status", "arguments": {"slug": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - cloudflare_purge_cache≈ 186 tokens
Purge Cloudflare CDN cache for a site. Without urls: purges all cached content for the site's subdomain. With urls: purges only the specified URLs (max 30 per call). Requires: API key with write scope. Args: slug: Site identifier urls: Optional list of specific URLs to purge (e.g. ["https://my-site.borealhost.ai/style.css"]) Returns: {"purged": true, "scope": "host", "domain": "my-site.borealhost.ai"}
Paramètres, retour & exemple (2)
Paramètresslug· string · requisurls· array · optionnel
Exemple d'appel{"name": "cloudflare_purge_cache", "arguments": {"slug": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - cloudflare_set_proxy≈ 190 tokens
Enable or disable Cloudflare CDN proxy for a site. When enabled (orange cloud): traffic goes through Cloudflare's CDN, gets caching, DDoS protection, and SSL termination at the edge. When disabled (grey cloud): traffic goes directly to origin server. Requires: API key with write scope. Args: slug: Site identifier proxied: true to enable CDN proxy, false to disable Returns: {"domain": "my-site.borealhost.ai", "proxied": true, "ip": "1.2.3.4"}
Paramètres, retour & exemple (2)
Paramètresslug· string · requisproxied· boolean · requis
Exemple d'appel{"name": "cloudflare_set_proxy", "arguments": {"slug": "texte", "proxied": true}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - complete_checkout≈ 703 tokens
Complete 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`.** The raw Stripe URL has a required `#fragment` that chat UIs routinely strip when rendering markdown links, which causes Stripe to show "page not found". `payment_url` is a short BorealHost redirect that preserves the fragment via HTTP 302. After paying, the human lands on a confirmation page (`confirmation_url`) — not on raw JSON. Then poll get_checkout_status() until status becomes "completed". The API key appears in the first poll after payment (shown once, then cleared). Payment provisions the site; nothing else has to be called to create it. - "stripe_payment_method": Charges a Stripe PaymentMethod directly. Requires payment_method_id. On success, returns the API key immediately. Args: checkout_id: Checkout session ID payment_method: "stripe_checkout" (returns a payment_url for a human), "stripe_payment_method" (card on file), or "wallet" — pay from the account's prepaid balance against THIS key's allowance. Check get_wallet() first: `spendable_cents` is what you may actually spend, and a wallet payment is refused for plans that order dedicated hardware, which are authorised against a verified card payment instead. payment_method_id: Stripe PaymentMethod ID (pm_...). Required only for "stripe_payment_method". Returns (stripe_checkout): {"id": "uuid", "status": "awaiting_payment", "payment_url": "https://borealhost.ai/pay/<id>/?s=<secret>", "confirmation_url": "https://borealhost.ai/pay/<id>/confirmation/?s=...", "stripe_checkout_url": "https://checkout.stripe.com/c/pay/...", "message": "Present payment_url to the human..."} Returns (stripe_payment_method): {"id": "uuid", "status": "completed", "api_key": "bh_...", "api_key_message": "Store this API key securely...", "subscription_id": "uuid", "provisioning_job_id": "uuid"} Errors: VALIDATION_ERROR: Missing payment_method_id for stripe_payment_method FORBIDDEN: Checkout not in "ready" status
Paramètres, retour & exemple (3)
Paramètrescheckout_id· string · requispayment_method· string · optionnelpayment_method_id· string · optionnel
Exemple d'appel{"name": "complete_checkout", "arguments": {"checkout_id": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - configure_email_dns≈ 131 tokens
Configure OpenSRS DKIM and merge email DNS, preserving other senders and subdomains.
Paramètres, retour & exemple (4)
Paramètresactor· string · optionneldomain· string · requisreason· string · optionneldmarc_reporting_address· string · optionnel
Exemple d'appel{"name": "configure_email_dns", "arguments": {"domain": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - container_action≈ 201 tokens
Start, stop, or restart a site's container. Only for plans with a dedicated container (VPS / split-VPS / dedicated). Shared-hosting sites share a container and cannot restart it. The response reports the observed container state after the action. Requires: API key with write scope. Args: slug: Site identifier action: "start", "stop", or "restart" Returns: {"site", "action", "status": "running|stopped", "observed": true} Errors: VALIDATION_ERROR: Shared-hosting plan or unknown action
Paramètres, retour & exemple (2)
Paramètresslug· string · requisaction· string · requis
Exemple d'appel{"name": "container_action", "arguments": {"slug": "texte", "action": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - create_alert_rule≈ 378 tokens
Create an alert rule to monitor CPU, memory, or disk usage. When the metric crosses the threshold, a notification is sent via email and/or webhook. Max 10 rules per site. Requires: API key with write scope. Args: slug: Site identifier metric: "cpu", "memory", or "disk" (percentage-based) threshold: Threshold value 0-100 (e.g. 90 for 90%) operator: "gt" (greater than) or "lt" (less than). Default: "gt" severity: "warning" or "critical". Default: "warning" cooldown_minutes: Min minutes between repeated alerts. Default: 30 notify_email: Send email notification. Default: true notify_webhook: Optional webhook URL for POST notifications Returns: {"id": "uuid", "metric": "disk", "threshold": 90, ...}
Paramètres, retour & exemple (8)
Paramètresslug· string · requismetric· string · requisoperator· string · optionnelseverity· string · optionnelthreshold· number · requisnotify_email· boolean · optionnelnotify_webhook· string · optionnelcooldown_minutes· integer · optionnel
Exemple d'appel{"name": "create_alert_rule", "arguments": {"slug": "texte", "metric": "texte", "threshold": 1}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - create_api_key≈ 455 tokens
Create a new API key with specified scopes. Cannot create keys with higher scopes than the current key. Site-scoped keys restrict access to a single site. email_domains restricts the key to email tools on the named domains; use email:read, email:write and optionally email:signon scopes. expires_at is an ISO timestamp; ip_allowlist accepts IP addresses and CIDR networks. Requires: API key with write scope. Args: name: Human-readable name for the key (1-100 chars) scopes: Comma-separated scopes. Options: "read", "read,write", "read,write,admin". Default: "read" site_slug: Optional — restrict the key to a single site. Omit for account-wide access. Returns: {"api_key": "bh_...", "key_id": "uuid", "prefix": "bh_...", "name": "My Key", "scopes": ["read", "write"], "message": "Store this API key securely — it will not be shown again."} Errors: VALIDATION_ERROR: Invalid name, scopes, or max 25 active keys FORBIDDEN: Cannot create keys with higher scopes than current key
Paramètres, retour & exemple (6)
Paramètresname· string · requisscopes· string · optionnelsite_slug· string · optionnelexpires_at· ? · optionnelip_allowlist· ? · optionnelemail_domains· ? · optionnel
Exemple d'appel{"name": "create_api_key", "arguments": {"name": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - create_b2_snapshot≈ 254 tokens
Create a B2 cloud-backed snapshot (zero local disk, async). Streams container data directly to Backblaze B2 via restic. No local disk impact — billed separately at cost+5%. Runs in background — returns immediately with status "creating". Poll list_snapshots() to check when status becomes "completed". Only available for VPS plans. Requires: API key with write scope. Args: slug: Site identifier description: Optional description (max 200 chars) Returns: {"id": "uuid", "name": "...", "status": "creating", "storage_type": "b2", "message": "B2 cloud snapshot started. Poll list_snapshots()..."} Errors: VALIDATION_ERROR: Not a VPS plan or max snapshots reached
Paramètres, retour & exemple (2)
Paramètresslug· string · requisdescription· string · optionnel
Exemple d'appel{"name": "create_b2_snapshot", "arguments": {"slug": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - create_backup≈ 134 tokens
Create a manual backup (runs asynchronously). The backup starts in the background. Poll list_backups() to check status. Requires: API key with write scope. Args: slug: Site identifier Returns: {"id": "uuid", "status": "pending", "message": "Backup started. Poll list_backups() to check status."}
Paramètres, retour & exemple (1)
Paramètresslug· string · requis
Exemple d'appel{"name": "create_backup", "arguments": {"slug": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - create_checkout≈ 360 tokens
Start 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. Args: sku: Plan SKU in format bh_{plan_slug}_{monthly|annual}. Examples: "bh_site_starter_monthly", "bh_site_pro_annual", "bh_site_managed_monthly", "bh_site_business_annual". Call list_plans() to discover all available plan slugs. Returns: {"id": "uuid", "sku": "bh_site_starter_monthly", "plan_slug": "site_starter", "billing_period": "monthly", "status": "not_ready", "buyer_email": "", "requested_slug": "", "created_at": "iso8601", "checkout_secret": "base64-token"} Errors: VALIDATION_ERROR: Invalid SKU format or unknown plan RATE_LIMITED: Max 10 checkouts per IP per hour
Paramètres, retour & exemple (1)
Paramètressku· string · requis
Exemple d'appel{"name": "create_checkout", "arguments": {"sku": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - create_compute_volume≈ 460 tokens
Create a persistent machine and boot its first instance. Start here, then set the machine up however you like (install packages, drivers, models). Everything you do becomes part of the volume the first time you detach or snapshot it. While attached you pay hourly compute; while detached you pay only for stored bytes (CA$0.03/GB/month). Stopping an instance does NOT save money on this provider — detaching is what stops the compute charge. Requires: API key with write scope, and an active subscription. Args: name: Label for the volume, e.g. "trainer" image_id: From list_compute_images, e.g. "UBUNTU_24_04_64BIT". Cannot change later — restores must land on the same OS. instance_type: From list_compute_types, e.g. "lsw.g6.xlarge". CAN change on every later attach. ssh_public_key: Required. Volume instances always boot via cloud-init, so this is the only way in. root_disk_size: GB. Defaults to the type's minimum (or 25). Returns: Volume dict with state "attached". Poll get_compute_volume until instance.state is "running" (~1-3 min). Errors: PAYMENT_REQUIRED: No active subscription LIMIT_EXCEEDED: Volume cap reached NOT_AVAILABLE: Volumes not enabled on this deployment
Paramètres, retour & exemple (5)
Paramètresname· string · requisimage_id· string · requisinstance_type· string · requisroot_disk_size· integer · optionnelssh_public_key· string · requis
Exemple d'appel{"name": "create_compute_volume", "arguments": {"name": "texte", "image_id": "texte", "instance_type": "texte", "ssh_public_key": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - create_directory≈ 164 tokens
Create a directory in a site's container. Creates parent directories if they don't exist. Requires: API key with write scope. Args: slug: Site identifier path: Relative path of the directory to create Returns: {"success": true, "path": "uploads/2024", "message": "Directory created"} Errors: NOT_FOUND: Unknown slug FORBIDDEN: Protected system path
Paramètres, retour & exemple (2)
Paramètrespath· string · requisslug· string · requis
Exemple d'appel{"name": "create_directory", "arguments": {"path": "texte", "slug": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - create_email_mailbox≈ 242 tokens
Create a domain-addressed billable mailbox. Password returned once; retries omit it.
Paramètres, retour & exemple (10)
Paramètresactor· string · optionnellabel· string · optionneldomain· string · requisreason· string · optionnelpassword· string · optionnelquota_gb· integer · optionnellocal_part· string · requisdisplay_name· string · optionnelidempotency_key· string · optionnelsmtp_sent_limit· ? · optionnel
Exemple d'appel{"name": "create_email_mailbox", "arguments": {"domain": "texte", "local_part": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - create_ftp_account≈ 252 tokens
Create an SFTP account on a site. The account is chrooted to /var/www and lands in home_dir. Password must be at least 8 characters. Username must be lowercase alphanumeric. Requires: API key with write scope. Args: slug: Site identifier username: SFTP username (lowercase, max 32 chars) password: Password (min 8 chars) home_dir: Landing directory inside /var/www. Leave empty to land at /var/www itself, which lists every site directory. Returns: {"success": true, "username": "sftpuser", "home_dir": "/wordpress", "protocol": "sftp"}
Paramètres, retour & exemple (4)
Paramètresslug· string · requishome_dir· string · optionnelpassword· string · requisusername· string · requis
Exemple d'appel{"name": "create_ftp_account", "arguments": {"slug": "texte", "password": "texte", "username": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - create_mailbox≈ 215 tokens
Create a mailbox on the site's email domain. Password is generated when omitted and returned ONCE — store it. Each mailbox adds to the subscription's email billing. Requires: API key with write scope. Args: slug: Site identifier local_part: Part before the @ (e.g. "info") display_name: Optional display name password: Optional password (generated if empty) Returns: {"email", "password", "message"}
Paramètres, retour & exemple (4)
Paramètresslug· string · requispassword· string · optionnellocal_part· string · requisdisplay_name· string · optionnel
Exemple d'appel{"name": "create_mailbox", "arguments": {"slug": "texte", "local_part": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - create_mailbox_token≈ 148 tokens
Issue a temporary mail-services token with no OMA access. Requires email:signon. Use 60, 120, ... 1440 minutes. OpenSRS rejects fractional hours; no rounding up.
Paramètres, retour & exemple (4)
Paramètresactor· string · optionnelemail· string · requisreason· string · optionnelduration_minutes· integer · optionnel
Exemple d'appel{"name": "create_mailbox_token", "arguments": {"email": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - create_snapshot≈ 261 tokens
Create a local container snapshot (async). Runs in background — returns immediately with status "creating". Poll list_snapshots() to check when status becomes "completed" or "failed". Available for VPS, dedicated, and cloud plans (any plan with max_snapshots > 0). Local snapshots are stored on the host disk and count against disk quota. Requires: API key with write scope. Args: slug: Site identifier description: Optional description (max 200 chars) Returns: {"id": "uuid", "name": "snap-...", "status": "creating", "storage_type": "local", "message": "Snapshot started. Poll list_snapshots() to check status."} Errors: VALIDATION_ERROR: Max snapshots reached or insufficient disk quota
Paramètres, retour & exemple (2)
Paramètresslug· string · requisdescription· string · optionnel
Exemple d'appel{"name": "create_snapshot", "arguments": {"slug": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - create_support_ticket≈ 251 tokens
Open a support ticket with the BorealHost team. Use this to escalate platform-side problems you cannot fix with the available tools (billing issues, infrastructure faults, API bugs). A human answers every ticket — poll get_support_ticket for updates. Requires: API key with write scope. Args: subject: Short summary (max 200 chars) message: Full description (max 20000 chars) category: Optional (e.g. "technical", "billing") site: Optional site slug the ticket concerns Returns: {"id", "subject", "status", "message": "Ticket created..."}
Paramètres, retour & exemple (4)
Paramètressite· string · optionnelmessage· string · requissubject· string · requiscategory· string · optionnel
Exemple d'appel{"name": "create_support_ticket", "arguments": {"message": "texte", "subject": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - create_webhook≈ 192 tokens
Register a webhook endpoint for platform events. Events (backup failures, security notices, hosting incidents, billing) are POSTed as JSON, signed with X-BH-Signature (HMAC-SHA256 of the raw body). The signing secret is returned ONCE. Categories: billing, security, hosting, decommission, general — empty list means all. Endpoints auto-disable after 20 consecutive failures. Requires: API key with write scope. Returns: {"id", "url", "events", "secret", "message"}
Paramètres, retour & exemple (2)
Paramètresurl· string · requisevents· array · optionnel
Exemple d'appel{"name": "create_webhook", "arguments": {"url": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - database_search_replace≈ 220 tokens
Search and replace in WordPress database (e.g. URL migration). Handles serialized data safely. Use dry_run=true first to preview changes. Requires: API key with write scope. Args: slug: Site identifier old: String to search for (e.g. "http://old-domain.com") new: Replacement string (e.g. "https://new-domain.com") dry_run: Preview only without making changes (default: true) Returns: {"replacements": 42, "tables_affected": 5, "dry_run": true}
Paramètres, retour & exemple (4)
Paramètresnew· string · requisold· string · requisslug· string · requisdry_run· boolean · optionnel
Exemple d'appel{"name": "database_search_replace", "arguments": {"new": "texte", "old": "texte", "slug": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - decommission≈ 201 tokens
Delete a site and schedule resource cleanup (7-day grace period). WARNING: This is destructive. The site will be inaccessible immediately. After the grace period, its active service data is deleted. A final backup remains recoverable for 30 days; immutable copies may remain until their retention locks expire. Best practice: create a snapshot before decommissioning. Requires: API key with admin scope. Args: slug: Site identifier Returns: {"success": true, "message": "Site scheduled for deletion", "grace_period_days": 7} Errors: NOT_FOUND: Unknown slug
Paramètres, retour & exemple (1)
Paramètresslug· string · requis
Exemple d'appel{"name": "decommission", "arguments": {"slug": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - delete_account≈ 115 tokens
Permanently anonymize the account. Cancels subscriptions, deactivates keys. WARNING: This is irreversible. The account will be soft-deleted and all personal data anonymized. All sites will be decommissioned. Requires: API key with admin scope. Returns: {"success": true, "message": "Account anonymized"}
Paramètres, retour & exemple (0)
Exemple d'appel{"name": "delete_account", "arguments": {}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - delete_alert_rule≈ 117 tokens
Delete an alert rule. Requires: API key with write scope. Args: slug: Site identifier rule_id: UUID of the alert rule to delete Returns: {"deleted": true, "id": "uuid"}
Paramètres, retour & exemple (2)
Paramètresslug· string · requisrule_id· string · requis
Exemple d'appel{"name": "delete_alert_rule", "arguments": {"slug": "texte", "rule_id": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - delete_backup≈ 112 tokens
Permanently delete a single backup (metadata + stored snapshot). Irreversible. Requires: API key with admin scope. Returns: {"site", "backup_id", "deleted": true}
Paramètres, retour & exemple (2)
Paramètresslug· string · requisbackup_id· string · requis
Exemple d'appel{"name": "delete_backup", "arguments": {"slug": "texte", "backup_id": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - delete_compute_volume≈ 170 tokens
Permanently delete a volume and everything stored in it. Irreversible: the instance is released AND the stored data is purged from object storage, so billing genuinely stops. Refuses while an instance is live unless force=True, so a running machine's only copy cannot be destroyed by reflex. Requires: API key with admin scope. Returns: {"id", "state": "deleted"}
Paramètres, retour & exemple (2)
Paramètresforce· boolean · optionnelvolume_id· string · requis
Exemple d'appel{"name": "delete_compute_volume", "arguments": {"volume_id": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - delete_cron≈ 128 tokens
Delete a cron job by line number. Get line numbers from list_cron(). Requires: API key with write scope. Args: slug: Site identifier line_number: Line number of the cron entry to delete Returns: {"deleted": true}
Paramètres, retour & exemple (2)
Paramètresslug· string · requisline_number· integer · requis
Exemple d'appel{"name": "delete_cron", "arguments": {"slug": "texte", "line_number": 1}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - delete_domain_dns≈ 158 tokens
Delete a DNS record from a domain. Requires: API key with write scope. Args: domain_name: Full domain name (e.g. "example.com") record_id: ID of the DNS record to delete (from list_domain_dns) Returns: {"success": true, "message": "DNS record deleted"} Errors: NOT_FOUND: Domain or record not found
Paramètres, retour & exemple (2)
Paramètresrecord_id· string · requisdomain_name· string · requis
Exemple d'appel{"name": "delete_domain_dns", "arguments": {"record_id": "texte", "domain_name": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - delete_email_mailbox≈ 121 tokens
Soft-delete a mailbox. confirm must equal email. Provider recovery window: 30 days.
Paramètres, retour & exemple (4)
Paramètresactor· string · optionnelemail· string · requisreason· string · optionnelconfirm· string · requis
Exemple d'appel{"name": "delete_email_mailbox", "arguments": {"email": "texte", "confirm": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - delete_file≈ 169 tokens
Delete a file or directory from a site's container. Directories are deleted recursively. Protected system paths (e.g. /etc, /usr) cannot be deleted. Requires: API key with write scope. Args: slug: Site identifier path: Relative path to delete Returns: {"success": true, "path": "...", "message": "Deleted"} Errors: NOT_FOUND: Path doesn't exist FORBIDDEN: Protected system path
Paramètres, retour & exemple (2)
Paramètrespath· string · requisslug· string · requis
Exemple d'appel{"name": "delete_file", "arguments": {"path": "texte", "slug": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - delete_mailbox≈ 96 tokens
Delete a mailbox (its mail is destroyed). Requires: API key with write scope. Returns: {"email", "deleted": true}
Paramètres, retour & exemple (2)
Paramètresslug· string · requisemail· string · requis
Exemple d'appel{"name": "delete_mailbox", "arguments": {"slug": "texte", "email": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - delete_redirect≈ 120 tokens
Delete a redirect rule by source path or id. Requires: API key with write scope. Returns: {"site", "deleted": true}
Paramètres, retour & exemple (3)
Paramètresslug· string · requisredirect_id· string · optionnelsource_path· string · optionnel
Exemple d'appel{"name": "delete_redirect", "arguments": {"slug": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - delete_snapshot≈ 138 tokens
Delete a snapshot (local or B2). Requires: API key with write scope. Args: slug: Site identifier snapshot_id: UUID of the snapshot to delete Returns: {"success": true, "message": "Snapshot deleted"} Errors: NOT_FOUND: Snapshot not found
Paramètres, retour & exemple (2)
Paramètresslug· string · requissnapshot_id· string · requis
Exemple d'appel{"name": "delete_snapshot", "arguments": {"slug": "texte", "snapshot_id": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - delete_subdomain≈ 252 tokens
Remove a subdomain: its DNS record, nginx vhost and certificate. The inverse of add_subdomain. Removes the DNS record AND the server-side vhost and cert, so the name stops resolving and stops being served. Nothing else on the domain is touched. Requires: API key with write scope. Args: domain_name: Registrable domain linked to a site (e.g. "example.com") subdomain: Subdomain label only, no dots (e.g. "blog") Returns: {"fqdn": "blog.example.com", "domain": "example.com", "removed": ["dns", "vhost", "cert"], "message": "..."} Errors: NOT_FOUND: Domain or subdomain not found VALIDATION_ERROR: Domain not linked to a site, or invalid label
Paramètres, retour & exemple (2)
Paramètressubdomain· string · requisdomain_name· string · requis
Exemple d'appel{"name": "delete_subdomain", "arguments": {"subdomain": "texte", "domain_name": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - delete_webhook≈ 83 tokens
Remove a webhook endpoint. Requires: API key with write scope. Returns: {"id", "deleted": true}
Paramètres, retour & exemple (1)
Paramètresendpoint_id· string · requis
Exemple d'appel{"name": "delete_webhook", "arguments": {"endpoint_id": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - detach_compute_volume≈ 250 tokens
Queue: snapshot the machine, verify it, then destroy the instance. This is how you stop paying for compute while keeping your work. ASYNCHRONOUS. Returns immediately with state "detaching" — it does NOT mean the detach finished. The capture takes minutes (roughly 1 min per 10 GB plus verification), so it runs in a background worker. Poll get_compute_volume until state is "detached" (done) or "error" (failed). Safety: if the snapshot or its verification fails, the instance is left RUNNING and the volume goes to state "error". Your data is never traded for a tidy state machine. Retry the detach once you have fixed the cause. Requires: API key with write scope. Returns: Volume dict with state "detaching". Poll for the outcome.
Paramètres, retour & exemple (1)
Paramètresvolume_id· string · requis
Exemple d'appel{"name": "detach_compute_volume", "arguments": {"volume_id": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - disable_email_domain≈ 103 tokens
Disable an empty email domain; refuses active or recoverable accounts.
Paramètres, retour & exemple (3)
Paramètresactor· string · optionneldomain· string · requisreason· string · optionnel
Exemple d'appel{"name": "disable_email_domain", "arguments": {"domain": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - domain_detail≈ 177 tokens
Get full domain details including DNS and infrastructure status. Requires: API key with read scope. Args: domain_name: Full domain name (e.g. "example.com") Returns: {"domain": "example.com", "status": "active", "expires_at": "iso8601", "auto_renew": true, "nameservers": ["ns1.borealhost.ai", "ns2.borealhost.ai"], "dns_records": [...], "linked_site": "my-site"} Errors: NOT_FOUND: Domain not owned by this account
Paramètres, retour & exemple (1)
Paramètresdomain_name· string · requis
Exemple d'appel{"name": "domain_detail", "arguments": {"domain_name": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - domain_settings≈ 297 tokens
Update domain settings (auto-renew, WHOIS privacy, registrar lock). Only provided (non-None) fields are updated. Requires: API key with write scope. Args: domain_name: Full domain name (e.g. "example.com") auto_renew: Optional bool enabling/disabling automatic renewal whois_privacy: Optional bool. False disables saved proxy service. Paid activation via True is refused; request an activation quote through Support. locked: Optional bool enabling/disabling registrar lock (prevents unauthorized transfers) Returns: {"success": true, "domain": "example.com", "auto_renew": true, "whois_privacy": true, "locked": true} Errors: NOT_FOUND: Domain not found or not owned by account
Paramètres, retour & exemple (4)
Paramètreslocked· boolean · optionnelauto_renew· boolean · optionneldomain_name· string · requiswhois_privacy· boolean · optionnel
Exemple d'appel{"name": "domain_settings", "arguments": {"domain_name": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - enable_email_domain≈ 243 tokens
Enable an independent email domain; preserve all other email domains. Requires a verified owned domain and email:write scope. site_slug selects billing when ambiguous. Defaults request 2,000 users and 50,000 aliases.
Paramètres, retour & exemple (8)
Paramètresactor· string · optionneldomain· string · requisreason· string · optionnelsite_slug· string · optionnelalias_limit· integer · optionnelconfigure_dns· boolean · optionnelmailbox_limit· integer · optionneldmarc_reporting_address· string · optionnel
Exemple d'appel{"name": "enable_email_domain", "arguments": {"domain": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - enable_smtp_relay≈ 183 tokens
Enable an SMTP relay for a site's outbound transactional mail. Provisions a mail-send-only credential on the platform relay and configures SPF/DKIM DNS when the domain zone is hosted here. The SMTP password is returned ONCE. Use TLS on port 587, username "apikey". Requires: API key with write scope. Returns: {"relay_id", "domain", "smtp_host", "smtp_ports", "smtp_username", "smtp_password", "dns_auto_configured", "message"}
Paramètres, retour & exemple (2)
Paramètresslug· string · requisdomain· string · requis
Exemple d'appel{"name": "enable_smtp_relay", "arguments": {"slug": "texte", "domain": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - enable_wildcard≈ 160 tokens
Route *.domain (every subdomain) to the domain's linked site. Creates a wildcard DNS record and issues a wildcard certificate via ACME DNS-01. SLOW — DNS propagation is part of the challenge, expect 2-5 minutes. Requires the domain to be linked to a site and its DNS hosted by BorealHost. Requires: API key with write scope. Returns: {"domain", "wildcard", "site", "ssl_active", "not_after"}
Paramètres, retour & exemple (1)
Paramètresdomain_name· string · requis
Exemple d'appel{"name": "enable_wildcard", "arguments": {"domain_name": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - execute_query≈ 434 tokens
Run ONE bounded read against a site's database. One statement, beginning with SELECT, SHOW, DESCRIBE or EXPLAIN, with no second statement and no data-modifying clause anywhere in it. The container proves the statement is a read before running it and caps the result: 200 rows by default, 1000 maximum, 2 MB of cell data. `truncated` in the response says whether a cap was reached. ⚠ THIS TOOL CANNOT CHANGE ANYTHING, AND RETRYING WITH DIFFERENT WORDING WILL NOT MAKE IT. Anything that is not a single bounded read is refused with READ_ONLY and nothing runs. To change data or schema, use the tool for the job: optimize_database, database_search_replace, manage_db_user, list_databases, list_tables — and for creating, altering, dropping, importing or exporting tables, the database manager in the control panel, which has no tool here. Requires: API key with write scope (unchanged — the scope is the customer's published permission for this operation, not a claim about what it does). Args: slug: Site identifier database: Database name query: One read statement Returns: {"columns": ["id", "user_email"], "rows": [[1, "a@example.com"], ...], "row_count": 1, "truncated": false, "execution_time_ms": 12.0} Errors: READ_ONLY: Not a single bounded read. The error text carries the explanation and names the operation to use instead.
Paramètres, retour & exemple (3)
Paramètresslug· string · requisquery· string · requisdatabase· string · requis
Exemple d'appel{"name": "execute_query", "arguments": {"slug": "texte", "query": "texte", "database": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - find_address≈ 67 tokens
Look up mailbox/alias/forward/free in an authorized email domain.
Paramètres, retour & exemple (1)
Paramètresaddress· string · requis
Exemple d'appel{"name": "find_address", "arguments": {"address": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - get_app_status≈ 174 tokens
Get app installation status and log. Poll this after install_app() to track progress. Requires: API key with read scope. Args: slug: Site identifier app_id: App ID from install_app() response Returns: {"id": "uuid", "app_name": "myapp", "status": "running"|"installing"|"failed", "install_log": "..."} Statuses: "installing", "running", "stopped", "failed", "uninstalled"
Paramètres, retour & exemple (2)
Paramètresslug· string · requisapp_id· string · requis
Exemple d'appel{"name": "get_app_status", "arguments": {"slug": "texte", "app_id": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - get_backup_retention≈ 98 tokens
Get the backup retention policy for a VPS site. Requires: API key with read scope. Returns: {"site", "retention": {"keep_daily", "keep_weekly", "keep_monthly"}}
Paramètres, retour & exemple (1)
Paramètresslug· string · requis
Exemple d'appel{"name": "get_backup_retention", "arguments": {"slug": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - get_billing_portal≈ 146 tokens
Get a Stripe billing portal URL for managing payment methods and invoices. Returns a URL (not a redirect) that the human can open in a browser. Requires: API key with read scope. Args: flow: Optional. Set to "payment_method_update" to go directly to the payment method update page. Returns: {"url": "https://billing.stripe.com/p/session/..."}
Paramètres, retour & exemple (1)
Paramètresflow· string · optionnel
Exemple d'appel{"name": "get_billing_portal", "arguments": {"flow": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - get_checkout_status≈ 448 tokens
Poll 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 (in order): - "not_ready": Missing required fields (slug) - "ready": All fields set, awaiting payment - "awaiting_payment": Stripe checkout page opened, waiting for human - "in_progress": Payment received, site being provisioned - "completed": Site ready — API key included (shown once, then cleared) - "canceled": Checkout was abandoned - "failed": Payment or provisioning failed Terminal statuses: "completed", "canceled", "failed". Args: checkout_id: Checkout session ID Returns (when completed): {"id": "uuid", "status": "completed", "api_key": "bh_...", "api_key_message": "Store this API key securely...", "api_key_pending": false, "subscription_id": "uuid", "subscription_status": "active", "site": {"slug": "my-site", "status": "active", "url": "https://my-site.borealhost.ai"}, "completed_at": "iso8601"} Immediately after payment `site` may be null with a `provisioning_message` — the site is being built. Poll again in a few seconds. Note: The api_key field appears ONCE in the first poll after completion, then is permanently cleared. `api_key_pending` tells you whether it is still waiting to be collected. Store it immediately.
Paramètres, retour & exemple (1)
Paramètrescheckout_id· string · requis
Exemple d'appel{"name": "get_checkout_status", "arguments": {"checkout_id": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - get_compute_instance≈ 166 tokens
Get live details for a compute instance (state, public IP, accrued cost). State is synced from the cloud provider on each call. SSH as root once state is "running" and public_ip is set. Requires: API key with read scope. Args: instance_id: Instance UUID from launch_compute_instance / list Returns: {"id", "state", "public_ip", "hourly_price_cad", "accrued_cad", "terminate_after", ...}
Paramètres, retour & exemple (1)
Paramètresinstance_id· string · requis
Exemple d'appel{"name": "get_compute_instance", "arguments": {"instance_id": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - get_compute_volume≈ 140 tokens
Get a volume's live state, its instance, and its monthly storage cost. Requires: API key with read scope. Returns: Volume dict plus "monthly_storage_cad". After attach, poll this until instance.state is "running" — then allow a few more minutes for the restore to finish and the machine to reboot into itself.
Paramètres, retour & exemple (1)
Paramètresvolume_id· string · requis
Exemple d'appel{"name": "get_compute_volume", "arguments": {"volume_id": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - get_database_info≈ 119 tokens
Get WordPress database information (size, tables, row counts). Requires: API key with read scope. WordPress sites only. Args: slug: Site identifier Returns: {"database": "wp_mysite", "size_mb": 45.2, "tables": 12, "total_rows": 15432}
Paramètres, retour & exemple (1)
Paramètresslug· string · requis
Exemple d'appel{"name": "get_database_info", "arguments": {"slug": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - get_database_recovery≈ 148 tokens
Poll one database recovery without waiting for completion. Requires: API key with read scope. Args: slug: Site identifier backup_id: UUID of the source backup recovery_id: UUID returned by ``recover_backup_database``
Paramètres, retour & exemple (3)
Paramètresslug· string · requisbackup_id· string · requisrecovery_id· string · requis
Exemple d'appel{"name": "get_database_recovery", "arguments": {"slug": "texte", "backup_id": "texte", "recovery_id": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - get_email_domain≈ 70 tokens
Read effective OpenSRS limits, counts, connections and public DNS health.
Paramètres, retour & exemple (1)
Paramètresdomain· string · requis
Exemple d'appel{"name": "get_email_domain", "arguments": {"domain": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - get_email_status≈ 95 tokens
Email addon status and mailboxes for a site. Requires: API key with read scope. Returns: {"configured": bool, "domain", "mailboxes", "mailbox_list": [...]}
Paramètres, retour & exemple (1)
Paramètresslug· string · requis
Exemple d'appel{"name": "get_email_status", "arguments": {"slug": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - get_email_webmail_url≈ 130 tokens
Issue a one-use BorealHost link expiring in 60 seconds. Redemption mints provider SSO. Requires email:signon.
Paramètres, retour & exemple (4)
Paramètresactor· string · optionnelemail· string · requisreason· string · optionnellanguage· string · optionnel
Exemple d'appel{"name": "get_email_webmail_url", "arguments": {"email": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - get_file_recovery≈ 188 tokens
Poll one selected-file recovery without waiting for it to finish. Requires: API key with read scope. Args: slug: Site identifier backup_id: UUID of the source backup recovery_id: UUID returned by ``recover_backup_files`` Returns: {"id": "uuid", "backup_id": "uuid", "status": "running"|"completed"|"failed", "paths": [...], "error": "", ...}
Paramètres, retour & exemple (3)
Paramètresslug· string · requisbackup_id· string · requisrecovery_id· string · requis
Exemple d'appel{"name": "get_file_recovery", "arguments": {"slug": "texte", "backup_id": "texte", "recovery_id": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - get_logs≈ 257 tokens
Retrieve container logs (error, access, or PHP). Requires: API key with read scope. Args: slug: Site identifier log_type: "error" (Nginx/Apache errors), "access" (HTTP request log), or "php" (PHP-FPM errors, WordPress sites only) lines: Number of lines to retrieve (1–500, default: 100) search: Optional keyword filter — only lines containing this string Returns: {"log_type": "error", "lines": ["2024-01-15 ... error ...", ...], "count": 42, "truncated": false} Errors: NOT_FOUND: Unknown slug VALIDATION_ERROR: Invalid log_type or lines out of range
Paramètres, retour & exemple (4)
Paramètresslug· string · requislines· integer · optionnelsearch· string · optionnellog_type· string · optionnel
Exemple d'appel{"name": "get_logs", "arguments": {"slug": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - get_mailbox≈ 70 tokens
Inspect usage, services, aliases count, forwarding/Sieve, autoresponder and label.
Paramètres, retour & exemple (1)
Paramètresemail· string · requis
Exemple d'appel{"name": "get_mailbox", "arguments": {"email": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - get_metrics≈ 165 tokens
Get traffic and performance metrics for a site. Requires: API key with read scope. Args: slug: Site identifier days: Number of days of history (1–90, default: 7) Returns: {"requests": [...], "bandwidth": [...], "errors": [...], "period": {"start": "iso8601", "end": "iso8601"}} Errors: NOT_FOUND: Unknown slug VALIDATION_ERROR: days out of range
Paramètres, retour & exemple (2)
Paramètresdays· integer · optionnelslug· string · requis
Exemple d'appel{"name": "get_metrics", "arguments": {"slug": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - get_resource_snapshot≈ 138 tokens
Get current resource usage (CPU, memory, disk, load average). Requires: API key with read scope. Args: slug: Site identifier Returns: {"cpu_percent": 12.5, "memory_mb": 384, "memory_total_mb": 512, "disk_used_gb": 3.2, "disk_total_gb": 10, "load_1m": 0.5, "load_5m": 0.3, "load_15m": 0.2}
Paramètres, retour & exemple (1)
Paramètresslug· string · requis
Exemple d'appel{"name": "get_resource_snapshot", "arguments": {"slug": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - get_site_nginx_snippet≈ 205 tokens
Read the custom nginx config for a domain on the BorealHost host proxy. Your site sits behind a BorealHost reverse proxy that terminates TLS and forwards to your container. This returns the custom nginx block applied to that proxy for this domain (empty if you have not set one). Requires: API key with read scope. Args: domain_name: Full domain name (e.g. "example.com") Returns: {"domain": "example.com", "content": "location ...", "exists": true} Errors: NOT_FOUND: Domain not found VALIDATION_ERROR: Domain is not linked to a site
Paramètres, retour & exemple (1)
Paramètresdomain_name· string · requis
Exemple d'appel{"name": "get_site_nginx_snippet", "arguments": {"domain_name": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - get_site_status≈ 183 tokens
Get detailed status of a hosted site including resources, domains, and modules. Requires: API key with read scope. Args: slug: Site identifier (the slug chosen during checkout) Returns: {"slug": "my-site", "plan": "site_starter", "status": "active", "domains": ["my-site.borealhost.ai"], "modules": {...}, "resources": {"memory_mb": 512, "cpu_cores": 1, "disk_gb": 10}, "created_at": "iso8601"} Errors: NOT_FOUND: Unknown slug or not owned by this account
Paramètres, retour & exemple (1)
Paramètresslug· string · requis
Exemple d'appel{"name": "get_site_status", "arguments": {"slug": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - get_smtp_relay≈ 106 tokens
List SMTP relay credentials for a site, with domain-auth status. Requires: API key with read scope. Returns: {"relays": [{"relay_id", "domain", "status", "domain_authenticated"}, ...]}
Paramètres, retour & exemple (1)
Paramètresslug· string · requis
Exemple d'appel{"name": "get_smtp_relay", "arguments": {"slug": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - get_snapshot_usage≈ 129 tokens
Get snapshot disk usage and quota info for a site. Requires: API key with read scope. Args: slug: Site identifier Returns: {"disk_quota_gb": 200, "max_snapshots": 5, "snapshot_count": 2, "local_snapshot_bytes": 1234, "b2_snapshot_bytes": 5678, "can_create": true}
Paramètres, retour & exemple (1)
Paramètresslug· string · requis
Exemple d'appel{"name": "get_snapshot_usage", "arguments": {"slug": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - get_ssh_info≈ 154 tokens
Get SSH connection info for a VPS/dedicated site. Only available for VPS/dedicated plans (not shared hosting). Requires: API key with read scope. Args: slug: Site identifier Returns: {"host": "184.107.x.x", "port": 22, "username": "admin", "ssh_command": "ssh admin@184.107.x.x"} Errors: NOT_FOUND: Unknown slug FORBIDDEN: Plan does not support SSH (shared plans)
Paramètres, retour & exemple (1)
Paramètresslug· string · requis
Exemple d'appel{"name": "get_ssh_info", "arguments": {"slug": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - get_stack_info≈ 131 tokens
Get detailed system stack information (OS, PHP, DB, web server versions). Requires: API key with read scope. Args: slug: Site identifier Returns: {"os": "Debian 12", "kernel": "6.1.0", "php": "8.3.4", "mysql": "10.11.6-MariaDB", "nginx": "1.24.0", "wordpress": "6.5"}
Paramètres, retour & exemple (1)
Paramètresslug· string · requis
Exemple d'appel{"name": "get_stack_info", "arguments": {"slug": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - get_support_ticket≈ 112 tokens
Get a support ticket with its full message thread. Requires: API key with read scope. Args: ticket_id: Ticket UUID from list_support_tickets Returns: {"id", "subject", "status", "messages": [...]}
Paramètres, retour & exemple (1)
Paramètresticket_id· string · requis
Exemple d'appel{"name": "get_support_ticket", "arguments": {"ticket_id": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - get_wallet≈ 308 tokens
The 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 — a $50 balance behind a $5 allowance means $5, and planning against the balance is planning a purchase that gets refused. `can_spend: false` with a non-zero balance is normal and means this key has no budget allocated. That is not a bug: a key with no allowance may not spend the account's money, which is the whole reason allowances exist. Ask the human to allocate one in the panel (Compte → Clés API). Read-only. Money goes in through a human — an agent able to top up its own budget does not have one. Requires: API key with read scope. Returns: {"currency": "CAD", "balance_cents": 5000, "spendable_cents": 500, "can_spend": true, "key_allowance": {"limit_cents": 2000, "spent_cents": 1500, "remaining_cents": 500}} To spend it: complete_checkout(..., payment_method="wallet").
Paramètres, retour & exemple (0)
Exemple d'appel{"name": "get_wallet", "arguments": {}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - get_webmail_url≈ 96 tokens
One-time webmail single-sign-on URL for a mailbox. Requires: API key with write scope. Returns: {"email", "url"}
Paramètres, retour & exemple (2)
Paramètresslug· string · requisemail· string · requis
Exemple d'appel{"name": "get_webmail_url", "arguments": {"slug": "texte", "email": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - install_app≈ 387 tokens
Install 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. Args: slug: Site identifier template: App template slug. Available: django, laravel, nextjs, nodejs, nuxtjs, rails, static, wordpress app_name: Short name for the app (2-50 chars, lowercase alphanumeric + hyphens). Used as subdomain: {app_name}.{site_domain} db_type: Database type. "none", "mysql", or "postgresql" (depends on template) domain: Custom domain override (default: {app_name}.{site_domain}) display_name: Human-friendly name (default: derived from app_name) Returns: {"id": "uuid", "app_name": "myapp", "status": "installing", "message": "Installation started. Poll for progress."} Errors: FORBIDDEN: Plan does not support apps (shared plans) VALIDATION_ERROR: Invalid template, app_name, or duplicate name
Paramètres, retour & exemple (6)
Paramètresslug· string · requisdomain· string · optionneldb_type· string · optionnelapp_name· string · requistemplate· string · requisdisplay_name· string · optionnel
Exemple d'appel{"name": "install_app", "arguments": {"slug": "texte", "app_name": "texte", "template": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - launch_compute_instance≈ 606 tokens
Launch an on-demand hourly compute instance (Canada, CAD). Billing starts at launch (per minute, 1-hour minimum) and runs until terminate_compute_instance — stopping does NOT stop the charge. Every instance has a hard TTL (max_lifetime_hours, default 72h) after which it is auto-terminated. Usage is metered onto your existing BorealHost subscription; an active subscription is required. Requires: API key with write scope. Args: instance_type: From list_compute_types, e.g. "lsw.c3.large" image_id: From list_compute_images, e.g. "UBUNTU_24_04_64BIT" name: Optional label for the instance ssh_public_key: Public key installed as root access. Mutually exclusive with user_data (provider limitation) — provide exactly one. user_data: cloud-init config (plain text #cloud-config). Use ssh_authorized_keys inside it if you need a key AND user data. root_disk_size: GB (default max(min_disk, 25)) storage_type: "CENTRAL" (redundant) or "LOCAL" (faster I/O) max_lifetime_hours: Hard TTL, 1-336 (default 72) Returns: Instance dict: {"id", "state": "launching", "public_ip", "instance_type", "hourly_price_cad", "terminate_after", ...}. Poll get_compute_instance until state is "running" and public_ip is set (~1-3 min). Errors: PAYMENT_REQUIRED: No active subscription to bill against LIMIT_EXCEEDED: Concurrent instance cap reached SPEND_CAP_EXCEEDED: Monthly compute spend cap reached VALIDATION_ERROR: Bad type/image/disk/TTL, or both/neither of ssh_public_key and user_data
Paramètres, retour & exemple (8)
Paramètresname· string · optionnelimage_id· string · requisuser_data· string · optionnelstorage_type· string · optionnelinstance_type· string · requisroot_disk_size· integer · optionnelssh_public_key· string · optionnelmax_lifetime_hours· integer · optionnel
Exemple d'appel{"name": "launch_compute_instance", "arguments": {"image_id": "texte", "instance_type": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - link_domain≈ 298 tokens
Link a domain to a hosted site. Attaches the domain to the specified site and triggers automatic DNS configuration and SSL provisioning. WARNING: Regenerates this site's nginx vhost on the host from scratch. Any config applied to that vhost by hand is lost, silently — the site keeps serving and only the hand-added behaviour disappears. Config set via the nginx-snippet endpoint is NOT affected: it lives in a separate file the regenerated vhost re-includes, which is what that endpoint is for. Requires: API key with write scope. Args: domain_name: Full domain name (e.g. "example.com") site_slug: Site identifier to link the domain to Returns: {"success": true, "domain": "example.com", "linked_site": "my-site", "message": "Domain linked"} Errors: NOT_FOUND: Domain or site not found VALIDATION_ERROR: Domain already linked to another site
Paramètres, retour & exemple (2)
Paramètressite_slug· string · requisdomain_name· string · requis
Exemple d'appel{"name": "link_domain", "arguments": {"site_slug": "texte", "domain_name": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - list_alert_rules≈ 134 tokens
List user-configurable alert rules for a site. Requires: API key with read scope. Args: slug: Site identifier Returns: [{"id": "uuid", "metric": "disk", "operator": "gt", "threshold": 90, "severity": "warning", "enabled": true, "cooldown_minutes": 30, "notify_email": true}]
Paramètres, retour & exemple (1)
Paramètresslug· string · requis
Exemple d'appel{"name": "list_alert_rules", "arguments": {"slug": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - list_api_keys≈ 138 tokens
List all API keys for the account. Shows key metadata (name, prefix, scopes, last used) but never the full key value. Requires: API key with read scope. Returns: [{"id": "uuid", "name": "My Key", "prefix": "bh_a2...", "scopes": ["read", "write"], "is_active": true, "created_at": "iso8601", "last_used_at": "iso8601"|null, "site_slug": null|"my-site"}]
Paramètres, retour & exemple (0)
Exemple d'appel{"name": "list_api_keys", "arguments": {}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - list_apps≈ 119 tokens
List installed apps on a site. Requires: API key with read scope. Args: slug: Site identifier Returns: {"apps": [{"id": "uuid", "app_name": "myapp", "template_slug": "django", "status": "running", "domain": "myapp.mysite.borealhost.ai"}]}
Paramètres, retour & exemple (1)
Paramètresslug· string · requis
Exemple d'appel{"name": "list_apps", "arguments": {"slug": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - list_backups≈ 134 tokens
List all backups for a site (automatic and manual). Requires: API key with read scope. Args: slug: Site identifier Returns: [{"id": "uuid", "backup_type": "auto"|"manual", "status": "completed", "size_bytes": 1234, "size_display": "1.2 Mo", "timestamp": "iso8601", "notes": "..."}]
Paramètres, retour & exemple (1)
Paramètresslug· string · requis
Exemple d'appel{"name": "list_backups", "arguments": {"slug": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - list_checkouts≈ 194 tokens
List 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. Args: status: Optional filter — "not_ready", "ready", "awaiting_payment", "completed", "canceled", "failed". Returns: {"checkouts": [{...same shape as get_checkout_status...}], "note": "..."}
Paramètres, retour & exemple (1)
Paramètresstatus· string · optionnel
Exemple d'appel{"name": "list_checkouts", "arguments": {"status": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - list_compute_images≈ 105 tokens
List OS images available for on-demand compute instances. Requires: API key with read scope. Returns: {"images": [{"id": "UBUNTU_24_04_64BIT", "name": "Ubuntu 24.04 LTS (x86_64)", "family": "linux", "flavour": "ubuntu"}, ...]}
Paramètres, retour & exemple (0)
Exemple d'appel{"name": "list_compute_images", "arguments": {}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - list_compute_instances≈ 115 tokens
List your on-demand compute instances with month-to-date spend. Requires: API key with read scope. Returns: {"instances": [...], "month_to_date_spend_cad": 12.34, "monthly_spend_cap_cad": 500.0}
Paramètres, retour & exemple (1)
Paramètresinclude_terminated· boolean · optionnel
Exemple d'appel{"name": "list_compute_instances", "arguments": {"include_terminated": true}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - list_compute_types≈ 213 tokens
List on-demand compute instance types with hourly CAD prices. On-demand instances are real cloud VMs in Canada (Montreal region), billed per minute (1-hour minimum) post-paid onto your existing BorealHost subscription. Use them for short-lived extra compute (builds, batch jobs, experiments). Requires: API key with read scope. Returns: {"region": "ca-central-1", "currency": "CAD", "billing": "hourly, post-paid; billing runs until the instance is terminated", "types": [{"type": "lsw.c3.large", "vcpu": 2, "memory_gb": 3, "hourly_price_cad": 0.08, "min_disk_gb": 5, "storage_types": ["CENTRAL", "LOCAL"]}, ...]}
Paramètres, retour & exemple (0)
Exemple d'appel{"name": "list_compute_types", "arguments": {}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - list_compute_volumes≈ 230 tokens
List your compute volumes — machines that survive instance termination. A volume is a whole machine (packages, drivers, services, users, data) stored in Canada. Detaching destroys the instance but keeps the machine; attaching restores it onto a fresh instance, optionally of a DIFFERENT type. That is how you move a workload from a small CPU box to a big GPU box without rebuilding it. Requires: API key with read scope. Returns: {"volumes": [{"id", "name", "state", "instance_type", "stored_gb", "has_snapshot", "instance": {...} or null}, ...], "price_cad_per_gb_month": 0.03} state is one of: creating, attached, detaching, detached, attaching, error. Only "attached" has a running instance you can log into.
Paramètres, retour & exemple (0)
Exemple d'appel{"name": "list_compute_volumes", "arguments": {}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - list_cron≈ 108 tokens
List cron jobs on a site. Requires: API key with read scope. Args: slug: Site identifier Returns: {"jobs": [{"line": 1, "schedule": "*/5 * * * *", "command": "/usr/bin/php /var/www/html/wp-cron.php"}, ...]}
Paramètres, retour & exemple (1)
Paramètresslug· string · requis
Exemple d'appel{"name": "list_cron", "arguments": {"slug": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - list_databases≈ 96 tokens
List all databases on a site's container. Requires: API key with read scope. Args: slug: Site identifier Returns: {"databases": ["wordpress", "app_db", ...]}
Paramètres, retour & exemple (1)
Paramètresslug· string · requis
Exemple d'appel{"name": "list_databases", "arguments": {"slug": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - list_db_users≈ 103 tokens
List database users for a site. Requires: API key with read scope. Returns: {"engine", "users": [{"user", "host", ...}, ...]}
Paramètres, retour & exemple (2)
Paramètresslug· string · requisengine· string · optionnel
Exemple d'appel{"name": "list_db_users", "arguments": {"slug": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - list_domain_dns≈ 198 tokens
List all DNS records for a domain. Returns DNS records at the domain level (independent of site-level manage_dns). Use this for domains that may not be linked to a site. Requires: API key with read scope. Args: domain_name: Full domain name (e.g. "example.com") Returns: [{"id": "record-id", "type": "A", "subdomain": "www", "value": "1.2.3.4"}] The DNS provider manages the effective TTL and does not expose a per-record value through this service. Errors: NOT_FOUND: Domain not found or not owned by account
Paramètres, retour & exemple (1)
Paramètresdomain_name· string · requis
Exemple d'appel{"name": "list_domain_dns", "arguments": {"domain_name": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - list_domains≈ 97 tokens
List all domains owned by the authenticated user. Requires: API key with read scope. Returns: [{"domain": "example.com", "status": "active", "expires_at": "iso8601", "auto_renew": true, "linked_site": "my-site"}]
Paramètres, retour & exemple (0)
Exemple d'appel{"name": "list_domains", "arguments": {}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - list_email_audit≈ 135 tokens
List email API mutation/credential issuance attempts, actor, reason and outcome.
Paramètres, retour & exemple (5)
Paramètresemail· string · optionnellimit· integer · optionnelsince· string · optionnelcursor· string · optionneldomain· string · requis
Exemple d'appel{"name": "list_email_audit", "arguments": {"domain": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - list_email_domains≈ 85 tokens
List email domains visible to this key, with cluster connection settings.
Paramètres, retour & exemple (2)
Paramètreslimit· integer · optionnelcursor· string · optionnel
Exemple d'appel{"name": "list_email_domains", "arguments": {"limit": 1, "cursor": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - list_files≈ 222 tokens
List files and directories in a site's container. Path scoping depends on the plan: - Shared plans: rooted at wp-content/ (WordPress content directory) - VPS/dedicated plans: full filesystem access Requires: API key with read scope. Args: slug: Site identifier path: Relative path to list (empty for root of accessible area) Returns: {"path": "/", "entries": [{"name": "index.php", "type": "file", "size": 1234, "modified": "iso8601"}, {"name": "uploads", "type": "directory", "modified": "iso8601"}]} Errors: NOT_FOUND: Unknown slug or path doesn't exist
Paramètres, retour & exemple (2)
Paramètrespath· string · optionnelslug· string · requis
Exemple d'appel{"name": "list_files", "arguments": {"slug": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - list_firewall_rules≈ 133 tokens
List IP allow/deny firewall rules for a site. Rules are implemented as Nginx allow/deny directives per container. Requires: API key with read scope. Args: slug: Site identifier Returns: {"rules": [{"ip": "1.2.3.4", "action": "deny"}, {"ip": "10.0.0.0/8", "action": "allow"}]}
Paramètres, retour & exemple (1)
Paramètresslug· string · requis
Exemple d'appel{"name": "list_firewall_rules", "arguments": {"slug": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - list_ftp_accounts≈ 168 tokens
List SFTP accounts on a site. Also returns the host and port to connect to. Do not use the site's domain for SFTP: it is Cloudflare-proxied and only carries HTTP(S). Requires: API key with read scope. Args: slug: Site identifier Returns: {"accounts": [{"username": "sftpuser", "home": "/wordpress", "uid": 1001}], "configured": true, "connection": {"host": "1.2.3.4", "port": 9312, "protocol": "SFTP"}}
Paramètres, retour & exemple (1)
Paramètresslug· string · requis
Exemple d'appel{"name": "list_ftp_accounts", "arguments": {"slug": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - list_mailbox_aliases≈ 96 tokens
List a mailbox's aliases with pagination.
Paramètres, retour & exemple (3)
Paramètresemail· string · requislimit· integer · optionnelcursor· string · optionnel
Exemple d'appel{"name": "list_mailbox_aliases", "arguments": {"email": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - list_mailboxes≈ 126 tokens
Page through a domain's mailboxes, optionally filtering by organisation label.
Paramètres, retour & exemple (4)
Paramètreslabel· ? · optionnellimit· integer · optionnelcursor· string · optionneldomain· string · requis
Exemple d'appel{"name": "list_mailboxes", "arguments": {"domain": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - list_modules≈ 156 tokens
List AI modules and their enabled/disabled state for a site. Also returns the list of modules available for the site's plan. Requires: API key with read scope. Args: slug: Site identifier Returns: {"modules": {"chatbot": true, "seo": false, "translation": false, "content": false}, "available": ["chatbot", "seo", "translation", "content"]} Errors: NOT_FOUND: Unknown slug
Paramètres, retour & exemple (1)
Paramètresslug· string · requis
Exemple d'appel{"name": "list_modules", "arguments": {"slug": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - list_php_versions≈ 128 tokens
List available PHP versions and the currently active one. Requires: API key with read scope. Args: slug: Site identifier Returns: {"versions": [{"version": "8.1", "active": false}, {"version": "8.2", "active": false}, {"version": "8.3", "active": true}]}
Paramètres, retour & exemple (1)
Paramètresslug· string · requis
Exemple d'appel{"name": "list_php_versions", "arguments": {"slug": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - list_plans≈ 283 tokens
List available hosting plans with pricing and resources. No authentication needed. Args: track: Filter by plan track. Valid values: "single_site", "agency". ⚠ The track is not the site count — most plans on BOTH tracks include several sites (site_starter 5, site_plus 8, site_pro 12). Read `max_sites` on the plan, and use add_site() to fill a slot. Leave empty to list all tracks. include_deprecated: Include deprecated plans (default: false) Returns: [{"slug": "site_starter", "name": "Starter", "track": "single_site", "hosting_type": "shared", "price": {"monthly": 5, "annual": 2, "currency": "CAD"}, "resources": null, "features": {"max_sites": 1, "ai_modules": [...], "ai_agents": [], "free_domain_annual": false}}, ...]
Paramètres, retour & exemple (2)
Paramètrestrack· string · optionnelinclude_deprecated· boolean · optionnel
Exemple d'appel{"name": "list_plans", "arguments": {"track": "texte", "include_deprecated": true}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - list_plugins≈ 120 tokens
List installed WordPress plugins with status. Requires: API key with read scope. WordPress sites only. Args: slug: Site identifier Returns: {"plugins": [{"name": "akismet", "status": "active", "version": "5.3", "update_available": false}, ...]}
Paramètres, retour & exemple (1)
Paramètresslug· string · requis
Exemple d'appel{"name": "list_plugins", "arguments": {"slug": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - list_port_forwards≈ 226 tokens
List ports published from this site's container to the public internet. These are iptables DNAT rules on the node, NOT the IP allow/deny rules that add_firewall_rule manages — those two tools do unrelated things and neither substitutes for the other. Requires: API key with read scope. Args: slug: Site identifier Returns: {"port_forwards": [{"id": "...", "external_port": 3478, "internal_port": 3478, "protocol": "udp", "status": "active", "public_address": "203.0.113.5:3478", "port_preserved": true}], "limit": 15, "port_budget": 7680, "ports_used": 1, "max_range_ports": 1024, "public_ip": "203.0.113.5"}
Paramètres, retour & exemple (1)
Paramètresslug· string · requis
Exemple d'appel{"name": "list_port_forwards", "arguments": {"slug": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - list_redirects≈ 90 tokens
List HTTP redirect rules for a site. Requires: API key with read scope. Returns: [{"id", "source_path", "target_url", "redirect_type"}, ...]
Paramètres, retour & exemple (1)
Paramètresslug· string · requis
Exemple d'appel{"name": "list_redirects", "arguments": {"slug": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - list_snapshots≈ 146 tokens
List all snapshots and scheduled snapshots for a site. Requires: API key with read scope. Args: slug: Site identifier Returns: {"snapshots": [{"id": "uuid", "name": "snap-...", "status": "completed", "storage_type": "local"|"b2", "size_bytes": 1234, "size_display": "1.2 Mo", "created_at": "iso8601"}], "scheduled": [...]}
Paramètres, retour & exemple (1)
Paramètresslug· string · requis
Exemple d'appel{"name": "list_snapshots", "arguments": {"slug": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - list_subdomains≈ 145 tokens
List subdomain DNS records for a domain you own. Requires: API key with read scope. Args: domain_name: Registrable domain (e.g. "example.com") Returns: [{"fqdn": "blog.example.com", "subdomain": "blog", "record_type": "A", "value": "1.2.3.4", "is_auto": true}, ...] Errors: NOT_FOUND: Domain not found
Paramètres, retour & exemple (1)
Paramètresdomain_name· string · requis
Exemple d'appel{"name": "list_subdomains", "arguments": {"domain_name": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]}
+ 64 autres outils (affichage limité à 120).
C'est votre serveur ?
Revendiquez-le sur l'espace créateur (preuve GitHub, domaine ou npm) pour afficher le badge « propriétaire vérifié » et lancer un pentest comportemental à la demande afin d'obtenir le badge « Vérifié ».