# io.github.hostsmith/mcp-server (npm · @hostsmith/mcp-server)

Deploy static sites on Hostsmith - give it a file, get a live HTTPS URL. EU/US residency.

- Trust score: 69/100 (medium)
- Change this week: +28
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

- remote · `mcp.hostsmith.net`: 36/100, [markdown](https://verifymcp.io/servers/hostsmith-mcp-server/mcp.md), [page](https://verifymcp.io/servers/hostsmith-mcp-server/mcp)
- npm · `@hostsmith/mcp-server`: 69/100 (this document), [markdown](https://verifymcp.io/servers/hostsmith-mcp-server/hostsmith-mcp-server.md), [page](https://verifymcp.io/servers/hostsmith-mcp-server/hostsmith-mcp-server)

## Channel facts

- Registry: `npm`
- Package: `@hostsmith/mcp-server`
- Version: `1.5.2`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-03.

- **Supply Chain Security**: 78/100
  - No malware found by supply-chain analysis.
  - CVE check failed: a known medium-severity CVE affects @hono/node-server 1.19.17, a direct dependency. A fixed version is available.
  - No install/post-install scripts declared.
  - Only part of the dependency tree could be resolved (97 of 101), so this covers what we could see, not the whole tree.
- **Provenance & Transparency**: 97/100
  - Source repository is publicly reachable at the declared URL.
  - Cryptographically verified build provenance (signed, bound to hostsmith/mcp-server).
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 78 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 55/100
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 4753 tokens (~528/item across 9 items; 9 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 0/100
  - Stability not yet verified: not enough scan history yet (needs a 30-day window).
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

**Unverified: 1 category.** A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.

## Install

### Claude

```bash
claude mcp add hostsmith-mcp-server -- npx -y @hostsmith/mcp-server
```

### Codex

```bash
codex mcp add hostsmith-mcp-server -- npx -y @hostsmith/mcp-server
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "hostsmith-mcp-server": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "@hostsmith/mcp-server"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add hostsmith-mcp-server --command npx --arg -y --arg @hostsmith/mcp-server
```

### Hermes

```yaml
mcp_servers:
  hostsmith-mcp-server:
    command: "npx"
    args: ["-y", "@hostsmith/mcp-server"]
```

### Other

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

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-03 (score 69, +49)

- [security regression] GHSA-frvp-7c67-39w9 affects this package: medium
- [security regression] Known CVEs: unverified → fail
- [security improvement] Install scripts: unverified → pass
- [security improvement] Provenance: unverified → pass
- [security] Stability: Stability not yet verified: not enough scan history yet (needs a 30-day window).
- [security] The attested source repository moved: hostsmith/mcp-server
- [functional regression] Security disclosure: unverified → fail
- [functional improvement] Schema quality: unverified → excellent
- [functional improvement] Tool coverage: unverified → 100
- [functional improvement] License: unverified → pass
- [functional improvement] Dependency health: unverified → partial
- [functional improvement] Maintenance: unverified → pass
- [functional improvement] MCP protocol: unverified → pass
- [functional] Licence: MIT

### 2026-08-02 (score 20, −11)

- [functional regression] Tool coverage: 100 → unverified
- [functional regression] Security disclosure: fail → unverified
- [functional] First check of Schema quality: unverified

### 2026-08-01 (score 31, +15)

- [security improvement] Malware scan: unverified → pass

### 2026-07-31 (score 16, −25)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-27 (score 41)

First indexed and scored.

## MCP tools (9)

### `list_sites` (~141 tokens)

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.

Input parameters:

- `partition` (string): Filter by data partition. Omit to query all partitions.

### `list_domains` (~121 tokens)

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.

Input parameters:

- `partition` (string): Filter by data partition. Omit to query all partitions.
- `shared` (boolean): Filter by domain type: true for shared only, false for custom only. Omit for both.

### `get_account` (~85 tokens)

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.

### `get_site` (~159 tokens)

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).

Input parameters:

- `partition` (string): Data partition the site lives in (visible in list_sites output). Omit to use the user's home partition.
- `siteId` (string, required): The site ID returned by `list_sites` or `create_site`.

### `create_site` (~492 tokens)

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.

Input parameters:

- `domain` (string, required): Parent 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.
- `partition` (string): Data partition for the new site. Must match the partition of the selected domain.
- `subdomain` (string): Subdomain 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…

### `delete_site` (~152 tokens)

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.

Input parameters:

- `confirm` (boolean): Set to true only after the user has explicitly confirmed they want to permanently delete this site. Required safeguard - never pass true speculatively.
- `partition` (string): Data partition the site lives in. Omit to use the user's home partition.
- `siteId` (string, required): The site ID to delete (from `list_sites` or `get_site`).

### `deploy_files` (~315 tokens)

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.

Input parameters:

- `files` (array, required): Files 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.
- `partition` (string): Data partition the site lives in. Omit to use the user's home partition.
- `siteId` (string, required): The site ID to deploy to (from `list_sites` or `create_site`).

### `deploy_create_upload` (~2041 tokens)

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 th…

Input parameters:

- `files` (array, required): Files to upload. Most user requests are a single file.
- `partition` (string): Data partition the site lives in. Omit to use the user's home partition.
- `siteId` (string, required): The site ID to deploy to (from `list_sites` or `create_site`).

### `deploy_finalize` (~203 tokens)

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.

Input parameters:

- `completions` (array): Completions for multi-part uploads. Omit or pass an empty array if every file was single-part.
- `partition` (string): Data partition the site lives in. Omit to use the user's home partition.
- `siteId` (string, required): The site ID being deployed to (must match the start call).
- `versionId` (string, required): The `versionId` returned by `deploy_create_upload`.

## Diagnostics

Captured diagnostic sections: Provenance, Vulnerabilities, Dependencies. The full working is on the page: https://verifymcp.io/servers/hostsmith-mcp-server/hostsmith-mcp-server#diagnostics

## Score history

- 2026-08-03: 69
- 2026-08-02: 20
- 2026-08-01: 31
- 2026-07-31: 16
- 2026-07-30: 41
- 2026-07-28: 41
- 2026-07-27: 41

## Links

- npm package: https://www.npmjs.com/package/@hostsmith/mcp-server
- Socket report: https://socket.dev/npm/package/@hostsmith/mcp-server
- Repository: https://github.com/hostsmith/mcp-server
- Website: https://hostsmith.net/docs/mcp/quick-start/
- Changelog RSS feed: https://verifymcp.io/servers/hostsmith-mcp-server/hostsmith-mcp-server/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/hostsmith-mcp-server/hostsmith-mcp-server/changelog.json
- HTML version of this page: https://verifymcp.io/servers/hostsmith-mcp-server/hostsmith-mcp-server
