Skip to main content
Glama
zyfasos

cloudbase-html-mcp

by zyfasos

CloudBase HTML MCP

English | 简体中文

Publish a local HTML file to your own CloudBase hosting environment through a small STDIO MCP server.

For people who regularly generate single-page HTML with AI: provide a local file path, get a shareable URL, and use the same page ID for later updates.

Current version: 0.3.0, a local tool. It exposes six tools and does not depend on the full CloudBase plugin or CLI. It does not provide real-time collaborative editing, comments, databases, login pages, or application builds.

Getting started

You need Node.js 22+, a local STDIO MCP client, and an existing CloudBase environment with static hosting enabled and an environment management API Key. Follow Getting started to install, configure, verify the connection and publish your first page. People and agents use the same guide.

New to CloudBase? Start with account, environment, static hosting and API Key preparation. The guide explains console steps, the correct Key type and checks before starting the MCP.

Recipients of an administrator-issued API Key do not need a CloudBase login. After installing dependencies, run the local wizard in your own terminal; prefill the connection fields and enter the Key at its hidden prompt:

npm run setup -- --env-id YOUR_ENV_ID --region YOUR_REGION

Use npm run setup to enter all fields, or --connection /absolute/private/connection.json to import only envId and region. After a successful read-only check, it saves a private outside-Git file and prints secret-free JSON/TOML entries to merge into your client and reload. Existing files default to reuse; choose edit to change them. Cancellation or failed checks preserve the original. See the local wizard guide.

Configuration paths resolve directory symlinks before parent segments; checks, reads and saves use the same physical target. Git locations are rejected, and a missing directory followed by .. is never silently redirected to another file.

To have your local coding agent complete setup, copy this request:

Read docs/getting-started.md in this repository and install and register cloudbase_html in my MCP client. Reuse existing setup, have me enter the Key in the local terminal wizard, ask together for missing non-secret connection information, and verify the connection without publishing a page.

The guide also includes a URL-based request for use after source publication. This project is installed from source; it is not an npm-published package.

For implementation details, see the architecture guide (中文): component boundaries, data models, and publish/update/recovery sequence diagrams.

Related MCP server: pages-mcp

Tools

Tool

Input

Result

hosting_status

None

Read-only configuration, hosting and local management diagnostics; write/delete permissions remain untested

publish_html

localPath; update with siteId or siteUrl and expectedSha256; newPage explicitly creates another page

Write current HTML; no new cloud snapshots

get_html

Exactly one of siteId, siteUrl, localPath

Actual cloud hash/access verification, known lifecycle and pending operation

list_html

Optional lifecycle, offset (0), limit (50, maximum 100)

Current environment's locally known sites; no live cloud verification

offline_html

One selector plus query's expectedSha256

Delete current cloud HTML and strict legacy snapshots; retain local registration

online_html

siteId or siteUrl, plus user-designated localPath

Restore a locally registered offline site at its original path

The file must be an absolute .html/.htm path, nonempty valid UTF-8, at most 5 MiB, containing an HTML tag; validation is not a full parser. Only its original bytes are uploaded, without associated assets.

To update, query first, then use the same ID or URL and returned cloud hash. The fixed object remains sites/<siteId>/index.html; unchanged domain mapping means unchanged URL. v0.3 no longer writes deployments/ snapshots or returns a new versionKey. Ordinary updates do not remove old snapshots.

Already bound paths require explicit targeting: omitting the ID returns LOCAL_SITE_EXISTS, or PAGE_OFFLINE for an offline page. newPage: true cannot accompany an ID/URL; after verification it switches the path binding and retains the former site in the catalogue. An unrelated existing binding returns LOCAL_BINDING_CONFLICT.

URL selectors accept HTTPS /sites/<siteId>/ or its index.html, with optional fragment. Query strings, credentials, traversal and other paths are rejected. Complete route discovery must confirm both the supplied path and the canonical index.html path map to the current environment's hosting resource; a directory URL cannot borrow a different file route. Arbitrary URL fetching does not establish ownership. Confirmed unregistered online sites can be queried and are registered on explicit update/offline.

Lifecycle

online means current cloud HTML exists, independently of public verification. offline means deletion of the current object was confirmed. Unverified legacy records have lifecycle: null. A pending operation and cleanup completion are separate facts.

For offline, first query the hash, then explicitly invoke offline_html. It checks Bucket versioning, reserves the operation, verifies the hash, deletes current HTML, and cleans only deployments/<siteId>/<64-lowercase-hex>/index.html snapshots. Other sites and nonmatching files are preserved. Lists are paginated, deletes use batches up to 1000, and a run allows up to 100 list pages; incomplete deletion can be retried. A partially successful batch never counts as complete.

If current deletion succeeds but cleanup fails, the result reports offline with cleanup.complete: false. Retry with the original operation's expected hash. A timeout can mean deletion already happened; query before retrying. Deletion does not purge copies already held in external caches.

online_html requires local offline registration, a user-designated file, and no current cloud object. Missing local files block upload; unexpected cloud recreation is a conflict. An earlier restore that wrote matching content but timed out can be verified without uploading again. Complete pending cleanup before restoration. Already online sites use publish_html, not online_html.

Native COS Bucket versioning is separate from application snapshots. Enabled, suspended or unconfirmed versioning blocks destructive cleanup. This MCP never changes Bucket settings; stopping application snapshots does not disable native versions.

Domain selection and page registration

When CLOUDBASE_PUBLIC_BASE_URL is unset, the tool reads gateway domain routes in the current environment. It prefers enabled custom domains that point to the current static hosting resource, then considers platform default domains. It uses the longest matching path prefix for the specific page and excludes disabled routes, authentication requirements, other upstream resources, and domains that are not ready. Non-root routes must explicitly enable path transmission. Path rewrites and wildcard paths are not automatically interpreted; routes that cannot be confirmed are excluded with a reason.

An explicitly configured CLOUDBASE_PUBLIC_BASE_URL takes precedence and is not automatically replaced. If its route is known to be disabled or point to another resource, it is not treated as a valid candidate. If route lookup fails or exceeds the three-page limit, access.discovery reports the condition, and the native static hosting domain may be tried; route validity remains unknown in that case. At most three public URL candidates are checked, each requiring matching content type and hash. Results include urlSource, candidates, exclusion reasons, and actual checks. hosting_status does not verify public page content.

The object path stays fixed for a given siteId. The domain in the returned URL may change when configuration changes or a candidate becomes unavailable. An existing URL continues to address the same page as long as its domain still routes correctly. The tool does not create domains, modify routes, or switch environments.

The registry stays outside Git, defaulting to .config/cloudbase-html-mcp/pages/ under your home directory. CLOUDBASE_REGISTRY_DIR can name another absolute outside-Git directory or off. Disabling it keeps basic publish/ID query, but disables list/offline/online.

v2 stores one atomic JSON catalogue per environment/region, keyed by siteId, with paths, URL, last hash, lifecycle, verification time and unfinished operations. It stores no HTML or credentials. Files use 0600, new directories 0700. An exclusive environment lock covers writes across different paths; separate machines or registry directories are not coordinated.

localPaths contains only current selectors derived from the authoritative path bindings. sourcePaths preserves historical source locations; it is not a set of current selectors or HTML backups. After newPage, a former site's path moves out of localPaths but remains in its source history. Older v2 records are normalized on read without rewriting disk; the next locked write persists the corrected view.

If catalogue metadata is corrupt or unreadable, get_html can still query a known ID or route-confirmed URL and returns registryDiagnostic: { state: "UNAVAILABLE", code: ... }. It does not repair the file or infer an offline lifecycle from missing metadata. Path-based queries, lists and all writes remain blocked until the catalogue is repaired.

v1 files remain readable and are migrated under the first write lock. Originals remain on disk but stop being authoritative after migration. Active/pending IDs are preserved; paths for the same ID are merged, conflicting old hashes become unknown until verified. Failed new-page operations retain the original binding. Cloud success with failed local finalization returns registry.state: UPDATE_FAILED; query and retry the original operation. Corruption blocks writes. Stale locks require confirmation that no writer remains before manual removal. Do not downgrade to a v0.2 writer after migration.

Interpreting publish results

  • PUBLISHED: the public response is HTML, its SHA-256 matches, and it does not force a download.

  • PUBLISHED_PREVIEW: content verification passed, but the CloudBase default domain requires visitors to go through the platform's access notice.

  • UPLOADED_NOT_PUBLICLY_VERIFIED: cloud storage verification passed, but public verification has not. Query again; do not report the shareable URL as verified.

  • isError=true: the operation failed. Results include the stage and error code; once writes begin, they also include the page ID, write state to identify partial success.

Failures also include next_step, retryable, and maxRetries. Executable suggestions use existing tool names and suggested_args. Configuration corrections use required_config, keeping credentials out of tool arguments. Query with get_html before handling a content conflict or an uncertain write. If public verification fails, the tool suggests one later query. It does not retry indefinitely or automatically repair permissions.

CloudBase default domains are intended for development and testing and may display an intermediate page or return an attachment header. See the official documentation. For direct public sharing, configure an HTTPS custom domain already bound to the current environment. This tool will not create domains or modify routes for you.

Storage and cleanup

Environment API Key → temporary credentials → hosting/routes → current object PUT → HEAD → public GET. There is no rollback, cloud backup, full-stack build or cross-machine transaction.

Upgrade and publication do not delete old snapshots. The cleanup script defaults to a read-only manifest: explicitly name the environment and site IDs, save JSON outside Git, and inspect keys/count/bytes. Execution requires --apply plus an absolute manifest path. It checks environment, Bucket, paths and current ETags/sizes; only manifest objects are deleted. Current HTML and snapshots added later are preserved. Native versioning must be confirmed off. The script shares the local environment lock.

node --env-file=/absolute/private/cloudbase-html.env scripts/cleanup-snapshots.mjs --env-id YOUR_ENV_ID --site-id s_REPLACE_WITH_VALID_ID
node --env-file=/absolute/private/cloudbase-html.env scripts/cleanup-snapshots.mjs --env-id YOUR_ENV_ID --site-id s_REPLACE_WITH_VALID_ID --apply --manifest /absolute/private/cleanup-manifest.json

Replace the ID with s- plus 32 lowercase hex digits; repeat --site-id for multiple sites. Run the second command only after explicit approval of the saved manifest. No automatic migration cleanup is performed.

Development

npm run check
npm test
node scripts/call.mjs --config /absolute/private/cloudbase-html.env hosting_status
node scripts/call.mjs --config /absolute/private/cloudbase-html.env publish_html '{"localPath":"/absolute/path/page.html"}'

npm test runs only test/*.test.mjs; it does not automatically start the test subprocess entry point. Tests do not access cloud resources by default. scripts/call.mjs is a one-shot protocol client built with the official MCP SDK.

Test file

Behavior covered

test/config-paths.test.mjs

Physical symlink/parent paths, Git and directory protections, consistent save targets, launcher rejection and ordinary alias compatibility

test/setup.test.mjs

Hidden input, prefills, reuse/edit, failure preservation, private persistence, generated configuration and real STDIO connection with cloud doubles

test/publisher.test.mjs

Input rejection, credential refresh, publish/update conflicts, partial failures, public verification, in-process exclusion, and the production STDIO entry point's cold start

test/domains.test.mjs

Domain priority, path coverage, disabled/wrong upstream routes, pagination, permission denial, candidate limits, and public fallback

test/registry.test.mjs

Registration with real temporary files, environment isolation, reads across instances, corruption, write failures, locks, duplicate creation, and binding conflicts

test/recovery.test.mjs

Next steps for configuration, authentication, and conflicts; querying after partial writes; bounded retry suggestions

test/lifecycle.test.mjs

URL validation, catalogue migration, offline/restore, cleanup and COS adapter contracts

test/review-fixes.test.mjs

Active versus historical paths, directory/file route separation, and read-only cloud queries with unavailable metadata

test/stdio.test.mjs

Publishing, recovering the ID after restart, updating, and partial-failure recovery through real subprocess STDIO using the official SDK; cloud behavior is supplied by an independent offline test double

v0.3 has offline tests and real STDIO subprocess tests with cloud doubles. On 2026-09-09, an authorized synthetic page also passed live API Key connection, ID/path/URL queries, stable-URL update, stale-hash rejection, offline deletion (public HTTP 404), catalogue reads after restart, and restoration to the original URL. A scoped object listing found one current HTML and no project snapshots. Programmatic requests matched the HTML but carried an attachment header, and browser automation did not complete navigation. A subsequent user-supplied Chrome screenshot confirmed the original URL rendering the restored v2 page. This confirms that browser session, not first-visit behavior across all clients; a fresh GitHub installation remains unverified. Real deletion of pre-existing snapshots and failure/recovery variants were not exercised in this live run. See PROJECT.md.

This is an independent tool, not an official Tencent Cloud product. It uses the official MCP, Tencent Cloud TCB, and COS SDKs rather than implementing the MCP protocol or cloud API signing itself.

License

This project is licensed under the MIT License. Third-party dependencies retain their own licenses. This repository does not bundle dependency source code or business HTML files.

Available Tools

6 tools
get_htmlA
Read-only

按 siteId、siteUrl 或已登记 localPath(三选一)查询页面;返回云端当前哈希、大小和链接,并实际验证公网内容。本地元数据不可用时,已知 ID 或已核实 URL 仍可查询云端,返回 registryDiagnostic;路径查询及写入不降级。不会使用登记中的旧哈希替代云端查询。

ParametersJSON Schema
NameRequiredDescriptionDefault
siteIdNo已知页面 ID,格式 s- 加 32 位小写十六进制;与 siteUrl、localPath 三选一。查询当前配置环境中的页面,不接受 URL。
siteUrlNo经当前环境路由校验的 HTTPS 页面 URL;与 siteId、localPath 三选一;不接受查询参数或任意外部页面。
localPathNo曾发布并登记的本地文件绝对路径;与 siteId、siteUrl 三选一。通过当前环境/地域的本地登记找回 ID,再查询云端实际哈希;无登记时需提供已知 siteId。

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, which indicate safe read and external access. The description adds valuable behavior beyond that: it performs actual verification of public content, does not fall back to stale registry hashes, and clarifies that path queries and writes do not degrade. These specifics give the agent confidence in how the tool behaves, though it doesn't cover all edge cases.

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 three sentences, front-loaded with the core query action and return values, then adds fallback and behavioral guarantees. It is concise without redundancy, though the phrase '路径查询及写入不降级' is somewhat opaque and could be clearer, slightly affecting structure.

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?

Since there is no output schema, the description must convey return information; it mentions returning cloud hash, size, link, and registryDiagnostic in fallback scenarios. It also covers the main usage modes. However, it does not specify the full structure of the response or potential error conditions, leaving some gaps for an agent expecting a complete contract.

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 each parameter already has a detailed description. The tool description adds the mutual exclusivity rule (three identifiers, choose one) and the fallback logic for localPath when no registration exists, which goes beyond the schema. It also clarifies that siteUrl must be a validated HTTPS URL and localPath must be a registered absolute path, reinforcing schema details with additional context.

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 queries a page by one of three identifiers (siteId, siteUrl, or localPath) and returns the cloud's current hash, size, and link, plus verification of public content. The verb 'query' and resource 'page' are specific, and the return values are listed. While it doesn't name siblings explicitly, the purpose is distinct from list/publish/offline/online tools, making it easy for an agent to understand its core function.

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

Usage Guidelines3/5

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

The description provides context about fallback behavior when local metadata is unavailable, implying it can still be used with known IDs or verified URLs. However, it does not explicitly state when to use this tool versus sibling tools like list_html or hosting_status, nor does it provide exclusions. The usage context is implied rather than explicitly contrasted with alternatives.

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

hosting_statusA
Read-only

检查本地配置、API Key 换取凭据和静态托管在线状态。只读;成功不代表拥有上传权限。

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true, and the description reinforces this. It adds the valuable nuance that a successful status check does not guarantee upload permissions, providing context beyond what annotations convey. This is a useful behavioral caveat.

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 concise sentences with no fluff. It front-loads the purpose and adds the critical caveat about permissions in a compact manner.

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?

For a zero-parameter read-only status tool, the description adequately covers what it checks and its safety profile. It does not specify the return format, but given the simplicity and the readOnlyHint annotation, this is a minor gap.

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?

The tool has zero parameters, so the description carries no parameter burden. Per the baseline rule for 0-parameter tools, a score of 4 is appropriate; there is nothing to clarify.

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 checks local configuration, API key credential exchange, and static hosting online status. This is a specific verb-resource pairing that distinguishes it from sibling tools like publish_html, get_html, and offline_html which handle publishing, retrieval, and offline actions respectively.

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 implies usage for status checking by stating it is read-only and clarifying that success does not imply upload permission. This implicitly steers agents away from using it for upload operations, though it does not explicitly name alternatives or exclusions.

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

list_htmlA
Read-only

分页列出当前环境本地已知站点及最近确认状态,不访问云端核验,不是全云端站点清单。localPaths 仅含当前绑定到该站点的可操作路径;sourcePaths 是历史产物来源,不能作为当前目标绑定使用。要求启用本地目录。

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo每页数量,默认 50,上限 100。
offsetNo从 0 开始的偏移,默认 0;目录变化时分页可能变化。
lifecycleNo可选生命周期过滤;省略时包含尚未核验的旧登记。

TDQS

A4.5/5.0
Behavior5/5

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

Beyond the readOnlyHint annotation, the description discloses meaningful behavior: no cloud access, local-only scope, the distinction between current operable localPaths and historical sourcePaths, and the local-directory prerequisite. This is substantive behavioral context with no contradiction.

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 compact, front-loads the core purpose, and every sentence adds a distinct and useful constraint or clarification. There is no redundant wording.

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?

For a read-only paginated list tool with fully documented optional parameters, the description covers purpose, scope, prerequisites, exclusions, and important output field semantics. The absence of an output schema is adequately compensated by the field-level clarifications.

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

Parameters3/5

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

Schema coverage is 100%, so limit, offset, and lifecycle are already fully documented in the schema. The description adds no parameter-specific semantics beyond mentioning pagination, which the schema already covers.

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 uses a specific verb ('分页列出') and resource ('当前环境本地已知站点及最近确认状态'), and explicitly states the tool is not a full cloud-site list. This clearly differentiates it from siblings like hosting_status or publish_html.

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?

It provides clear context for local-only listing, a prerequisite ('要求启用本地目录'), and when-not guidance ('不访问云端核验,不是全云端站点清单'). However, it does not explicitly name the alternative tool to use when cloud verification or a full cloud list is needed.

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

offline_htmlA
DestructiveIdempotent

下线指定页面:永久删除当前云端 HTML 及该站点旧版快照,保留本地登记。必须用户明确要求;先 get_html 查询哈希。先核对 COS 桶版本控制,启用、暂停或无法确认时拒绝删除。下线不清除外部浏览器/CDN 缓存;清理不完整必须按返回建议恢复。

ParametersJSON Schema
NameRequiredDescriptionDefault
siteIdNo页面 ID;与其他目标选择器只能提供一个。
siteUrlNo当前环境静态托管页面 HTTPS URL;与其他目标选择器只能提供一个,允许片段,不允许查询参数。
localPathNo已登记路径,与 siteId、siteUrl 三选一;下线不读取或删除本地 HTML。
expectedSha256Yesget_html 返回的云端当前哈希;重试未完成下线时使用原操作的 expectedSha256,不删除已变化的内容。

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already mark destructiveHint=true and readOnlyHint=false, and the description adds substantial context: permanent deletion scope, retention of local registration and non-deletion of local HTML, cache non-clearing, version-control refusal, and recovery from partial cleanup via returned suggestions. No contradiction with annotations; idempotentHint is supported by retry semantics.

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?

Four brief sentences front-load the outcome and then pack safety conditions, side effects, and recovery guidance without redundancy. Every sentence contributes operational value.

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?

The description is complete for a destructive operation: prerequisites, refusal criteria, side effects, and partial-cleanup handling are all present. It loses one point only because there is no output schema and the description references '返回建议' without specifying what a successful return contains, leaving a minor ambiguity for the agent.

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 meaning beyond field names by tying expectedSha256 to the get_html result and retry behavior ('不删除已变化的内容') and explaining localPath does not read/delete local HTML. This compensates slightly 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 opens with a specific action and outcome: '下线指定页面:永久删除当前云端 HTML 及该站点旧版快照,保留本地登记', clearly distinguishing this destructive offlining operation from siblings like get_html/list_html/online_html. It states the resource (current cloud HTML and old snapshots) and the retained part (local registration).

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?

It gives explicit when-not-to-use and workflow conditions: '必须用户明确要求' and '先 get_html 查询哈希', plus refusal conditions ('启用、暂停或无法确认时拒绝删除'). It also clarifies that external caches are not cleared, managing expectations. This is stronger than a generic 'use for offlining' hint.

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

online_htmlA
DestructiveIdempotent

将已登记的离线页面重新公开上线,读取本次用户指定的 HTML 并恢复原 siteId 路径,不写快照。云端须不存在;已在线时使用 publish_html。此前上线超时但已写入相同内容可验证完成。要求启用本地目录。

ParametersJSON Schema
NameRequiredDescriptionDefault
siteIdNo页面 ID;与其他目标选择器只能提供一个。
siteUrlNo当前环境静态托管页面 HTTPS URL;与其他目标选择器只能提供一个,允许片段,不允许查询参数。
localPathYes本次用户明确指定的 .html/.htm 绝对路径,UTF-8、非空、最多 5 MiB;不静默选用旧文件。siteId、siteUrl 二选一另行提供。

TDQS

A4.8/5.0
Behavior4/5

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

The description discloses important side effects (no snapshot, no silent old file usage, restores original siteId path) and prerequisite (local directory enabled). However, despite the destructiveHint annotation, it does not explicitly describe the destructive nature of the operation beyond saying it makes the page public again.

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 dense but every sentence carries useful information: the action, the no-snapshot behavior, the online/offline condition, the timeout verification scenario, and the local directory prerequisite. There is no redundant or filler content.

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?

The description includes the main outcome, prerequisites, a specific failure-recovery scenario, and the alternative tool to use. It is sufficiently complete for an agent to decide when and how to call it, especially given the schema and annotations already cover parameter details.

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?

All three parameters are described with constraints, including mutual exclusivity between siteId and siteUrl, allowed URL fragments and no query parameters, and localPath size/encoding requirements. The description also reinforces that localPath must be user-specified and not silently chosen from old files.

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 re-publishes a registered offline page, reads the user-specified HTML, and restores the original siteId path, with a note not to write snapshots. It also distinguishes itself from publish_html by specifying the condition when publish_html should be used instead.

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?

It provides explicit conditions: cloud must not exist; if already online, use publish_html; and it mentions the prerequisite of local directory being enabled. This gives clear when-to-use and when-not-to-use guidance.

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

publish_htmlA
Destructive

将用户指定的 HTML 首次发布或覆盖在线页面,仅写当前对象,不创建快照。更新同一 URL 时先 get_html,复用 siteId 或经当前环境路由校验的 siteUrl,并传查询返回的 sha256。离线页面须显式 online_html 恢复;此操作会公开 HTML。域名映射不变时更新 URL 不变。

ParametersJSON Schema
NameRequiredDescriptionDefault
siteIdNo更新目标的页面 ID,格式 s- 加 32 位小写十六进制;从首次发布结果或 get_html 获取。更新同一 URL 时复用原 ID,并传 expectedSha256;不能与 newPage=true 同传。此参数不是 URL。
newPageNo默认 false。仅在用户明确要求另建页面时设为 true,不能同时传 siteId 或 siteUrl;新页验证成功后替换该路径的本地登记,旧云端页面保留。持续更新同一 URL 时不要设为 true。
siteUrlNo更新目标 HTTPS URL,与 siteId 二选一;只接受 /sites/<合法ID>/ 或 index.html,允许片段,不接受查询参数。必须核实当前环境路由;与 expectedSha256 配套,不能与 newPage=true 同传。
localPathYes用户指定的本地 .html/.htm 文件绝对路径;非空有效 UTF-8,最多 5 MiB。只上传此文件,关联资源不上传。更新时仍须提供新内容所在的路径。
expectedSha256No更新前 get_html 返回的云端当前 sha256,64 位小写十六进制;与 siteId 或 siteUrl 配套必填。不是新文件的哈希,也不要使用本地登记中的旧哈希;冲突后重新查询再判断。首次新建时省略。

TDQS

A4.1/5.0
Behavior4/5

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

The description adds valuable behavioral context beyond the annotations: it makes HTML public, does not create snapshots, and only writes the current object. It also details the expectedSha256 conflict-check requirement. Annotations already indicate destructiveHint=true, but the description elaborates on specific side effects and constraints, enhancing transparency.

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 a single dense paragraph that front-loads the core purpose, then covers the update workflow, offline page handling, and public exposure. It is concise without wasted words, though it could benefit from slight separation of concerns. Overall, it is well-structured and efficient.

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?

For a complex tool with 5 parameters, no output schema, and rich annotations, the description covers the key workflow prerequisites (get_html before update), the expectedSha256 requirement, the public exposure side effect, and the distinction from online_html for offline pages. It does not describe error cases or output, but given the absence of an output schema, this is acceptable. The description is sufficiently complete for an agent to call it correctly.

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

Parameters3/5

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

Schema coverage is 100%, so the schema already documents each parameter thoroughly. The description adds a workflow hint about reusing siteId or siteUrl for updates and pairing expectedSha256, but these are also reflected in the schema's parameter descriptions. It does not introduce significant new meaning beyond the schema, so a baseline 3 is appropriate.

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's purpose: to publish user-specified HTML for the first time or overwrite an existing online page. It specifies the resource (HTML) and the action (publish/overwrite), and distinguishes itself from siblings by mentioning the update workflow involving get_html and the distinction from offline_html/online_html.

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 provides explicit guidance on when to use this tool: for first-time publishing or updating the same URL. It also instructs to call get_html first when updating, reuse siteId or validated siteUrl, and pass the returned sha256. It explicitly states that offline pages must be restored with online_html, providing a clear alternative. It could be more explicit about when NOT to use this tool, but the context is strong.

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. 6 tool updatesv0.3.0
    • First observedget_html
    • First observedhosting_status
    • First observedlist_html
    • First observedoffline_html
    • First observedonline_html
    • First observedpublish_html

TDQS

A4.4/5.0

Scored across 6 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: status check, publish/update, fetch single, list multiple, take offline, bring online. No functional overlap that would confuse an agent.

Naming Consistency4/5

Five of six tools follow the verb_noun pattern (publish_html, get_html, list_html, offline_html, online_html). hosting_status is noun_noun, breaking the pattern slightly, but is still readable and understandable.

Tool Count5/5

With 6 tools covering the core lifecycle (status, publish, read, list, offline, online), the count is well-scoped and neither sparse nor excessive for the domain.

Completeness5/5

The set covers the full CRUD-like lifecycle for HTML pages including status checking, creation/update, single retrieval, listing, offline (delete), and online (restore). No obvious missing operations.

Maintenance

ActivityMaintained
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

  • A
    license
    B
    quality
    D
    maintenance
    Enables deployment of HTML content, folders, and full-stack projects to EdgeOne Pages to generate publicly accessible URLs. It utilizes EdgeOne Pages Functions and KV storage for high-performance edge delivery of web applications.
    2
    6
    MIT
  • F
    license
    Not graded
    quality
    B
    maintenance
    Enables uploading and serving static websites via MCP tools, with automatic path prefix injection for multi-file sites.
    -
  • F
    license
    Not graded
    quality
    B
    maintenance
    Enables sharing self-contained HTML files via public or access-key-protected private links. Provides MCP tools to create shares, retrieve public share metadata, and describe the service.
    3
    -

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/zyfasos/cloudbase-html-mcp'

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