ToolPin

BorealHost

ai.borealhost/mcp · v0.1.4 · MCP 2025-11-25

Agent-native web hosting — deploy sites, manage DNS, register domains, scale infrastructure

Reachability reachable
checked 2026-07-14 03:01 UTC
Registry status active
Tools pinned 95
58c6af48a5ad
Tools last changed unchanged since first capture 2026-07-14

Provenance

Registry namespace ai.borealhost (domain verified by the official registry)
Repository github.com/alainsvrd/borealhost-mcp
Website https://borealhost.ai
Remote endpoints
https://borealhost.ai/mcp/ (streamable-http)

Observed changes

When (UTC)EventDetail
2026-07-14 03:01 first capture 95 tools pinned

Pinned tool definitions (95)

ToolDescription
register Register 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...
set_api_key Set 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...
whoami Check the current API key's account info, scopes, and site count. Requires: BOREALHOST_API_KEY env var (read scope). Returns: {"user": {"id": "uuid", "email": "...", "date_joined": "iso8601"}, "api_key": {"id": "uuid",...
request_api_key Request an API key for a site you are running on (challenge-response). This starts a two-step verification flow: 1. A claim token is written to your container at ~/.borealhost/.claim_token (mode 600, owner admin — only readable if...
claim_api_key Claim an API key using a claim token from the container. After calling request_api_key(), read the claim token from ~/.borealhost/.claim_token on your container and pass it here. The token is single-use — once claimed, it cannot be...
list_plans List available hosting plans with pricing and resources. No authentication needed. Args: track: Filter by plan track. Valid values: "single_site", "agency". Leave empty to list all tracks. include_deprecated:...
create_checkout 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. Args: sku: Plan SKU in format...
update_checkout Set 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). Args: checkout_id: Checkout session ID...
complete_checkout 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 —...
get_checkout_status 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...
get_site_status 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":...
manage_dns Create or delete DNS records for a site. Requires: API key with write scope. Args: slug: Site identifier action: "create" or "delete" record_type: "A", "AAAA", "CNAME", "MX", "TXT", or "SRV" subdomain: Subdomain part...
deploy Trigger a deployment for a site. Requires: API key with write scope. This may take up to 60 seconds. Args: slug: Site identifier Returns: {"success": true, "message": "Deployment triggered"} Errors: NOT_FOUND: Unknown slug
install_app 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...
get_app_status 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",...
list_apps List installed apps on a site. Requires: API key with read scope. Args: slug: Site identifier Returns: {"apps": [{"id": "uuid", "app_name": "forge", "template_slug": "forge", "status": "running", "domain":...
list_snapshots 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":...
create_snapshot 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...
create_b2_snapshot 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...
delete_snapshot 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: ...
rollback_snapshot Rollback a site to a previous snapshot. WARNING: This is destructive. The current state of the container will be replaced with the snapshot contents. Requires: API key with admin scope. Args: slug: Site identifier ...
get_snapshot_usage 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,...
schedule_snapshot Schedule a snapshot for future execution. Requires: API key with write scope. Max 3 pending schedules per site. Args: slug: Site identifier scheduled_at: ISO 8601 datetime (must be in the future) description: Optional...
cancel_scheduled_snapshot 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...
list_backups 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,...
create_backup 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":...
restore_backup Restore a site from a backup. WARNING: This is destructive. The current state of the site will be replaced. Runs asynchronously — may take several minutes. Requires: API key with admin scope. Args: slug: Site identifier ...
get_metrics 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":...
scale Change a site's hosting plan (upgrade or downgrade). Requires: API key with admin scope. Best practice: create a snapshot before downgrading. Args: slug: Site identifier new_plan: Target plan slug (e.g. "site_pro",...
decommission Delete a site and schedule resource cleanup (7-day grace period). WARNING: This is destructive. The site will be inaccessible immediately but data is retained for 7 days before permanent deletion. Best practice: create a snapshot...
update_account Update account profile fields (email, language, name). Requires: API key with write scope. Only provided (non-empty) fields are updated. Args: email: New email address language: Language preference — "fr" (French) or "en"...
delete_account 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...
list_subscriptions List all subscriptions with plan details, pricing, status, and site slug. Requires: API key with read scope. Returns: [{"id": "uuid", "plan_slug": "site_starter", "plan_name": "Starter", "status": "active", "billing_period":...
get_billing_portal 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...
rotate_key Atomically rotate an API key. Old key is immediately invalidated. Creates a new key with the same name, scopes, and rate limits. The new key is returned once — store it immediately. Requires: API key with write scope. Args: ...
create_api_key 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. Requires: API key with write scope. Args: name: Human-readable name for...
list_api_keys 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...", ...
revoke_api_key Revoke (deactivate) an API key. The key stops working immediately. Requires: API key with write scope. Args: key_id: UUID of the key to revoke (from list_api_keys or whoami) Returns: {"success": true, "message": "API key...
get_ssh_info 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,...
add_ssh_key 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...
list_files 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...
read_file Read the contents of a file from a site's container. Max file size: 512KB. Binary files are rejected — use the site's file manager or SSH for binary files. Requires: API key with read scope. Args: slug: Site identifier path:...
write_file Write or overwrite a text file 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 to the file content: File content...
upload_file Upload a base64-encoded file to a site's container. Use this for binary files (images, archives, fonts, etc.). For text files, prefer write_file(). Requires: API key with write scope. Args: slug: Site identifier path:...
delete_file 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:...
create_directory 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: ...
list_plugins 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", ...
list_themes List installed WordPress themes with status. Requires: API key with read scope. WordPress sites only. Args: slug: Site identifier Returns: {"themes": [{"name": "twentytwentyfour", "status": "active", "version": "1.0",...
manage_plugin Install, activate, deactivate, or delete a WordPress plugin. Requires: API key with write scope. Args: slug: Site identifier action: "install", "activate", "deactivate", or "delete" plugin: Plugin slug (e.g. "akismet",...
manage_theme Install, activate, or delete a WordPress theme. Requires: API key with write scope. Args: slug: Site identifier action: "install", "activate", or "delete" theme: Theme slug (e.g. "twentytwentyfour", "astra") Returns: ...
wp_check_updates Check for available WordPress core, plugin, and theme updates. Requires: API key with read scope. Args: slug: Site identifier Returns: {"core": {"current": "6.5", "update": "6.6"}, "plugins": [{"name": "...", "current":...
wp_update_all Update WordPress core, all plugins, and all themes. Runs all updates in sequence. May take up to 2 minutes. Requires: API key with write scope. Args: slug: Site identifier Returns: {"core": {...}, "plugins": [...], "themes": [...]}
list_cron 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"}, ...]}
add_cron 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": {...}}
delete_cron 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}
ssl_info Get SSL certificate information for a site. Returns certificate details, expiry date, and issuer. Requires: API key with read scope. Args: slug: Site identifier Returns: {"issuer": "Let's Encrypt", "domain": "example.com", ...
ssl_renew Force SSL certificate renewal via certbot. Requires: API key with write scope. Args: slug: Site identifier Returns: {"renewed": true, "expires_at": "iso8601"}
list_php_versions 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}, ...
switch_php Switch the active PHP version for a site. Requires: API key with write scope. Args: slug: Site identifier version: Target PHP version (e.g. "8.3", "8.2", "8.1") Returns: {"version": "8.3", "result": {...}}
cache_status 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}
cache_flush Flush all caches (Redis + WP object cache). Requires: API key with write scope. Args: slug: Site identifier Returns: {"flushed": true}
cache_toggle 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}
get_database_info 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,...
optimize_database Optimize WordPress database tables (reduces bloat). Requires: API key with write scope. Args: slug: Site identifier Returns: {"optimized": true, "tables_optimized": 12}
database_search_replace 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...
list_databases List all databases on a site's container. Requires: API key with read scope. Args: slug: Site identifier Returns: {"databases": ["wordpress", "app_db", ...]}
list_tables List tables in a database. Requires: API key with read scope. Args: slug: Site identifier database: Database name Returns: {"tables": [{"name": "wp_posts", "rows": 1234, "size_mb": 5.2}, ...]}
execute_query Execute a SQL query on a site's database. Supports SELECT, INSERT, UPDATE, DELETE, and DDL statements. Results are limited to 1000 rows for SELECT queries. Requires: API key with write scope. Args: slug: Site identifier ...
get_stack_info 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":...
get_resource_snapshot 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,...
cloudflare_proxy_status 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...
cloudflare_set_proxy 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...
cloudflare_purge_cache 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...
list_ftp_accounts List FTP accounts on a site. Requires: API key with read scope. Args: slug: Site identifier Returns: {"accounts": [{"username": "ftpuser", "home": "/var/www/html", "uid": 1001}]}
create_ftp_account Create an FTP account on a site. The user is chrooted to the specified directory. Password must be at least 8 characters. Username must be lowercase alphanumeric. Requires: API key with write scope. Args: slug: Site identifier ...
remove_ftp_account Remove an FTP account from a site. Requires: API key with write scope. Args: slug: Site identifier username: FTP username to remove Returns: {"removed": true, "username": "ftpuser"}
list_alert_rules 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",...
create_alert_rule 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...
delete_alert_rule 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"}
run_malware_scan Run a ClamAV malware scan on a site's container. Scans the web root (or specified path) for malware, viruses, and trojans. ClamAV is installed automatically if not present. Excludes node_modules, vendor, .git, and cache...
list_firewall_rules 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":...
add_firewall_rule 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:...
remove_firewall_rule Remove an IP firewall rule and reload Nginx. Requires: API key with write scope. Args: slug: Site identifier ip: IP address or CIDR to remove (must match exactly) Returns: {"removed": true, "ip": "1.2.3.4"}
get_logs 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,...
list_domains 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"}]
search_domain Check domain availability and get pricing. Requires: API key with read scope. Args: domain: Full domain name (e.g. "example.com", "mybiz.ca") Returns: {"domain": "example.com", "available": true, "price": {"amount":...
register_domain Register a new domain with WHOIS contact info and Stripe billing. The domain cost is charged to the user's active subscription. Free domain if plan includes free_domain_annual + annual billing + first domain. Requires: API key with...
domain_detail 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", ...
link_domain Link a domain to a hosted site. Attaches the domain to the specified site and triggers automatic DNS configuration and SSL provisioning. Requires: API key with write scope. Args: domain_name: Full domain name (e.g....
domain_settings 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:...
list_domain_dns 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...
add_domain_dns 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,...
delete_domain_dns 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,...
list_modules 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":...
toggle_module Enable or disable an AI module on a site. The module must be in the plan's available module list. Requires: API key with write scope. Args: slug: Site identifier module_name: Module to toggle. Available modules: ...

Status badge

ToolPin status badge for ai.borealhost/mcp

[![ToolPin](https://toolpin.dev/badge/ai.borealhost/mcp.svg)](https://toolpin.dev/servers/ai.borealhost/mcp)

Maintain this server? Add the badge to your README — it links your users to this live status page.