Skip to main content
Glama

Server Details

Publish permanent static sites via MCP/REST. 23 tools. No account or claim link.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Uptime
100.0% over 21 days
Last Tested
Transport
Streamable HTTP · MCP 2025-06-18
URL

TDQS

A3.7/5.0

Scored across 23 tools

Disambiguation4/5

Most tools map to a distinct resource+action (sites, versions, domains, webhooks, tokens, analytics). The main overlap is the upload surface: plan_upload + finalize_upload (two-step large-file path) versus publish_site/update_site (one-shot publish), and publish_site with merge overlaps update_site. Descriptions do clarify the split, so confusion is limited but real.

Naming Consistency5/5

All 23 tools follow a strict verb_noun snake_case pattern (add_domain, create_webhook, delete_site, get_manifest, list_domains, publish_site, rotate_token). No mixed conventions or camelCase deviations.

Tool Count4/5

23 tools is on the heavier side but spans a genuinely broad domain (sites, versions, uploads, domains, webhooks, tokens, analytics, billing). Each tool appears to earn its place, with only a slight lean toward over-scoping in the upload/versioning area.

Completeness4/5

Covers the full lifecycle well: publish/update/delete, versioning/restore, domain add/remove/status/list, webhooks CRUD, token rotate/revoke, analytics, and plan upgrade. Minor gaps like no webhook get/detail or domain update are workable around, but the surface is close to complete for the stated purpose.

Available Tools

23 tools
add_domainAttach a custom domainA
DestructiveIdempotent
Inspect

Attaches a hostname to a slug owned by the token and returns the DNS records to create: a CNAME for a subdomain, an A record or an ALIAS record for an apex (one of those, not both), and every TXT record. Inputs: slug, domain, and token. Status starts at pending_dns until DNS and the certificate are ready. Free allows 1 hostname, Hobby 3, Pro 20. deed.page names are rejected.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesSlug you own.
tokenNoBearer token returned by your first publish (deed_tok_...). Optional if the MCP client sends Authorization: Bearer.
domainYesHostname to attach, such as docs.example.com or example.com. No scheme or path.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare non-readOnly, destructive, idempotent, and openWorld, so the description adds value on top: it discloses the post-call state ('Status starts at pending_dns until DNS and the certificate are ready'), the exact artifacts returned, and quota limits. It does not explain why destructiveHint is set for an add operation (e.g. whether an existing hostname is overwritten), which is a minor gap.

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?

Front-loaded with the action and its return value, then inputs, then state, quotas, and the rejection rule. Every sentence carries information, though the run-on DNS-record clause and the quoted input list make it slightly denser than necessary.

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 mutating tool with no output schema, the description covers the important return values (CNAME/A/ALIAS/TXT records), the resulting state (pending_dns), quota enforcement, and input rejection. Only the reason behind destructiveHint=true remains undisclosed.

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 description coverage is 100%, so all three parameters (slug, token, domain) are already documented with format guidance and token semantics in the schema itself. The description only restates the input list, adding no format or edge-case meaning beyond what the schema provides.

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?

States a specific verb and resource ('Attaches a hostname to a slug') and immediately clarifies the output (DNS records to create, split by subdomain vs apex). The reader can distinguish this from siblings like remove_domain, list_domains, and domain_status without opening any schema.

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?

Gives concrete usage constraints: token sourcing, plan quotas (Free 1, Hobby 3, Pro 20), and an exclusion ('deed.page names are rejected'). It does not, however, explicitly route the agent to alternatives such as domain_status or remove_domain when the domain already exists.

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

create_webhookRegister a webhookA
Destructive
Inspect

Registers an http or https URL for the events site.published, site.version_restored, site.deleted, site.taken_down, domain.active, and report.received. Inputs: url, optional events, and token. Returns the webhook id and an HMAC secret once. Free allows 1 webhook, Hobby 5, Pro 20. Private, internal, and localhost targets are rejected. Delivery is best-effort, with up to 3 attempts. API documentation: https://deed.page/docs.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesPublic http or https URL on port 80 or 443.
tokenNoBearer token returned by your first publish (deed_tok_...). Optional if the MCP client sends Authorization: Bearer.
eventsNoEvents to send. Omit for all of them.

TDQS

A4.1/5.0
Behavior5/5

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

Beyond the annotations (readOnlyHint=false, destructiveHint=true, idempotentHint=false, openWorldHint=true), the description discloses genuinely valuable behavior: the HMAC secret is returned only once, deliveries are best-effort with up to 3 attempts, and private/internal/localhost targets are rejected. These are non-obvious operational facts an agent could not infer from the structured fields.

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 purpose is front-loaded and the body is dense with specific facts (limits, security rejects, retry count) rather than filler. The "Inputs: url, optional events, and token" clause is mild redundancy against a 100%-documented schema, keeping it just under a 5.

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?

With no output schema, the description steps in and states what comes back (webhook id and one-time HMAC secret), and it covers quotas, target restrictions, and delivery guarantees. An agent has everything needed to call this correctly and to set expectations about the response.

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 description coverage is 100%, and the schema documents url constraints, the token fallback via Authorization header, and the event enum more precisely than the description does. The description's "Inputs: url, optional events, and token" largely restates the schema, so the baseline 3 is appropriate.

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

Purpose4/5

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

The description opens with a precise verb+resource ("Registers an http or https URL") and enumerates the exact event types the webhook subscribes to, so the agent knows exactly what this tool creates. It does not explicitly name or contrast with the sibling webhooks tools (list_webhooks, delete_webhook), so it falls one notch short of full sibling differentiation.

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 gives real selection context: tier quotas (Free 1, Hobby 5, Pro 20), the rejection of private/internal/localhost targets, and delivery semantics, all of which inform whether the call is appropriate. It stops short of naming alternatives such as list_webhooks or delete_webhook for managing webhooks afterwards, so usage guidance is clear but not bounded by explicit exclusions.

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

delete_siteDelete a siteA
DestructiveIdempotent
Inspect

Permanently removes a slug owned by the token and detaches its custom hostnames. The slug becomes available again. Inputs: slug and token.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesSlug you own.
tokenNoBearer token returned by your first publish (deed_tok_...). Optional if the MCP client sends Authorization: Bearer.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and idempotentHint=true, so the bar is lower. The description goes beyond them by disclosing the concrete consequence: custom hostnames are detached and the slug becomes available again for reuse.

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?

Front-loaded with the primary action and consequence in two tight sentences. The trailing 'Inputs: slug and token' duplicates the fully-covered schema and is the one sentence that doesn't earn its place.

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 destructive tool with no output schema, the description covers the key consequence (irreversibility and hostname detachment), and annotations carry the safety profile. Minor gaps remain around error/return behavior, but nothing critical is missing.

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 description coverage is 100%, so both slug and token are already documented in the schema (including the deed_tok_ prefix and Authorization fallback). The description's 'Inputs: slug and token' merely restates them without adding meaning, so the baseline 3 applies.

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?

States a specific verb (permanently removes) and resource (a slug owned by the token), and even names the side effect (detaching custom hostnames). An agent can immediately distinguish this from get_site, update_site, or restore_version.

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 permanence is implied by 'Permanently removes,' which signals when this is appropriate versus the reversible restore_version. However, no explicit when-to-use guidance or named alternative is given, leaving the agent to infer that deletion should precede restore_version.

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

delete_webhookDelete a webhookC
DestructiveIdempotent
Inspect

Deletes one webhook. Inputs: id (whk_...) and token.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesWebhook id (whk_...).
tokenNoBearer token returned by your first publish (deed_tok_...). Optional if the MCP client sends Authorization: Bearer.

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false, so the safety profile is fully covered by structured data. The description adds nothing beyond restating the operation—it does not say whether deletion is permanent, what happens to queued deliveries, or what errors occur for an invalid id.

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?

Two short sentences with the operation front-loaded and no filler. The trailing 'Inputs:' clause is somewhat redundant with a 100%-documented schema, but it is brief and does not obscure the main point.

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

Completeness3/5

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

For a single-object delete with complete schema coverage and rich safety annotations, the description is minimally sufficient. It omits any mention of irreversibility, error behavior for a malformed or missing id, and post-deletion state, which would be useful for a destructive operation.

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 description coverage is 100%, so both parameters (id and token) are already fully documented in the schema, including the whk_ prefix and the optional Authorization fallback. The description merely echoes the id format, adding no meaning beyond the schema; baseline 3 applies.

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

Purpose4/5

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

The description states a specific verb (Deletes) and resource (one webhook), which is unambiguous against siblings like delete_site or revoke_token. It does not, however, explicitly differentiate itself from alternatives such as revoke_token or explain its relationship to list_webhooks.

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

Usage Guidelines2/5

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

There is no guidance on when to delete a webhook versus revoking a token or other cleanup operations, and no note about needing to find the id via list_webhooks first. The user is left to infer usage entirely from the verb.

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

domain_statusCheck custom domain statusA
Read-onlyIdempotent
Inspect

Returns the verification status of a custom domain and refreshes verification, DNS config, and certificate state. Inputs: slug, domain, and token. status is pending_dns, verifying, issuing_cert, active, or error. dns_records are the records to create. An error includes the reason.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesSlug the hostname is attached to.
tokenNoBearer token returned by your first publish (deed_tok_...). Optional if the MCP client sends Authorization: Bearer.
domainYesHostname to check.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so safety is covered; the description adds real value by enumerating the returned status values and noting an error carries a reason. Caveat: 'refreshes verification, DNS config, and certificate state' suggests a server-side side effect that sits in mild tension with readOnlyHint=true, though idempotentHint makes a re-poll interpretation plausible.

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?

Front-loaded with the primary purpose, then return values, then error behavior. The 'Inputs:' sentence is redundant with a fully documented schema, but the rest of the text is dense and earns its place.

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?

No output schema exists, so the description rightly covers return values (status enum, dns_records, error reason) and inputs. It is missing any routing guidance against sibling domain tools and does not clarify the refresh side effect, but for a 3-parameter status check it is largely complete.

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 description coverage is 100%, so the schema already documents slug, token, and domain. The description only restates the same three names ('Inputs: slug, domain, and token') with no added format, defaults, or interaction detail, so the baseline of 3 applies.

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?

States a specific verb and resource ('Returns the verification status of a custom domain') and adds the refresh scope, which separates it cleanly from add_domain/list_domains/remove_domain. An agent can distinguish this status-check tool from its domain siblings without opening a schema.

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?

Usage is only implied: you call this to poll verification progress after attaching a domain. No alternative is named and there is no explicit when-not guidance (e.g., use list_domains to enumerate, add_domain to attach). Adequate but inferential.

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

finalize_uploadFinalize a large uploadA
DestructiveIdempotent
Inspect

Checks uploaded hashes, screens the new bytes, and commits one version under the slug lock. Inputs: session (upl_...), optional expected_version, via, and token. A stale expected_version returns version_conflict and writes nothing. A bad hash returns hash_mismatch. An expired session returns session_expired.

ParametersJSON Schema
NameRequiredDescriptionDefault
viaNoOptional label stored with the publish. At most 80 characters. An IP address, a URL, or an email address is not stored. A non-empty value replaces the X-Via header.
tokenNoBearer token returned by your first publish (deed_tok_...). Optional if the MCP client sends Authorization: Bearer.
sessionYesUpload session id (upl_...).
expected_versionNo

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false, so the safety profile is covered. The description adds real value beyond that: hash verification, content screening, slug locking, and the crucial 'writes nothing' guarantee on version_conflict, which tells the agent a failed call is safe to retry.

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?

Front-loaded with the core action, then inputs, then failure modes in a tight three-sentence block with no filler. The 'Inputs:' enumeration partially restates the schema, which is the only minor redundancy.

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 four-parameter mutation with no output schema, the description covers prerequisites (session id), concurrency handling (expected_version), and three named error outcomes. It omits what a successful commit returns (e.g., version identifier), which is the only meaningful 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?

Schema coverage is 75%, and the one undocumented parameter, expected_version, is exactly what the description explains — a stale value yields version_conflict and no write. It also confirms the session format (upl_...). via and token semantics are already fully carried by 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?

States a specific verb and resource chain: verifies hashes, screens bytes, and commits one version under the slug lock. This clearly separates it from plan_upload (which only plans) and publish_site, and the 'finalize' framing signals the terminal step of an upload session.

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 error cases imply this is the step taken after bytes are uploaded, but the description never explicitly says to call it after plan_upload or when to prefer publish_site instead. Usage is inferable from context rather than stated, which is the definition of implied guidance.

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

get_manifestGet a signed version manifestA
Read-onlyIdempotent
Inspect

Returns the canonical manifest for a site version: paths, sha256, sizes, version, slug, and created_at, plus an Ed25519 signature. signature is null when the server has no signing key. Inputs: slug, and optional version. When version is omitted, the result is the live site. Public keys are published at /.well-known/deed-signing-keys.json. No token is required.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYes
versionNoOptional retained version, such as "v2". Omit for the live version.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered; the description then adds real behavioral context beyond them: signature is null when no signing key exists, the public key discovery URL, and that no token is required. It doesn't address rate limits or failure modes, but adds solid value over structured fields.

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?

Front-loads the return payload, then the inputs, then the auth/key-discovery detail in one compact, waste-free block. Every sentence (payload fields, nullable signature, key URL, no token) carries information the caller needs.

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?

With no output schema, the description carries the full burden of describing the return value, and it does so thoroughly (field list plus signature nullability). Combined with the auth note and key-discovery URL, an agent has everything needed to call and interpret the result.

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 50%: the 'version' parameter is already documented in the schema as 'Omit for the live version', which the description largely repeats, while 'slug' remains undefined in both places. At this coverage level the description only marginally compensates, 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?

States a specific verb (returns) and resource (canonical manifest for a site version) and enumerates the payload contents (paths, sha256, sizes, version, slug, created_at, Ed25519 signature). This is clearly distinguishable from siblings like get_site and list_versions without opening either schema.

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?

Explains the conditional behavior of the optional version input ('When version is omitted, the result is the live site') and states that no token is required, giving the agent enough context to invoke it. It stops short of naming alternative tools (e.g., list_versions) or when-not-to-use guidance, so no explicit exclusions.

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

get_siteGet site infoA
Read-only
Inspect

Returns whether a slug is live, plus its URL, version, size, and timestamps. Input: slug. No token is required.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesSlug to look up.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds non-obvious context the annotations do not: that no authentication token is required, which is a real behavioral fact affecting invocation. It stops short of describing response format or error behavior for a missing slug.

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 short, front-loaded sentences with no filler: the return payload first, then the input and auth note. Every clause carries information.

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?

With only one required parameter at full schema coverage and no output schema, the description compensates by enumerating the returned fields (URL, version, size, timestamps) and flagging the auth requirement. A reader could call it correctly; only error/not-found behavior is unaddressed.

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 description coverage is 100% for the single 'slug' parameter, so the schema already documents it fully. The description only restates 'Input: slug' without adding format, casing, or lookup semantics, so the baseline of 3 applies.

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

Purpose4/5

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

States a specific verb and resource ('Returns whether a slug is live, plus its URL, version, size, and timestamps'), enumerating the returned fields so the agent knows exactly what it gets. It is clearly distinct from listing siblings (list_sites, list_versions) and analytics tools, though it never names those siblings to differentiate explicitly.

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?

'Input: slug' plus 'No token is required' gives a minimal usage cue, including a useful auth precondition. However, there is no guidance on when to prefer this tool over list_sites, get_manifest, or site_analytics, so the usage context is implied rather than stated.

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

list_domainsList custom domainsA
Read-onlyIdempotent
Inspect

Returns custom hostnames on one slug, or on every site the token owns when slug is omitted. Inputs: token, and optional slug. Status is the last checked value.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugNoOptional slug you own. Omit to list every hostname on this token.
tokenNoBearer token returned by your first publish (deed_tok_...). Optional if the MCP client sends Authorization: Bearer.

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is fully covered. The description does add one genuinely useful behavioral note — that status reflects the last-checked value, i.e. it may be stale — but otherwise adds no extra behavioral context beyond the structured fields.

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?

Three short sentences, scope behavior front-loaded, no filler. The 'Inputs: token, and optional slug' sentence is largely redundant with the schema, a minor waste.

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?

No output schema exists, and the description names what is returned (custom hostnames) plus the meaning of the status field, which is adequate for a simple list tool. It could mention ordering or result size, but nothing essential to correct invocation is missing.

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 description coverage is 100%, so both token and slug are already documented, including the fallback to the Authorization header. The description's restatement of the inputs and the omit-slug behavior adds nothing beyond what the schema already says; baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource ('Returns custom hostnames') and clarifies the two scope modes (one slug vs. every site on the token). It does not differentiate itself from the sibling domain_status, which an agent may reasonably confuse with a per-domain lookup.

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?

Usage is implied by the scope rules: omit slug to list everything, supply slug to narrow. There is no explicit when-to-use guidance relative to domain_status, add_domain, or remove_domain, so the agent must infer routing from names alone.

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

list_sitesList my sitesB
Read-only
Inspect

Returns every live site owned by the token, with URLs and versions. Input: token, or an Authorization bearer header.

ParametersJSON Schema
NameRequiredDescriptionDefault
tokenNoBearer token returned by your first publish (deed_tok_...). Optional if the MCP client sends Authorization: Bearer.

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered externally. The description adds useful scope ('live sites owned by the token') and auth requirements (token or Authorization bearer header), but says nothing about pagination or result limits even though it lists potentially many sites.

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?

Two tight sentences with the result set front-loaded. The trailing 'Input: token, or an Authorization bearer header' duplicates the schema's parameter description almost verbatim, which is a minor waste of space.

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 simple, unauthenticated-by-default listing tool with readOnly annotations and no output schema, the description covers scope and return content ('URLs and versions') adequately. It would be fully complete if it noted result volume or pagination behavior.

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 description coverage is 100% and the single token parameter is fully documented in the schema, including the deed_tok_ prefix and the optional bearer-header alternative. The description merely restates that same token/bearer choice, adding no new meaning, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource ('Returns every live site owned by the token') and adds return content ('with URLs and versions'), which distinguishes it from singular get_site. It does not explicitly name siblings like get_site or list_versions, so it stops short of full differentiation.

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

Usage Guidelines2/5

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

The description gives no when-to-use guidance and does not contrast this with alternatives such as get_site (one site) or list_versions (versions). Only authentication mechanics are mentioned, which is parameter-level rather than selection guidance.

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

list_versionsList retained versionsA
Read-onlyIdempotent
Inspect

Returns every retained version of a slug owned by the token, newest first. Inputs: slug and token. Each entry includes version, created_at, file_count, bytes, kind (publish, merge, or restore), restored_from, and a public permalink. Free keeps 10 versions, Hobby 50, Pro unlimited.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesSlug you own.
tokenNoBearer token returned by your first publish (deed_tok_...). Optional if the MCP client sends Authorization: Bearer.

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, and non-destructive, so safety is covered. The description adds genuinely new behavioral context: entries are ordered newest first, the shape of each entry, and the retention caps per plan (10/50/unlimited), which is critical for interpreting 'every retained version'.

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?

Front-loaded with the operation and ordering, then the inputs, then the return fields, then retention limits. Every clause carries information, though 'Inputs: slug and token' is mild redundancy given the 100%-covered schema and could be cut.

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?

No output schema exists, and the description compensates by enumerating the returned fields (version, created_at, file_count, bytes, kind, restored_from, permalink). Combined with the retention quotas and the newest-first ordering, an agent has everything needed to call and interpret this tool.

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?

With 100% schema description coverage, the schema already documents both slug and token in more depth than the description ('Bearer token returned by your first publish'). 'Inputs: slug and token' restates the schema without adding syntax, format, or constraint detail, so the baseline of 3 applies.

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?

States a specific verb and resource ('returns every retained version of a slug'), plus scope (owned by token) and ordering (newest first). This clearly separates it from the mutation sibling restore_version and from get_manifest, which returns a different artifact.

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?

Usage is implied rather than stated: an agent can infer this is a read-only inventory call to run before restore_version, and the phrase 'owned by the token' hints at the auth scope. But there is no explicit when-to-use, when-not-to-use, or named alternative.

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

list_webhooksList webhooksA
Read-onlyIdempotent
Inspect

Returns the webhook URLs registered for the token. Secrets are not included. Input: token.

ParametersJSON Schema
NameRequiredDescriptionDefault
tokenNoBearer token returned by your first publish (deed_tok_...). Optional if the MCP client sends Authorization: Bearer.

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds one genuine behavioral detail beyond that — that secrets are excluded from the output — which is useful, but return format and pagination are not addressed.

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?

Three short, front-loaded sentences with no padding; the scoping details come first. The trailing 'Input: token' is redundant given the schema, which keeps it just below a 5.

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 simple read-only list tool with no output schema, the description covers what is returned (URLs, no secrets) and the token input sufficiently. Nothing an agent needs to call it correctly is missing, though return ordering/pagination is unmentioned.

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 description coverage is 100%, so the token parameter (format, optionality via Authorization header) is already fully documented in the schema. The description's 'Input: token' merely restates it and adds no syntax or format detail beyond the schema, so baseline 3 applies.

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?

States a specific verb ('Returns'/list) and resource ('webhook URLs registered for the token'), and clearly differentiates from siblings like create_webhook and delete_webhook. An agent can tell exactly what this tool does without opening the schema.

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?

Usage is only implied by the pairing with create_webhook/delete_webhook siblings; there is no explicit when-to-use statement, no prerequisites, and no named alternative for listing a different scope. Adequate but leaves the agent to infer context.

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

plan_uploadPlan a large uploadAInspect

Accepts a file manifest and returns which hashes are already stored, a direct upload URL for each missing hash, and a session id. Inputs: files as {path, sha256, size, content_type?}, and optional slug, spa, merge, ttl_seconds, expected_version, via, and token. Applies when the files are larger than about 4 MB, or when each sha256 is already known. Does not publish by itself. Per-site size limits are unchanged.

ParametersJSON Schema
NameRequiredDescriptionDefault
spaNo
viaNoOptional label stored with the publish. At most 80 characters. An IP address, a URL, or an email address is not stored. A non-empty value replaces the X-Via header.
slugNoExact slug, or omit for a random one.
filesYesManifest entries. sha256 is 64 lowercase hex characters. size is the byte length.
mergeNoOverlay these paths on the live site.
tokenNoBearer token returned by your first publish (deed_tok_...). Optional if the MCP client sends Authorization: Bearer.
ttl_secondsNo
expected_versionNoLive version this upload must match, such as "v3".

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, idempotentHint=false, destructiveHint=false, openWorldHint=true. The description adds real context beyond that: it is a preparatory step that 'does not publish by itself', it returns a session id for a later finalize, and it discloses the token/bearer auth path. It does not cover TTL/expiry semantics or rate limits.

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?

Front-loads the most decision-relevant fact (what it returns) before the input list and applicability rules. Dense but every clause carries information; the input enumeration is somewhat list-heavy but earns its place given 8 parameters.

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?

With no output schema, the description correctly supplies the return shape (stored hashes, upload URLs, session id), plus the trigger condition and the 'does not publish' caveat, which is the key mental model for a two-step upload. Remaining gaps are minor: what to do with the session id / which sibling finalizes, and TTL behavior.

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 75% and the strong per-parameter docs (via, slug, merge, token, expected_version, files item shape) already live in the schema. The description only re-lists parameter names and the manifest entry fields, adding little semantic meaning beyond the structured data. Baseline 3 applies.

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?

States a specific verb+resource (plan a large upload) and, unusually, enumerates the return payload (already-stored hashes, per-hash upload URLs, session id). The phrase 'Does not publish by itself' implicitly separates it from finalize_upload/publish_site, so an agent can place it in the upload flow without opening the sibling schemas.

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?

Gives an explicit applicability condition ('files larger than about 4 MB, or when each sha256 is already known'), which tells the agent when this tool is the right entry point rather than a single-shot publish. It stops short of naming the alternative path for small/unknown-hash uploads, so the routing is implied rather than stated.

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

publish_sitePublish a siteA
Destructive
Inspect

Publishes files to a live permanent URL at a slug. Inputs: files (required), and optional slug, spa, ttl_seconds, merge, expected_version, via, and token. Paths are stored exactly. Returns url, path_url, slug, version, and token on the first anonymous publish. On deed.page, url and path_url are both https://{slug}.deed.page/. A lost token has no recovery unless an optional recovery email was attached. When expected_version does not match the live version, the result is version_conflict and nothing is written. A racing publish of the same slug returns version_conflict even without expected_version. Malware, executables, and credential-harvesting pages return content_rejected and are not stored. .bin is blocked by file type (it often has no MZ or ELF header). A raw octet-stream body is screened as one file.

ParametersJSON Schema
NameRequiredDescriptionDefault
spaNoServe index.html for unknown paths (single-page apps).
viaNoOptional label stored with the publish. At most 80 characters. An IP address, a URL, or an email address is not stored. A non-empty value replaces the X-Via header.
slugNoExact slug matching ^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$ (lowercase letters, digits, hyphens, 1-63, no leading or trailing hyphen). Invalid slugs return slug_invalid and are not rewritten. Reserved names (hello, my-page, www, api, docs, admin, mcp, blog, app, status, and other docs examples) return slug_reserved on a new claim. A token that already owns one can still update it. Omit for a random slug.
filesYesPath map, or an array of {path, content} or {path, base64}. Paths are stored exactly as given (a single top-level directory is not removed). Text as a string, binary as {"base64":"..."}. Example: {"index.html":"<!doctype html><h1>Hi</h1>","img/logo.png":{"base64":"iVBOR..."}}. Any other array is rejected.
mergeNoAdd or overwrite only these exact paths on the existing site. Paths omitted from this call are left unchanged. Nothing is moved to the site root.
tokenNoBearer token returned by your first publish (deed_tok_...). Optional if the MCP client sends Authorization: Bearer.
ttl_secondsNoOpt-in expiry in seconds. Omit for a permanent site.
expected_versionNoLive version this write is based on, such as "v3". If the slug is no longer at that version, the result is version_conflict and nothing is written. A racing publish of the same slug returns version_conflict even when this is omitted.

TDQS

A3.7/5.0
Behavior5/5

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

Annotations already declare destructiveHint=true, idempotentHint=false and openWorldHint=true, and the description still adds substantial value: token is returned only on the first anonymous publish, a lost token is unrecoverable without a recovery email, version_conflict writes nothing, racing publishes conflict even without expected_version, and content_rejected/.bin/octet-stream screening rules. This is exactly the mutation-risk context annotations cannot express.

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 purpose is front-loaded and each subsequent sentence carries distinct information about errors, tokens, and encoding. Mild waste in enumerating every input parameter, which duplicates the schema, but the overall density is high.

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?

There is no output schema, and the description compensates by naming the return fields (url, path_url, slug, version, token) and the exact failure modes (version_conflict, content_rejected, slug_invalid/slug_reserved are schema-side). For an 8-parameter destructive publish tool with nested objects, an agent has what it needs 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 baseline is 3, and the description mostly restates the parameter list already documented in the schema. It adds a little (paths stored exactly, slug semantics, first-publish token) but no syntax or format detail the schema lacks.

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

Purpose4/5

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

The first sentence gives a specific verb and resource ('Publishes files to a live permanent URL at a slug'), which is far more concrete than the title alone. It never explicitly contrasts itself with close siblings like update_site, delete_site, or restore_version, leaving the agent to infer the boundary.

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

Usage Guidelines2/5

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

The description is rich in behavior but offers no when-to-use/when-not-to-use guidance or named alternatives; nothing tells the agent whether to publish_site vs update_site vs plan_upload/finalize_upload. Practical warnings (token recovery, version_conflict) inform risk but not tool selection.

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

remove_domainRemove a custom domainB
DestructiveIdempotent
Inspect

Removes a hostname so requests to that host no longer serve the site. Inputs: domain, optional slug, and token. When slug is set, the hostname must already be attached to that slug.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugNoOptional slug. When set, the hostname must be attached to that slug.
tokenNoBearer token returned by your first publish (deed_tok_...). Optional if the MCP client sends Authorization: Bearer.
domainYesHostname to remove.

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, idempotentHint=true, and openWorldHint=true, so safety/behavioral profile is covered. The description adds the concrete effect of removal, which is useful, but the slug precondition merely restates the schema rather than adding new behavioral context (permissions, irreversibility, re-adding).

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?

Two tightly written sentences with the effect front-loaded. The 'Inputs: domain, optional slug, and token' clause partially repeats the schema, which is minor waste but not harmful.

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

Completeness3/5

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

For a destructive mutation with no output schema, the description conveys the effect but omits permission/auth requirements beyond the token, whether removal is reversible, and what happens on failure. Annotations carry the safety profile, so the gap is moderate rather than severe.

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 description coverage is 100%, so the schema already documents domain, slug, and token. The description's slug conditionality duplicates the schema text and adds no new syntax or format detail, making baseline 3 appropriate.

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

Purpose4/5

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

States a specific verb (removes) and resource (hostname/domain) and even describes the effect: 'requests to that host no longer serve the site.' This distinguishes it from add_domain, but it never names or contrasts with a sibling explicitly.

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

Usage Guidelines2/5

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

No explicit when-to-use or when-not-to-use guidance and no mention of alternatives (add_domain, domain_status, list_domains). The slug precondition is stated, but that is a requirement, not usage guidance.

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

restore_versionRestore a retained versionA
Destructive
Inspect

Creates a new version whose files equal a retained version, without uploading those files again. Inputs: slug, version, optional expected_version, and token. When expected_version does not match the live version, the result is version_conflict and nothing is written. The previous permalink keeps serving until retention drops it.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesSlug you own.
tokenNoBearer token returned by your first publish (deed_tok_...). Optional if the MCP client sends Authorization: Bearer.
versionYesVersion to copy forward, such as "v2".
expected_versionNoLive version this restore is based on, such as "v4". A mismatch returns version_conflict.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations cover the safety profile (destructiveHint=true, idempotentHint=false), and the description adds real behavioral context beyond them: the version_conflict guard on expected_version that results in nothing being written, and the retention behavior of the previous permalink. It does not explain auth/permission requirements or rate limits, but the added conflict and retention semantics are valuable.

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?

Four tight sentences that front-load the core behavior before the input list and edge cases. No filler, though the trailing retention sentence is tangential to invoking the tool.

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 mutation tool with no output schema, the description covers the write effect, the concurrency guard, and the failure mode. It omits what the resulting version is named/returned and any permission requirements, but the essentials for correct invocation are present.

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% and the schema already documents each parameter, including that a mismatch returns version_conflict. The description largely restates the same semantic for expected_version and lists the inputs, so it meets the baseline without materially extending 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?

States a specific verb+resource ('creates a new version whose files equal a retained version') and a distinguishing mechanism ('without uploading those files again'). This clearly separates it from siblings like list_versions, get_manifest, and publish_site.

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 implies the scenario (copying a retained version forward) but never states when to choose this over alternatives such as re-publishing or uploading fresh files, nor prerequisites like needing a version discovered via list_versions. Usage is inferable but not spelled out.

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

revoke_tokenRevoke an owner tokenA
DestructiveIdempotent
Inspect

Revokes owner tokens. Inputs: token, and optional scope. Scope "current" (the default) revokes the token that was sent. Scope "all" revokes every token for that principal, including any overlap window. A later request with a revoked token returns 401 token_revoked, which is distinct from 403 suspended. Sites stay online. Without a recovery email, a revoked token cannot update them.

ParametersJSON Schema
NameRequiredDescriptionDefault
scopeNocurrent revokes only this token. all revokes every token for the principal. Default current.
tokenNoBearer token returned by your first publish (deed_tok_...). Optional if the MCP client sends Authorization: Bearer.

TDQS

A4/5.0
Behavior5/5

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

Annotations declare destructiveHint=true and idempotentHint=true, but the description goes well beyond them by disclosing the post-revocation error contract (401 token_revoked, distinct from 403 suspended), the fact that sites stay online, and the consequence that a revoked token cannot update sites without a recovery email. That is exactly the kind of downstream effect an agent needs before committing to a destructive call.

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 dense, front-loaded with the core action, and nearly every clause carries information (scopes, error codes, side effects). The only slack is the "Inputs: token, and optional scope" clause, which restates what the schema already lists.

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?

There is no output schema, so the description must cover the return contract, and it does disclose the key failure mode (401 token_revoked vs 403 suspended) plus the effect on live sites. It stops short of describing the successful response shape, leaving a small gap for a mutation tool with no output schema.

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 the baseline is 3, but the description adds real meaning the schema lacks: scope="all" also covers "any overlap window" of tokens, and it clarifies the distinction between the default current scope and the principal-wide behavior. It goes slightly beyond restating the enum.

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

Purpose4/5

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

The description opens with a specific verb and resource ("Revokes owner tokens") and immediately defines what each scope value does, so the agent knows exactly what operation is performed. It does not, however, differentiate itself from the lifecycle sibling rotate_token, which is the closest alternative in the toolset — so it falls short of a 5.

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?

Usage is only implied: the scope semantics tell the agent which variant of the revocation to pick, but nothing states when an agent should revoke versus rotate a token, nor are prerequisites or alternatives named. There is no explicit "use this when…" or "use rotate_token instead when…" guidance.

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

rotate_tokenRotate the owner tokenA
Destructive
Inspect

Issues a new token for the same principal. Every site carries over. Inputs: token, and optional overlap_seconds from 0 to 300. The previous token stops working immediately when overlap_seconds is omitted or 0. During a non-zero overlap window both tokens work. After that window the previous token returns 401 token_revoked. The new token is returned once.

ParametersJSON Schema
NameRequiredDescriptionDefault
tokenNoBearer token returned by your first publish (deed_tok_...). Optional if the MCP client sends Authorization: Bearer.
overlap_secondsNoSeconds the previous token keeps working so an in-flight deploy can finish. Omit or 0 to invalidate it immediately. Maximum 300.

TDQS

A4.3/5.0
Behavior5/5

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

Annotations cover the safety profile (destructiveHint=true, idempotentHint=false), and the description goes well beyond them: the previous token dies immediately when overlap is 0, both work during a non-zero window, the old token then returns 401 token_revoked, and the new secret is shown only once. That is exactly the destruction/one-time-secret context an agent needs.

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?

Front-loaded with the core action and outcome, then the parameters, then the failure semantics in four short declarative sentences. The only mildly redundant clause is the restated 0-300 range, which does not meaningfully dilute the entry.

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?

No output schema exists, and the description compensates by stating the return value ('the new token is returned once'). Combined with the annotations, parameter docs, and error semantics, an agent has everything needed to call this destructive, non-idempotent operation 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 both parameters are already documented, including the 0-300 range and the Authorization-header alternative. The description restates the range and optionality without adding syntax or format detail beyond the schema, so the baseline 3 applies.

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?

States a specific verb+resource: issues a new token for the same principal, with the scope qualifier that every site carries over. An agent can distinguish it from revoke_token (which invalidates) and from publish_site without another lookup.

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?

Usage context is implied rather than stated: the overlap_seconds rationale ('so an in-flight deploy can finish') tells the agent when a non-zero window matters, but nothing says when to rotate versus revoke, or whether rotation is safe to call repeatedly. No alternative is named.

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

set_site_accessSet or clear a site passwordA
DestructiveIdempotent
Inspect

Changes the access setting stored for a slug on deed.page. Inputs: slug, password, and token. password is 8 to 200 characters, or null to clear the password. The call writes a scrypt hash into the site record on deed.page, or removes that hash, and contacts no outside system. Setting a password is available on Hobby and Pro; Free returns plan_required. Clearing is allowed on every plan.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesSlug you own.
tokenNoBearer token returned by your first publish (deed_tok_...). Optional if the MCP client sends Authorization: Bearer.
passwordYesNew password, or null to clear the password and make the site public.

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already declare destructive=true and idempotent=true, and the description adds genuinely new behavior: the write is a scrypt hash stored on the site record, no outside system is contacted, and plan gating produces a specific plan_required error. It also explains that clearing removes the hash (making the site public), which is the destructive action the annotation only flags abstractly.

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?

Every sentence carries load: what changes, what the inputs are, the password constraint, the storage mechanism, and the plan gating. The core action and inputs are front-loaded, and there is no filler or restatement of the title.

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 three-parameter mutation with no output schema, the description covers the action, the value constraints, the side effect (hash written or removed), the absence of external calls, and the plan-dependent error. Nothing an agent needs to invoke it correctly is missing.

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, and the description goes beyond the schema by adding the 8-to-200-character length constraint on password and restating the null-clears semantics in behavioral terms. The token parameter's optional-if-header behavior is only in the schema, so it is not fully redundant, but the description does not elaborate on it.

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

Purpose4/5

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

States a specific verb and resource: it changes the stored access setting (password) for a slug on deed.page, and clarifies the mechanism by saying it writes or removes a scrypt hash on the site record. That is far more precise than the sibling update_site, but the description never names or contrasts with update_site, so an agent must infer the boundary itself.

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?

Gives concrete call conditions: setting a password requires Hobby or Pro and Free returns plan_required, while clearing is allowed on every plan. This is real when-to-use context with a documented failure mode, though it offers no explicit guidance on when to prefer this tool over update_site or delete_site.

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

site_analyticsSite analyticsA
Read-onlyIdempotent
Inspect

Returns owner-only cookieless counts for a slug: views per UTC day, top paths, top referrer hosts, and AI crawler counts by user-agent family. Inputs: slug, optional from and to as YYYY-MM-DD (default the last 7 days, maximum 90), and token. The accuracy field describes under-counting. No raw IP or full user agent is stored.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoLast UTC day, YYYY-MM-DD. Default is today.
fromNoFirst UTC day, YYYY-MM-DD. Default is 6 days before to.
slugYesSlug you own.
tokenNoBearer token returned by your first publish (deed_tok_...). Optional if the MCP client sends Authorization: Bearer.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare this a safe read (readOnlyHint true, destructiveHint false, idempotentHint true), and the description still adds meaningful context: cookieless design, owner-only authorization, the 90-day retention window, and the privacy guarantee that no raw IP or full user agent is stored. The note that the accuracy field describes under-counting is real behavioral disclosure an agent needs when interpreting results.

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?

Three tight sentences, front-loaded with what is returned before inputs are mentioned. Every clause carries information: no restating of the title, no filler.

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?

With no output schema, the description carries the burden of describing the response and does so (per-day views, top paths, top referrers, crawler families) plus the accuracy caveat. Combined with full schema coverage and safety annotations, an agent has everything needed to invoke and interpret the call.

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, but the description adds the 'maximum 90' range constraint that the schema omits and restates the from/to defaults in terms of the last 7 days, which clarifies how the two date params interact. The token parameter's fallback to Authorization: Bearer is covered in the schema rather than the description.

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?

States a specific verb (Returns) and resource (cookieless analytics counts for a slug) and enumerates the returned dimensions: views per UTC day, top paths, top referrer hosts, and AI crawler counts by user-agent family. No sibling tool returns analytics, so the agent can disambiguate this from list_sites/get_site purely from the description.

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?

Gives clear operating context: 'owner-only' establishes the prerequisite, defaults are spelled out (last 7 days), and a hard cap (maximum 90 days) is stated. It doesn't name any when-not condition or alternative tool, but no sibling provides comparable analytics, so there is little to exclude.

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

update_siteUpdate a siteA
DestructiveIdempotent
Inspect

Replaces the files of a slug owned by the token, or, when merge is true, adds and overwrites only the paths sent. Inputs: slug, files, and optional spa, merge, expected_version, via, and token. Returns url, path_url, slug, and a new version. When expected_version does not match the live version, the result is version_conflict and nothing is written. Two racing updates return version_conflict even without expected_version.

ParametersJSON Schema
NameRequiredDescriptionDefault
spaNoServe index.html for unknown paths.
viaNoOptional label stored with the publish. At most 80 characters. An IP address, a URL, or an email address is not stored. A non-empty value replaces the X-Via header.
slugYesSlug you own. Must match ^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$. Not rewritten. Reserved slugs are rejected.
filesYesPath map, or an array of {path, content} or {path, base64}. Paths are stored exactly as given (a single top-level directory is not removed). Text as a string, binary as {"base64":"..."}. Example: {"index.html":"<!doctype html><h1>Hi</h1>","img/logo.png":{"base64":"iVBOR..."}}. Any other array is rejected.
mergeNoKeep every path you do not send, and add or overwrite only these exact paths.
tokenNoBearer token returned by your first publish (deed_tok_...). Optional if the MCP client sends Authorization: Bearer.
expected_versionNoLive version this update is based on, such as "v3". If the site has moved on, the call returns version_conflict with no write. Omit it and a concurrent update still returns version_conflict rather than dropping files.

TDQS

A3.9/5.0
Behavior5/5

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

Goes well beyond the annotations (destructiveHint, idempotentHint) by disclosing optimistic-concurrency behavior: a mismatched expected_version yields version_conflict and nothing is written, and two racing updates also return version_conflict rather than silently dropping files. That atomicity/conflict contract is exactly the kind of behavior an agent cannot infer from structured fields.

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?

Front-loaded with the core replace/merge distinction, then conflict semantics; no filler. The 'Inputs: slug, files, and optional ...' enumeration is mildly redundant given the schema but is short and scannable.

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?

With no output schema, the description usefully names the return payload (url, path_url, slug, new version) and the primary failure mode, which is what an agent needs. It is silent on other failure modes (invalid slug, reserved slug) and on overwrite/destroy scope beyond the merge wording, so it is strong but not exhaustive for a 7-param destructive tool.

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 description coverage is 100%, so every parameter (spa, via, slug, files, merge, token, expected_version) is already documented in the schema. The description's input list and merge/conflict notes largely restate that, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource: replaces the files of a slug owned by the token, and spells out the two write modes (full replace vs merge). An agent can tell what it does without opening the schema, though it never names a sibling (e.g. publish_site) to disambiguate the write path.

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?

Usage is only implied through the merge flag semantics; there is no explicit when-to-use-this-vs-publish_site/restore_version guidance and no stated preconditions beyond token ownership. Adequate but leaves tool selection to inference.

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

whoamiShow plan and quotaA
Read-only
Inspect

Returns the plan, limits, the number of sites the token owns, and the number of custom hostnames attached. Input: token.

ParametersJSON Schema
NameRequiredDescriptionDefault
tokenNoBearer token returned by your first publish (deed_tok_...). Optional if the MCP client sends Authorization: Bearer.

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, openWorldHint=false, destructiveHint=false, so the safety profile is fully covered by structured data. The description adds the returned field set, which is genuine value, but says nothing about auth failure behavior, rate limits, or what happens with an invalid token.

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?

Two sentences, front-loaded with the useful payload (what is returned) and ending with the input requirement. Compact with minimal waste, though 'Input: token' is a slightly awkward tail that mostly repeats the schema.

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?

With a single optional parameter, full schema coverage, and annotations covering the read-only, non-destructive profile, the description supplies exactly the missing piece: the shape of the response. No output schema exists, so enumerating plan, limits, site count, and hostname count is the right call.

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 the schema already explains the token format (deed_tok_...), the publish-time origin, and the optional fallback to the Authorization header. The description's lone 'Input: token' adds no new information beyond that, but with full schema coverage the baseline is 3 and there is no gap to compensate for.

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?

Specific verb (returns) plus enumerated resource details (plan, limits, site count, custom hostname count). It reads clearly as the account/token introspection tool and is distinguishable from siblings like list_sites or get_site, which operate on sites rather than the token's own plan/quota.

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 name whoami and the content of the response imply this is a diagnostic/token-info call, so usage is reasonably inferable. But there is no explicit guidance on when to reach for this versus revoke_token, rotate_token, or list_sites for inspecting account state.

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.

  1. 4 tool updates
    • Changedfinalize_upload1 field changed
      • addedInput schema / properties / via
        Added value: +{
        +  "description": "Optional label stored with the publish. At most 80 characters. An IP address, a URL, or an email address is not stored. A non-empty value replaces the X-Via header.",
        +  "type": "string"
        +}
    • Changedplan_upload1 field changed
      • addedInput schema / properties / via
        Added value: +{
        +  "description": "Optional label stored with the publish. At most 80 characters. An IP address, a URL, or an email address is not stored. A non-empty value replaces the X-Via header.",
        +  "type": "string"
        +}
    • Changedpublish_site1 field changed
      • addedInput schema / properties / via
        Added value: +{
        +  "description": "Optional label stored with the publish. At most 80 characters. An IP address, a URL, or an email address is not stored. A non-empty value replaces the X-Via header.",
        +  "type": "string"
        +}
    • Changedupdate_site1 field changed
      • addedInput schema / properties / via
        Added value: +{
        +  "description": "Optional label stored with the publish. At most 80 characters. An IP address, a URL, or an email address is not stored. A non-empty value replaces the X-Via header.",
        +  "type": "string"
        +}
  2. 4 tool updates
    • Changedfinalize_upload1 field changed
      • changedInput schema / properties / session / description
        Previous value: -"session id from plan_upload (upl_...)."New value: +"Upload session id (upl_...)."
    • Changedplan_upload1 field changed
      • changedInput schema / properties / expected_version / description
        Previous value: -"Live version this finalize must match, such as \"v3\"."New value: +"Live version this upload must match, such as \"v3\"."
    • Changedpublish_site2 fields changed
      • changedInput schema / properties / expected_version / description
        Previous value: -"Live version this write is based on, such as \"v3\", from the last publish or get_site. If the slug is no longer at that version, the call returns version_conflict and does not write. Racing publishes fail the same way even when this is omitted."New value: +"Live version this write is based on, such as \"v3\". If the slug is no longer at that version, the result is version_conflict and nothing is written. A racing publish of the same slug returns version_conflict even when this is omitted."
      • changedInput schema / properties / files / description
        Previous value: -"Map of relative path to file contents. Paths are stored exactly as given (a single top-level directory is not removed). Text as a string, binary as {\"base64\":\"...\"}. Example: {\"index.html\":\"<!doctype html><h1>Hi</h1>\",\"img/logo.png\":{\"base64\":\"iVBOR...\"}}"New value: +"Path map, or an array of {path, content} or {path, base64}. Paths are stored exactly as given (a single top-level directory is not removed). Text as a string, binary as {\"base64\":\"...\"}. Example: {\"index.html\":\"<!doctype html><h1>Hi</h1>\",\"img/logo.png\":{\"base64\":\"iVBOR...\"}}. Any other array is rejected."
    • Changedupdate_site1 field changed
      • changedInput schema / properties / files / description
        Previous value: -"Map of relative path to file contents. Paths are stored exactly as given (a single top-level directory is not removed). Text as a string, binary as {\"base64\":\"...\"}. Example: {\"index.html\":\"<!doctype html><h1>Hi</h1>\",\"img/logo.png\":{\"base64\":\"iVBOR...\"}}"New value: +"Path map, or an array of {path, content} or {path, base64}. Paths are stored exactly as given (a single top-level directory is not removed). Text as a string, binary as {\"base64\":\"...\"}. Example: {\"index.html\":\"<!doctype html><h1>Hi</h1>\",\"img/logo.png\":{\"base64\":\"iVBOR...\"}}. Any other array is rejected."
  3. 5 tool updates
    • Addedcreate_webhook
    • Addeddelete_webhook
    • Addedlist_webhooks
    • Addedset_site_access
    • Addedsite_analytics
  4. 3 tool updates
    • Addedfinalize_upload
    • Addedget_manifest
    • Addedplan_upload
  5. 4 tool updates
    • Addedadd_domain
    • Addeddomain_status
    • Addedlist_domains
    • Addedremove_domain
  6. 2 tool updates
    • Addedrevoke_token
    • Addedrotate_token
  7. 2 tool updates
    • Addedlist_versions
    • Addedrestore_version
  8. 2 tool updates
    • Changedpublish_site1 field changed
      • addedInput schema / properties / expected_version
        Added value: +{
        +  "description": "Live version this write is based on, such as \"v3\", from the last publish or get_site. If the slug is no longer at that version, the call returns version_conflict and does not write. Racing publishes fail the same way even when this is omitted.",
        +  "type": "string"
        +}
    • Changedupdate_site1 field changed
      • addedInput schema / properties / expected_version
        Added value: +{
        +  "description": "Live version this update is based on, such as \"v3\". If the site has moved on, the call returns version_conflict with no write. Omit it and a concurrent update still returns version_conflict rather than dropping files.",
        +  "type": "string"
        +}
  9. 2 tool updates
    • Changedpublish_site3 fields changed
      • changedInput schema / properties / files / description
        Previous value: -"Map of relative path to file contents. Text as a string, binary as {\"base64\":\"...\"}. Example: {\"index.html\":\"<!doctype html><h1>Hi</h1>\",\"img/logo.png\":{\"base64\":\"iVBOR...\"}}"New value: +"Map of relative path to file contents. Paths are stored exactly as given (a single top-level directory is not removed). Text as a string, binary as {\"base64\":\"...\"}. Example: {\"index.html\":\"<!doctype html><h1>Hi</h1>\",\"img/logo.png\":{\"base64\":\"iVBOR...\"}}"
      • changedInput schema / properties / merge / description
        Previous value: -"Add these files to the existing site instead of replacing it."New value: +"Add or overwrite only these exact paths on the existing site. Paths omitted from this call are left unchanged. Nothing is moved to the site root."
      • changedInput schema / properties / slug / description
        Previous value: -"Lowercase letters, digits, hyphens (1-63). Omit for a random slug."New value: +"Exact slug matching ^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$ (lowercase letters, digits, hyphens, 1-63, no leading or trailing hyphen). Invalid slugs return slug_invalid and are not rewritten. Reserved names (hello, my-page, www, api, docs, admin, mcp, blog, app, status, and other docs examples) return slug_reserved on a new claim. A token that already owns one can still update it. Omit for a random slug."
    • Changedupdate_site3 fields changed
      • changedInput schema / properties / files / description
        Previous value: -"Map of relative path to file contents. Text as a string, binary as {\"base64\":\"...\"}. Example: {\"index.html\":\"<!doctype html><h1>Hi</h1>\",\"img/logo.png\":{\"base64\":\"iVBOR...\"}}"New value: +"Map of relative path to file contents. Paths are stored exactly as given (a single top-level directory is not removed). Text as a string, binary as {\"base64\":\"...\"}. Example: {\"index.html\":\"<!doctype html><h1>Hi</h1>\",\"img/logo.png\":{\"base64\":\"iVBOR...\"}}"
      • changedInput schema / properties / merge / description
        Previous value: -"Keep existing files and add/overwrite only these paths."New value: +"Keep every path you do not send, and add or overwrite only these exact paths."
      • changedInput schema / properties / slug / description
        Previous value: -"Slug you own."New value: +"Slug you own. Must match ^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$. Not rewritten. Reserved slugs are rejected."
  10. 7 tool updates
    • First observeddelete_site
    • First observedget_site
    • First observedget_upgrade_link
    • First observedlist_sites
    • First observedpublish_site
    • First observedupdate_site
    • First observedwhoami

Related MCP Connectors

Related MCP Servers

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources