@dropthis/mcp
OfficialClick on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@@dropthis/mcpPublish this HTML page to a public URL"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
@dropthis/mcp
Official MCP server for dropthis — publish content (HTML, files, or a URL to fetch) and get back a permanent public URL, from any MCP-compatible agent (Claude Code, Claude Desktop, Cursor, Windsurf, opencode, ChatGPT, n8n, …).
Two ways to connect:
Local (stdio) —
npx @dropthis/mcp, authenticated with yoursk_API key. Best for coding agents.Remote (hosted) —
https://mcp.dropthis.app/mcpover Streamable HTTP, with OAuth for chat clients or a staticsk_Bearer for automation. Best for ChatGPT / claude.ai / n8n.
Local / stdio
Add to your MCP client config:
{
"mcpServers": {
"dropthis": {
"command": "npx",
"args": ["-y", "@dropthis/mcp"],
"env": { "DROPTHIS_API_KEY": "sk_..." }
}
}
}Get an API key from your dropthis account. The server reads DROPTHIS_API_KEY (and optional DROPTHIS_BASE_URL). Set DROPTHIS_READ_ONLY=true to register only the read tools — a safe way to give an agent read access to your drops with no write/delete risk. Set DROPTHIS_TOOLSETS (e.g. drops) to trim the tool surface to what a session needs (Toolsets). Claude Desktop users can install the one-click .mcpb bundle instead (the API key is stored in your OS keychain).
See docs/setup.md for per-client instructions (Claude Code, Cursor, Windsurf, VS Code, …).
Related MCP server: HTML Deploy MCP Server
Remote (hosted) connector
Point an MCP-capable client at the hosted endpoint:
https://mcp.dropthis.app/mcpOne-click install (the deep-link opens the editor and adds the remote server):
Cursor: Add to Cursor
VS Code: Add to VS Code
Chat clients (ChatGPT, claude.ai) authenticate via OAuth 2.1 — add the connector URL, sign in with a 6-digit email code (no password), then approve the consent screen, which shows the requested permissions and lets you pick the workspace to publish into.
Automation (n8n, CI, custom agents) sends a static
Authorization: Bearer sk_...header and skips OAuth. See docs/n8n.md.Read-only: append
?readonly=trueto the endpoint (https://mcp.dropthis.app/mcp?readonly=true) to register only the read tools, even for a write-capable credential.Manage or disconnect the connector later from the console's Connected apps page at https://app.dropthis.app.
Tools
Tool | Purpose |
| Publish new content ( |
| Publish a new content version to an existing drop, keeping its URL |
| Update a drop's settings (title, visibility, password, noindex, expiry, metadata) and routing (move onto a custom domain / back to the shared pool, rename the vanity slug) |
| Fetch one drop's metadata |
| Read back what a drop is serving — its file manifest, or one file's content (the read half of the edit loop) |
| Turn a drop's public URL or slug into its |
| List your drops (paginated) |
| List a drop's deployment (version) history |
| Roll a drop back to a prior deployment's content (Pro+ version history) — mints a new deployment copying it and makes it current, URL unchanged |
| Read a drop's approximate view analytics (Keep+ for counts, Pro+ for country/referer/daily breakdowns) |
| Delete a drop (requires |
| Authenticated account profile (id, email, status) including the account's limits for preflight sizing |
| Connect a custom domain ( |
| Re-check a domain's DNS/TLS and advance its status toward |
| Read one domain's stored state and DNS instructions (no live DNS check) |
| List the account's custom domains and which is the default publish target |
| Repoint a dedicated domain to another drop, or set/clear the default path domain |
| Disconnect a custom domain (requires |
| List the workspaces this connection can publish to, and which is active |
| Switch the active workspace for this connection (persists server-side) |
| Create a new team workspace (you become its owner) |
| Rename a team workspace or change its slug |
| Delete a team workspace (owner only; requires |
| List a team workspace's members and their roles |
| Invite an email to a team workspace as admin or member |
| Change a member's role (owner/admin/member) |
| Remove a member from a workspace, or leave it (requires |
| List your own pending workspace invitations |
| Accept a workspace invitation and join (by token or invitation id) — the teammate join path |
file/paths are local/stdio only — the hosted Worker omits them from the tool schemas entirely. dropthis_update_content accepts the same content inputs as dropthis_publish; a source_url is fetched server-side (SSRF-guarded) and stored as the new version. The id-based tools (dropthis_update_content, dropthis_update_settings, dropthis_get, dropthis_get_content, dropthis_analytics, dropthis_delete, dropthis_list_deployments, dropthis_restore_deployment) require the full drop_… id from the publish response and are strict id-only: pass a URL or slug and the tool returns an error pointing you at dropthis_resolve, which turns a public URL/slug back into the drop_… id (owner-scoped). Resolve once, then edit by id — persist the drop_… id, since URLs and slugs are locators that can drift. Connections whose OAuth grant lacks the drops:write scope see only the read tools.
dropthis_account returns your account's exact limits.
The team-management tools (dropthis_create_workspace, dropthis_rename_workspace, dropthis_delete_workspace, dropthis_members, dropthis_invite_member, dropthis_update_member_role, dropthis_remove_member, dropthis_invitations, dropthis_accept_invitation) need a team-scoped credential (ADR-0068) — a publish-only key cannot manage teams. Find a workspace id with dropthis_workspaces and a member's accountId with dropthis_members. dropthis_accept_invitation is the teammate's join path: list your invites with dropthis_invitations, then accept by its invitation id (or by the raw token from the invite email).
Workspaces (teams)
Every drop lands in a workspace (ADR-0067). A fresh login homes to your personal workspace; teams are shared workspaces with members and roles. Each connection has one active workspace, and publishes go there by default:
dropthis_workspaceslists the workspaces this connection can act in and flags the active one.dropthis_use_workspaceswitches the active workspace; the choice persists server-side across reconnects.dropthis_publishtakes a per-callworkspaceoverride — write-side targeting for a new drop.dropthis_listtakes a per-callworkspaceselector — list another workspace you belong to without switching.id-addressed ops (
update_content,update_settings,delete, …) always act in the drop's own workspace (a drop never moves workspace).dropthis_accountechoes the active workspace (name, kind, your role).
A static sk_ API key is pinned to the one workspace it was minted in — dropthis_use_workspace and the per-call workspace override/selector do not apply to it. To act in another workspace with an sk_ key, mint a key in that workspace. OAuth (remote) connections are not pinned and can switch freely.
Permissions & read-only
Write tools (publish, update, delete, domain and team management) require write access; the read tools never do:
A static
Authorization: Bearer sk_...key is always write-capable (account-scoped).An OAuth (remote connector) grant must hold the
drops:writescope to see the write tools. The read tools need no scope, so a grant withoutdrops:write— or any session in read-only mode — sees the read tools alone. A403 insufficient_scopefrom a write tool means re-authenticate to requestdrops:write.
There are two ways to force a read-only session even with a write-capable credential — only the read tools are registered, so there is zero write/delete risk:
Local / stdio: set the env var
DROPTHIS_READ_ONLY=true.Remote: append
?readonly=trueto the endpoint (https://mcp.dropthis.app/mcp?readonly=true).
The read tools that stay available in a read-only session are: dropthis_get, dropthis_list, dropthis_list_deployments, dropthis_get_content, dropthis_analytics, dropthis_resolve, dropthis_account, dropthis_domains_list, dropthis_domains_get, dropthis_workspaces, dropthis_members, and dropthis_invitations. Everything else is a write tool and is hidden (dropthis_restore_deployment, a version-history rollback, needs the drops:write scope).
Toolsets (trim the tool surface)
All 29 tools load by default, but a publish-and-edit session rarely needs the 17 domains/workspaces/members/invitations tools. Register a subset to cut the per-session tool prose:
Local / stdio: set
DROPTHIS_TOOLSETSto a comma list, e.g.DROPTHIS_TOOLSETS=drops.Remote: append
?toolsets=to the endpoint (beside?readonly=), e.g.https://mcp.dropthis.app/mcp?toolsets=dropsor?toolsets=drops,account.
Values: drops (the core publish/edit/read tools — 11), domains (6), workspaces (workspaces + members + invitations — 11), and account (1). Unset, empty, or all-unrecognized → all toolsets (the default). Unknown tokens are ignored. ?readonly= and ?toolsets= compose: each hides tools independently, so ?toolsets=drops&readonly=true leaves only the drop read tools. The tool list is fixed at connect — restart the stdio server (or reconnect the remote connector) after changing the value. A hosted claude.ai connector has no query-param UI, so set it in the connector URL you add.
Multi-file bundles (files input)
A files bundle holds up to 200 files. Each file has a path (bundle-relative, used verbatim in HTML/CSS src/href attributes) and exactly one content source:
Field | Use for | Notes |
| UTF-8 text: HTML, CSS, JS, JSON, SVG, markdown | Text is sent inline |
| Remote assets: images, video, PDFs, fonts | Server fetches the URL; no bytes pass through your agent. Optional |
| Small inline binary blobs only | Capped at 64 KiB encoded; rejected with a corrective error above that threshold pointing at |
Never base64-encode an image that is already publicly reachable — use source_url instead. Example bundle with mixed sources:
{
"files": [
{ "path": "index.html", "content": "<html>…<img src='hero.jpg'>…</html>" },
{ "path": "hero.jpg", "source_url": "https://cdn.example.com/hero.jpg" },
{ "path": "logo.png", "source_url": "https://cdn.example.com/logo.png", "content_type": "image/png" }
]
}Image transforms. A source_url image can carry a transform so the server resizes/re-encodes it on ingest — point at a big original and store a small web-optimised derivative, no scratch bucket needed. Fits inside the box, never upscales, strips metadata. Only with source_url; omit size_bytes/checksum_sha256 (the stored object reflects the output).
{
"files": [
{ "path": "hero.jpg", "source_url": "https://cdn.example.com/original.png", "transform": { "width": 1080, "quality": 78, "format": "jpeg" } }
]
}Editing a bundle — update_content is a partial update
dropthis_update_content patches by default (mode: "patch"). The files you send are upserted by path; every file you don't mention is carried forward unchanged. So to fix one page, send only that page — a previously-bundled image stays put:
{
"drop_id": "drop_…",
"files": [{ "path": "index.html", "content": "<html>…edited…</html>" }]
}To remove a file, list its path in delete_paths:
{
"drop_id": "drop_…",
"files": [{ "path": "index.html", "content": "<html>…</html>" }],
"delete_paths": ["assets/old-hero.jpg"]
}To swap the entire content set in one call, use mode: "replace" — the files you send become the whole drop and everything else is dropped (delete_paths is invalid in replace mode).
Example prompts
Natural-language asks that exercise the main tools (the agent picks the tool):
Publish — "Publish this HTML report and give me the link." →
dropthis_publishreturns a permanenturland thedrop_…id.Self-contained bundle — "Publish this landing page with its four images" (HTML +
files[]where each image is asource_url). → one drop, images fetched server-side and stored, no hot-linking.Edit in place — "Change the headline on that drop." →
dropthis_get_contentreads the current file, you edit it,dropthis_update_contentships a new version at the same URL.Recover the id — "Update https://abc123.dropthis.app/." →
dropthis_resolveturns the URL into itsdrop_…id, thendropthis_update_content.Custom domain — "Serve my drops at reports.example.com." →
dropthis_domains_connect(path mode) returns the CNAME, thendropthis_domains_verifyuntil live.
Privacy
dropthis is a hosted service: content you publish is sent to and stored by dropthis and served at a public URL. See the privacy policy at https://dropthis.app/privacy and the terms at https://dropthis.app/terms.
Support
Issues and feature requests: https://github.com/dropthis-dev/dropthis-mcp/issues
Email: support@dropthis.app
Known limitations
Plan caps apply per drop and per account (size, TTL, custom domains, passwords) across the Free / Keep / Pro / Business tiers — call
dropthis_accountto read the active limits before a large publish.Binary bytes can't ride in a tool call: inline
content_base64is capped at 64 KiB. For images/video/PDFs/fonts usesource_url(the server fetches a public URL), or, on the local stdio server only,file/paths.source_urlmust be publicly reachable over http(s); the server fetches it (SSRF-guarded). A private/localhost URL won't resolve.id-only edits: the URL slug is not an id — keep the
drop_…id from publish (or recover it withdropthis_resolve).Setting a password is Pro-only; clearing one (
null) is always allowed.
Develop
npm install
npm run dev # tsx src/bin.ts (needs DROPTHIS_API_KEY)
npm run dev:worker # wrangler dev (remote Worker)
npm test # vitest (node) + vitest-pool-workers
npm run typecheck # tsc (node + worker tsconfigs)
npm run lint # biome
npm run build # tsup → dist/bin.cjs (the npm package)
npm run build:worker # wrangler deploy --dry-run (bundle check)One TypeScript codebase, two outputs: the stdio npm package and the Cloudflare Worker. Both are thin clients over the dropthis REST API (@dropthis/node for stdio, @dropthis/node/edge for the Worker); tool handlers are unit-tested against an injected fake client.
License
MIT
Available Tools
29 toolsdropthis_accept_invitationAccept an invitationAInspect
Accept a team-workspace invitation and join — this is the teammate's join path. Pass token (the raw single-use token from the invite email) OR invitation_id (from dropthis_invitations; the agent path, no email needed) — at least one is required, token wins if both are given. Requires a team-scoped credential (ADR-0068: members:write) authenticated as the invited email. Joins and switches your active workspace to the team; returns the joined workspace.
| Name | Required | Description | Default |
|---|---|---|---|
| token | No | The raw single-use token from the invite email. | |
| invitation_id | No | The invitation id from dropthis_invitations (the agent path, no token). |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| kind | No | |
| name | No | |
| plan | No | |
| role | No | |
| slug | No | |
| isActive | No | |
| creatorCanReach | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (openWorldHint false, destructiveHint false), the description discloses critical behavioral details: the token is single-use, the action joins and switches the active workspace, and it returns the joined workspace. It also notes that a team-scoped credential authenticated as the invited email is required, which is important operational context not available in the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is tightly written in two sentences. It front-loads the primary purpose, then packs in parameter selection, prerequisites, side effects, and return value without wasted words. Every clause adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity—two mutually exclusive parameters, a required credential, side effects, and a return value—the description covers all essential aspects. It ties into sibling tools (dropthis_invitations) and provides sufficient context for an agent to invoke it correctly. The presence of an output schema and good annotations further reduces the need for more detail.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
While the schema already describes the two parameters, the description adds crucial semantics: it clarifies that token is a raw single-use token from the invite email, invitation_id comes from dropthis_invitations, that at least one is required, and that token takes precedence when both are provided. This goes well beyond the schema descriptions and gives the agent a clear decision rule.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description begins with a specific verb and resource: 'Accept a team-workspace invitation and join.' It clearly distinguishes this from sibling tools by labeling it 'the teammate's join path,' contrasting it with inviter-side tools like dropthis_invite_member. The purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use guidance: it is the join path for teammates. It explains exactly how to choose parameters, noting that token is from the invite email, invitation_id is the agent path from dropthis_invitations, and that at least one is required with token winning if both are given. It also states the credential requirement (members:write) and the side effect, giving clear context for use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dropthis_accountGet account profileARead-onlyInspect
Return the authenticated account profile (id, email, display name, plan, status) WITH the active plan's entitlements — the full capability matrix (what's unlocked + the plan that unlocks each gated feature) plus numeric limits (max drop size, default drop lifetime/TTL, storage cap, custom-hostname + seat caps) — so a feature gate can be pre-checked and a publish sized upfront with no separate lookup. Also returns the active workspace (name, kind, your role) — call before a multi-team publish to confirm which workspace will receive it.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| plan | No | |
| No | ||
| usage | No | |
| status | No | |
| createdAt | No | |
| workspace | No | The active workspace {id, slug, name, kind, role}. |
| upgradeUrl | No | |
| displayName | No | |
| entitlements | No | The active plan's capability matrix: {capabilities} (per-feature state — boolean caps are true/false, enum caps like ogPreview/analytics carry a value; compare by value, not truthiness), {requiredPlan} (the lowest plan that unlocks each gated capability), and {limits} (numeric caps: maxSizeBytes, defaultTtlSeconds, maxStorageBytes, maxCustomHostnames, seatLimit). Pre-check a feature gate here before attempting a gated op. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint=true and openWorldHint=false, annotations already establish the read-only safety profile. The description adds meaningful behavioral context by detailing the returned capability matrix, numeric limits, and active workspace, and how this supports pre-checking feature gates and confirming publish context. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is information-dense but each clause adds value: profile fields, entitlements, limits, workspace, and usage rationale. It is front-loaded with the primary resource and avoids filler, though the first sentence is somewhat long and parenthetical.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters, a readOnly annotation, and the presence of an output schema, the description fully covers the tool's purpose, content, and when to invoke it. It explains both the account profile and workspace aspects, leaving no significant gaps for an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters and schema coverage is 100%, so the description need not explain parameters. Per the rubric, 0 params yields a baseline of 4; the description focuses on output semantics, which is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly specifies the resource (authenticated account profile) and the exact contents returned: profile fields, entitlements, numeric limits, and active workspace. It distinguishes from sibling tools by emphasizing the combined payload for feature gating and pre-publish workspace confirmation, something no single sibling provides.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit usage context: call before a multi-team publish to confirm workspace, and for feature gate pre-checks to avoid separate lookups. It does not name alternative tools like dropthis_workspaces, but the 'no separate lookup' phrasing implies when not to use other tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dropthis_analyticsGet a drop's view analyticsARead-onlyInspect
Approximate view analytics for one drop, by its drop_… id. Gated by the analytics capability: Free returns feature_not_in_plan (403, needs Keep); Keep (view_count) returns views + truncated only; Pro+ (full) also returns byCountry / byReferer / daily. Counts are best-effort — captured fire-and-forget at the edge, so treat them as an approximate signal, not exact human visits. Requires drop_id (id-only — for a public URL or slug call dropthis_resolve first). Use when the user asks how many views / how much traffic a drop got.
| Name | Required | Description | Default |
|---|---|---|---|
| drop_id | Yes | The `drop_…` id of the drop whose analytics to read (id-only — a URL or slug is rejected; call dropthis_resolve to turn a public URL/slug into its id first). |
Output Schema
| Name | Required | Description |
|---|---|---|
| daily | No | Daily view series [{date, views}] — full (Pro+) analytics only; null on view_count. |
| views | Yes | Approximate total canonical-view count (best-effort). |
| byCountry | No | Top countries [{key, views}] — full (Pro+) analytics only; null on view_count. |
| byReferer | No | Top referer hosts [{key, views}] — full (Pro+) analytics only; null on view_count. |
| truncated | No | True when the event set exceeded the read cap and the figures are a lower bound. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the readOnlyHint annotation, disclosing that counts are 'best-effort — captured fire-and-forget at the edge, so treat them as an approximate signal, not exact human visits.' It also details plan-gated responses (feature_not_in_plan, views+truncated, byCountry/byReferer/daily), which is crucial behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but well-structured: purpose first, then capability tiers, accuracy caveat, parameter prerequisite, and usage trigger. Every sentence contributes unique information, with no filler or restatement. Length is justified by the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the usage scenario, plan-based return variations, accuracy limitations, and the prerequisite resolve step. With an output schema present, it does not need to list return fields, and it adequately handles error cases (feature_not_in_plan). Complete for a read-only analytics tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description covers the only parameter (drop_id) fully, including the id-only requirement and the resolve alternative. The description essentially repeats this, adding no new semantic information beyond the schema. Baseline 3 applies due to high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Approximate view analytics for one drop, by its `drop_…` id.' It uses a specific verb ('get' from title, but more precisely 'read analytics') and resource ('view analytics for a drop'), and distinguishes from siblings by specifying id-only usage and pointing to dropthis_resolve for URL/slug inputs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance is provided: 'Use when the user asks how many views / how much traffic a drop got.' It also tells the agent to call dropthis_resolve first for public URLs/slugs, and explains capability-based limitations (Free vs Keep vs Pro+) that affect when the tool is usable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dropthis_create_workspaceCreate a team workspaceAInspect
Create a new team workspace (you become its owner). Requires a team-scoped credential (ADR-0068: workspaces:write) — a publish-only key cannot create teams. Returns the new workspace's id and slug; switching the active workspace to it is separate (dropthis_use_workspace). Use dropthis_workspaces to see the teams you already belong to. If creatorCanReach comes back false, the credential created the team outside its allowlist and will be denied on the next write — re-authenticate to obtain a credential that reaches it.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | The team's display name. | |
| slug | No | URL-safe slug; derived from the name when omitted. A clash on an explicit slug → 409. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| kind | No | |
| name | No | |
| plan | No | |
| role | No | |
| slug | No | |
| isActive | No | |
| creatorCanReach | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds valuable behavioral context beyond the sparse annotations: return value (id and slug), the fact that switching active workspace is a separate action, and the subtle creatorCanReach failure mode with its security implication (denied on next write, re-auth needed). This goes far beyond what openWorldHint/destructiveHint convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a dense but well-structured paragraph. Each sentence serves a distinct purpose: action+ownership, auth prerequisite, return+separation concern, comparison to sibling, and failure-mode warning. No filler; sentence order is logical.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a creation tool with auth requirements and a non-obvious failure mode, this description covers all essential aspects: what it does, prerequisites, output, related operations, and a warning about allowlist reachability. With an output schema present, the description need not elaborate further on return structure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with clear descriptions for both name and slug, so the baseline is 3. The description does not add parameter-level detail beyond the schema (e.g., no mention of validation rules beyond the schema's 409 clash note), but it also does not need to.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource ('Create a new team workspace') and immediately clarifies ownership ('you become its owner'), distinguishing it from sibling tools like dropthis_workspaces (list) and dropthis_use_workspace (switch active). This clearly identifies the tool's unique role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use it (requires team-scoped credential with workspaces:write), when not to (publish-only key cannot create teams), and points to alternatives (dropthis_workspaces to list existing, dropthis_use_workspace to switch). This is textbook usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dropthis_deleteDelete a dropADestructiveInspect
Permanently delete a drop and its public URL by drop_id (the drop_… id, not the slug or URL). Destructive and irreversible; requires confirm: true.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | Yes | Must be true to delete. | |
| drop_id | Yes | The `drop_…` id of the drop to delete (id-only — a URL or slug is rejected; call dropthis_resolve to turn a public URL/slug into its id first). |
Output Schema
| Name | Required | Description |
|---|---|---|
| dropId | No | |
| deleted | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond the destructiveHint annotation by specifying that both the drop and its public URL are removed, the operation is irreversible, and a confirmation flag is mandatory. This is critical behavioral context for an agent evaluating the consequences of invoking the tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that front-loads the core action and packs in the identifier constraint, destructiveness, and confirmation requirement without any wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter destructive tool with an output schema, the description covers the essential aspects: the action, the identifier specificity, the irreversibility, and the required confirmation. No critical information is missing for an agent to decide on and execute the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already thoroughly documents both parameters, including the drop_id format and the confirm constraint. The main description reiterates these points but does not add new parameter-level meaning beyond the schema, so a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: to permanently delete a drop and its public URL using a drop_id. It specifies the exact identifier type ('drop_…' id, not slug or URL), distinguishing it from workspace deletion and other sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: use this tool for permanent deletion of a drop, emphasizing that it is destructive and irreversible and requires confirm=true. It does not explicitly list alternatives or when-not-to-use scenarios, but the context is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dropthis_delete_workspaceDelete a team workspaceADestructiveInspect
Permanently delete a team workspace by its id. Destructive and irreversible (its drops and members go with it); requires confirm: true. Owner only — requires a team-scoped credential (ADR-0068: workspaces:admin). Use dropthis_workspaces to find the workspace id.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | Yes | Must be true to delete. | |
| workspace | Yes | The workspace id to delete (see dropthis_workspaces). |
Output Schema
| Name | Required | Description |
|---|---|---|
| deleted | No | |
| workspace | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that deletion is destructive, irreversible, and cascades to 'drops and members'. It also states the owner-only permission and credential requirement (ADR-0068). This significantly augments the destructiveHint annotation with specific consequences and prerequisites.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four crisp sentences that front-load the core purpose and then add necessary caveats (destructive, confirm, owner, credential) and a pointer for obtaining the workspace id. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, two-parameter tool with an output schema, the description covers the action, consequences, permissions, confirmation requirement, and how to obtain required input. It leaves little ambiguity for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with clear descriptions for both `workspace` and `confirm`. The description reiterates `confirm: true` and references dropthis_workspaces for the workspace id, but adds little beyond the schema for the parameters themselves.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Permanently delete a team workspace by its id', specifying the verb (delete), resource (team workspace), and method (by id). This distinguishes it from sibling tools like dropthis_delete or workspace management tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides explicit guidance: 'Owner only' establishes who may use it, 'requires `confirm: true`' is a prerequisite, and 'Use dropthis_workspaces to find the workspace id' points to a supporting tool. However, it doesn't explicitly contrast with other deletion tools, so slightly less than full alternative specification.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dropthis_domains_connectConnect a custom domainAIdempotentInspect
Connect a custom domain (the user's own hostname) to the dropthis account and start the DNS loop. The response carries the exact CNAME record to create (dns[]: name → value) plus structured next hints: if you have access to the user's DNS provider tooling (e.g. a Cloudflare or registrar MCP), create the CNAME record yourself, then call dropthis_domains_verify; otherwise show the user the record and wait for them to create it. Re-call dropthis_domains_verify until status is live; then publish with domain set — or rely on the account default for path domains. Mode (immutable; delete and reconnect to change it): path = many drops under one hostname at https://{hostname}/{slug}/ — the first live path domain auto-becomes the account's default publish target; dedicated = the whole hostname serves exactly one drop at its root. Idempotent: re-connecting an already-connected hostname returns the existing domain.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | Yes | path = many drops under this hostname at /{slug}/ (the first live path domain becomes the account's default publish target); dedicated = the whole hostname serves exactly one drop at its root. Immutable — delete and reconnect to change. | |
| hostname | Yes | The hostname to connect, e.g. drops.example.com. Subdomains work everywhere; an apex domain needs CNAME-flattening (ALIAS/ANAME) support at the DNS provider. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| dns | No | |
| mode | No | |
| next | No | |
| dropId | No | |
| status | No | |
| default | No | |
| hostname | No | |
| consoleUrl | No | |
| retryAfter | No | |
| verifiedAt | No | |
| failureReason | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark idempotent and non-destructive, but the description adds key behavioral traits: mode immutability ('delete and reconnect to change'), the DNS loop and verification process, and the side effect that the first live path domain becomes the default publish target. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence adds value: purpose, response structure, workflow steps, mode semantics, and idempotency. It is front-loaded with the core action and flows logically. Length is justified by the tool's complexity; no filler or redundant phrases.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema, the description still explains the key response elements (CNAME record and `next` hints) and the full verification loop. It covers prerequisites (DNS provider tooling), mode differences, default publish behavior, and idempotency. For a multi-step domain connection tool, this is complete and well-rounded.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for both parameters, with detailed explanations of `mode` and `hostname`. The description adds some workflow context (e.g., response carries CNAME, first live path domain becomes default), but this info is largely already present in the schema. Baseline 3 is appropriate since the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb ('Connect'), identifies the exact resource ('custom domain... to the dropthis account'), and scopes the action ('start the DNS loop'). It clearly distinguishes from sibling tools like dropthis_domains_verify or dropthis_domains_list by focusing on the initial connection step.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use and next-step guidance: if DNS provider tooling is available, create the CNAME yourself then call dropthis_domains_verify; otherwise show the user. It also advises re-calling verify until live and then publishing with `domain` set. This goes beyond basic usage to a full workflow with alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dropthis_domains_deleteDelete a custom domainADestructiveInspect
Disconnect a custom domain: the hostname stops serving drops and its routes are removed (the drops themselves are NOT deleted). Destructive; requires confirm: true. Afterwards, remove your DNS record for the hostname — while your CNAME still points at dropthis, the hostname could be re-connected by another dropthis account (the response repeats this dangling-CNAME warning with the exact record). If the domain was the publish default, new publishes revert to the shared pool.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | The `dom_…` id or the hostname of the domain to disconnect. | |
| confirm | Yes | Must be true to delete. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| deleted | No | |
| warning | No | |
| hostname | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true, but the description adds substantial behavioral context: the confirm requirement, drops not deleted, the dangling-CNAME security warning, and the fallback to the shared pool if the domain was the publish default. This goes well beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded with the core action. Every sentence adds a distinct consequence or instruction—effect, destructive confirmation, DNS warning, and default-publish fallback—with no fluff or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive domain-disconnection tool, the description covers all critical outcomes: impact on drops and routes, security warning about DNS, and fallback behavior for the publish default. The presence of an output schema means return values need not be described.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both parameters fully described ('dom_…' id or hostname, confirm must be true). The description adds no additional parameter-level syntax or format details beyond the schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource ('Disconnect a custom domain') and explains the concrete effect (hostname stops serving drops, routes removed). This clearly differentiates it from sibling tools like connect, verify, update, and list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear context for use (disconnecting a domain) and explicitly notes what this tool does NOT do ('the drops themselves are NOT deleted'), providing a when-not signal. It does not name alternative tools, but the guidance is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dropthis_domains_getGet a custom domainARead-onlyIdempotentInspect
Fetch one custom domain's STORED state by its dom_… id or hostname: status (pending_dns/verifying/live/failed), mode, default flag, the DNS record to create (dns[] with name → value and the stored diagnostic hints), and next-step guidance. Reads what dropthis last recorded — it does NOT run a live DNS check; to re-check DNS/TLS and advance the status, call dropthis_domains_verify. Use to re-read the CNAME instructions for a connected domain, or to check a domain's state on a read-only connection. For one row per domain across the account use dropthis_domains_list.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | The `dom_…` id or the hostname of the domain to fetch. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| dns | No | |
| mode | No | |
| next | No | |
| dropId | No | |
| status | No | |
| default | No | |
| hostname | No | |
| consoleUrl | No | |
| retryAfter | No | |
| verifiedAt | No | |
| failureReason | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only and idempotent hints, and the description adds the critical behavioral context that it 'does NOT run a live DNS check' and only reads what dropthis last recorded. This is valuable beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: it states what is returned, clarifies a key limitation, gives use cases, and points to a sibling for list queries. Every sentence earns its place with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity and the presence of an output schema, this description is complete: it covers return fields (status, mode, DNS record, etc.), the stored-state behavior, and next-step guidance. It fully addresses the context needed for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter 'domain' is fully described in the schema as 'The `dom_…` id or the hostname'. The description repeats this same information without adding extra semantic detail, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool 'Fetch one custom domain's STORED state' by ID or hostname, and clearly distinguishes it from dropthis_domains_verify and dropthis_domains_list. The verb+resource+scope are specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides explicit when-to-use scenarios ('re-read the CNAME instructions', 'check a domain's state on a read-only connection') and names alternatives for other needs (verify, list). This is clear guidance versus siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dropthis_domains_listList custom domainsARead-onlyInspect
List the account's custom domains: each row carries the dom_… id, hostname, mode (path/dedicated), status (pending_dns/verifying/live/failed), whether it is the account's default publish target, and the mounted drop_… id for dedicated domains. Use to check which domain publish lands on by default, or to find a hostname to pass as domain to dropthis_publish. Also pass a hostname as domain to dropthis_list to see the drops currently mounted on it.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| domains | No | One row per connected custom domain. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description provides rich detail beyond the readOnlyHint annotation, including the full set of output fields, possible statuses (pending_dns/verifying/live/failed), and the distinction between path and dedicated domains. This gives the agent a clear picture of what information is retrievable and how to interpret results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences but the first is long and dense with field details. It is efficient and avoids unnecessary fluff, though a slight restructuring could improve scanability. Still, every sentence earns its place by conveying essential output and usage information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (0 params, output schema present), the description fully covers the tool's purpose, output contents, and typical usage scenarios. It also cross-references related tools (dropthis_publish, dropthis_list) to help the agent navigate the tool family.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has 0 parameters, so the schema covers everything. The description adds no parameter-specific detail because none are needed; it focuses on the output and usage. This is appropriate for a no-parameter list operation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'List the account's custom domains' and enumerates the specific fields returned (dom_ id, hostname, mode, status, default flag, mounted drop id). It clearly distinguishes this tool from siblings like dropthis_domains_get, connect, verify, update, and delete by focusing on the list behavior.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit use cases: 'check which domain publish lands on by default' and 'find a hostname to pass as domain to dropthis_publish.' It also tells the user to pass a hostname to dropthis_list to see mounted drops, providing clear guidance on when to use this tool and how it relates to alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dropthis_domains_updateUpdate a custom domainAIdempotentInspect
Repoint a DEDICATED custom domain to a different drop (drop_id), or set/clear a PATH domain as the account's default publish target (default). Changes ROUTING only — to change the CONTENT of the page a domain serves, use dropthis_update_content on the drop, NOT this tool. Mode is immutable: delete and reconnect to change it. Takes the dom_… id or the hostname.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | The `dom_…` id or the hostname of the domain to update. | |
| default | No | Path domains only (must be live): true makes this the account's default publish target; false clears it. | |
| drop_id | No | Dedicated domains only: the `drop_…` id of the drop the hostname should serve (repoints the domain). |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| dns | No | |
| mode | No | |
| next | No | |
| dropId | No | |
| status | No | |
| default | No | |
| hostname | No | |
| consoleUrl | No | |
| retryAfter | No | |
| verifiedAt | No | |
| failureReason | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (idempotent, non-destructive), the description adds critical behavioral context: 'Changes ROUTING only' clarifies it doesn't modify content, and 'Mode is immutable' discloses a permanent characteristic. This fully discloses the tool's behavior and limitations without contradicting annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description packs multiple pieces of information (purpose, domain types, parameter conditions, alternatives, immutability) into a compact yet readable structure. Each sentence earns its place and the most important distinction (routing vs content) is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's two modes and the existence of an output schema, the description covers all essential context: what changes (routing), what doesn't (content), the mode immutability constraint, and valid input formats. It also differentiates from siblings, making it complete for an agent to correctly select and invoke the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds semantic value by explaining that `drop_id` is for dedicated domains and `default` is for path domains, and that `domain` accepts either the `dom_…` id or hostname. This goes beyond the schema descriptions by clarifying the domain-type-specific usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's dual purpose: repointing dedicated domains via `drop_id` and setting/clearing path domains as default via `default`. It uses specific verbs ('Repoint', 'set/clear') and distinguishes from sibling tools by noting that `dropthis_update_content` handles content changes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use guidance: use for routing only, not for content changes. It explicitly names the alternative (`dropthis_update_content`) and adds a constraint ('Mode is immutable: delete and reconnect to change it'), giving clear direction on when and how to use the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dropthis_domains_verifyVerify a custom domainAIdempotentInspect
Check a custom domain's DNS and TLS provisioning and advance its status (pending_dns → verifying → live). Not blocking — if status comes back verifying or pending_dns, re-call after the retry_after seconds shown in the dns records; each record's diagnostics show the expected value vs what DNS currently observed. Always re-callable — also the recovery path after a failed status (e.g. a restrictive CAA record blocking certificate issuance). Once status is live the domain serves drops: publish with domain set, or rely on the account default for path-mode domains. Takes the dom_… id or the hostname.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | The `dom_…` id or the hostname of the domain to verify. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| dns | No | |
| mode | No | |
| next | No | |
| dropId | No | |
| status | No | |
| default | No | |
| hostname | No | |
| consoleUrl | No | |
| retryAfter | No | |
| verifiedAt | No | |
| failureReason | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the idempotentHint and destructiveHint annotations, the description discloses key behavioral details: the non-blocking behavior, the 'retry_after' mechanism, diagnostics showing expected vs observed DNS values, and what happens once status is 'live' (publishing with domain set). This adds significant context about the tool's runtime behavior and recovery semantics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is information-dense and well-structured: purpose first, then behavior, re-call guidance, recovery path, post-live outcome, and parameter detail. Every sentence contributes necessary context, though it is slightly longer than strictly needed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with nuanced behavior (status advancement, retry logic, recovery), the description covers all critical aspects: purpose, usage, behavioral nuances, and the meaning of the parameter. The presence of an output schema reduces the need to explain return values, and the description is complete for the given complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value by specifying acceptable input forms ('the `dom_…` id or the hostname'), which helps the agent understand what 'domain' can be even though the schema describes it as a string.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Check a custom domain's DNS and TLS provisioning and advance its status (pending_dns → verifying → live).' This is a specific verb+resource+state transition, and it distinguishes the verify operation from sibling domain tools like connect, list, get, update, and delete.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides strong context for when to use the tool: it explains the non-blocking nature, instructs to re-call after 'retry_after' seconds if status is 'verifying' or 'pending_dns', and explicitly identifies it as the recovery path after a 'failed' status. It does not explicitly name alternative tools, but the re-call and recovery guidance effectively communicates usage scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dropthis_getGet a dropARead-onlyInspect
Read back an EXISTING drop's settings and metadata — the settings read half of the edit loop: in a read-modify-write / read-before-patch cycle, read current settings here, change them, then write with dropthis_update_settings (content goes through dropthis_update_content). Fetch one drop by its drop_… id (id-only), returning its URL, slug, title, status, visibility, revisions, expiry, noindex flag, whether it is password-protected, custom metadata, and the current revision number. For a public URL or slug, call dropthis_resolve first to get the drop_… id. Settings and metadata only — for the bytes the drop actually serves use its read sibling dropthis_get_content (the two read halves: dropthis_get = settings/metadata, dropthis_get_content = served content).
| Name | Required | Description | Default |
|---|---|---|---|
| drop_id | Yes | The `drop_…` id of the drop to fetch (id-only — a URL or slug is rejected; call dropthis_resolve to turn a public URL/slug into its id first). |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | The drop's permanent drop_… id — persist it for every follow-up tool. |
| url | No | The canonical, always-branded public URL (share with humans). |
| next | No | Structured follow-up hints keyed by action. |
| slug | No | URL slug — a locator, not an id. |
| title | No | |
| rawUrl | No | Raw-bytes URL for a single non-HTML file; null for HTML drops and collections. |
| status | No | |
| noindex | No | |
| metadata | No | |
| revision | No | |
| expiresAt | No | |
| sizeBytes | No | Total published bundle size in bytes — check before iterating on a heavy page. |
| workspace | No | The workspace this drop belongs to {id, slug, name, kind}. |
| visibility | No | |
| passwordProtected | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description discloses useful behavioral details: the tool is id-only (rejects URL/slug), returns a specific set of fields, and explicitly does not return content bytes. This adds meaningful context about what the tool actually does and its boundaries, enhancing trust and correct usage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded with the core purpose. It is somewhat long but every sentence earns its place: purpose, usage context, return fields, id-only constraint, and sibling differentiation. There is no wasted fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple single-parameter tool, the description covers all necessary context: what it returns, how to get the id, and what it does not cover. The presence of an output schema complements the return-field list, making the tool fully understood without missing pieces.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already fully describes drop_id (including the id-only restriction and the dropthis_resolve pointer) with 100% coverage. The description repeats this information but adds no new parameter-level semantics, so it continues to rely on the schema. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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: 'Read back an EXISTING drop's settings and metadata'. It clearly distinguishes itself from siblings by explicitly naming dropthis_get_content (served content) and dropthis_resolve (URL/slug to id conversion), leaving no ambiguity about its scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use and when-not-to-use guidance: it positions the tool within a read-modify-write cycle ('read current settings here, change them, then write with dropthis_update_settings'), instructs to use dropthis_resolve for public URLs/slugs, and directs to dropthis_get_content for served bytes. This fully orients the agent among alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dropthis_get_contentRead a drop's contentARead-onlyInspect
Read back the content an EXISTING drop is serving — the content read half of the edit loop: in a read-modify-write / read-before-patch cycle, read with this tool, modify, then ship the new version with dropthis_update_content. Requires drop_id (the drop_… id, id-only; for a public URL or slug call dropthis_resolve first to get the id). By default returns the CURRENT deployment's file manifest (entry plus each file's path, MIME type, and size in bytes); pass deployment_id (from dropthis_list_deployments) to read a historical version — to actually roll a drop back to a prior version, use dropthis_restore_deployment (this tool only reads) — or path (one of the manifest's files[].path values) to fetch one file: text content is returned directly — in the result text and, when it fits, mirrored into structuredContent.content (a file past ~80,000 characters comes back one window at a time, truncated with truncated: true and the next start_char offset — page through the whole file with start_char; never edit a partial window); binary files as a byte-count summary. Use when the user wants to read, view, inspect, diff, or edit what a drop currently serves. NOT for fetching arbitrary web pages (publish with source_url does that), and it returns content only — for a drop's settings/metadata use its read sibling dropthis_get (the two read halves: dropthis_get_content = served content, dropthis_get = settings/metadata).
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Fetch this one file's stored content instead of the manifest — one of the manifest's files[].path values, e.g. index.html. | |
| drop_id | Yes | The `drop_…` id of the drop to read (id-only — a URL or slug is rejected; call dropthis_resolve to turn a public URL/slug into its id first). | |
| start_char | No | With `path`: read the text file starting at this character offset (default 0). A file larger than the ~80,000-character window comes back one window at a time — read from 0, then re-call with the `next_start_char` the previous window reported, until it stops. Owner read-back, so this works for historical deployments and password-protected drops that the public URL can't serve. | |
| deployment_id | No | Read this historical deployment (a `dep_…` id from dropthis_list_deployments) instead of the current one. |
Output Schema
| Name | Required | Description |
|---|---|---|
| next | No | |
| path | No | |
| entry | No | |
| files | No | Manifest: each file's path, contentType, sizeBytes. |
| binary | No | |
| dropId | No | |
| status | No | |
| content | No | The file's text body, inlined when reading a single text file that fits the cap. |
| revision | No | |
| sizeBytes | No | |
| startChar | No | Character offset this window started at (present when reading past the start). |
| truncated | No | |
| contentType | No | |
| deploymentId | No | |
| nextStartChar | No | Offset to pass as `start_char` on the next dropthis_get_content call to read the following window; absent at end of file. |
| returnedChars | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description doubles down by saying 'this tool only reads' and 'never edit a partial window.' It further discloses default manifest output, historical deployment reads, 80,000-character windows with truncated flags and next_start_char, and binary byte-count summaries—rich behavior not visible in annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The text is long but front-loaded and tightly packed; each clause adds operational detail (default manifest, historical reads, windowing, exclusions). It is dense but free of filler, and the structure using dashes and semicolons keeps related ideas together.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity and 4 parameters, the description covers prerequisites, default vs. historical vs. file-specific behavior, output format, pagination, binary handling, workflow integration, and exclusions. It fully prepares an agent to select and invoke the tool correctly in context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema descriptions already cover all four parameters 100%, so the baseline is 3. The description adds meaningful workflow semantics: drop_id is id-only requiring prior resolution, deployment_id comes from dropthis_list_deployments, path must match manifest entries, and start_char is for paging with a warning not to edit partial windows.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Read back the content an EXISTING drop is serving' and explicitly casts it as the read half of a read-modify-write loop, naming dropthis_update_content as the write counterpart. It also contrasts with sibling dropthis_get (settings/metadata) and dropthis_resolve, making the tool's unique role unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit usage guidance: 'Use when the user wants to read, view, inspect, diff, or edit what a drop currently serves.' It names exclusions—'NOT for fetching arbitrary web pages' (publish with source_url) and directs metadata needs to dropthis_get—plus a prerequisite (call dropthis_resolve for URL/slug).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dropthis_invitationsList my invitationsARead-onlyInspect
List the workspaces you have been invited to (your own pending invitations) — each row carries the invitation id, the workspace it is for, the role you would join as, its status, and when it expires. Requires a team-scoped credential (ADR-0068: members:read). Accept one with dropthis_accept_invitation (by invitation_id here, or by the raw token from the invite email).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| invitations | No | The caller's own invitations {id, workspaceId, email, role, status, expiresAt}. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description reinforces this with 'List'. It adds behavioral context beyond annotations: the specific return fields (invitation id, workspace, role, status, expiry) and the required auth scope (ADR-0068: members:read). No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: the first states purpose and return fields, the second covers auth requirement and references the accept action. Each clause adds value with no redundancy, and the description is front-loaded with the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read-only tool with an output schema present, the description covers purpose, scope, auth, and related next action. It is complete for its complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so schema coverage is inherently 100%. The description does not need to explain parameter semantics and does not attempt to. Baseline 4 applies for zero-parameter tools.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'List' and resource 'workspaces you have been invited to', clarifying it lists pending invitations. It further scopes to 'your own pending invitations', distinguishing it from siblings like dropthis_members and dropthis_accept_invitation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context (list pending invitations) and a prerequisite (team-scoped credential with members:read). Names the alternative tool dropthis_accept_invitation for acting on an invitation. However, it does not explicitly state when not to use this tool compared to other list tools, though the 'your own pending invitations' scoping reduces ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dropthis_invite_memberInvite a workspace memberAInspect
Invite an email to a team workspace as admin or member (owner is transferred, never invited). Requires a team-scoped credential (ADR-0068: members:write; owner/admin). role defaults to member. Returns the pending invitation; the invitee accepts it via dropthis_accept_invitation (their own agent/connection). Use dropthis_workspaces to find the workspace id.
| Name | Required | Description | Default |
|---|---|---|---|
| role | No | The role to grant on join: admin or member (default member). | |
| Yes | The email address to invite. | ||
| workspace | Yes | The workspace id to invite into (see dropthis_workspaces). |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| role | No | |
| No | ||
| status | No | |
| createdAt | No | |
| expiresAt | No | |
| acceptedAt | No | |
| workspaceId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide only openWorldHint=false and destructiveHint=false, so the description carries the burden of explaining behavior. It adds valuable context: requires a team-scoped credential, role defaults to member, owner is transferred never invited, and returns a pending invitation that the invitee must accept. This goes beyond the annotations and clarifies key side effects without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise—three sentences that front-load the main purpose, then add necessary context (token requirement, role default, acceptance flow, workspace lookup). No wasted words, and all information is relevant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity, the presence of an output schema, and minimal annotations, the description covers the essential context: prerequisites, default role, owner restriction, pending invitation outcome, and next step. It doesn't mention edge cases like duplicate invites, but that's not required for a well-rounded description. The only slight gap is not stating what happens if the email is already invited or a member.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides clear descriptions for all three parameters (100% coverage), including the role enum with the default mention. The description adds minimal extra value by referencing dropthis_workspaces for the workspace parameter, but the schema alone is sufficient. Baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Invite an email to a team workspace as admin or member'. It also differentiates from sibling tools by clarifying that owners are never invited, and that acceptance is handled by a different tool (dropthis_accept_invitation). The verb 'invite' and resources (email, workspace) are specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool: it points to dropthis_workspaces to find the workspace id, and explains the acceptance flow via dropthis_accept_invitation. It also mentions the required credential and role default. While it doesn't explicitly state when not to use it, the inclusion of the owner restriction and the accept flow makes the usage context clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dropthis_listList dropsARead-onlyInspect
List the account's drops newest first, paginated, returning each drop's drop_… id, URL, title, status, and expiry when available. Use when the user wants to list / show my drops / see what they have published. Each row's id is the drop_ id the mutating tools (update_content, update_settings, delete) need — not the slug or URL. Pass domain to only list drops mounted on that custom domain (see dropthis_domains_list for the account's domains). Pass workspace (a workspace id or slug from dropthis_workspaces) to list a workspace you belong to instead of your active one, without switching it (delegated credentials only).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max items (default 20). | |
| cursor | No | Pagination cursor from a previous call. | |
| domain | No | Only drops mounted on this custom domain hostname (e.g. reports.example.com) — the recovery path when you have a custom-domain URL but no drop id. | |
| workspace | No | List a workspace you belong to instead of your active one, without switching it — workspace id or slug (find them with dropthis_workspaces; delegated credentials only — a workspace-pinned service key rejects the selector). The read-side twin of dropthis_publish's `workspace`. |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | No | The page of drops. |
| nextCursor | No | Cursor for the next page; null/absent at the end. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses pagination, ordering, field set, and the distinction between drop_ id and slug/URL. Also reveals authorization caveat for workspace ('delegated credentials only') and the recovery use-case for domain. These go well beyond the readOnlyHint annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Concise yet packed with value: opens with the core function, then usage, then crucial ID semantics, then parameter-specific guidance. Every sentence earns its place without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a list tool, it covers ordering, pagination, return fields, parameter meanings, and related tool references. With an output schema present, the description fully supports selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Even with 100% schema coverage, the description enriches each parameter: limit/cursor are implied, domain is explained as a recovery path, and workspace is detailed with id/slug format, delegated credentials, and as the read-side twin of publish's workspace.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states a clear verb and resource: 'List the account's drops' with specifics on ordering (newest first), pagination, and returned fields. It distinguishes from siblings by explaining the drop_ id relationship to mutating tools and referencing domain/workspace list tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use: 'Use when the user wants to list / show my drops / see what they have published.' Provides parameter usage context (domain, workspace) and references related tools, but does not explicitly mention when not to use or name alternative tools for similar operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dropthis_list_deploymentsList a drop's deploymentsARead-onlyInspect
List a drop's content history — its past versions / revisions / deployments, newest first. Use when the user asks for the content history, previous versions, or revisions of a drop. Requires drop_id (the drop_… id, not the slug or URL).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max items (default 20). | |
| cursor | No | Pagination cursor from a previous call. | |
| drop_id | Yes | The `drop_…` id of the drop whose deployments to list (id-only — a URL or slug is rejected; call dropthis_resolve to turn a public URL/slug into its id first). |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | No | The page of deployments. |
| nextCursor | No | Cursor for the next page; null/absent at the end. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description adds that results are newest first and requires the drop_… id, not the slug/URL. This is useful behavioral context beyond the annotations, though it doesn't mention pagination (but cursor is in schema).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the purpose and ends with a required-id note. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the readOnly annotation, the output schema, and full parameter schema coverage, the description is sufficiently complete. It covers ordering, when to use, and the id format requirement.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 100% coverage with detailed descriptions for all three parameters, so the description adds no new parameter semantics. It reinforces the drop_id format, but that's already in the schema, so it's redundant.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists a drop's deployments/content history, using the verb 'list' and specifying the resource (deployments/versions). It also says 'newest first' and distinguishes it from restore (implicitly) by being a list operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Use when the user asks for the content history, previous versions, or revisions of a drop,' which is clear when-to-use guidance. It does not provide when-not-to-use or alternative tools, but the context is sufficient for choosing this over siblings like restore.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dropthis_membersList workspace membersARead-onlyInspect
List a team workspace's members by its id — each row carries accountId, email, role (owner/admin/member), whether it is you (isYou), and when they joined. Requires a team-scoped credential (ADR-0068: members:read). Use dropthis_workspaces to find the workspace id; the accountId here is what dropthis_update_member_role and dropthis_remove_member take.
| Name | Required | Description | Default |
|---|---|---|---|
| workspace | Yes | The workspace id whose members to list (see dropthis_workspaces). |
Output Schema
| Name | Required | Description |
|---|---|---|
| members | No | The workspace's members {accountId, email, role, isYou, joinedAt}. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint=true already indicating a safe read operation, the description adds valuable context: the required members:read permission, the semantic meaning of returned fields (including isYou and joined date), and the fact that the returned accountId is the input for other tools. This goes beyond what annotations alone would convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two succinct sentences with no filler. It front-loads the action and resource, then packs field details, authorization, and cross-references into a compact, readable structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read-only list tool with an output schema, the description covers purpose, output contents, required permissions, and related tools. There are no obvious gaps given the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already fully describes the single 'workspace' parameter as an id and even references dropthis_workspaces. The description's mention of 'by its id' and using dropthis_workspaces to find the id is redundant with the schema. Since schema coverage is 100%, the description adds no meaningful new semantics for the parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with a specific verb ('List') and resource ('a team workspace's members by its id'), and enumerates the output fields. It also distinguishes itself from sibling tools by naming dropthis_workspaces, dropthis_update_member_role, and dropthis_remove_member, making its role in the workflow explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear usage context: it requires a team-scoped credential (ADR-0068: members:read) and directs users to dropthis_workspaces to find the workspace id. It also explains how the returned accountId is consumed by related membership tools. It stops short of explicitly stating when not to use this tool, but the guidance is solid.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dropthis_publishPublish contentAInspect
Publish content to a NEW permanent public URL and get back its drop_… id. Accepts exactly one content input: content (inline HTML/text), files (in-memory multi-file bundle), file/paths (a local file or directory, stdio/local only), or source_url (a public http(s) URL the server fetches). For a files bundle: a drop holds up to 200 files; each file is content (text you write), source_url (a remote asset dropthis fetches server-side — use this for images/video/pdf/fonts), or content_base64 (small inline bytes only); never base64-inline an image into HTML. Use when the user wants to publish, share, post, put online, make public, or get a shareable link for generated content — a report, dashboard, slide deck, site, or file. Creates a NEW drop every call: do NOT call this to change something you already published — that makes a duplicate. To change an existing drop, use dropthis_update_content (the files at the URL) or dropthis_update_settings (title, visibility, password, expiry, metadata) with the drop_… id from this call's response. If you only kept the URL or slug, call dropthis_resolve to recover the drop_… id instead of publishing again (which would make a duplicate). Two URLs come back: url is the canonical, always-branded human view (the badge is guaranteed, with no client detection); for a single non-HTML file the response also carries raw_url, which serves that file's exact bytes at its natural path — share url with humans, hand raw_url to other agents (raw_url is null for HTML drops, where the page is the artifact, and for collections, whose per-file paths come from dropthis_get_content). Routing: by default the drop lands on the account's default custom domain when one is live (the first live path-mode domain becomes the default automatically), otherwise on the shared dropthis pool — accounts holding only dedicated domains also land on the shared pool. Pass domain (a LIVE custom domain — see dropthis_domains_list) to target a specific domain, plus an optional vanity slug on path-mode domains (1-63 lowercase letters/digits/hyphens; a taken slug is auto-suffixed with a warning). Don't pass domain for quick throwaway shares — default routing already handles those. Oversized png/jpeg/webp images are optimized server-side by default (re-encoded smaller, paths unchanged, every transform disclosed in the response warnings[] as image_optimized/image_optimize_skipped); pass optimize:false for byte-exact storage.
| Name | Required | Description | Default |
|---|---|---|---|
| file | No | Local file OR directory path to publish (stdio/local only). A directory is published as a complete multi-file site. | |
| path | No | Filename/path for inline content (default index.html). | |
| slug | No | Vanity slug for the drop's path — valid on path-mode custom domains only: 1-63 lowercase letters/digits/hyphens (no leading/trailing/double hyphen). A taken slug is auto-suffixed with a warning; omit for a random slug. Rejected (422) on the shared pool. | |
| entry | No | Entry file for a multi-file bundle (default index.html). | |
| files | No | A drop holds up to 200 files; each file is `content` (text you write), `source_url` (a remote asset dropthis fetches server-side — use this for images/video/pdf/fonts), or `content_base64` (small inline bytes only); never base64-inline an image into HTML. HTML/CSS/JS reference bundled assets by relative path (e.g. `assets/photo.jpg`). `entry` selects the main file when it is not `index.html`. | |
| paths | No | List of local file/directory paths to publish as one bundle (stdio/local only). | |
| title | No | Drop title. | |
| domain | No | Serve the drop on this custom domain — the hostname of a LIVE domain on this account (see dropthis_domains_list), or pass 'shared' to publish to the shared pool even when the account has a default domain. Path-mode domains serve it at https://{domain}/{slug}/; a dedicated domain serves it at the hostname root and conflicts (409) once occupied. Omit to use the account's default domain, else the shared pool. | |
| content | No | Inline HTML or text to publish. | |
| noindex | No | Prevent search-engine indexing. | |
| metadata | No | Arbitrary JSON key-value metadata. | |
| optimize | No | Server-side image optimization for oversized png/jpeg/webp files, on by default — omit to use the server default (true); every transform is disclosed in the response warnings[] (image_optimized/image_optimize_skipped). Pass false for byte-exact storage. | |
| password | No | Require a password to view the drop. Pro/Business only — on Free/Keep the server returns feature_not_in_plan (403) with an upgrade_url. Remove a password later via dropthis_update_settings with password=null. | |
| workspace | No | Target workspace slug or id (delegated credentials only; omit to publish into the active workspace). Only needed to publish into a workspace that is NOT currently active. | |
| expires_at | No | Auto-delete after this ISO 8601 timestamp, e.g. 2026-12-31T00:00:00Z. | |
| source_url | No | Public http(s) URL to fetch and publish. | |
| visibility | No | public (default) or unlisted. Unlisted is link-only: anyone with the URL can view the drop, but it is excluded from any public listing or discovery. | |
| content_type | No | MIME type for inline content. | |
| idempotency_key | No | Prevent duplicate publishes on retry. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | The drop's permanent drop_… id — persist it for every follow-up tool. |
| url | No | The canonical, always-branded public URL (share with humans). |
| next | No | Structured follow-up hints keyed by action. |
| slug | No | URL slug — a locator, not an id. |
| title | No | |
| rawUrl | No | Raw-bytes URL for a single non-HTML file; null for HTML drops and collections. |
| status | No | |
| noindex | No | |
| metadata | No | |
| revision | No | |
| expiresAt | No | |
| sizeBytes | No | Total published bundle size in bytes — check before iterating on a heavy page. |
| workspace | No | The workspace this drop belongs to {id, slug, name, kind}. |
| visibility | No | |
| passwordProtected | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description richly discloses behaviors beyond the annotations: every call creates a NEW drop (duplicate risk), routing falls back to the shared pool if no live domain, image optimization transforms are disclosed in warnings[], and raw_url is null for HTML drops. This adds substantial context beyond the openWorldHint/destructiveHint flags.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Although long, every sentence earns its place for a 19-parameter, three-mode publishing tool. It is front-loaded with the core purpose and explicitly enumerates content input options before diving into routing, optimization, and return-value nuances.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is complete for this complex tool: it covers all input modes, the multi-file structure, domain and slug routing, image optimization behavior, returned URLs (url vs raw_url), and even plan restrictions (password feature). An output schema exists, but the description provides the operational context the schema cannot.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds meaning far beyond the field names: it explains the five mutually exclusive content input modes, the 200-file limit, when to use source_url vs content_base64, slug validation and auto-suffixing, and domain routing behavior. This is genuinely additive semantic guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource: 'Publish content to a NEW permanent public URL and get back its drop_… id.' It clearly distinguishes this creation tool from the update siblings (dropthis_update_content/dropthis_update_settings) and explains what makes it unique (always creates a new drop).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use guidance is present: 'Use when the user wants to publish, share, post, put online, make public, or get a shareable link.' It also gives strong when-not-to-use instructions: never call to change existing content, and if you only have a URL/slug, call dropthis_resolve instead of publishing again to avoid duplicates.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dropthis_remove_memberRemove a workspace memberADestructiveInspect
Remove a member from a team workspace by the workspace id and the member's accountId (from dropthis_members), or leave the workspace by passing your own accountId. Destructive; requires confirm: true. Removing others requires a team-scoped credential (ADR-0068: members:admin); leaving needs members:write.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | Yes | Must be true to remove. | |
| workspace | Yes | The workspace id (see dropthis_workspaces). | |
| account_id | Yes | The member's accountId to remove, or your own to leave (see dropthis_members). |
Output Schema
| Name | Required | Description |
|---|---|---|
| removed | No | |
| accountId | No | |
| workspace | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint annotation, the description discloses the need for `confirm: true` and details the specific credential scopes (members:admin vs members:write). This adds significant behavioral context about permissions and necessary precautions, exceeding what annotations alone provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences and directly front-loads the action. It packs essential details (destructive nature, confirm requirement, credentials, dual use case) without redundancy or verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers both possible use cases, the destructive nature, the mandatory confirmation, and the credential prerequisites. Given the tool's complexity and the existence of an output schema, this is complete for guiding correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents all parameters (100% coverage), but the description adds meaningful semantics: it explains that account_id can refer to either another member or yourself for leaving the workspace, and it clarifies the purpose of the confirm flag. This goes beyond the schema's literal field descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action: 'Remove a member from a team workspace by the workspace id and the member's accountId' and explicitly covers the alternative use case of leaving the workspace by passing your own accountId. This distinguishes it from sibling tools like dropthis_update_member_role or dropthis_invite_member.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: it says when to use this tool (to remove a member or leave the workspace) and gives prerequisites (credential requirements for each scenario). It doesn't explicitly name alternative tools for the 'when not to use' case, but the distinction between the two allowed actions is strong enough guide.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dropthis_rename_workspaceRename a team workspaceAIdempotentInspect
Rename a team workspace or change its slug, by its workspace id. Requires a team-scoped credential (ADR-0068: workspaces:write; owner/admin). Pass name and/or slug — at least one is required. Use dropthis_workspaces to find the workspace id.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | New display name. | |
| slug | No | New URL-safe slug. A clash → 409. | |
| workspace | Yes | The workspace id to rename (see dropthis_workspaces). |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| kind | No | |
| name | No | |
| plan | No | |
| role | No | |
| slug | No | |
| isActive | No | |
| creatorCanReach | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare idempotentHint=true and destructiveHint=false, so the safety profile is covered. The description adds valuable context beyond annotations: permission requirements (team-scoped credential with specific scope), the need for an existing workspace id, and the condition that at least one of name/slug must be provided. It does not mention potential side effects like URL changes from slug modification, but the presence of annotations lowers the bar. This is solid, though not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, front-loaded with the core purpose, and then provides essential operational details. Every sentence earns its place: purpose, credential requirement, parameter constraint, and sibling tool reference. No fluff or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (3 parameters, 1 required), presence of output schema, and annotations, the description is complete. It covers purpose, how to find the workspace id, the required credential, and the parameter constraint. Error cases (slug clash) are already documented in the schema. The description provides all necessary context for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema coverage, each parameter already has a description. The description adds meaningful semantic content beyond the schema: it specifies that `name` and `slug` are mutually optional but at least one is required, which is not captured by the schema's required field (workspace). This relationship constraint adds value, so the score is above the baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Rename a team workspace or change its slug, by its workspace id.' It specifies the verb (rename/change), resource (team workspace), and method (by workspace id), distinguishing it from siblings like dropthis_update_settings or dropthis_delete_workspace.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage context: requires a team-scoped credential (with explicit permission ADR-0068: workspaces:write; owner/admin), and instructs to use dropthis_workspaces to find the workspace id. It also clarifies that at least one of `name` or `slug` is required. However, it does not explicitly list when not to use this tool or differentiate from alternative tools like dropthis_update_settings, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dropthis_resolveResolve a URL/slug to a dropARead-onlyInspect
Turn a drop's public URL or slug — what a user typically pastes — into the drop itself, including its drop_… id. Owner-scoped: it only matches drops on THIS account, and returns no match for an unknown or foreign URL. The locator path for the editing tools, which require the drop_… id: resolve here, then call dropthis_update_content / dropthis_update_settings / dropthis_delete with the returned id. Accepts a drop_… id too (it passes straight through). Persist the drop_… id — URLs and slugs are locators, not identifiers, and can drift (a vanity slug is renameable, the shared pool host rotates), while the id never moves.
| Name | Required | Description | Default |
|---|---|---|---|
| target | Yes | The drop's public URL (e.g. https://abc123.dropthis.app/ or a custom-domain URL), its slug, or a `drop_…` id. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | The drop's permanent drop_… id — persist it for every follow-up tool. |
| url | No | The canonical, always-branded public URL (share with humans). |
| next | No | Structured follow-up hints keyed by action. |
| slug | No | URL slug — a locator, not an id. |
| title | No | |
| rawUrl | No | Raw-bytes URL for a single non-HTML file; null for HTML drops and collections. |
| status | No | |
| noindex | No | |
| metadata | No | |
| revision | No | |
| expiresAt | No | |
| sizeBytes | No | Total published bundle size in bytes — check before iterating on a heavy page. |
| workspace | No | The workspace this drop belongs to {id, slug, name, kind}. |
| visibility | No | |
| passwordProtected | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description discloses key behaviors: owner-scoping, pass-through of drop_… ids, and the conceptual distinction between locators and identifiers with drift risk. These go well beyond annotations and provide actionable behavioral context without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and organized into distinct, non-redundant segments: purpose, scoping, usage, input variants, and best practice. Every sentence earns its place, and the structure makes it easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the single parameter, existing annotations, and output schema, the description covers all essential aspects: input forms, scope, output contents, related tools, and error behavior ('returns no match'). It leaves no important behavior unexplained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Even though the schema already covers the parameter, the description adds meaningful context by explaining that URLs/slugs are locators that can drift while the id is stable, and that the tool accepts a drop_… id and passes it straight through. This enriches the raw schema definition.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('resolve') and resource ('a drop's public URL or slug') and explicitly states the output ('the drop itself, including its drop_… id'). It also distinguishes itself from siblings by framing the tool as the required first step for editing tools that need the id.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit usage instructions: 'resolve here, then call dropthis_update_content / dropthis_update_settings / dropthis_delete with the returned id.' It also clarifies owner-scoping and that unknown or foreign URLs return no match, effectively telling users when not to expect a result.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dropthis_restore_deploymentRestore a prior deploymentAInspect
Roll a drop back to a prior deployment's content — the first-class version-history rollback (Pro+). Mints a NEW deployment whose content is copied from the chosen prior deployment (a dep_… id from dropthis_list_deployments) and makes it current; the drop's URL and settings are unchanged — only the content is restored. Restoring the deployment that is already current is a no-op. This IS the rollback path — prefer it over reading an old version with dropthis_get_content and re-publishing the files by hand. Below Pro the server returns feature_not_in_plan (403) with an upgrade_url. Requires drop_id (the drop_… id, id-only — for a public URL or slug call dropthis_resolve first) and deployment_id. Returns the updated parent drop (its unchanged URL + bumped revision).
| Name | Required | Description | Default |
|---|---|---|---|
| drop_id | Yes | The `drop_…` id of the drop to roll back (id-only — a URL or slug is rejected; call dropthis_resolve to turn a public URL/slug into its id first). | |
| deployment_id | Yes | The `dep_…` id of the prior deployment to restore (from dropthis_list_deployments). Its content becomes the drop's current version again. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | The drop's permanent drop_… id — persist it for every follow-up tool. |
| url | No | The canonical, always-branded public URL (share with humans). |
| next | No | Structured follow-up hints keyed by action. |
| slug | No | URL slug — a locator, not an id. |
| title | No | |
| rawUrl | No | Raw-bytes URL for a single non-HTML file; null for HTML drops and collections. |
| status | No | |
| noindex | No | |
| metadata | No | |
| revision | No | |
| expiresAt | No | |
| sizeBytes | No | Total published bundle size in bytes — check before iterating on a heavy page. |
| workspace | No | The workspace this drop belongs to {id, slug, name, kind}. |
| visibility | No | |
| passwordProtected | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
It discloses key behaviors beyond the annotations: it mints a NEW deployment rather than mutating the old one, URL/settings are unchanged, restoring the current deployment is a no-op, and below Pro it returns a 403 with upgrade_url. The return value (updated parent drop with bumped revision) is also specified, providing a complete behavioral picture.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-organized and front-loaded: it opens with the core action, then explains the mechanism, key caveats, usage preference, requirements, and return value. Despite a moderate length, every sentence contributes meaningful information without repetition or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (version-history rollback, Pro gating, no-op behavior, and reliance on other tools for input resolution), the description covers everything needed for correct invocation: purpose, exact behavior, prerequisites, error handling, and return information. The presence of an output schema further reduces the need to describe return values in detail.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides detailed descriptions for both parameters (100% coverage), so the baseline is 3. The description adds extra value by tying deployment_id to dropthis_list_deployments, stressing that drop_id must be id-only and referencing dropthis_resolve for URL/slug resolution, which enriches the semantic understanding beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: rolling a drop back to a prior deployment's content. It distinguishes itself from siblings by explicitly naming the alternative (reading an old version with dropthis_get_content and re-publishing) and positioning itself as the first-class rollback path, making its unique purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage guidance: use this for version-history rollback, prefer it over the manual alternative, and note the prerequisites (Pro plan, drop_id must be id-only, deployment_id from dropthis_list_deployments). It also mentions the error below Pro, which signals when the tool cannot be used.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dropthis_update_contentUpdate a drop's contentAInspect
Update the content of an EXISTING drop, keeping its current URL (ships a new deployment). Requires drop_id (the drop_… id from publish — id-only; call dropthis_resolve to convert a URL/slug) and exactly one content input (content, files, file, paths, or source_url). Use when the user edited, changed, regenerated, or wants to update the page and the URL should stay the same. PARTIAL BY DEFAULT (mode:"patch"): the files you send are upserted by path and every file you do NOT mention is carried forward unchanged — so to fix one page send only that page (a previously-bundled image stays), and to remove a file pass its path in delete_paths (e.g. delete_paths:["assets/old.png"]). Use mode:"replace" only to swap the ENTIRE content set in one call (the files you send become the whole drop and everything else is dropped; delete_paths is invalid in replace mode). Ships content only — it never changes settings; for title/visibility/password/expiry/metadata use dropthis_update_settings, and to create a brand-new drop use dropthis_publish. Not idempotent: a retry creates another deployment unless you pass the same idempotency_key. Oversized png/jpeg/webp images in the new content are optimized server-side by default (re-encoded smaller, paths unchanged, every transform disclosed in the response warnings[] as image_optimized/image_optimize_skipped); pass optimize:false for byte-exact storage.
| Name | Required | Description | Default |
|---|---|---|---|
| file | No | Local file OR directory path (stdio/local only). | |
| mode | No | How to apply the files: "patch" (default) upserts the files you send and keeps every file you don't mention (use `delete_paths` to remove one); "replace" makes the files you send the drop's entire content set and drops the rest. Omit for patch. | |
| path | No | Filename/path for inline content. | |
| entry | No | Entry file for a multi-file bundle. | |
| files | No | A drop holds up to 200 files; each file is `content` (text you write), `source_url` (a remote asset dropthis fetches server-side — use this for images/video/pdf/fonts), or `content_base64` (small inline bytes only); never base64-inline an image into HTML. HTML/CSS/JS reference bundled assets by relative path. PATCH BY DEFAULT (mode="patch"): the files you send are upserted by path; every file you do NOT mention is kept untouched — so to fix one page send only that page, and to remove a file list its path in `delete_paths`. Use mode="replace" only to swap the ENTIRE content set in one shot (the files you send become the whole drop; everything else is dropped, and `delete_paths` is then invalid). `entry` selects the main file when it is not `index.html`. | |
| paths | No | List of local file/directory paths to deploy as one bundle (stdio/local only). | |
| content | No | Inline HTML or text. | |
| drop_id | Yes | The `drop_…` id of the drop to update (id-only — a URL or slug is rejected; call dropthis_resolve to turn a public URL/slug into its id first). | |
| optimize | No | Server-side image optimization for oversized png/jpeg/webp files, on by default — omit to use the server default (true); every transform is disclosed in the response warnings[] (image_optimized/image_optimize_skipped). Pass false for byte-exact storage. | |
| source_url | No | Public http(s) URL to fetch and deploy. | |
| if_revision | No | Optimistic lock: fail if revision differs. | |
| content_type | No | MIME type for inline content. | |
| delete_paths | No | Paths to remove from the drop in patch mode, e.g. ["old/stale.js","assets/dead.png"]. Patch-mode only — invalid with mode:"replace" (in replace, omitting a file already removes it). | |
| idempotency_key | No | Prevent duplicate deploys on retry. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | The drop's permanent drop_… id — persist it for every follow-up tool. |
| url | No | The canonical, always-branded public URL (share with humans). |
| next | No | Structured follow-up hints keyed by action. |
| slug | No | URL slug — a locator, not an id. |
| title | No | |
| rawUrl | No | Raw-bytes URL for a single non-HTML file; null for HTML drops and collections. |
| status | No | |
| noindex | No | |
| metadata | No | |
| revision | No | |
| expiresAt | No | |
| sizeBytes | No | Total published bundle size in bytes — check before iterating on a heavy page. |
| workspace | No | The workspace this drop belongs to {id, slug, name, kind}. |
| visibility | No | |
| passwordProtected | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotation contradiction: the annotations declare destructiveHint:false, but the description explicitly says mode:'replace' makes the files you send become the whole drop and 'everything else is dropped' — clearly destructive to existing content. The description otherwise provides rich behavioral context (patch-by-default, delete_paths, idempotency, image optimization), but per scoring rules the contradiction forces a score of 1.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but front-loaded with the most critical information (purpose, patch default, alternatives) and is well-structured. Some repetition exists (the files[] schema description repeats the patch/replace semantics) but the density of novel guidance justifies the length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex tool with 14 parameters, the description covers all key operational aspects: purpose, when to use, mode semantics, deletion, idempotency, image optimization, and sibling tool routing. It also addresses dependencies (drop_id resolution) and exclusions (doesn't change settings). Since an output schema exists, return-value documentation is not needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 substantial param semantics beyond the schema: exactly one of content/files/file/paths/source_url must be provided, drop_id is id-only requiring dropthis_resolve, delete_paths is patch-only and invalid in replace mode, optimize is on by default with warnings disclosure, and idempotency_key prevents duplicate deploys. These enrich parameter understanding significantly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource: 'Update the content of an EXISTING drop, keeping its current URL (ships a new deployment).' It also distinguishes from siblings by explicitly saying 'for title/visibility/password/expiry/metadata use dropthis_update_settings, and to create a brand-new drop use dropthis_publish.' This fully differentiates the tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives precise usage context: 'Use when the user edited, changed, regenerated, or wants to update the page and the URL should stay the same.' It also states exclusions and alternatives, including pointing to dropthis_publish and dropthis_update_settings, and the requirement to resolve a URL/slug via dropthis_resolve first. The mode guidance (patch default vs replace) further clarifies when to use each variant.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dropthis_update_member_roleChange a member's roleAIdempotentInspect
Change a workspace member's role to owner, admin, or member, by the workspace id and the member's accountId (from dropthis_members). Requires a team-scoped credential (ADR-0068: members:admin); only an owner may touch an owner, enforced server-side. Setting role=owner TRANSFERS ownership of the workspace to that member — a high-impact handoff that requires confirm: true.
| Name | Required | Description | Default |
|---|---|---|---|
| role | Yes | The new role: owner (transfers ownership), admin, or member. | |
| confirm | No | Must be true to transfer ownership (role=owner). Ignored for admin/member. | |
| workspace | Yes | The workspace id (see dropthis_workspaces). | |
| account_id | Yes | The member's accountId (see dropthis_members). |
Output Schema
| Name | Required | Description |
|---|---|---|
| role | No | |
| No | ||
| isYou | No | |
| joinedAt | No | |
| accountId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond annotations by disclosing the high-impact side effect: setting role=owner transfers ownership of the workspace, requiring confirm=true. It also mentions the credential requirement and server-side enforcement, adding valuable behavioral context not present in the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded with the primary action. It uses three informative sentences without redundancy. It could be slightly more compact, but each sentence adds necessary detail for a high-impact operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 4 parameters, an output schema, and sensitive ownership-transfer behavior, the description covers all critical aspects: purpose, required permissions, ownership transfer semantics, and confirm requirement. It is complete enough for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although the schema already covers all parameters (100% coverage), the description enriches meaning by explaining that role=owner is an ownership transfer and that confirm must be true for that case. It also clarifies the source/context for workspace and account_id, improving understanding beyond the schema descriptions alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Change' with a specific resource 'a workspace member's role' and enumerates the allowed values (owner, admin, member). It also specifies the key identifiers (workspace id and accountId), distinguishing it from sibling tools like remove/invite member.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides context on when the tool is appropriate by stating the required team-scoped credential (members:admin) and the server-side rule that only an owner may modify an owner. While it doesn't explicitly contrast with alternatives, the constraints and the clear purpose imply correct usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dropthis_update_settingsUpdate a drop's settingsAIdempotentInspect
Change an EXISTING drop's settings — title, visibility (public/unlisted), password, noindex, expiry, metadata, or its routing (move onto a custom domain / back to the shared pool, and rename its vanity slug) — by its drop_… id (id-only). Does not touch the content at the URL: to replace content use dropthis_update_content; to create a new drop use dropthis_publish. For a public URL or slug, call dropthis_resolve first to get the drop_… id. Idempotent — applying the same values again is a no-op.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | No | Rename the drop's vanity slug — valid on path-mode custom domains only: 1-63 lowercase letters/digits/hyphens. A taken slug returns 409; setting one on the shared pool returns 422. | |
| title | No | New drop title. | |
| domain | No | Move the drop onto this custom domain — the hostname of a LIVE domain on this account (see dropthis_domains_list), or pass 'shared' to move it back to the shared pool. Path-mode domains serve it at https://{domain}/{slug}/; a dedicated domain serves it at the hostname root and conflicts (409) once occupied. | |
| drop_id | Yes | The `drop_…` id of the drop to update (id-only — a URL or slug is rejected; call dropthis_resolve to turn a public URL/slug into its id first). | |
| noindex | No | Prevent search-engine indexing (true), allow it (false), or null to clear. | |
| metadata | No | Arbitrary JSON key-value metadata. | |
| password | No | Set a password required to view the drop, or pass null to remove an existing one. Setting one is Pro/Business only — on Free/Keep the server returns feature_not_in_plan (403) with an upgrade_url; removing (null) is always allowed. | |
| expires_at | No | Auto-delete after this ISO 8601 timestamp (e.g. 2026-12-31T00:00:00Z), or null to clear. | |
| visibility | No | public (default) or unlisted. Unlisted is link-only: anyone with the URL can view the drop, but it is excluded from any public listing or discovery. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | The drop's permanent drop_… id — persist it for every follow-up tool. |
| url | No | The canonical, always-branded public URL (share with humans). |
| next | No | Structured follow-up hints keyed by action. |
| slug | No | URL slug — a locator, not an id. |
| title | No | |
| rawUrl | No | Raw-bytes URL for a single non-HTML file; null for HTML drops and collections. |
| status | No | |
| noindex | No | |
| metadata | No | |
| revision | No | |
| expiresAt | No | |
| sizeBytes | No | Total published bundle size in bytes — check before iterating on a heavy page. |
| workspace | No | The workspace this drop belongs to {id, slug, name, kind}. |
| visibility | No | |
| passwordProtected | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare idempotentHint=true and destructiveHint=false, and the description reinforces this with 'Idempotent — applying the same values again is a no-op.' It adds useful behavioral context beyond the annotations: the operation 'does not touch the content at the URL' and requires a `drop_…` id, both of which help avoid misuse.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact yet information-dense: four sentences cover purpose, scope, sibling differentiation, prerequisites, and idempotency. Every sentence earns its place and the most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (9 parameters, nested metadata object, output schema), the description is complete: it explains what is updated, what is not touched, how to get the required id, and how it differs from related tools. The output schema exists, so return-value details are not needed in the description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description lists the fields and mentions routing (custom domain/shared pool, slug rename), but does not add substantial meaning beyond the already-detailed schema descriptions of each parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Change an EXISTING drop's settings' — a specific verb, resource, and scope — and enumerates exactly which settings (title, visibility, password, noindex, expiry, metadata, routing). It also distinguishes itself from siblings by explicitly naming dropthis_update_content for content replacement and dropthis_publish for creation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use guidance: it is for updating settings, not content, and points to dropthis_update_content and dropthis_publish as alternatives. It also tells users to call dropthis_resolve first when they only have a public URL or slug, which is clear prerequisite context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dropthis_use_workspaceSwitch workspaceAIdempotentInspect
Switch the active team/workspace for this connection. Subsequent publishes land in it; the choice persists server-side across reconnects. Use dropthis_workspaces to list available workspaces first.
| Name | Required | Description | Default |
|---|---|---|---|
| workspace | Yes | The workspace slug or id to switch to. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| kind | No | |
| name | No | |
| role | No | |
| slug | No | |
| isActive | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations include idempotentHint and destructiveHint, but the description adds valuable behavioral context: the switch persists server-side across reconnects and affects subsequent publish operations. This goes beyond the structured hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with purpose, then consequences and guidance. Zero filler; every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter tool with an output schema, the description covers purpose, side effects, persistence, and pre-requisite listing. Complete for an agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter 'workspace' is fully described in the schema (slug or id). The description adds a hint to list workspaces first, but doesn't add new parameter-level details; baseline 3 due to high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb ('Switch') and resource ('active team/workspace'), clearly distinguishing it from sibling tools like dropthis_workspaces (list) or dropthis_create_workspace. It unambiguously states the tool's function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs to list workspaces first via dropthis_workspaces, and explains when switching matters ('Subsequent publishes land in it'). This provides clear context for when to use this tool versus alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dropthis_workspacesList workspacesARead-onlyInspect
List the workspaces (teams) this connection can act in, with the currently active one flagged (isActive). dropthis_account shows the active workspace on the current session. (Write-enabled connections can change the active workspace with dropthis_use_workspace.) If you need to publish into a workspace that is NOT currently active, call dropthis_use_workspace with its slug first (or pass workspace to dropthis_publish).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| active | No | The currently active workspace {id, slug, name, kind}. |
| workspaces | No | List of workspaces this connection can publish to. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description does not need to restate that. It adds useful context by explaining that only workspaces the connection can act in are listed and that the active one is flagged. It also hints at the session-scoped nature of the active workspace, which goes beyond the bare annotation without contradicting it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, each serving a distinct purpose: stating the core function, pointing to an alternative, and offering usage guidance. It is slightly dense in the final sentence but contains no fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (no parameters, one output schema with the isActive flag), the description is remarkably complete. It not only explains what the tool does, but also integrates it into the broader workflow of switching workspaces and publishing, which is more than sufficient for an agent to use it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the schema is trivially 100% covered. Per the rubric, the baseline for 0 params is 4, and there is nothing for the description to clarify about parameters. The description does not add parameter-specific detail, but none is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb 'List' and a clear resource 'workspaces (teams)', and it adds the distinctive behavior of flagging the active workspace via `isActive`. This clearly distinguishes it from siblings like dropthis_account and dropthis_list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly names dropthis_account as an alternative for viewing the active workspace on the current session, and provides conditional guidance for publishing into non-active workspaces using dropthis_use_workspace or passing a workspace to dropthis_publish. This gives the agent concrete when-to-use and when-to-use-another-tool directives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
29 tool updates
v0.37.0- First observed
dropthis_accept_invitation - First observed
dropthis_account - First observed
dropthis_analytics - First observed
dropthis_create_workspace - First observed
dropthis_delete - First observed
dropthis_delete_workspace - First observed
dropthis_domains_connect - First observed
dropthis_domains_delete - First observed
dropthis_domains_get - First observed
dropthis_domains_list - First observed
dropthis_domains_update - First observed
dropthis_domains_verify - First observed
dropthis_get - First observed
dropthis_get_content - First observed
dropthis_invitations - First observed
dropthis_invite_member - First observed
dropthis_list - First observed
dropthis_list_deployments - First observed
dropthis_members - First observed
dropthis_publish - First observed
dropthis_remove_member - First observed
dropthis_rename_workspace - First observed
dropthis_resolve - First observed
dropthis_restore_deployment - First observed
dropthis_update_content - First observed
dropthis_update_member_role - First observed
dropthis_update_settings - First observed
dropthis_use_workspace - First observed
dropthis_workspaces
TDQS
Each tool targets a distinct resource and action, with no overlapping purposes. The read siblings dropthis_get and dropthis_get_content are explicitly differentiated as settings vs served content, and publish/update/delete/restore are clearly separated.
All tools share the dropthis_ prefix, but the verb/noun ordering varies: drops use bare verbs (publish, get, list, delete), content uses verb_noun (update_content, get_content), and domains use noun_verb (domains_connect, domains_verify). This mix is readable but not fully consistent.
29 tools is heavy, but the scope spans five sub-domains (drops, deployments, domains, workspaces, members/invitations). Each tool has a distinct role, so the count is justifiably high, though it exceeds the typical comfortable range of 3-15.
The drop lifecycle (create/read/update/delete, versioning/rollback, analytics) and domain management are complete, and workspaces/members/invitations cover team collaboration. Minor gaps include no way to decline or revoke invitations and no raw_url retrieval for existing drops.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Publish HTML, Markdown, and multi-file sites as shareable URLs instantly via MCP.
Publish HTML or Markdown from any MCP client to a live, shareable URL on htmldrop.app.
- StacktreeOAuthee.stacktr
Publish HTML to private, unguessable, replace-in-place URLs from any MCP-compatible AI agent.
Publish and manage existing HTML presentations from an MCP-capable Agent.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceMCP server for BrewPage, a free no-signup hosting service. Lets AI agents publish HTML, Markdown, JSON, files, or a full multi-file static site and get a public URL instantly via a REST API.2Apache 2.0
- FlicenseNot gradedqualityDmaintenanceDeploys HTML pages to an online preview platform and returns a shareable URL via MCP protocol.-
- AlicenseAqualityCmaintenanceLets MCP clients publish a single file to a permanent, shareable link via whamlink. Supports tools for managing links, including registration, publishing, listing, updating access, replacing content, and deleting links.613MIT
- AlicenseNot gradedqualityAmaintenanceEnables agents to publish HTML artifacts to permanent, shareable, versioned pages on Artifyde via MCP.105MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/dropthis-dev/dropthis-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server