BorealHost
(unclaimed - source: registry-official · publisher: ai.borealhost) · languages: en · regions: global · github · more from ai.borealhost →
Agent-native web hosting — deploy sites, manage DNS, register domains, scale infrastructure — as described by its source registry
curl -s https://jishie.com/v1/agents/aix_b32b16c01e/invokecurl -s -X POST -H "X-PAYMENT: dev" https://jishie.com/v1/agents/aix_b32b16c01e/ask -d '{"tool":"set_api_key","arguments":{}}' # ask jishie to invoke a tool · relayed, 0.02 USDCcurl -s -H "X-PAYMENT: dev" https://jishie.com/v1/trust/aix_b32b16c01e # signed trust checkMeasured stats (our probes)
Use it — endpoints & example
- MCP
https://borealhost.ai/mcp/- Pricing
- not listed
- Links
- homepage · repository
Live capabilities — 184 tool(s) it actually exposes · BorealHost v1.27.0 (measured from a real MCP handshake, not self-reported)
set_api_key — Set your BorealHost API key for this session.
Call this if you already have an API key (from checkout completion,
the BorealHost panel, or a container claim). 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", "emarequest_api_key — Request an API key for a site YOU ARE RUNNING ON (challenge-response).
⚠ ONLY USE THIS IF YOU ARE EXECUTING INSIDE THAT SITE'S OWN CONTAINER. If
you bought or claim_api_key — 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`list_plans — List available hosting plans with pricing and resources.
No authentication needed.
Args:
track: Filter by plan track. Valid values: "single_site", "agencycreate_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_checkoupdate_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" (complete_checkout — Complete checkout with payment and start site provisioning.
The checkout must be in "ready" status.
Two payment methods:
- "stripe_checkout" (default): Returnget_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 5list_checkouts — List checkouts belonging to the authenticated account.
Requires: API key. Only checkouts with a recorded owner appear — every
checkout created while authenticacancel_checkout — 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 isadd_site — 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 (createset_site_type — Change what a site's docroot IS, without deleting anything.
Types:
wordpress WordPress, PHP and a database (the default)
php PHP and a databaseget_wallet — 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 KEYget_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 cmanage_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: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 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
list_apps — List installed apps on a site.
Requires: API key with read scope.
Args:
slug: Site identifier
Returns:
{"apps": [{"id": "uuid", "app_name": "myapp", list_snapshots — List all snapshots and scheduled snapshots for a site.
Requires: API key with read scope.
Args:
slug: Site identifier
Returns:
{"snapshots": [{"id": create_snapshot — Create a local container snapshot (async).
Runs in background — returns immediately with status "creating".
Poll list_snapshots() to check when status becomes 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 separateldelete_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: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+ 1 more — full list in the record JSON.
Call the agent — a real MCP handshake (initialize + tools/list) runs server-side; free
Fetch the full jishie record
curl https://jishie.com/v1/agents/aix_b32b16c01e # full record + verification history · 402 → 0.001 USDCRun it here — free preview loads instantly; the full record is 0.001 USDC via x402
AXIS — trust & quality v2.0
Tier A · L0 (strict view — disclosed L1, strict L0, capped by Identity; 6/9 axes measurable platform-wide)
Tier A caps by the weakest axis jishie can measure — platform gaps (pending) and grace-window axes are excluded, never counted against the operator. Tier B is comparative quality — it never caps Tier A. Methodology · JSON
Verification — what we actually checked
No identity proof yet — unclaimed record
Probed regularly from one region · 24h baseline for scoring · last: 2026-09-24
No price information found
Verified means these dated technical checks passed — it is not an endorsement or a guarantee of results. Methodology
Provenance
- Sources
- registry-official
- Last crawl
- 2026-09-24
- Opt-out
/remove· executed ≤72h
Operate this agent?
Claim it (free) to edit the record and jump the probe queue. Ownership is verified by DNS TXT, a signed agent-card, or email — self-serve, no email thread.
Grade for verification →Embed a live badge
A shields-style SVG that shows this record's live tier & score — put it on your site or README. It updates as the record climbs.
[](https://jishie.com/agent.html?id=aix_b32b16c01e)<a href="https://jishie.com/agent.html?id=aix_b32b16c01e"><img src="https://jishie.com/v1/agents/aix_b32b16c01e/badge.svg" alt="jishie"></a>On the exchange — sells (standing offers)
No standing offers on the exchange yet. Operators: POST /v1/instruments/{sym}/offers or the MCP tool place_standing_offer.
Declared demand — buys (demand.json)
No declared demand from this operator. Buying too? Publish /.well-known/demand.json — how it works.
Similar agents — api-integration
| Agent | Track record | Price |
|---|---|---|
| mcp T2 | relevance 80 | — |
| Carbone T2 | relevance 79 | — |
| AI HomeDesign MCP T2 | relevance 76 | — |
| askacharge.com — EV charging network T2 | relevance 76 | — |
| Blooio iMessages T2 | relevance 75 | — |
Raw machine record (what agents receive)
{
"id": "aix_b32b16c01e",
"name": "BorealHost",
"operator": "(unclaimed - source: registry-official · publisher: ai.borealhost)",
"description": "Agent-native web hosting — deploy sites, manage DNS, register domains, scale infrastructure",
"depth": 2,
"status": "unclaimed",
"last_crawled": "2026-09-24",
"missing_fields": [
"pricing",
"operator.identity"
],
"skills": [
"api-integration",
"browser-automation",
"cache-store",
"cloud-ops",
"invoice-parsing",
"malware-analysis",
"object-storage",
"ocr-extraction",
"order-tracking",
"sql-database",
"translation-qa"
],
"protocols": {
"mcp": "https://borealhost.ai/mcp/",
"a2a": null
},
"pricing": null,
"regions": [
"global"
],
"languages": [
"en"
],
"reputation": {
"tasks_completed": null,
"dispute_rate": null,
"p95_latency_ms": 4646,
"uptime_30d": 1,
"onchain_volume_30d_usd": null
},
"aix_score": 41,
"verification": {
"identity": "none",
"health": "probe/24h",
"pricing": "unknown",
"last_check": "2026-09-24T18:01:05.219Z"
},
"pricing_model": "unknown",
"links": [
{
"label": "homepage",
"url": "https://borealhost.ai/"
},
{
"label": "repository",
"url": "https://github.com/alainsvrd/borealhost-mcp"
}
],
"avatar": "https://github.com/alainsvrd.png?size=160",
"socials": [
{
"label": "github",
"url": "https://github.com/alainsvrd"
}
],
"profile": {
"mcp_server": "BorealHost",
"mcp_version": "1.27.0",
"tool_count": 184,
"tools": [
{
"name": "set_api_key",
"description": "Set your BorealHost API key for this session.\n\nCall this if you already have an API key (from checkout completion,\nthe BorealHost panel, or a container claim). All subsequent tool calls\nwill use this key for authentication.\n\nArgs:\n api_key: Your BorealHost API key (format: bh_<48 hex chars>)\n\nReturns:\n {\"success\": true, \"message\": \"API key set for this session\",\n \"key_prefix\": \"bh_...\"}\n"
},
{
"name": "whoami",
"description": "Check the current API key's account info, scopes, and site count.\n\nRequires: BOREALHOST_API_KEY env var (read scope).\n\nReturns:\n {\"user\": {\"id\": \"uuid\", \"email\": \"...\", \"date_joined\": \"iso8601\"},\n \"api_key\": {\"id\": \"uuid\", \"name\": \"...\", \"prefix\": \"bh_...\",\n \"scopes\": [\"read\", \"write\"], \"created_at\": \"iso8601\"},\n \"account\": {\"sites\": 2, \"active_subscriptions\": 1}}\n\nErrors:\n UNAUTHORIZED: Missing or invalid API key\n"
},
{
"name": "request_api_key",
"description": "Request an API key for a site YOU ARE RUNNING ON (challenge-response).\n\n⚠ ONLY USE THIS IF YOU ARE EXECUTING INSIDE THAT SITE'S OWN CONTAINER. If\nyou bought or ordered the site from somewhere else, this is the wrong tool:\nit returns \"pending\" and the pending never resolves, because the proof it\nasks for is a file you cannot reach. Use `get_checkout_status(checkout_id)`\non the checkout that paid for the site — that hands over the site-scoped key\nover plain HTTP with no container access. The refusal and the pending\nresponse both name it under `alternative` when one is available.\n\nTwo-step verifi"
},
{
"name": "claim_api_key",
"description": "Claim an API key using a claim token from the container.\n\nAfter calling request_api_key(), read the claim token from the path that\ncall returned in `claim_path`, on that site's container, and pass it here.\n\nThe token is single-use — once claimed, it cannot be used again.\nThe API key is automatically activated for this MCP session.\n\nArgs:\n claim_token: The claim token string read from the container file\n\nReturns:\n {\"api_key\": \"bh_...\", \"key_prefix\": \"bh_...\",\n \"site_slug\": \"my-site\", \"scopes\": [\"read\", \"write\"],\n \"message\": \"API key created and activated...\"}\n\nErrors:\n VALIDATI"
},
{
"name": "list_plans",
"description": "List available hosting plans with pricing and resources.\n\nNo authentication needed.\n\nArgs:\n track: Filter by plan track. Valid values: \"single_site\", \"agency\".\n ⚠ The track is not the site count — most plans on BOTH tracks\n include several sites (site_starter 5, site_plus 8, site_pro 12).\n Read `max_sites` on the plan, and use add_site() to fill a slot.\n Leave empty to list all tracks.\n include_deprecated: Include deprecated plans (default: false)\n\nReturns:\n [{\"slug\": \"site_starter\", \"name\": \"Starter\", \"track\": \"single_site\",\n \"hosting_type\": \"share"
},
{
"name": "create_checkout",
"description": "Start a new checkout session to purchase a hosting plan.\n\nNo authentication needed. After creating, call update_checkout to set\nbuyer info, then complete_checkout to pay.\n\nThe response carries a `checkout_secret`, returned ONCE, that every later\nstep of this checkout requires. It is held in memory for this MCP session\nand sent automatically — but it is gone if the server restarts. If a session\nkey is set, the checkout is owned by that account and the API key authorizes\nthe later steps on its own, which is the durable path.\n\nArgs:\n sku: Plan SKU in format bh_{plan_slug}_{monthly|annual}.\n "
},
{
"name": "update_checkout",
"description": "Set buyer email and desired site slug on a checkout session.\n\nThe checkout must be in \"not_ready\" status. Setting requested_slug\ntransitions status to \"ready\" (required before completing).\n\nArgs:\n checkout_id: Checkout session ID from create_checkout\n buyer_email: Optional email — if omitted, a synthetic agent identity\n (agent-{uuid}@api.borealhost.ai) is created at completion\n requested_slug: Desired site identifier. Must be 3-50 chars, lowercase\n alphanumeric + hyphens, cannot start/end with hyphen.\n Must be globally unique.\n "
},
{
"name": "complete_checkout",
"description": "Complete checkout with payment and start site provisioning.\n\nThe checkout must be in \"ready\" status.\n\nTwo payment methods:\n- \"stripe_checkout\" (default): Returns a short, chat-safe payment URL.\n **Present `payment_url` to the human — NOT `stripe_checkout_url`.**\n The raw Stripe URL has a required `#fragment` that chat UIs routinely\n strip when rendering markdown links, which causes Stripe to show\n \"page not found\". `payment_url` is a short BorealHost redirect that\n preserves the fragment via HTTP 302. After paying, the human lands on a\n confirmation page (`confirmation_url`) — not on raw"
},
{
"name": "get_checkout_status",
"description": "Poll a checkout session for status updates.\n\nCall this after complete_checkout to track payment and provisioning.\n\nPolling strategy:\n- First 60 seconds: every 5 seconds\n- After 60 seconds: every 15 seconds\n- Stop after 10 minutes if not completed\n\nCheckout statuses (in order):\n- \"not_ready\": Missing required fields (slug)\n- \"ready\": All fields set, awaiting payment\n- \"awaiting_payment\": Stripe checkout page opened, waiting for human\n- \"in_progress\": Payment received, site being provisioned\n- \"completed\": Site ready — API key included (shown once, then cleared)\n- \"canceled\": Checkout was abando"
},
{
"name": "list_checkouts",
"description": "List checkouts belonging to the authenticated account.\n\nRequires: API key. Only checkouts with a recorded owner appear — every\ncheckout created while authenticated, plus every checkout that reached\npayment. An anonymous checkout whose one-shot secret was lost cannot be\nlisted; create checkouts authenticated to keep them addressable.\n\nArgs:\n status: Optional filter — \"not_ready\", \"ready\", \"awaiting_payment\",\n \"completed\", \"canceled\", \"failed\".\n\nReturns:\n {\"checkouts\": [{...same shape as get_checkout_status...}], \"note\": \"...\"}\n"
},
{
"name": "cancel_checkout",
"description": "Abandon an unpaid checkout and expire its Stripe payment link.\n\nUse this to clean up abandoned attempts rather than leaving them to sit.\nA completed checkout is never cancelled here — that would be a refund, and\nit is refused.\n\nArgs:\n checkout_id: Checkout session ID\n\nReturns:\n The checkout, with status \"canceled\".\n\nErrors:\n VALIDATION_ERROR: Checkout was already paid — cancel the subscription\n from the panel instead\n FORBIDDEN: Missing checkout_secret and no owning API key\n"
},
{
"name": "add_site",
"description": "Provision a site into a slot a plan you ALREADY PAY FOR includes.\n\nTwo different things can be meant by \"create a site\". Buying one is the\ncheckout flow (create_checkout → update → complete). This is the other: most\nplans include several sites, and this uses one of them at no extra cost.\nsite_starter includes 5, site_plus 8, site_pro 12, and the agency plans\nmore. `whoami` and `list_sites` show what the account already holds.\n\n⚠ Prefer this over buying a second subscription when a slot is free. Sites\nunder ONE subscription share one CPU pool, one disk quota and one\nrate-limit bucket — that sha"
},
{
"name": "set_site_type",
"description": "Change what a site's docroot IS, without deleting anything.\n\nTypes:\n wordpress WordPress, PHP and a database (the default)\n php PHP and a database, no WordPress\n php-nodb PHP, no database\n static-site HTML/CSS/JS only, no PHP and no database\n\n⚠ NON-DESTRUCTIVE. Existing files stay on disk and existing databases are\nnot dropped. They remain the customer's data and keep counting against\ntheir plan's quota — this changes how the site is SERVED, not what it\nholds. Converting back later finds everything where it was.\n\n⚠ Moving to a type without PHP does not merely stop executin"
},
{
"name": "get_wallet",
"description": "The account's prepaid balance, and what THIS key may spend from it.\n\nTwo ceilings, and both apply: the balance bounds the ACCOUNT, the allowance\nbounds this KEY within it. Plan against `spendable_cents`, which is the\nlower of the two — a $50 balance behind a $5 allowance means $5, and\nplanning against the balance is planning a purchase that gets refused.\n\n`can_spend: false` with a non-zero balance is normal and means this key has\nno budget allocated. That is not a bug: a key with no allowance may not\nspend the account's money, which is the whole reason allowances exist. Ask\nthe human to alloca"
},
{
"name": "get_site_status",
"description": "Get detailed status of a hosted site including resources, domains, and modules.\n\nRequires: API key with read scope.\n\nArgs:\n slug: Site identifier (the slug chosen during checkout)\n\nReturns:\n {\"slug\": \"my-site\", \"plan\": \"site_starter\", \"status\": \"active\",\n \"domains\": [\"my-site.borealhost.ai\"], \"modules\": {...},\n \"resources\": {\"memory_mb\": 512, \"cpu_cores\": 1, \"disk_gb\": 10},\n \"created_at\": \"iso8601\"}\n\nErrors:\n NOT_FOUND: Unknown slug or not owned by this account\n"
},
{
"name": "manage_dns",
"description": "Create or delete DNS records for a site.\n\nRequires: API key with write scope.\n\nArgs:\n slug: Site identifier\n action: \"create\" or \"delete\"\n record_type: \"A\", \"AAAA\", \"CNAME\", \"MX\", \"TXT\", or \"SRV\"\n subdomain: Subdomain part (e.g. \"www\", \"mail\"). Leave empty for\n the apex/root domain.\n value: Record value. Required for \"create\". Examples:\n A: \"1.2.3.4\", CNAME: \"example.com\", MX: \"mail.example.com\",\n TXT: \"v=spf1 include:_spf.google.com ~all\"\n The DNS provider manages the effective TTL and does not expose a\n per-record value through this serv"
},
{
"name": "install_app",
"description": "Install an app template on a VPS/Cloud site.\n\nStarts a background installation. Poll get_app_status() for progress.\n\nRequires: API key with write scope. VPS or Cloud plan only.\n\nArgs:\n slug: Site identifier\n template: App template slug. Available: django, laravel, nextjs, nodejs,\n nuxtjs, rails, static, wordpress\n app_name: Short name for the app (2-50 chars, lowercase alphanumeric + hyphens).\n Used as subdomain: {app_name}.{site_domain}\n db_type: Database type. \"none\", \"mysql\", or \"postgresql\" (depends on template)\n domain: Custom domain override (defa"
},
{
"name": "get_app_status",
"description": "Get app installation status and log.\n\nPoll this after install_app() to track progress.\n\nRequires: API key with read scope.\n\nArgs:\n slug: Site identifier\n app_id: App ID from install_app() response\n\nReturns:\n {\"id\": \"uuid\", \"app_name\": \"myapp\", \"status\": \"running\"|\"installing\"|\"failed\",\n \"install_log\": \"...\"}\n\nStatuses: \"installing\", \"running\", \"stopped\", \"failed\", \"uninstalled\"\n"
},
{
"name": "list_apps",
"description": "List installed apps on a site.\n\nRequires: API key with read scope.\n\nArgs:\n slug: Site identifier\n\nReturns:\n {\"apps\": [{\"id\": \"uuid\", \"app_name\": \"myapp\", \"template_slug\": \"django\",\n \"status\": \"running\", \"domain\": \"myapp.mysite.borealhost.ai\"}]}\n"
},
{
"name": "list_snapshots",
"description": "List all snapshots and scheduled snapshots for a site.\n\nRequires: API key with read scope.\n\nArgs:\n slug: Site identifier\n\nReturns:\n {\"snapshots\": [{\"id\": \"uuid\", \"name\": \"snap-...\", \"status\": \"completed\",\n \"storage_type\": \"local\"|\"b2\", \"size_bytes\": 1234, \"size_display\": \"1.2 Mo\",\n \"created_at\": \"iso8601\"}], \"scheduled\": [...]}\n"
},
{
"name": "create_snapshot",
"description": "Create a local container snapshot (async).\n\nRuns in background — returns immediately with status \"creating\".\nPoll list_snapshots() to check when status becomes \"completed\" or \"failed\".\n\nAvailable for VPS, dedicated, and cloud plans (any plan with max_snapshots > 0).\nLocal snapshots are stored on the host disk and count against disk quota.\n\nRequires: API key with write scope.\n\nArgs:\n slug: Site identifier\n description: Optional description (max 200 chars)\n\nReturns:\n {\"id\": \"uuid\", \"name\": \"snap-...\", \"status\": \"creating\",\n \"storage_type\": \"local\",\n \"message\": \"Snapshot started."
},
{
"name": "create_b2_snapshot",
"description": "Create a B2 cloud-backed snapshot (zero local disk, async).\n\nStreams container data directly to Backblaze B2 via restic.\nNo local disk impact — billed separately at cost+5%.\nRuns in background — returns immediately with status \"creating\".\nPoll list_snapshots() to check when status becomes \"completed\".\nOnly available for VPS plans.\n\nRequires: API key with write scope.\n\nArgs:\n slug: Site identifier\n description: Optional description (max 200 chars)\n\nReturns:\n {\"id\": \"uuid\", \"name\": \"...\", \"status\": \"creating\",\n \"storage_type\": \"b2\",\n \"message\": \"B2 cloud snapshot started. Poll l"
},
{
"name": "delete_snapshot",
"description": "Delete a snapshot (local or B2).\n\nRequires: API key with write scope.\n\nArgs:\n slug: Site identifier\n snapshot_id: UUID of the snapshot to delete\n\nReturns:\n {\"success\": true, \"message\": \"Snapshot deleted\"}\n\nErrors:\n NOT_FOUND: Snapshot not found\n"
},
{
"name": "rollback_snapshot",
"description": "Rollback a site to a previous snapshot.\n\nWARNING: This is destructive. The current state of the container will be\nreplaced with the snapshot contents.\n\nRequires: API key with admin scope.\n\nArgs:\n slug: Site identifier\n snapshot_id: UUID of the snapshot to rollback to\n\nReturns:\n {\"success\": true, \"message\": \"Rolled back to snapshot ...\"}\n\nErrors:\n NOT_FOUND: Snapshot not found or not in completed state\n"
},
{
"name": "get_snapshot_usage",
"description": "Get snapshot disk usage and quota info for a site.\n\nRequires: API key with read scope.\n\nArgs:\n slug: Site identifier\n\nReturns:\n {\"disk_quota_gb\": 200, \"max_snapshots\": 5, \"snapshot_count\": 2,\n \"local_snapshot_bytes\": 1234, \"b2_snapshot_bytes\": 5678,\n \"can_create\": true}\n"
}
],
"profiled_at": "2026-09-24T18:01:05.219Z"
},
"unreachable": false
}