Skip to main content
Glama
hostsmith

Hostsmith MCP Server

by hostsmith

@hostsmith/mcp-server

CI Latest Release Node Version License: MIT MCP

Official Model Context Protocol server for the Hostsmith hosting platform.

Static hosting for agents - give it a file, get a live URL. Claude Code shipping an HTML report. Cursor previewing a generated demo. Claude Desktop publishing a one-pager. One MCP call → public HTTPS URL in seconds. No repo, no CI, no build step. Custom domains, private sites, EU or US data residency.

Deploy a page from Claude Code and get a live URL

Why Hostsmith

  • Artifact-first. No repo, no build config - drop a file (or have the agent generate one), get a URL.

  • Built for agents. MCP-native, OAuth-scoped, structured tool descriptions agents can chain.

  • EU or US data residency. Pick where the user's data lives, architecturally - not via a checkbox.

Tools

Tool

Description

list_sites

List all sites in your account for a given data partition

get_site

Get details of a specific site

create_site

Create a new site

delete_site

Delete a site

list_domains

List available domains (shared and custom)

get_account

Get account info, subscription plan, and usage

deploy_files

Deploy inline file contents to a site

deploy_create_upload

Start a direct upload for binaries / large files

deploy_finalize

Commit a deploy started with deploy_create_upload

Related MCP server: EdgeOne Pages MCP Server

Usage

Authentication is via OAuth 2.0. Static access tokens are not supported.

Claude Desktop

Open Settings → Connectors → Add custom connector and enter:

https://mcp.hostsmith.net/mcp

Claude Desktop runs the OAuth flow in your browser to authorize the connector against your Hostsmith account.

Stdio (Claude Code, Cursor, Cline, Windsurf, Zed)

Add this entry to your MCP client's config:

{
  "mcpServers": {
    "hostsmith": {
      "command": "npx",
      "args": ["-y", "@hostsmith/mcp-server"]
    }
  }
}

The first tool call triggers an OAuth flow in your browser to authorize the server against your Hostsmith account.

Remote URL (other clients)

Any MCP client that supports remote Streamable HTTP transport can point directly at the hosted server:

{
  "mcpServers": {
    "hostsmith": {
      "url": "https://mcp.hostsmith.net/mcp"
    }
  }
}

The client handles the OAuth flow automatically - you'll be redirected to Hostsmith to authorize access.

Cursor (one-click install)

Add to Cursor

Click the badge to add the remote Hostsmith server (https://mcp.hostsmith.net/mcp) to Cursor. The first tool call triggers OAuth in your browser.

Local HTTP (self-hosted)

Run the server in HTTP mode and have your MCP client perform OAuth against it:

npx @hostsmith/mcp-server http
{
  "mcpServers": {
    "hostsmith": {
      "url": "http://localhost:3100/mcp"
    }
  }
}

Environment variables

Variable

Default

Description

HOSTSMITH_URL

https://hostsmith.net

Hostsmith app URL (OAuth endpoints).

HOSTSMITH_API_DOMAIN

-

Override the upstream API domain across both partitions. The server prepends us.api. and eu.api. to the value you set. Example: HOSTSMITH_API_DOMAIN=staging.example.com routes calls to https://us.api.staging.example.com and https://eu.api.staging.example.com. Use this to point at a staging or proxied API host.

HOSTSMITH_BASE_URL

-

Override the API base URL with a single fixed value, bypassing partition selection entirely.

PORT

3100

HTTP server port.

MCP_BASE_URL

http://localhost:$PORT

Public URL of the MCP server, used in OAuth metadata.

Network access

The MCP transport and OAuth flow run in your client's app process and need no agent-sandbox configuration - if your MCP client connected, those paths are working.

The one place sandboxed agents commonly fail is the upload PUT during deploy_create_upload + deploy_finalize: the bytes go from the agent's shell to the partition API host. From the agent terminal, allow outbound HTTPS (port 443) to:

  • us.api.hostsmith.net (for sites in the us partition)

  • eu.api.hostsmith.net (for sites in the eu partition)

Sandbox-specific snippets (Cursor sandbox.json, Claude Code settings.json, Codex config.toml, generic firewall guidance) live in the Network access docs.

Troubleshooting

  • Tool calls return 401: the OAuth session expired. Reconnect from your MCP client to re-authorize.

  • OAuth redirect loops: confirm MCP_BASE_URL matches the URL your MCP client uses to reach the server.

  • Wrong partition: tool calls accept an explicit partition arg; if you omit it, the partition is inferred from your access token.

  • Upload PUT fails (DNS, refused, proxy, timeout): the agent's shell can't reach the partition API host. See Network access.

  • Inspect the install: npx @modelcontextprotocol/inspector npx -y @hostsmith/mcp-server http to browse tools interactively.

Documentation

Deeper material lives at hostsmith.net/docs/mcp.

Contributing

See CONTRIBUTING.md (including the Releases section for the version-stamping flow). Security issues: see SECURITY.md.

License

MIT

Available Tools

9 tools
create_siteA
Destructive
Inspect

Create a new Hostsmith site and return its siteId, full URL, and configuration. Use when the user wants to publish or host new content and no suitable site already exists. After creation, deploy content with deploy_files (small inline text) or deploy_create_upload + deploy_finalize (binaries / files > ~1 MB, uploaded directly to S3). The site-resolution and confirmation flow is described in the global server instructions; the rules below are specific to this tool's parameters.

domain MUST be one of the domains returned by list_domains for this user - never invent or assume one. The selected domain must be in active status; if it isn't, surface the problem to the user instead of attempting creation. partition passed to this tool MUST match the partition of the selected domain.

Subdomain selection must respect the domain's capabilities from list_domains. To serve the bare apex, pass subdomain: "www" - only valid when the domain has enableApexDomain: true (typically custom domains the user owns). For any other subdomain, the domain must have enableSubdomains: true; shared hosting domains (e.g. *.hostsmith.link) and most custom domains have enableApexDomain: false, so a non-apex subdomain is required there. If the chosen domain doesn't support the kind of site the user asked for (apex vs subdomain), surface the conflict rather than silently picking something else.

ParametersJSON Schema
NameRequiredDescriptionDefault
domainYesParent domain for the site, MUST be one returned by `list_domains` for this user. Examples: "us.hostsmith.link", "eu.hostsmith.link", or a custom domain the user owns. Do not invent domains.
subdomainNoSubdomain prefix; auto-generated if omitted. Lowercase alphanumeric with hyphens only - no dots, uppercase, or underscores. Pass `subdomain: "www"` only when the chosen `domain` has `enableApexDomain: true` in `list_domains` (creates the canonical site at `www.<apex>` with the bare apex redirecting to it). For any other subdomain the chosen `domain` must have `enableSubdomains: true`.
partitionNoData partition for the new site. Must match the partition of the selected domain.

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations include destructiveHint=true, and the description adds context about domain status checks, subdomain rules, and partition matching. It does not contradict annotations. Minor gap: doesn't elaborate on whether creation is irreversible, but the annotation already flags destructive nature.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear paragraphs for purpose, domain, and subdomain rules. It is front-loaded with the main action. Slightly lengthy due to necessary complexity, but no wasted sentences.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (3 params, domain/subdomain constraints, partition matching), the description covers all necessary aspects. It references sibling tools for the full workflow and hints at return values despite the absence of output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but the description adds significant business logic beyond schema: domain must be from list_domains, partition must match domain, subdomain 'www' only valid when enableApexDomain is true. This enriches understanding beyond the basic schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool creates a new Hostsmith site and returns its siteId, full URL, and configuration. It uses specific verbs (create) and resource (site), and distinguishes from sibling tools like deploy_files by specifying post-creation steps.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly tells when to use: 'when the user wants to publish or host new content and no suitable site already exists.' Also provides alternatives: deploy_files for small text, deploy_create_upload + deploy_finalize for large files. Prerequisites like list_domains are clearly stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_siteA
Destructive
Inspect

Permanently delete a Hostsmith site and all of its deployed files. Destructive - only call after explicit user confirmation. The site URL becomes unreachable immediately and the content cannot be recovered. The user must pass confirm: true for the deletion to proceed; otherwise the call returns an error explaining the safeguard.

ParametersJSON Schema
NameRequiredDescriptionDefault
siteIdYesThe site ID to delete (from `list_sites` or `get_site`).
confirmNoSet to true only after the user has explicitly confirmed they want to permanently delete this site. Required safeguard - never pass true speculatively.
partitionNoData partition the site lives in. Omit to use the user's home partition.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds significant behavioral details beyond the destructiveHint annotation: the site URL becomes unreachable immediately, content cannot be recovered, and the confirm parameter must be true for the deletion to proceed. It also explains that omitting confirm returns an error.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences long, front-loaded with the key purpose and a strong warning. Every sentence is informative and earns its place. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description could mention what the response looks like on success or error. However, the behavioral information is well-covered. For a 3-parameter tool with low complexity, the description is mostly complete, lacking only a note about return values.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 100% schema coverage, baseline is 3. The description adds meaning by explaining the confirm parameter's safety purpose and that partition can be omitted for the home partition. It reinforces the confirm:true requirement, which is critical for safe usage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it permanently deletes a Hostsmith site and all deployed files, specifying the verb 'delete', the resource 'site', and the scope 'all deployed files'. It distinguishes itself from sibling tools like create_site and get_site by being the only destructive deletion tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly warns that this is destructive and should only be called after explicit user confirmation. It also explains the confirm parameter safeguard. However, it does not mention specific alternatives (e.g., what to use if only temporary removal is needed), though in the tool's context the only appropriate alternative is not using the tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

deploy_create_uploadA
Destructive
Inspect

Start a direct-to-S3 upload for binary or large files. Use this instead of deploy_files for binaries (PDF, image, video, zip) or any file > ~1 MB. The MCP server has no access to the user's filesystem and deploy_files ships content inline through Lambda (capped at ~6 MB JSON-RPC payloads); this tool returns presigned S3 PUT URLs so the file bytes flow directly from your environment to S3, never through the MCP server.

Bundle into a zip first when: the upload contains more than 3 files OR any file is larger than ~1 MB. The fileWorker auto-extracts a single-zip upload after promotion, so subdirectories are preserved end-to-end and you avoid one PUT round-trip per file. Skip zipping only for the trivial single-small-file case (e.g. one HTML).

Bash bundle-and-deploy template (the agent should adapt fileNames and the cleanup prompt): TMP=$(mktemp -d) zip -r "$TMP/site.zip" index.html styles.css img/ # add every file/dir to deploy SIZE=$(stat -c%s "$TMP/site.zip" 2>/dev/null || stat -f%z "$TMP/site.zip") # 1. call deploy_create_upload with { siteId, files: [{ fileName: "site.zip", fileSize: $SIZE }] } # 2. PUT $TMP/site.zip to the returned URL(s) per the protocol below, capturing ETag # 3. call deploy_finalize with { siteId, versionId, completions: [...] } # 4. ASK THE USER: "Deploy succeeded. Remove temp folder $TMP? [y/N]" # Only run rm -rf "$TMP" after explicit confirmation; otherwise leave it for them to inspect.

Three-step protocol:

  1. Call this tool with { siteId, files: [{ fileName, fileSize }] }. Receive { versionId, files: { [fileName]: { uploadId, key, partUploadUrls: [{ part, url }], partSize, expiresAt } } }.

  2. For each file, slice the bytes into chunks of partSize and PUT each chunk to its partUploadUrls[i].url. Capture the ETag response header from every PUT - you will need it for finalize.

    Single-part (small file, one URL): curl -D - -X PUT --data-binary @file.pdf "$URL", then grep the response headers for ETag.

    Multi-part with dd (no temp files; reads each chunk in place): count=$(jq ".files["large.zip"].partUploadUrls | length" envelope.json) for i in $(seq 0 $((count-1))); do url=$(jq -r ".files["large.zip"].partUploadUrls[$i].url" envelope.json) etag=$(dd if=large.zip bs=5M skip=$i count=1 status=none
    | curl -sS -D - -X PUT --data-binary @- "$url"
    | awk -F': ' 'tolower($1)=="etag"{print $2}' | tr -d '\r') echo "{ "PartNumber": $((i+1)), "ETag": $etag }" >> parts.json done

    Multi-part in Python - prefer this over dd for files > ~50 MB (parallel PUTs, no temp files, cleaner error handling): import json, requests from concurrent.futures import ThreadPoolExecutor env = json.load(open("envelope.json")) info = env["files"]["large.zip"] part_size = info["partSize"] def upload_part(p): with open("large.zip", "rb") as f: # own handle per thread f.seek((p["part"] - 1) * part_size) r = requests.put(p["url"], data=f.read(part_size)) r.raise_for_status() return {"PartNumber": p["part"], "ETag": r.headers["ETag"]} with ThreadPoolExecutor(max_workers=5) as ex: # cap concurrency at 5 parts = list(ex.map(upload_part, info["partUploadUrls"]))

  3. Call deploy_finalize with { siteId, versionId, completions: [{ uploadId, key, parts: [{ ETag, PartNumber }] }] } for every multi-part file. Single-part uploads (uploadId is empty in the start response) need no completion entry.

The site must already exist - call create_site first if you do not have a siteId. Deploying overwrites existing content; confirm overwrite with the user first.

Anti-patterns - never do these to bypass a blocked or unavailable upload path:

  • Do NOT base64-embed, data-URI, or otherwise inline binary content (images, PDFs, video, fonts, zips) into HTML/CSS/JSON or any other deployed file. Inlining bloats the page, breaks browser caching, reships the bytes on every redeploy, and hides the real environment problem from the user.

  • Do NOT fall back to deploy_files for a binary that was meant for deploy_create_upload - the payload exceeds deploy_files' cap and the workaround is itself an anti-pattern.

  • Do NOT silently downscale, recompress, or otherwise mutate the user's file to fit a smaller path - ask first. When the upload path is unavailable, surface it to the user using the escalation order below.

Recovery escalation order when a PUT fails with a network/DNS error (connection refused, name resolution failure, timeout, sandbox-denied, proxy 403/407) OR your host environment has no HTTP-PUT capability at all (no bash/curl, no Python requests, no fetch). Do NOT retry blindly - a sandbox denial does not resolve on its own.

  1. Ask the user to enable egress (preferred fix). This is the cheapest option and unblocks all future uploads. Surface the exact sandbox configuration below and wait for the user to confirm before retrying. Most users can flip this setting in seconds; do not skip to step 2 without asking.

  2. If the user declines, cannot change the sandbox, or has no HTTP-PUT capability in-environment, present the failing presigned URL(s) verbatim and ask them to upload the file themselves (curl one-liner, browser, or any HTTP client they have). Provide a copy-pasteable command. Call deploy_finalize only after the user confirms each PUT returned 200 with an ETag (they will need to share the ETags back for multi-part uploads).

  3. Never route around the failure by base64-inlining the file into another deploy, recompressing, or falling back to deploy_files. See anti-patterns above.

Egress allowlist instructions for step 1:

  1. Read the failing URL's hostname. It will be either us.api.hostsmith.net, eu.api.hostsmith.net, or an S3 endpoint (copy verbatim from the failing URL).

  2. Infer the sandbox and give the user the exact configuration snippet:

    • Cursor (signal: cwd contains .cursor/, or CURSOR_* env vars) - edit ~/.cursor/sandbox.json (user scope) or <repo>/.cursor/sandbox.json (repo scope):

      { "networkPolicy": { "allow": ["us.api.hostsmith.net", "eu.api.hostsmith.net"] } }

      Reload Cursor.

    • Claude Code (signal: CLAUDE_CODE_* env vars, or ~/.claude/ settings present) - edit ~/.claude/settings.json:

      { "sandbox": { "enabled": true, "network": { "allowedDomains": ["us.api.hostsmith.net", "eu.api.hostsmith.net"] } } }

      If deniedDomains lists a matching host, remove it first - deny takes precedence.

    • Codex CLI (signal: ~/.codex/ settings, CODEX_* env vars) - edit ~/.codex/config.toml:

      [sandbox_workspace_write]
      network_access = true

      Codex has no per-host allowlist at this layer - this enables network for workspace-write mode globally. Risk is bounded by the upload token in the URL.

    • Unknown sandbox - tell the user: allow outbound HTTPS (port 443) to us.api.hostsmith.net and eu.api.hostsmith.net (and the failing S3 host if the URL points at S3) in whatever firewall/proxy they control. If a corporate HTTP proxy is in play, ensure CONNECT to those hostnames is permitted, or set NO_PROXY for direct routing.

  3. After the user confirms the change, retry the failed PUT. Tokens in the URL (ut=... for partition-host URLs, X-Amz-Signature for S3 URLs) remain valid for 1 hour from issuance, so re-running the same URL within that window works without re-calling deploy_create_upload.

ParametersJSON Schema
NameRequiredDescriptionDefault
siteIdYesThe site ID to deploy to (from `list_sites` or `create_site`).
filesYesFiles to upload. Most user requests are a single file.
partitionNoData partition the site lives in. Omit to use the user's home partition.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description details the protocol, return values, required preconditions (site must exist), and overwriting behavior, adding context beyond the destructiveHint annotation. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is excessively long, containing multi-step protocols, code examples, and recovery instructions. While well-structured, it is not concise; many sentences could be external documentation, making it less effective as a tool description.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite the lack of an output schema, the description fully covers the tool's purpose, usage, prerequisites, edge cases, error recovery, and even sandbox-specific configurations, making it contextually complete for the tool's complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds value by explaining how to structure `files` with `fileName` and `fileSize`, and by showing usage in a template, providing practical parameter semantics beyond schema definitions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool starts a direct-to-S3 upload for binary or large files, distinguishes it from `deploy_files` which handles inline content with payload caps, and specifies the resource and action.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use this tool (binaries, large files) versus alternatives (`deploy_files`), provides conditions for zipping files, and includes anti-patterns and a recovery escalation order, offering complete usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

deploy_filesA
Destructive
Inspect

Publish in-memory file contents to a Hostsmith site without writing to disk. Use when you have just generated content (an HTML page, a report, JSON data) and the user wants it live. Returns the deployment version and status; call get_site afterwards if you need the public URL to share. The site must already exist - call create_site first if you do not have a siteId. Deploying to a site that already has content overwrites it - confirm overwrite with the user first.

Anti-pattern: do not use this tool to ship binaries (images, PDFs, video, fonts, zips) by base64-embedding or data-URI inlining them into HTML/CSS/JSON. Binaries belong on deploy_create_upload. If that path is blocked by sandbox/network, escalate to the user (ask them to enable egress, or offer manual upload of the presigned URL) - never reach for this tool as a workaround. Inlining bloats pages, breaks browser caching, and reships the bytes on every deploy.

ParametersJSON Schema
NameRequiredDescriptionDefault
siteIdYesThe site ID to deploy to (from `list_sites` or `create_site`).
filesYesFiles to deploy. For an HTML site, include an `index.html` as the entry point; otherwise any single file (PDF, image, JSON, etc.) works on its own.
partitionNoData partition the site lives in. Omit to use the user's home partition.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations have destructiveHint=true; description confirms overwrite behavior and adds 'confirm with user'. No contradictions. Also discloses that tool returns version and status, and does not write to disk.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured with two clear paragraphs. First paragraph covers usage and result; second covers anti-pattern. Slightly verbose but every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers prerequisites, output (version/status), post-action (get_site for URL), destructive behavior, and anti-patterns. No output schema but description compensates.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema already covers all parameters (100% coverage). Description adds extra guidance: for files array, suggests index.html for HTML sites and clarifies single file use; for partition, explains default behavior.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states verb 'publish' and resource 'file contents to a Hostsmith site'. Distinguishes from sibling `deploy_create_upload` by explicitly excluding binaries. Also sets context: 'without writing to disk' and 'when you have just generated content'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use: after generating content and user wants it live. Prerequisites: site must exist (use create_site). Warning about overwriting with confirmation. Anti-pattern section clearly says when NOT to use and directs to `deploy_create_upload` for binaries, including escalation path.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

deploy_finalizeA
Destructive
Inspect

Commit a deploy started with deploy_create_upload. Pass the versionId from the start response and a completions array containing the agent-collected ETags for each multi-part file (single-part uploads - those whose start response had an empty uploadId - do not need a completion entry). Returns the live site URL on success. The site must belong to the authenticated user; bearer-token auth is re-validated server-side, so holding presigned URLs alone does not let an unrelated caller finalize.

ParametersJSON Schema
NameRequiredDescriptionDefault
siteIdYesThe site ID being deployed to (must match the start call).
versionIdYesThe `versionId` returned by `deploy_create_upload`.
completionsNoCompletions for multi-part uploads. Omit or pass an empty array if every file was single-part.
partitionNoData partition the site lives in. Omit to use the user's home partition.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses destructive nature (mutation) as per annotation, adds return value (live site URL), and explains auth re-validation and security implications. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Concise single paragraph with front-loaded purpose. Could be slightly more structured but remains efficient and informative.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers all necessary aspects: return value, auth, partition parameter, and completions logic. No output schema, but return value is described. Complete for the tool's complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline 3. Description adds context beyond schema, such as the relationship between versionId and start response, and that single-part uploads need no completion entry.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states it commits a deploy started with deploy_create_upload, specifying the verb and resource. It distinguishes from siblings by referencing the starting tool and noting that single-part uploads need no completions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear instructions on parameters (versionId, completions) and when to omit completions. Explains auth requirements but does not explicitly state when to avoid using this tool or mention alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_accountA
Read-only
Inspect

Get the user's account: organization details (orgId, orgName), the calling user's home partition under user.homePartition, current subscription plan with its limits (max sites, max domains, storage, bandwidth), and current usage counts. Use to check how much headroom the user has before creating new sites or to confirm plan-tier features. Usage is summed across all partitions.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=true. Description adds behavioral detail: it confirms no modification, lists returned data fields, and notes usage is summed across partitions, exceeding annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no wasted words. First sentence lists fields returned, second gives use case. Structure is front-loaded and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite no output schema, description thoroughly explains return fields and provides usage context. With zero parameters and no contradictions, the description is fully adequate for agent decision-making.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters defined, so schema provides full coverage (100%). Description does not need to add parameter details, earning baseline score of 4 for zero-parameter tools.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves the user's account with specific fields (org details, home partition, subscription plan, usage), and distinguishes it from sibling tools like create_site and delete_site by being a read-only information endpoint.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly advises when to use: 'to check how much headroom the user has before creating new sites or to confirm plan-tier features,' providing clear guidance for the AI agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_siteA
Read-only
Inspect

Get full details of a specific Hostsmith site by ID, including its public URL (https://<subdomain>.<domain>), current deployment status, and configuration. Use after list_sites to inspect a single site, or after deploy_files / deploy_finalize to confirm the site is live and grab the URL to share with the user. Defaults to the user's home partition; pass partition explicitly when the site lives in a different one (visible in list_sites output).

ParametersJSON Schema
NameRequiredDescriptionDefault
siteIdYesThe site ID returned by `list_sites` or `create_site`.
partitionNoData partition the site lives in (visible in list_sites output). Omit to use the user's home partition.

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true. The description adds context by detailing the return information (URL, status, config) and the partition behavior. This is sufficient and adds value beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two efficient sentences. First sentence states purpose and output. Second provides usage guidance and partition detail. No wasted words, front-loaded with critical info.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description sufficiently explains what is returned (URL, status, configuration). It covers partition nuance and refers to sibling tools. Complete for a simple read-only tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with clear descriptions. The description adds value by explaining the partition default behavior and referencing that siteId comes from list_sites or create_site, which aids in parameter understanding beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('Get full details'), the resource ('a specific Hostsmith site by ID'), and lists the specific outputs (public URL, deployment status, configuration). It distinguishes itself from siblings by specifying when to use it (after list_sites or deploy operations).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly tells when to use: after `list_sites` to inspect a single site, or after `deploy_files`/`deploy_finalize` to confirm the site is live and get the URL. Also explains partition default behavior and when to override, referencing sibling tool output.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_domainsA
Read-only
Inspect

List domains the user can host sites under. Returns shared hosting domains (e.g. hostsmith.link, available to everyone) and custom domains owned by the user's organization. Use this to pick a domain value before calling create_site. By default queries all partitions and merges; pass partition or shared to narrow.

ParametersJSON Schema
NameRequiredDescriptionDefault
partitionNoFilter by data partition. Omit to query all partitions.
sharedNoFilter by domain type: true for shared only, false for custom only. Omit for both.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=true. Description adds valuable details: queries all partitions by default, merges results, and users can narrow with partition or shared. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no wasted words. Purpose and usage are front-loaded. Ideal conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Simple tool with two optional parameters; description covers domain types, default behavior, and reference to create_site. Annotations support safety. Complete for the given context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and description adds context by explaining default behavior and how to use partition and shared parameters to narrow results. Baseline 3 is exceeded due to added value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists domains for hosting sites, distinguishing between shared and custom domains. It is specific and distinct from sibling tools like create_site.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly advises using this tool to select a domain before create_site, and explains default behavior and parameter use for narrowing results. Lacks mention of alternatives but still provides clear context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_sitesA
Read-only
Inspect

List Hostsmith sites in the user's account. Returns each site's siteId, subdomain, domain, and current status - feed siteId into get_site, deploy_files, deploy_create_upload, or delete_site. This is the source of truth for "does the user already have a site at FQDN X" - call it before any create/deploy/delete to resolve the user's site reference. By default queries all data partitions and merges the results; pass partition: "us" or "eu" to limit the query.

ParametersJSON Schema
NameRequiredDescriptionDefault
partitionNoFilter by data partition. Omit to query all partitions.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=true. Description adds output fields and partition query behavior (default merge, optional filter), providing useful behavioral context beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Very concise, four sentences with no waste. Front-loaded with purpose, each sentence adds value. Excellent structure.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers purpose, output content, usage context, partition behavior, and relationship to sibling tools. No missing information for a simple list tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. Description adds natural language about default merging and optional partition, enhancing understanding of the parameter's effect.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states it lists Hostsmith sites with specific verb and resource. Distinguishes from siblings by mentioning feed siteId into other tools and calls it the source of truth.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says to call before any create/deploy/delete to resolve site references, providing clear context. Does not explicitly state when not to use but implies strong contextual need.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 9 tool updatesv1.5.2
    • First observedcreate_site
    • First observeddelete_site
    • First observeddeploy_create_upload
    • First observeddeploy_files
    • First observeddeploy_finalize
    • First observedget_account
    • First observedget_site
    • First observedlist_domains
    • First observedlist_sites

TDQS

A4.6/5.0
Disambiguation5/5

Each tool serves a distinct purpose: site CRUD, two deployment methods for different file types, deployment finalization, account info, and listings for domains and sites. No overlap in functionality, and the descriptions clearly differentiate deploy_create_upload (binary/large files) from deploy_files (inline text).

Naming Consistency5/5

Tool names follow a consistent verb_noun pattern (create_site, delete_site, get_account, etc.) with a clear deploy_ prefix for deployment operations. All names are snake_case and predictable.

Tool Count5/5

With 9 tools, the set is well-scoped for a hosting server. It covers site management, deployment workflows, account info, and domain listing without being excessive or sparse.

Completeness3/5

The tool surface covers core workflows (create, deploy, delete, list) but lacks update operations for sites and domains. There is no tool to modify site configuration or manage domain records beyond listing, which are notable gaps.

Maintenance

ActivityInactive
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/hostsmith/mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server