Skip to main content
Glama

Server Details

AI-first file sharing and collaboration. 251 tools give agents a full workspace: file storage, branded shares, comments, workflows, and built-in RAG. 50GB free, no credit card.

Ownership verified
Status
Healthy
Uptime
100.0% over 44 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

A3.9/5.0

Scored across 20 tools

Disambiguation3/5

Several tool pairs have genuinely overlapping boundaries: share vs fileshare (both create share links, one deprecated), find vs storage-search vs metadata-search (a three-way search split), and download vs fileshare URL generation. The descriptions do exceptional disambiguation work with explicit cross-references, but the underlying purposes are close enough that misselection remains a real risk.

Naming Consistency4/5

All tool names follow a consistent lowercase, single-token, domain-based convention (auth, org, workspace, storage, metadata), which is predictable and scannable. Minor deviations: how-to uses a hyphen, tools like download/upload/find/sign are verb-named while most are noun-named, and ai is an opaque name for the RAG agent.

Tool Count4/5

20 tools is on the heavy side, but Fast.io spans a genuinely broad platform surface — auth, orgs, workspaces, storage, sharing, comments, e-signature, search, metadata, events, AI, and help — so most tools earn their place. A few could arguably be merged (download into storage, find into metadata/storage), but the count is defensible for the domain.

Completeness4/5

The surface is remarkably thorough: full CRUD for orgs, workspaces, members, shares, fileshares, and comments, plus upload/download paths, versioning, metadata extraction, e-signature lifecycle, activity events, and an AI agent. Minor gaps: comment editing is absent, billing is buried inside org, and deprecated actions (quickshare-create, retired metadata endpoints) remain as documented dead ends rather than being removed.

Available Tools

20 tools
aiA
Destructive
Inspect

Ripley — the MCP delegation surface over Fastio's RAG agent. Ripley is read-only for storage CONTENT: it answers natural-language questions about workspace/share files & folders (with citations) and never creates/edits/deletes your files — for content writes, call the primitive MCP tools directly. It DOES create/manage chat threads (chat-create/chat-update/chat-delete/message-send) and can generate shares (share-generate). Prefer Ripley over issuing many primitive reads: ask one NL question and let the server-side agent search + synthesize. Quick start: action='ask' (question + profile) → returns {answer_text, citations, chat_id, message_id, web_url}; action='status' for an engineered workspace-status summary. Lower-level chat/message actions remain for multi-turn control. Call action='describe' for the full action/param reference. Destructive: chat-delete. Side effects: ask/status/chat-create/message-send consume credits; chat-cancel terminates an in-progress message (partial tokens billed; idempotent). Verbosity (detail param): chat-list/message-list default to terse (compact rows). chat-details/message-details default to full (drill-down). Pass an explicit detail='standard'|'full' to override (best-effort: chat/message/activity endpoints may not yet honor detail server-side).

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNochat-create (workspace only): 'user' (default) or 'agent' — flags the chat as agentic; set at creation, immutable; not accepted on share chats. chat-list: filter by 'user'|'agent'|'all'.
nameNoNew chat name.
waitNomessage-read only. Default true: bounded-wait for completion (up to ~24s on a workspace via the activity long-poll). Set false for a single-shot status probe (one details fetch, ~1 round-trip) — useful against strict ~30s client timeouts.
filesNoFile opaque IDs (max 25, share share-generate).
limitNochat-list/message-list page size. Best-effort: the AI API spec documents NO pagination on the chat-list or message-list endpoints (both return all rows under {count, items}), so this is forwarded but may be a silent no-op until the platform adds paging.
actionYesOperation. Use 'describe' for full action reference.
detailNoPer-entity verbosity for chat-list/chat-details/message-list/message-details (best-effort: chat/message/activity endpoints may not yet honor detail server-side). Defaults: terse for list-style (chat-list, message-list), full for details (chat-details, message-details). See action='describe' for per-level field lists.
offsetNochat-list/message-list pagination offset — see the limit caveat (no documented paging on these endpoints; forwarded best-effort).
chat_idNoAI chat ID.
privacyNoChat privacy (default: private). Workspace chat-create only — share chats are always private.
node_idsNoFile node IDs (max 25, workspace share-generate).
share_idNoAlias for profile_id when the profile is a share — implies profile_type=share (so profile_type may be omitted).
context_idNoAlias for profile_id (either name works)
message_idNoAI message ID.
profile_idNoPolymorphic context ID (pair with profile_type=workspace|share). Typed aliases let you omit profile_type: workspace_id (⇒ workspace) / share_id (⇒ share); also context_id / instance_id. 19-digit workspace or share ID.
query_textNoQuestion or prompt (max 32,000 chars).
instance_idNoAlias for profile_id (REST/how-to name; profile_id is canonical).
context_typeNoAlias for profile_type (either name works)
files_attachNoAttach workspace FILES for the AI to read directly (comma-separated nodeId:versionId pairs; versionId optional → backend resolves current). Works regardless of workspace intelligence. A missing/inaccessible/ineligible node ERRORS (not a silent drop). See describe.
profile_typeNoProfile type: "workspace" or "share".
workspace_idNoAlias for profile_id when the profile is a workspace — implies profile_type=workspace (so profile_type may be omitted).
folders_attachNoAttach workspace FOLDERS for the AI to read (comma-separated folder nodeIds; no depth). Denied on restricted-view shares. See describe.
include_deletedNochat-list: if true, list deleted chats via the /deleted variant (workspace AND share).

TDQS

A4.9/5.0
Behavior5/5

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

Beyond annotations (readOnlyHint=false, destructiveHint=true), the description details that storage content is read-only, but chat threads and shares are created, and specifically names 'Destructive: chat-delete'. It further discloses credit consumption for certain actions, idempotency of chat-cancel, and best-effort behavior of detail/pagination parameters — no contradiction.

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

Conciseness5/5

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

Although long, every sentence carries actionable information: purpose, usage preference, write caveat, quick start, side effects, destructive actions, and verbosity defaults. The structure is front-loaded and logically organized, making the length appropriate for a 23-parameter multi-action tool.

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

Completeness5/5

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

The description is exceptionally complete for a complex tool with no output schema. It covers the core workflows (ask, status, chat management, share generation), return shape for ask, side effects (credits, cancellation), and edge cases like the wait parameter and best-effort detail/pagination. Combined with the rich schema, an agent has all necessary context to invoke correctly.

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

Parameters4/5

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

The input schema already covers all 23 parameters (100% coverage), so baseline is 3, but the description adds meaning beyond the schema: it highlights the 'ask' quick start with its return shape, 'status' and 'describe' actions, and explains default verbosity for list vs details actions. It also clarifies that 'limit' and 'offset' may silently be no-ops.

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

Purpose5/5

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

The description clearly identifies the tool as 'the MCP delegation surface over Fastio's RAG agent' with a specific verb: 'answers natural-language questions about workspace/share files & folders (with citations)'. It also distinguishes itself from siblings by stating it never creates/edits/deletes files and that content writes should use primitive MCP tools directly, plus it manages chat threads and shares.

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

Usage Guidelines5/5

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

Explicit guidance is given: 'Prefer Ripley over issuing many primitive reads: ask one NL question' and 'for content writes, call the primitive MCP tools directly' — a clear when-to-use and when-not-to-use. It also notes lower-level chat/message actions for multi-turn control and points to 'describe' for full reference.

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

assetA
Destructive
Inspect

Brand asset management (logos, banners, profile photos) on org/workspace/share/user. Upload, delete, list, read. Call action='describe' for the full action/param reference. Destructive: delete.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYesOperation. Use 'describe' for full action reference.
contentNoPlain text content (e.g. SVG).
asset_idNoAsset ID or name.
metadataNoAdditional metadata as JSON array string.
entity_idNoOpaque ID of a specific object (file, comment, etc.). Pair with entity_type to disambiguate. Entity ID (optional for user).
file_nameNoOriginal file name.
asset_typeNoAsset type key (e.g. 'logo', 'banner', 'photo').
entity_typeNoEntity type.
file_base64NoBase64-encoded binary content.
content_typeNoMIME type (default application/octet-stream).

TDQS

A4.2/5.0
Behavior4/5

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

Annotations include destructiveHint=true, and the description explicitly calls out 'Destructive: delete', adding specificity beyond the annotation. It also discloses the range of actions. No contradiction with annotations (readOnlyHint=false, destructiveHint=true).

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

Conciseness5/5

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

Three sentences, front-loaded with purpose, followed by operational scope and a clear pointer to the describe action. Every sentence earns its place with no redundancy.

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

Completeness4/5

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

The tool has 10 parameters and no output schema, but the schema itself is richly described. The description covers the main actions and explicitly defers to action='describe' for full details. Minor gap: the 'types' action is not mentioned, but the pointer to describe mitigates this.

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

Parameters3/5

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

The input schema has 100% description coverage, so all parameters are already documented in the schema. The tool description does not add parameter-level meaning beyond the schema, but it does provide domain context (e.g., logos, banners, profile photos). Baseline 3 is appropriate.

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

Purpose5/5

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

Description states a specific verb+resource: 'Brand asset management' with concrete asset types (logos, banners, profile photos) and scope (org/workspace/share/user). It lists key operations (upload, delete, list, read) and distinguishes itself from generic sibling tools like upload/download by naming the asset domain.

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

Usage Guidelines4/5

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

Provides clear context on what the tool manages and its entity scope. Points users to action='describe' for the full action/param reference, which is useful meta-guidance. However, it does not explicitly state when to use this tool over alternatives or when not to use it.

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

authA
Destructive
Inspect

Auth & sessions: signin, signup, signout, 2FA, PKCE, API keys, OAuth sessions. Call action='describe' for the full action/param reference. Destructive: api-key-delete, oauth-revoke, oauth-revoke-all.

ParametersJSON Schema
NameRequiredDescriptionDefault
codeNoVerification or authorization code. Meaning is action-specific — see action='describe' for the per-action reference (e.g. 2FA code for 2fa-verify, reset code for password-reset, OAuth code for pkce-complete).
nameNoAPI key label.
adminNopkce-login only. Request the admin access mode (`rwa`) as a CEILING on the consent screen. Default false. A ceiling is not a grant: the human must still tick the toggle, and the granted set is whatever `auth action=scopes` reports afterwards.
emailNoEmail address.
tokenNo2FA / verification token. Meaning is action-specific — see action='describe' for the per-action reference (e.g. 2FA-disable token, 2fa-verify-setup token, 2FA token for api-key-create/api-key-delete).
actionYesOperation. Use 'describe' for full action reference.
key_idNoAPI key identifier.
scopesNoScope strings "entity:id:mode" with mode r | rw | rwa (rwa = read-write + admin access mode; a implies rw), e.g. ["org:123:rwa", "userdetails:*:rw", "user:*:r"]. api-key-create/update: omit for full access. oauth-update: REQUIRED and must be narrower-or-equal; an empty list is refused — use oauth-revoke instead.
api_keyNoFastio API key.
channelNo2FA channel.
expiresNoToken lifetime in seconds.
passwordNoAccount password.
last_nameNoFamily name.
password1NoNew password.
password2NoNew password confirmation.
agent_nameNoAgent name for the approval screen and audit logs. If omitted on pkce-login this DEFAULTS to the MCP client's self-reported name (clientInfo.name from initialize), which is caller-supplied and NOT platform-verified — a human approves it on the consent screen, but it is not a vouched vendor. Pass it explicitly to control what is recorded.
first_nameNoGiven name.
scope_typeNoPKCE scope type. Default 'user' (full access).
session_idNoOAuth session identifier.
email_tokenNoEmail verification code.
key_expiresNoISO 8601 expiration datetime.
describe_actionNoWhen action='describe', narrow the output to ONE action's full params/notes (e.g. 'status'). Omit to get the compact action index.
exclude_currentNoSkip current session in revoke-all.
account_settingsNopkce-login only. Request the account-settings scope (`userdetails:*:rw`, gating password/email changes, 2FA enrolment and sign-out-all) as a CEILING on the consent screen. Default false. A ceiling is not a grant: the human must still tick the toggle, and the granted set is whatever `auth action=scopes` reports afterwards.
current_session_idNoCurrent session ID for exclusion.

TDQS

A4.4/5.0
Behavior4/5

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

Explicitly flags destructive operations (api-key-delete, oauth-revoke, oauth-revoke-all), which is critical behavior disclosure. It also implies session side-effects through the listed operations. It could say more about persistence or user-visible effects, but for a dispatcher it covers the high-risk cases well.

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

Conciseness5/5

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

Two dense sentences lead with the tool's domain, immediately route the agent to 'describe' for details, and close with an explicit destructive-action warning. No filler.

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

Completeness4/5

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

For a dispatcher covering 17 actions, the description plus the rich schema gives the agent a clear entry path and boundary. It could be slightly more explicit about common pitfalls (e.g. which params are mutually exclusive), but the pointer to 'describe' fills that gap.

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

Parameters4/5

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

The schema already documents every parameter with detailed, action-specific descriptions split across fields - in particular the 'code' and 'token' fields explain ambiguity and point to action='describe'. The description adds the convention of using describe for the full per-action reference, but doesn't need to restate parameter details.

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

Purpose5/5

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

The description names a clear resource ('auth & sessions') and enumerates the operation families (signin, signup, signout, 2FA, PKCE, API keys, OAuth) that the tool covers bel. This distinguishes it from sibling tools at a glance and tells an agent exactly what domain it owns.

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

Usage Guidelines4/5

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

It tells the agent to call action='describe' for the full action/parameter reference)SkipThat is a concrete usage instruction for navigating a large dispatcher surface, and it lists destructive operations. It doesn't name conditions for choosing this over siblings, but the domain statement ('Auth & sessions') makes that clear enough.

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

commentA
Destructive
Inspect

Comments on files: add/list/delete/react, anchor to image regions, A/V timestamps, PDF pages, or text selections. Call action='describe' for the full action/param reference. Destructive: delete, bulk-delete. Verbosity (detail param): list/list-all default to terse (compact rows). details defaults to full (drill-down). Pass an explicit detail='standard'|'full' to override (best-effort — may be a silent no-op until the comments API honors output=; see describe).

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNoSort: 'created' or '-created' (default newest first).
textNoMax 8192 body / 500 DISPLAY text (mention markup discounted) — the 500 usually BINDS. Both count CHARACTERS — CJK and emoji cost one each, same as ASCII. Mentions count toward 8192 only. A separate 2048-BYTE budget applies to the JSON-encoded `reference` anchor, where each non-ASCII character costs SIX bytes.
emojiNoSingle emoji character.
limitNoPage size 2-200.
actionYesOperation. Use 'describe' for full action reference.
detailNoPer-comment verbosity for list/list-all/details. Defaults: terse for list/list-all (compact rows), full for details (drill-down). See action='describe' for per-level field lists.
offsetNoOffset for pagination.
node_idNoStorage tree node opaque ID. Both files and folders are nodes — use this name regardless of which.
share_idNoAlias for profile_id when the profile is a share — implies profile_type=share (so profile_type may be omitted).
referenceNoAnchor: image region, A/V timestamp, PDF page, or text selection.
comment_idNoComment opaque ID.
context_idNoAlias for profile_id (either name works)
profile_idNoPolymorphic context ID (pair with profile_type=workspace|share). Typed aliases let you omit profile_type: workspace_id (⇒ workspace) / share_id (⇒ share); also context_id. 19-digit profile ID.
propertiesNoArbitrary key-value JSON object metadata (edit action only). Accepts a native object or a JSON string. Merged into the comment's stored properties; server-managed keys (reactions, version, version_hash, edited_at, content_filtered, mentions) supplied here are ignored.
comment_idsNoArray of comment opaque IDs.
context_typeNoAlias for profile_type (either name works)
profile_typeNoProfile type.
workspace_idNoAlias for profile_id when the profile is a workspace — implies profile_type=workspace (so profile_type may be omitted).
display_limitNolist-all only — ignored on the markdown list action. Number of comments to return to the agent (default 10, max 200). Backend page_size unchanged for cache warmth (JSON only). Trims post-fetch only.
include_totalNoInclude total count in response.
reference_typeNoFilter by anchor type.
include_deletedNoInclude soft-deleted.
parent_comment_idNoParent comment ID for reply (single-level threading).

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, and the description adds meaningful behavioral context: explicitly stating 'Destructive: delete, bulk-delete' and disclosing that the detail override is 'best-effort — may be a silent no-op until the comments API honors output='. This goes beyond the annotations but doesn't fully describe all behaviors, making 4 appropriate.

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

Conciseness5/5

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

The description is compact yet information-dense, covering purpose, action discovery, destructive behavior, and verbosity controls in just a few sentences. It is front-loaded with the main purpose and every sentence contributes, with no fluff or repetition.

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

Completeness4/5

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

Given the tool's complexity (23 parameters, 10 actions, nested reference objects), the description does a good job by summarizing scope, pointing to action='describe' for full details, and covering key behavioral nuances. It doesn't explain return values or the full reference structure, but the schema and describe action compensate, so a 4 is fair.

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

Parameters3/5

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

Schema coverage is 100%, so the baseline is 3. The description adds a small amount of parameter semantics via the verbosity discussion (detail defaults), but this is already present in the schema's detail parameter description. No significant new parameter meaning is introduced, so the baseline score stands.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Comments on files: add/list/delete/react' and explicitly mentions anchoring to image regions, A/V timestamps, PDF pages, or text selections. This specific verb+resource pairing distinguishes it from all sibling tools, none of which relate to comments.

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

Usage Guidelines4/5

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

The description provides clear usage context, such as calling action='describe' for the full reference and explaining verbosity defaults for list/list-all vs details. However, it does not explicitly mention when not to use this tool or compare it to alternatives, 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.

downloadA
Read-onlyIdempotent
Inspect

Download URLs for files (file-url), folder ZIPs (zip-url), and quickshare links (quickshare-details — DEPRECATED, use the fileshare tool's create action for new shares). Consumes bandwidth credits. Call action='describe' for the full action/param reference.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYesOperation. Use 'describe' for full action reference.
node_idNoStorage tree node opaque ID. Both files and folders are nodes — use this name regardless of which.
share_idNoAlias for profile_id when the profile is a share — implies profile_type=share (so profile_type may be omitted).
context_idNoAlias for profile_id (either name works)
profile_idNoPolymorphic context ID. Pair with profile_type=workspace|share. Typed aliases let you omit profile_type: workspace_id (⇒ workspace) / share_id (⇒ share); also context_id / instance_id. 19-digit profile ID or custom name.
version_idNoSpecific file version ID.
instance_idNoAlias for profile_id (REST/how-to name; profile_id is canonical).
context_typeNoAlias for profile_type (either name works)
profile_typeNoProfile type.
workspace_idNoAlias for profile_id when the profile is a workspace — implies profile_type=workspace (so profile_type may be omitted).
quickshare_idNoQuickshare opaque identifier.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations declare readOnlyHint and idempotentHint, and the description adds 'Consumes bandwidth credits' which is valuable non-obvious behavior beyond the annotations. It also notes deprecation. No contradiction with structured data.

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

Conciseness5/5

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

The description is three sentences, front-loaded with the core purpose, and includes essential caveats (deprecation, bandwidth credits, describe action) without redundancy. Every sentence earns its place.

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

Completeness4/5

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

For an 11-parameter, multi-action tool, the description plus 100% schema coverage and the `describe` action provides a fairly complete picture. It doesn't detail return values, but the `describe` action is explicitly offered to fill that gap.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. The description adds meaning to the `action` parameter by explaining what each enum value (file-url, zip-url, quickshare-details) does, something the schema's action description omits. It also flags deprecation, enhancing parameter understanding.

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

Purpose5/5

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

The description clearly states the tool's function: 'Download URLs for files (file-url), folder ZIPs (zip-url), and quickshare links'. It identifies specific actions and differentiates from siblings like `fileshare` by noting the deprecated quickshare-details and the alternative.

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

Usage Guidelines4/5

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

Provides clear usage context by mentioning bandwidth credits and explicitly deprecating quickshare-details with a pointer to the `fileshare` tool for new shares. However, it doesn't explicitly state when to prefer this tool over all alternatives beyond that.

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

eventA
Idempotent
Inspect

Event log and activity monitoring for workspaces and shares. Also surfaces the per-member DASHBOARD — a 'what's on your plate' feed of cards (@mentions, file activity) for one workspace, with view-only dismiss/snooze and a best-effort AI overlay. Org-wide storage change feed (changes): ONE cursor covering every workspace and share of an org, instead of polling each one. Call action='describe' for the full action/param reference. Verbosity (detail param): search/activity-list/activity-poll default to terse (compact rows). summarize defaults to standard (envelope around the AI summary). details defaults to full (drill-down). Pass an explicit detail='terse'|'standard'|'full' to override (best-effort on summarize/activity-list/activity-poll — only search/details honor output=; see describe).

ParametersJSON Schema
NameRequiredDescriptionDefault
waitNoMax seconds server holds connection (1-95, default 95).
eventNoExact event name. See describe action for catalog.
limitNoMax results (1-250; default 100, changes: 250).
actionYesOperation. Use 'describe' for full action reference.
cursorNochanges: the opaque feed cursor from the previous response — send it back unchanged; omit to bootstrap. activity-list: last activity timestamp for incremental polling.
detailNoPer-record verbosity for search/summarize/details/activity-list/activity-poll. Defaults: terse for search/activity-list/activity-poll (compact rows), standard for summarize, full for details (drill-down). See action='describe' for per-level field lists.
offsetNoPagination offset.
org_idNoOrganization profile ID (19-digit). Filter for search/summarize; the org to read for changes.
user_idNoFilter by the event's stored subject column. DO NOT read it as "the person this event is about": the platform DERIVES that column instead of taking it from the emitter, so it can name an arbitrary related user rather than the subject. For "what did this person do", use calling_user_id (the actor) and read its note. See the search note before relying on either.
card_keyNoDashboard card identity "<lane>:<id>" (e.g. "mention:123"). From a dashboard-list card. Required for dashboard-dismiss/dashboard-undismiss; URL-encoded into the path by the server.
categoryNoEvent category. See describe action for valid values. `node` IS THE AI/RAG PIPELINE, NOT FILE OPERATIONS — file activity lives under `workspace` AND `share`, so query both. CLOUD IMPORT IS NOT `cloudsync` HERE — that is an ACTIVITY field on a different taxonomy and returns nothing rather than erroring. Use category="import", narrowed with subcategory="cloud_import" for graft traffic only.
event_idNoAlphanumeric event opaque ID.
share_idNoFilter by share profile ID.
entity_idNoOpaque ID of a specific object (file, comment, etc.). Pair with entity_type to disambiguate. 19-digit workspace, share, or File Share ID to monitor (activity-poll long-polls GET /activity/poll/{id}/ — for a File Share id this surfaces its file_share_* feed to WORKSPACE MEMBERS only; recipients get no feed).
object_idNoFilter by related object opaque ID (file, folder, etc.).
context_idNoAlias for profile_id (either name works)
profile_idNoPolymorphic context ID. Pair with profile_type=workspace|share|org|fileshare. Use workspace_id instead when only workspaces are valid. 19-digit profile ID (workspace, share, or File Share).
visibilityNoFilter by event visibility level (external_audit_log | external). Default returns both, excludes internal.
created_maxNoISO 8601 datetime — events on or before.
created_minNoISO 8601 datetime — events on or after.
subcategoryNoEvent subcategory. See describe action for valid values.
acknowledgedNoFilter by acknowledgment status.
context_typeNoAlias for profile_type (either name works).
lastactivityNoTimestamp from prior poll's response. Omit on first call.
profile_typeNoProfile type: "workspace", "share", or "fileshare". `fileshare` is valid for activity-list (long-poll a File Share's feed — workspace members only; recipients get no feed).
snooze_untilNoOptional for dashboard-dismiss: a future "Y-m-d H:i:s UTC" timestamp to snooze the card until (it reappears after). Omit for a permanent dismiss.
user_contextNoFocus guidance for AI summary, e.g. "Focus on uploads".
workspace_idNoWorkspace opaque ID. Use this when only workspaces are valid (not shares or other contexts). For polymorphic contexts use profile_id. Filter by workspace profile ID.
calling_user_idNoFilter by the user who triggered the event.
parent_event_idNoFilter by parent event ID for serial/batch events. SCOPE-EXCLUSIVE: cannot combine with any filter other than acknowledged, limit, offset.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations provide idempotentHint=true and destructiveHint=false, and the description does not contradict either. Beyond the annotations, the description discloses important traits: the dashboard is 'view-only' with 'best-effort AI overlay', verbosity overrides are 'best-effort' on certain actions, and several behaviors differ by action (e.g., changes cursor reuse, long-polling on activity-poll, fileshare feed only for workspace members). This adds substantial behavioral context beyond the structured fields.

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

Conciseness4/5

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

The description is dense but well-organized, front-loading the main purpose and then layering action-specific notes, verbosity defaults, and references to the describe action. Every sentence carries distinct information, and the structure groups related concerns (events+activity, dashboard, changes, verbosity). It is longer than average, but the complexity of a 30-parameter multi-action tool justifies the length without fluff.

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

Completeness4/5

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

For a tool with 30 parameters, no output schema, and 11 actions, the description provides a solid high-level map and directs the agent to action='describe' for the full action/param reference. It covers the major conceptual semantics (verbosity, cursor usage, file share visibility caveats) but relies on that external describe action for per-action field lists and response details. This is a reasonable balance given the scale, though not exhaustive.

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

Parameters5/5

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

Schema description coverage is 100%, but the description text goes further by adding critical semantic caveats: the user_id field clarification about derived vs emitter subject, the category field warning that `node` is AI/RAG pipeline not file operations scrubbing, and the cloud_import subcategory disambiguation. These are not present in the schema and materially improve correct parameter usage. The description earns a top score by compensating for schema ambiguities.

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

Purpose5/5

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

The description explicitly names the resource ('Events & Activity') and enumerates the core capabilities: event log/activity monitoring, per-member DASHBOARD feed, and the org-wide changes cursor. It distinguishes the multi-action nature of the tool (search, activity-list, dashboard, changes) and clearly scopes each. The generic tool name 'event' is fully disambiguated by the description.

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

Usage Guidelines4/5

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

The description provides clear context for when to use specific actions: 'changes' for a single org-wide cursor 'instead of polling each one', and a recommendation to call action='describe' for the full action/param reference. It also explains default verbosity levels. However, it does not explicitly contrast this tool against sibling tools (e.g., workspace, share, storage) or state when to prefer one over another, which is a minor gap given the tool's breadth.

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

fileshareA
Destructive
Inspect

File Shares: durable single-file share links. create/list/details/update/delete, per-user grants (grant-list/grant-add/grant-revoke incl. grant-by-email with pending invites), and direct read/preview/version URLs. Call action='describe' for the full action/param reference. Bound to ONE workspace file (immutable binding); deletion NEVER touches the bound file. Recipient 404 is UNIFORM — not-found / revoked / expired are indistinguishable by design (do not speculate). Passwords are supplied via the x-ve-password header (the password input) — never placed in URLs. Destructive: delete (removes the share, not the file). Reversible access change: grant-revoke (re-grantable). download-url / preview-url / version-download-url return a DIRECT API URL — gated shares require Authorization and/or x-ve-password HEADERS on the GET (the password is never embedded in the URL).

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeNocreate: the workspace FILE node opaque ID to bind the share to (required). The binding is immutable — share a different file by creating a new File Share.
userNogrant-add / grant-revoke: the grantee's numeric user ID (19-digit). EXACTLY ONE of user / email.
emailNogrant-add / grant-revoke: the grantee's email. EXACTLY ONE of user / email. An unregistered email becomes a PENDING invite (auto-activates on signup; capped to the share's expiry).
limitNolist: page size (1-500, default 100).
titleNoHuman-readable share title. create / update.
actionYesOperation. Use 'describe' for full action reference.
offsetNolist: pagination offset (default 0).
expiresNocreate/update: relative expiry in SECONDS from now (1..3155760000). Mutually exclusive with expires_at.
passwordNocreate/update: SET the share password. On consumer actions (details / download-url / preview-url / versions-list / version-download-url): supply the recipient password — forwarded ONLY as the x-ve-password header, never in a URL/log. update: send '' (empty string) to CLEAR an existing password.
capabilityNogrant-add: the capability to grant — view | download | edit (ordered). `edit` allows content write-back. Required for grant-add.
expires_atNocreate/update: absolute expiry as 'YYYY-MM-DD HH:MM:SS UTC' (no timezone = UTC). Mutually exclusive with expires. update: send '' (empty string) to CLEAR the expiry and make the share durable again.
version_idNoversion-download-url: the specific version OpaqueId to download (from versions-list / details).
fileshare_idNoFile Share ID (19-digit numeric). Required for every action except create / list.
preview_typeNopreview-url: the preview variant (e.g. 'image', 'pdf', 'video'). Multi-file previews 307-redirect to a token-bearing sub-file URL.
workspace_idNoParent workspace ID (19-digit or custom name). create / list — the management authz anchor.
access_optionNoAccess tier: anyone_with_link | any_registered | named_people. create / update. `edit` capability is NEVER conferred by a tier — it always needs an explicit edit grant.

TDQS

A4.6/5.0
Behavior5/5

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

With annotations only indicating destructive/open world hints, the description adds rich context: immutable file binding, deletion safety, uniform 404 design, header-only password transmission, and reversibility of grant-revoke. These are non-obvious behaviors that govern invocation and error handling.

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

Conciseness4/5

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

The description is a dense paragraph, but given the tool's complexity (16 params, 13 sub-actions), every sentence earns its place. It front-loads the core purpose and groups related details, though a bulleted format could improve scanability.

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

Completeness5/5

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

Given the high parameter count and no output schema, the description covers critical behaviors: immutable binding, deletion semantics, uniform 404s, password header usage, expiry rules, capability tiers, and pending invite handling. It leaves little ambiguity for an agent to operate correctly.

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

Parameters4/5

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

The schema already covers 100% of parameters with detailed descriptions, so the baseline is 3. The description adds extra semantics beyond the schema, such as direct URL behavior requiring Authorization/header on GET and explicit note that passwords never appear in URLs, which clarifies existing password-related parameters.

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

Purpose5/5

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

The description explicitly states 'File Shares: durable single-file share links' and enumerates the action families (create/list/details/update/delete, grants, direct URLs). This clearly distinguishes it from sibling tools like 'share' or 'upload' by naming the exact resource and operations.

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

Usage Guidelines4/5

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

The description provides practical usage guidance: 'Call action="describe" for the full action/param reference' and explains when to use headers for password-protected shares. It also gives caveats like 'deletion NEVER touches the bound file' and 'do not speculate' on 404s, but does not explicitly name alternative tools for exclusion.

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

findA
Read-only
Inspect

Unified search across a workspace or share — ONE query, results GROUPED BY TYPE into buckets (files, metadata [workspace only], comments), each independently paginated and health-reported. Call action='describe' for the full action/param reference. For a FILE lookup start with storage action=search — smaller default page, files_scope/metadata_filters, the depth surface. Use find when you also need metadata-only hits or comments in the same call; metadata action=search for lexical metadata fields alone.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNoAlias for search (the name storage + code-mode search use).
actionYesOperation. Use 'describe' for full action reference.
detailNoFiles-bucket rows on workspaces AND shares: caps `content_snippet` (standard 600 bytes, terse 200, full untrimmed). On a WORKSPACE also the `facts` tier: standard (default) up to 8 fields WITH values, full up to 100, terse names-only so a terse row carries NO `facts`. Shares carry no facts at any tier. See action='describe'.
searchNoSearch query string. 1-1024 chars; empty/blank rejected (platform 1605). Searched across every applicable bucket. (Alias: query.)
share_idNoAlias for profile_id when profile_type=share.
search_inNofilename | content | both (DEFAULT). filename = name only, find-style. content = the AI's summary + semantic, NOT grep. OMIT unless you mean it — sending it changes the response shape (adds a search_metadata block); omitting reproduces today's behavior byte-for-byte. Pair filename with name_match.
context_idNoAlias for profile_id.
name_matchNoauto (DEFAULT) | exact | prefix | contains | glob. exact = whole name; prefix = starts with; contains = substring — those three are LITERAL (* and ? are ordinary chars). glob = wildcards over the WHOLE name: *.pdf, report-*.xlsx. Do NOT pre-escape. Applies when search_in is filename or both; auto keeps today's relevance. Precise modes cap the pattern at 256 chars, reject an empty one.
profile_idNoWorkspace or share opaque ID (19-digit numeric ID or custom name). Pair with profile_type. Four accepted aliases besides this one (five id params total): workspace_id, share_id, context_id, instance_id — the supplied id must match profile_type (workspace_id only with profile_type=workspace, share_id only with share).
files_limitNofiles bucket page size (default 25).
instance_idNoAlias for profile_id (REST/how-to name; profile_id is canonical).
context_typeNoAlias for profile_type.
files_offsetNofiles bucket result offset (default 0).
profile_typeNoProfile to search: "workspace" or "share". (Alias: context_type.)
workspace_idNoAlias for profile_id when profile_type=workspace.
case_sensitiveNoCase-sensitive matching for exact/prefix/contains/glob. Default false (like find -iname), which folds non-ASCII too. Ignored under name_match=auto.
comments_limitNocomments bucket page size (default 25).
metadata_limitNometadata bucket page size (default 25). Workspace only — dropped from the request on a share (shares have no metadata bucket).
comments_offsetNocomments bucket result offset (default 0).
metadata_offsetNometadata bucket result offset (default 0). Workspace only — dropped from the request on a share (shares have no metadata bucket).

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already provide readOnlyHint=true, openWorldHint=true, and destructiveHint=false, so the safety profile is clear. The description adds genuinely useful behavioral detail beyond those annotations: grouped buckets, independent pagination, health reports, search_in changing the response shape when sent, and the detail tier affecting the facts field. It does not fully enumerate every behavioral nuance, but with annotations covering the core safety profile, the added context justifies a 4.

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

Conciseness4/5

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

The description is dense but every sentence earns its place: it front-loads the core behavior, then siblings, then parameter semantics, then the action='describe' pointer. The main trade-off is that the opening sentence is long. The structure is otherwise tight, with no filler.

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

Completeness4/5

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

For a 20-parameter tool with 6 enums and no output schema, the description is strong: it covers result shape, pagination, health reporting, workspace-vs-share differences, and the action='describe' escape hatch. It does not restate every schema property, which is appropriate given 100% schema coverage. The main omission is not describing the search_metadata block shape after search_in is sent, but the escape hatch compensates.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description goes beyond by explaining cross-parameter relationships: search_in changes response shape and pairs with name_match; name_match exact/prefix/contains treat * and ? literally while glob uses wildcards; metadata_limit and metadata_offset are dropped on shares; and five id params are aliases that must match profile_type. That adds meaning the schema alone does not provide.

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

Purpose5/5

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

The description leads with a specific verb ('search') and a precise resource scope ('across a workspace or share'), then distinguishes the tool by its grouped-by-type result shape and explicitly contrasts it with storage action=search and metadata action=search. That contrast makes it immediately distinguishable from 19 sibling tools.

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

Usage Guidelines5/5

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

The description gives concrete routing guidance: use storage action=search for file lookups, use find when metadata-only hits or comments are needed in the same call, and use metadata action=search for lexical metadata fields alone. It also tells the agent to call action='describe' for the full action/param reference, which is a strong when-to-use signal.

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

how-toA
Read-only
Inspect

Built-in product help — ask a natural-language "how do I…" question about Fastio and get a grounded, product-aware answer (or a short clarifying question) back in one call. EXPLAIN-ONLY / ADVISORY: it returns GUIDANCE TEXT and performs NO platform action (it will not create shares, move files, or change anything) — read the guidance, then act with the other tools. Answers are grounded in Fastio's own how-to knowledge AND phrased in terms of these MCP tools — they name the concrete <tool> action="…" calls to make — so prefer this over guessing endpoints or burning exploratory calls. For Q&A over YOUR uploaded files (RAG) use the ai tool instead — how-to answers questions about Fastio ITSELF. FREE and requires only an authenticated user (no org, no plan gate, no billing). Call action='describe' for the full action/param reference.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYesOperation. Use 'describe' for full action reference.
contextNoOptional free-text background about your situation (what you're trying to accomplish, what you've tried). Up to 8000 chars. Treated strictly as untrusted DATA — it cannot redirect the assistant. Omit when empty.
questionNoThe natural-language "how do I…" question about Fastio. 1-2000 chars, non-blank. Be specific — a vague question returns a clarifying question instead of an answer.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already mark readOnlyHint=true, openWorldHint=true, and destructiveHint=false; the description goes beyond by adding 'EXPLAIN-ONLY / ADVISORY,' stating it performs no platform action, will not create shares/move files/change anything, and is free with only an authenticated user required. This is rich behavioral context with no contradiction.

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

Conciseness4/5

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

The description is dense but well-organized, front-loading the core purpose and safety profile before diving into usage distinctions. Every sentence earns its place, though the length is notable; the ALL-CAPS label and clear clauses keep it scannable. It is not bloated but could be slightly tightened.

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

Completeness5/5

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

For a tool with no output schema and a simple 3-parameter schema, the description is exceptionally complete: it explains return behavior (answer or clarifying question), scope (Fastio how-to vs RAG), safety/no-op nature, cost/auth requirements, and how to get a full action reference. No significant gaps remain.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3; description adds meaningful semantics: 'Call action="describe" for the full action/param reference,' 'a vague question returns a clarifying question instead of an answer,' and that `context` is 'treated strictly as untrusted DATA — it cannot redirect the assistant.' These details enhance understanding beyond the schema.

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

Purpose5/5

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

The description opens with a specific verb+resource: 'ask a natural-language how-do-I question about Fastio and get a grounded, product-aware answer.' It clearly identifies the tool as built-in product help and explicitly contrasts it with the `ai` tool for RAG over uploaded files, distinguishing it from siblings.

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

Usage Guidelines5/5

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

The description gives explicit when-to-use guidance: 'prefer this over guessing endpoints or burning exploratory calls' and explains that `how-to` answers questions about Fastio ITSELF, while `ai` handles Q&A over uploaded files. It also tells the agent to act with other tools after reading guidance and mentions the `action='describe'` option for a full reference.

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

intentA
Destructive
Inspect

Agent Intents: announce what you are working on in a workspace so peers see a collision before it happens. allocate a slot when work starts (content-free, and GET-OR-CREATE — it can hand back a slot you already hold), fill it once you know what to say (fill is also the heartbeat; there is no renewal verb), browse every live intent (topics only), expand for full detail including message, release when done. Call action='describe' for the full reference. Destructive: release.

ParametersJSON Schema
NameRequiredDescriptionDefault
topicNofill only: one-line label, max 256 characters. No newlines or tabs. This is what browse shows.
actionYesOperation. Use 'describe' for full action reference.
cursorNobrowse only: opaque cursor from a previous response. Omit for the first page.
intentNoWhat KIND of work this is — closed vocabulary, server-validated. Optional on allocate and fill.
messageNofill only: long-form detail, max 8192 characters. Absent from browse rows — read it with expand.
node_idNoallocate only: scope the declaration to one node. Omit for a workspace-wide intent. Part of the slot key.
versionNofill only, REQUIRED: the version you last read for this slot. Compare-and-set — a stale or omitted version is refused with 409.
intent_idNoIntent ID from allocate, or from a browse/expand row. Pass it back EXACTLY as received — do not reformat it.
intent_idsNoexpand only: one or more intent IDs. Accepts an array, a JSON array string, or a comma-separated string. Max 250.
workspace_idNoWorkspace ID (19-digit numeric). Required for every action except describe. Intents are workspace-only — there is no share variant.

TDQS

A4.4/5.0
Behavior5/5

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

The description goes well beyond the annotations by disclosing important behavioral nuances: allocate is GET-OR-CREATE and can hand back an already-held slot, fill acts as a heartbeat, browse returns topics only, expand returns full details, and release is destructive. These details are not present in the annotations and materially affect how an agent should invoke 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.

Conciseness5/5

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

The description is dense but every clause earns its place: purpose, lifecycle, heartbeat semantics, GET-OR-CREATE behavior, browse/expand distinction, describe pointer, and destructive warning. It front-loads the main purpose and communicates a complex multi-action tool in a compact, useful way.

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

Completeness4/5

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

For a 10-parameter, six-action tool with no output schema, the description covers the central workflow and key behavioral caveats. It does not spell out return shapes for allocate or describe, but the schema covers parameters and the description directs to action='describe' for full reference. A small gap remains, so 4 is appropriate.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents every parameter thoroughly. The description adds action-level semantics rather than parameter-level detail, which is appropriate, but it does not add much beyond the schema. Baseline 3 is correct.

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

Purpose4/5

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

The description clearly identifies the resource ('Agent Intents') and the core purpose: announcing workspace work so peers see collisions. It names all six actions and their roles, making the tool's function unmistakable. However, it does not explicitly contrast with any sibling tool, so it earns a 4 rather than a 5.

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

Usage Guidelines5/5

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

The description gives a precise lifecycle: allocate when work starts, fill once content is known, browse live intents, expand for detail, release when done. It also provides an explicit exclusion ('there is no renewal verb') and directs users to action='describe' for the full reference. This is strong, actionable guidance for when to use each action.

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

invitationA
Destructive
Inspect

Workspace/share invitations: list, filter by state, update, revoke. Call action='describe' for the full action/param reference. Destructive: delete.

ParametersJSON Schema
NameRequiredDescriptionDefault
stateNoInvitation state filter.
actionYesOperation. Use 'describe' for full action reference.
expiresNoUpdated expiration — `YYYY-MM-DD HH:MM:SS UTC`. ISO 8601 is NOT documented as accepted.
entity_idNoWorkspace or share ID (19-digit numeric or custom name). Must match entity_type.
new_stateNoNew invitation state.
entity_typeNoWorkspace or share.
permissionsNoUpdated permission level.
invitation_idNoInvitation opaque ID or invitee email.
notificationsNoNotification preference (workspace).
notify_optionsNoNotification preference (share).

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already indicate destructive behavior (destructiveHint=true), and the description reinforces this with 'Destructive: delete.' It adds context about update/revoke operations but does not detail side effects, permissions, or response behavior. The safety profile is mostly covered by annotations, with the description adding minimal extra value.

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

Conciseness5/5

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

The description is three short sentences that front-load the primary purpose, provide a clear directive for obtaining full details, and flag destructive actions. Every sentence serves a distinct and necessary role, with no redundancy or filler.

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

Completeness4/5

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

Given the tool's complexity (10 parameters, multiple actions) and absence of an output schema, the description provides a high-level overview and directs to action='describe' for complete details. It does not explicitly list all actions or parameter groups, but the describe reference compensates, making the description sufficiently complete for initial orientation.

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

Parameters3/5

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

Schema description coverage is 100%, so all 10 parameters are already described in the schema. The description adds no additional parameter semantics beyond referencing action='describe' for full details. This matches the baseline for high schema coverage; no extra credit needed.

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

Purpose4/5

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

The description clearly states it manages 'Workspace/share invitations' with actions like list, filter, update, revoke, which distinguishes it from sibling tools like share or member. It could be more exhaustive by listing all actions (e.g., delete, describe), but the pointer to action='describe' compensates, making the purpose evident.

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

Usage Guidelines3/5

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

The description implies usage when managing workspace/share invitations, but it does not explicitly state when to use this tool versus alternatives or mention exclusions. The advice to call action='describe' for the full reference is helpful though limited. No direct comparison to sibling tools is given.

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

memberA
Destructive
Inspect

Workspace/share member management: list, add, remove, update, transfer ownership, join, leave. Call action='describe' for the full action/param reference. Destructive: remove.

ParametersJSON Schema
NameRequiredDescriptionDefault
roleNoShare permission level.
limitNoMaximum number of items to return (1-500, default 100)
actionYesOperation. Use 'describe' for full action reference.
offsetNoNumber of items to skip (default 0)
expiresNoMembership expiration — `YYYY-MM-DD HH:MM:SS UTC` for BOTH workspace and share. ISO 8601 is NOT accepted (406).
messageNoInvitation email message (10-255 chars).
user_idNoUser profile ID (share).
entity_idNoWorkspace or share ID (19-digit numeric or custom name). Must match entity_type.
member_idNoMember ID (workspace).
expirationNoAlias for expires (share only).
entity_typeNoWorkspace or share.
permissionsNoWorkspace permission level.
display_limitNoHow many members to return for the list action. Default 10, max 500. The MCP trims post-fetch; backend paging stays MCP-internal so the platform cache stays warm.
notificationsNoNotification preference (workspace string).
invitation_keyNoInvitation key string.
notify_optionsNoNotification preference (share).
email_or_user_idNoEmail (to invite) or user ID (to add directly).
invitation_actionNoAccept or decline.
force_notificationNoForce notify existing user (workspace-only).
invitation_expiresNoInvitation expiration ISO 8601 (workspace-only).

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false and destructiveHint=true. The description goes beyond this by identifying 'remove' as the destructive action and by disclosing the self-describing action='describe' behavior. This adds specific context 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.

Conciseness5/5

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

The description is three short sentences: purpose with operations, the 'describe' instruction, and a destructive warning. Every sentence earns its place with no redundancy or filler.

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

Completeness4/5

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

Given the tool's complexity (10 actions, 20 parameters, no output schema), the description provides a concise overview and leverages the built-in 'describe' action for full detail. It doesn't outline return values, but that's acceptable without an output schema. It is sufficient for orientation.

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

Parameters3/5

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

Schema description coverage is 100%, meaning all 20 parameters have descriptions. The description text itself adds no parameter-level detail beyond pointing to action='describe' for more information, so it meets the baseline for fully-covered schemas.

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

Purpose5/5

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

The description clearly specifies 'Workspace/share member management' and enumerates the operations: list, add, remove, update, transfer ownership, join, leave. This distinguishes it from sibling tools like share (managing shares) and workspace (workspace settings).

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

Usage Guidelines4/5

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

It provides clear context for when to use the tool (member management for workspace/share) and instructs to call action='describe' for the full action/param reference. It does not explicitly contrast with sibling tools or state exclusions, but the resource scope is unambiguous.

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

metadataA
Destructive
Inspect

Workspace metadata: the field VOCABULARY (fields-list), lexical value search (search), metadata+content matching (compound-search), extraction eligibility (eligible), and folding near-duplicate field names together (fields-merge, DESTRUCTIVE). RETIRED: metadata TEMPLATES and SAVED VIEWS are gone — the platform removed those endpoints, so template-, nodes-, auto-match, preview-match, suggest-fields, extract-all and view-*/views-list no longer exist here. Per-file extraction lives on the storage tool (metadata-extract for one file, metadata-extract-all for a folder subtree).

ParametersJSON Schema
NameRequiredDescriptionDefault
qNosearch keyword(s). 1-1024 chars. Multi-token = ALL tokens (AND); case-insensitive; substring for <=64 chars, else whole-word.
limitNosearch: page size (1-100, default 100).
actionYesOperation. Use 'describe' for full action reference.
cursorNoeligible/fields-list: opaque pagination cursor from a prior page's response — echo it back verbatim rather than constructing one. Omit for the first page.
offsetNosearch: results to skip (default 0). offset+limit must stay <= 10000.
confirmNofields-merge: must be 'true' to proceed. The merge is IRREVERSIBLE and workspace-wide; the gate exists because the platform's guards check DATA safety, not whether the two fields mean the same thing.
page_sizeNoeligible/fields-list: cursor page size (1-250, default 100). Server caps at 250.
template_idNoRETIRED — metadata templates were removed, so there is no template to scope to. This tool REFUSES it on EVERY action: supplying it FAILS the request rather than narrowing it (the platform hard-refuses it too, and OPTIONS deliberately does not advertise it). Narrow by FIELD NAME instead — list valid names with `metadata action=fields-list`.
source_fieldNofields-merge: the field NAME that is FOLDED AWAY and stops existing. Names, not ids.
target_fieldNofields-merge: the field NAME that SURVIVES and absorbs the source's values.
workspace_idNoWorkspace opaque ID (19-digit numeric ID or custom name). Required for every action.
content_queryNocompound-search: free-text query run against INDEXED FILE CONTENT (1-1024 chars). Required for compound-search and AND-ed with metadata_filters — a file matches only if it satisfies BOTH. A file with no indexed content can never match, however well its metadata fits.
display_limitNosearch: how many items to return post-fetch. Default 10, max 100 (the backend fetches at most 100 per page — a higher value has no effect; use offset to page past 100).
describe_actionNoWhen action='describe', narrow the output to ONE action's full params/notes (e.g. 'fields-list'). Omit to get the compact action index.
metadata_filtersNocompound-search: JSON predicate array `[{"field","operator","value"}]` (sent to the platform as `filters`). Required for compound-search.

TDQS

A4.4/5.0
Behavior5/5

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

The description flags fields-merge as DESTRUCTIVE and clarifies what that means: it folds near-duplicate field names together, which is a meaningful mutation warning beyond the generic destructiveHint annotation. It also discloses platform removals (RETIRED TEMPLATES and SAVED VIEWS) and redirects extraction to storage, setting accurate expectations. No contradiction with the annotations is present.

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

Conciseness5/5

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

The description fits a broad multi-action tool into three compact sentences, with the action index front-loaded, retired functionality next, and storage routing last. Parentheticals keep the action list scannable, and the all-caps DESTRUCTIVE and RETIRED flags highlight the non-obvious parts. There is no filler.

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

Completeness4/5

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

For a 15-parameter tool with no output schema, the overview plus the highly descriptive schema gives an agent strong grounding: it identifies all live actions, warns about retired ones, and routes adjacent work to storage. It does not state return shapes or per-action eligibility semantics directly, but the `describe` action exists and the schema is thorough, so the agent can proceed.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already explains all 15 parameters in detail, including nuanced ones like template_id hard-refusal and content_query AND semantics. The top-level description adds useful conceptual labels (field vocabulary, lexical value search, compound matching) but does not go deeper on individual parameters than the schema. Baseline 3 applies.

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

Purpose5/5

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

The description anchors to a concrete resource ('Workspace metadata') and enumerates each operation with its action name and a short gloss, e.g. 'lexical value search (search)' and 'folding near-duplicate field names together (fields-merge, DESTRUCTIVE).' It also explicitly distinguishes what the tool is not: templates/views are retired and per-file extraction lives on storage. This makes it easy to identify among siblings.

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

Usage Guidelines4/5

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

The description explicitly redirects per-file extraction to the `storage` tool (metadata-extract and metadata-extract-all), addressing the most likely tool-selection confusion. It also warns that retired template/view actions no longer exist here, preventing wasted calls. It does not give a full decision tree among the six metadata actions, but the schema and `describe` action fill that gap.

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

orgA
Destructive
Inspect

Organization management: CRUD, billing, members, invitations, ownership transfer, assets, discovery. Call action='describe' for the full action/param reference. Destructive: close (permanently deletes org and all data).

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoDisplay name (3-100 chars).
roleNoOrg permission level — `member` or `admin` ONLY. `owner` is not assignable (it is returned when READING members, alongside admin/member). `guest` and `view` are WORKSPACE/SHARE roles and are rejected here (1605).
emailNoEmail address of user to invite.
limitNoPage size.
meterNoMeter type, e.g. storage_bytes, transfer_bytes, ai_tokens.
stateNoInvitation state, e.g. pending, accepted.
actionYesOperation. Use 'describe' for full action reference.
detailNoPer-entity verbosity for list/discover-*/members/list-workspaces/details. Defaults: terse for list/discover-*/members/list-workspaces, full for details. See action='describe' for per-level field lists.
domainNoURL-safe subdomain (2-80 chars, lowercase alphanumeric + hyphens, globally unique, not reserved).
offsetNoPagination offset (0-based).
org_idNoOrganization 19-digit ID or domain string.
confirmNoConfirmation string, must match org domain or ID.
contentNoPlain text content. asset-upload: e.g. SVG body.
expiresNoUpdated expiration datetime.
messageNoCustom invitation email message (10-255 chars).
user_idNoUser ID.
end_timeNoEnd datetime (default now).
industryNoIndustry type, e.g. technology, healthcare, financial.
metadataNoAdditional metadata as JSON array string.
share_idNoFilter by share ID.
file_nameNoOriginal file name, e.g. logo.png.
member_idNoUser ID or email of member.
perm_joinNoPermission level required to join workspace.
asset_nameNoAsset name, e.g. "logo", "banner".
start_timeNoStart datetime (default 30 days ago).
descriptionNoDescription (10-1000 chars).
domain_nameNoDomain to check for availability.
file_base64NoBase64 file content for binary assets.
folder_nameNoURL-safe workspace folder name (4-80 chars).
join_actionNoInvitation action: accept or decline (default accept). Appended to the join URL path — restricted to these two values to prevent path injection.
permissionsNoUpdated permission level.
twitter_urlNoTwitter/X profile URL.
youtube_urlNoYouTube channel URL.
accent_colorNoBrand accent color as JSON.
billing_planNoPaid plan ID for billing-create, e.g. 'solo_monthly', 'business_v2_monthly', 'growth_monthly' (each has an annual variant). New orgs require a paid plan — the free plan is legacy and closed to new subscriptions; legacy 'pro_monthly'/'business_monthly' are also closed. Call billing-plans for the currently-offered plan IDs.
content_typeNoMIME type, e.g. image/png. Defaults to application/octet-stream.
facebook_urlNoFacebook page URL.
homepage_urlNoOrganization website URL.
intelligenceNoEnable RAG indexing. COSTS 10 credits/page. Defaults "false". See describe.
workspace_idNoWorkspace opaque ID. Use this when only workspaces are valid (not shares or other contexts). For polymorphic contexts use profile_id. Filter by workspace ID.
billing_emailNoBilling contact email.
display_limitNoNumber of orgs to return to the agent (default 10, max 100). Backend page_size unchanged for cache warmth — applies to list. Trims post-fetch only.
instagram_urlNoInstagram profile URL.
invitation_idNoInvitation ID or invitee email.
owner_definedNoCustom owner-defined properties as JSON.
invitation_keyNoInvitation key from invite link.
starting_afterNobilling-invoices cursor: pass a prior invoice's `id` to fetch the next page (cursor pagination, not offset).
use_backgroundNoEnable/disable background, "true"/"false".
background_modeNoBackground display mode, e.g. 'stretched', 'fixed'.
describe_actionNoWhen action='describe', narrow the output to ONE action's full params/notes (e.g. 'list'). Omit to get the compact action index.
background_colorNoBackground color as JSON.
background_color1NoPrimary background color as JSON.
background_color2NoSecondary background color as JSON.
perm_member_manageNoWho can manage members, e.g. 'Owner only'.
perm_authorized_domainsNoAuthorized email domain for auto-join.

TDQS

A3.6/5.0
Behavior4/5

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

The description explicitly warns that close permanently deletes the org and all data, adding concrete destructive consequence beyond the destructiveHint=true annotation. It aligns with annotations (readOnlyHint=false, openWorldHint=true) and does not contradict them.

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

Conciseness5/5

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

Three short sentences front-load the scope, direct the agent to the describe action for full reference, and highlight the destructive operation. Every sentence earns its place for a tool of this breadth.

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

Completeness4/5

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

Given 55 parameters and a large action enum, the description cannot enumerate everything, but it provides a strong entry point by directing the agent to action='describe' for the full reference. It does not cover prerequisites or sibling routing, but it is sufficient to begin correct use.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already provides detailed meaning for all 55 parameters. The description's mention of action='describe' is useful orientation but does not add semantic detail beyond what the schema already states.

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

Purpose4/5

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

The description clearly identifies the tool's domain as Organization management and enumerates major operation areas: CRUD, billing, members, invitations, ownership transfer, assets, and discovery. It does not explicitly differentiate the tool from overlapping siblings like member, invitation, or asset, so it stops short of a 5.

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

Usage Guidelines2/5

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

The only usage-related guidance is to call action='describe' for the full reference and a warning that close is destructive. There is no guidance on when to choose this tool over sibling tools, nor any conditions for specific actions like transfer-ownership or billing-create.

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

shareA
Destructive
Inspect

Share management: create/update/delete, archive, password auth, members, autotitle. NOTE: quickshare-create is DEPRECATED (returns error 10756) — use the fileshare tool's create action for durable single-file shares. Call action='describe' for the full action/param reference. Destructive: delete (permanent). Side effects: autotitle AI-generates + applies a title/description (consumes credits, mutates share metadata). ⚠️ intelligence on create COSTS CREDITS (10/page) — default false unless user explicitly requests RAG. Verbosity (detail param): list/available/members default to terse (compact rows). public-details defaults to standard. details defaults to full (drill-down). Pass an explicit detail='terse'|'standard'|'full' to override.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoShare title (2-80 chars; maps to API 'title').
typeNoFilter by share type.
limitNoInternal backend page_size — stays MCP-internal so the platform cache stays warm. Use display_limit to control how many rows are actually returned. Forwarded by list/members.
titleNoShare title (2-80 chars). Alias of name.
actionYesOperation. Use 'describe' for full action reference.
detailNoPer-entity verbosity for list/available/members/public-details/details. Defaults: terse for list/available/members, standard for public-details, full for details. See action='describe' for per-level field lists.
expandNoquickshare-create only. Set to 'node' to include the full backend payload as a nested `node` field. Default response is slim: `{id, web_url, expires_at}`.
inviteNoWho can invite others (default: owners).
notifyNoNotification setting (default: never).
offsetNoNumber of items to skip (default 0)
org_idNoFilter shares to this org.
confirmNodelete: must match the share's custom_name or id (validated client-side before the call).
expiresNoExpiration: 'YYYY-MM-DD HH:MM:SS' for create/update; seconds (default 10800, max 604800) for quickshare-create.
node_idNoStorage tree node opaque ID. Both files and folders are nodes — use this name regardless of which. File node opaque ID. Quickshares: single file, max 1 GB, default 3h, max 7 days.
passwordNoPassword (only with 'Anyone with the link').
share_idNoShare profile ID or custom name.
room_goalNoREMOVED — Coordination Rooms were deleted from the platform on 2026-08-25 and this parameter no longer does anything. Supplying it is REFUSED rather than ignored, so a stale tool list cannot silently drop your value. Do not use it.
expires_atNoISO 8601 datetime for quickshare expiration.
share_typeNoNew share type.
custom_nameNoCustom share URL name (4-80 chars; Unicode letters, digits, hyphens, underscores). Omit to have one auto-generated.
descriptionNoShare description (10-500 chars).
folder_nameNoName for new folder (default: 'Shared Folder').
accent_colorNoAccent color as JSON string.
display_typeNoDisplay mode (default: grid).
intelligenceNoEnable RAG indexing. ⚠️ COSTS CREDITS (10/page) — default false unless user requests it. Forced false on workspace_folder shares.
storage_modeNoStorage mode (default: independent).
user_contextNoautotitle only: optional user-provided context to guide the AI-generated title/description.
workspace_idNoWorkspace opaque ID. Use this when only workspaces are valid (not shares or other contexts). For polymorphic contexts use profile_id. Parent workspace ID.
create_folderNoCreate a new workspace folder (workspace_folder mode).
display_limitNoHow many items to return. Default 10, max 500. The MCP trims post-fetch; backend page_size stays MCP-internal so the platform cache stays warm. Applies to list.
owner_definedNoCustom metadata as JSON string.
access_optionsNoAccess level. 'Anyone with the link' not allowed for receive/exchange.
folder_node_idNoWorkspace folder node ID (workspace_folder mode).
describe_actionNoWhen action='describe', narrow the output to ONE action's full params/notes (e.g. 'create'). Omit to get the compact action index.
workspace_styleNoUse workspace styling (default: true).
background_imageNoBackground image index (0-128, default 0).
comments_enabledNoEnable comments (default: true).
background_color1NoPrimary background color as JSON string.
background_color2NoSecondary background color as JSON string.
download_securityNoDownload security: off (default), medium (no guest download), high (block all guest downloads).
guest_chat_enabledNoEnable guest chat (default: false).
anonymous_uploads_enabledNoAllow guests to upload anonymously on public Receive/Exchange shares.

TDQS

A4.4/5.0
Behavior5/5

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

Goes well beyond the annotations: it flags delete as permanent, discloses that autotitle consumes credits and mutates share metadata, warns that intelligence costs credits (10/page) and defaults to false, and explains per-action verbosity defaults. No contradiction with 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.

Conciseness5/5

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

Dense but well-organized: purpose first, then deprecation warning, self-reference to describe, destructive semantics, side effects, cost warning, and verbosity defaults. Every sentence carries operational value, and the warnings are visually flagged.

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

Completeness4/5

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

For a 42-parameter, multi-action tool with no output schema, the description covers deprecation, cost, destructive behavior, side effects, and verbosity defaults, and provides an action='describe' escape hatch for further detail. It is not fully self-contained regarding return values, but that is a reasonable deferral for such a complex tool.

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

Parameters3/5

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

Schema description coverage is 100%, and the schema itself already documents key behaviors like credit costs, removed parameters, and limit/display_limit semantics. The description reinforces cost and verbosity defaults but adds little parameter-level meaning beyond what the schema already provides.

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

Purpose5/5

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

The description opens with 'Share management: create/update/delete, archive, password auth, members, autotitle' — a specific, verb-rich inventory of operations rather than a tautology. It also names the sibling tool fileshare as the replacement for the deprecated quickshare-create, helping distinguish this tool from related siblings.

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

Usage Guidelines4/5

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

The description explicitly routes agents away from deprecated quickshare-create toward fileshare's create for durable single-file shares, and directs agents to call action='describe' for the full action/param reference. It doesn't enumerate every possible alternative sibling, but the critical routing decision is covered clearly.

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

signA
Destructive
Inspect

E-signature (sign envelopes) + reusable sign TEMPLATES, scoped to a workspace. Create/update DRAFT envelopes, send (reserves credits) / void (terminal), re-drive a wedged envelope (sign-retry), download source/preview/signed documents + the audit certificate and its Certificate-of-Completion PDF (all returned as pre-authenticated STREAM-ROUTE URLs), mint your own signing link for a signature card (dashboard-sign-link), and design/instantiate templates (sign-template-*). Envelopes and templates are WORKSPACE-PARENTED. Write/lifecycle actions are FIRE-AND-FORGET (return ids + state + a _next poll hint); destructive actions (sign-send/sign-void/sign-template-delete) need confirm='true'. Call action='describe' for the full per-action reference (callable without auth).

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNosign-create/-update: envelope name (max 255). sign-template-create/-update: template name (REQUIRED on create). sign-template-instantiate: name for the draft envelope (defaults to the template name).
limitNoPagination limit (max 500).
actionYesOperation. Use 'describe' for full action reference.
fieldsNosign-create/-update: JSON array of field placements (coords 0..1; see note).
offsetNoPagination offset (default 0).
reasonNosign-void: void reason (max 1024).
confirmNoConfirmation gate ('true'). REQUIRED for sign-send/sign-void; refused without it.
snapshotNosign-template-create/-update: JSON snapshot object {recipient_slots, document_slots, fields, policy}. On update it is a FULL replacement (see note).
documentsNosign-create/-update: JSON documents array 1-20 (see note). sign-template-instantiate: JSON array of slot overrides [{document_slot_index, source_node_id, source_version_id?}].
expires_atNosign-create/-update: envelope expiry as a UTC timestamp 'Y-m-d H:i:s UTC' (NOT a day count; omit/null = policy default).
recipientsNosign-create/-update: JSON recipients array (see note).
descriptionNosign-template-create/-update: template description (max 1024).
document_idNosign-document-*: document OpaqueId.
envelope_idNosign-*: numeric envelope ID.
policy_jsonNosign-create/-update: optional JSON policy {auth_method,...}.
template_idNosign-template-get/-update/-delete/-instantiate: template id (30-char base32, `sa` family).
workspace_idNoWorkspace ID. Envelopes are workspace-parented; use the 19-digit NUMERIC workspace ID (the document/audit download stream route rejects custom workspace names).
display_limitNoMax list rows rendered inline (default 10; the full page is still fetched).
describe_actionNoWhen action='describe', narrow the output to ONE action's full params/notes (e.g. 'sign-create'). Omit to get the compact action index.
envelope_statusNosign-list: status filter.
expected_versionNosign-template-update: the `version` you read from sign-template-get (optimistic CAS). A concurrent write returns 409 — re-read and retry.
recipient_bindingsNosign-template-instantiate: JSON OBJECT keyed by slot_key -> {email, display_name?, auth_method?}. An ARRAY is rejected by the platform.

TDQS

A4.4/5.0
Behavior5/5

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

Beyond the annotations (readOnlyHint=false, destructiveHint=true), the description discloses fire-and-forget lifecycle semantics, `_next` poll hints, terminal void behavior, credit reservation on send, pre-authenticated stream-route URLs, and confirm gating for destructive actions. These are substantial behavioral details 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.

Conciseness5/5

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

The description is dense but well-ordered: scope first, then the operation catalog, then key behavioral caveats, then the describe escape hatch. Every sentence carries information; there is no filler or repetition.

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

Completeness4/5

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

For a high-complexity tool with 22 parameters, 20 actions, and no output schema, it covers critical return behaviors (ids + state + `_next`, stream-route URLs) and directs agents to action='describe' for exhaustive per-action details. It does not spell out list/download return shapes, but the describe reference materially compensates.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all 22 parameters. The description adds useful global context such as confirm gating and fire-and-forget behavior, but it does not add significant per-parameter meaning beyond what the schema already provides.

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

Purpose5/5

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

The description names the domain (E-signature) and explicitly enumerates the operation classes: envelope drafts, send/void/retry, document/audit downloads, signing links, and templates. It clearly scopes everything to workspace-parented envelopes and templates, which distinguishes it from sibling tools like download or fileshare.

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

Usage Guidelines4/5

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

It states the tool is workspace-scoped, tells agents to call action='describe' for the full per-action reference, and flags that destructive actions require confirm='true'. It does not explicitly name sibling alternatives or when-not-to-use conditions, but no sibling covers e-signature, so the guidance is strong.

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

storageA
Destructive
Inspect

Files & folders on workspaces/shares: list, search, copy, move, delete, rename, trash, transfer, versions, locks, previews, and per-node metadata (get/set/delete/extract/versions). FILES OFTEN ALREADY CARRY AI-EXTRACTED METADATA, AND IT IS SEARCHABLE — check or search metadata before reading files: it frequently answers the question without opening anything, and finds files by value without listing folders. Call action='describe' for the full action/param reference. Destructive: purge (irreversible). delete moves to trash. metadata-delete removes metadata keys. Verbosity (detail param): list/recent/trash-list default to terse (compact rows); search defaults to standard (rows keep their facts values); details defaults to full (drill-down). Pass an explicit detail to override.

ParametersJSON Schema
NameRequiredDescriptionDefault
qNolist/search: alias for `query`. content: the relevance query (1-512 chars) — BM25 over THAT ONE FILE's chunks, never across the workspace, so it cannot find another file; returns every one of the top `limit` hits (default 3, max 20) with FULL text, is not byte-budgeted, and cannot be combined with `cursor`, `max_bytes`, or a page/chunk window.
keysNometadata-delete: JSON array of metadata keys to delete (omit to clear all).
nameNoName for new folder or file.
pageNocontent: read one page (1-based). A window selector.
sizeNoSize preset: "IconSmall", "IconMedium", "Preview", or custom.
typeNoFilter by node type.
limitNoMax results — 1-500, default 100 on list/search. content NARROWS it to 1-20, default 5 (3 with q); a value outside 1-20 is refused before any platform call.
queryNoSearch query — keyword, or keyword + semantic when intelligence is on.
widthNoTarget width in pixels.
actionYesOperation. Use 'describe' for full action reference.
cursorNoOpaque cursor from a previous response.
detailNoPer-node verbosity for list/recent/search/trash-list/details. Defaults: terse for list/recent/trash-list, STANDARD for search (terse drops fact values), full for details. Bump to full when you need ai.attach (files_attach preflight), virus, hashes, file_attributes, lock_info, or long-form summaries. See action='describe' for per-level field lists. Not to be confused with `details` (search-only).
heightNoTarget height in pixels.
offsetNoResults to skip (default 0).
outputNocontent-only response tier (default full). terse OMITS each chunk's `text` — every other field still comes back, so it is the cheap way to map a file's chunks before reading any. Not `detail`, the per-node tier on list/recent/search/details. EXACTLY ONE tier: markdown composition is NOT supported here, so `full,markdown` is rejected before the request is built.
detailsNoSearch-only. Return fully-hydrated node objects per result (default limit drops to 10). Distinct from `detail` — call action='describe' for the contrast.
node_idNoStorage tree node opaque ID. Both files and folders are nodes — use this name regardless of which. Storage node opaque ID, or 'root'. On `list`, the target folder may also be given as parent_node_id or parent_id (aliases), and defaults to 'root' (the storage top level) when all three are omitted.
sort_byNoSort column (default: name).
chunk_toNocontent: last chunk `position` of a chunk range (0-based, >= chunk_from, and under 10000). Requires chunk_from.
durationNolock-acquire only — how long the lock should hold, in seconds (60-3600). Omit for the platform default, which is SHORT: measured at 300s (5 minutes) on dev1.
max_sizeNoMax read-content bytes (default 512000, max 1048576).
new_nameNoNew name for file or folder.
node_idsNoStorage node opaque IDs (details: 1-25 max).
share_idNoFor add-link: the target share to link (workspace-only). For the dual-type actions (list/details/copy/move/etc.): a profile alias implying profile_type=share — the share you are operating in (so profile_type may be omitted).
sort_dirNoSort direction (default: asc).
max_bytesNocontent, ORDERED reads only: UTF-8 byte budget for the returned passages (1024-262144, default 32768). Text is never cut inside a chunk — the page stops BEFORE the chunk that would exceed the budget. Refused alongside q: a relevance read is unbudgeted.
node_typeNorename-only OPTIONAL hint: the node's type, when the caller already knows it. Notes route to a dedicated endpoint, so supplying node_type lets rename skip the /details/ type-probe round-trip. Omit to have rename probe automatically. Distinct from the list/recent `type` filter.
parent_idNoAlias for node_id on `list` (the folder whose contents to list), or 'root'. `list` defaults to 'root' when omitted.
search_inNofilename | content | both (DEFAULT). filename = name only, find-style. content = the AI's summary + semantic, NOT grep. OMIT unless you mean it — sending it changes the response shape (adds a search_metadata block); omitting reproduces today's behavior byte-for-byte. Pair filename with name_match.
upload_idNoOpaque ID of completed upload session.
chunk_fromNocontent: start of an inclusive chunk `position` range (0-based, a chunk's ordinal in read order, under 10000). LEGAL ALONE — it reads on from that position; chunk_from=N chunk_to=N reads one chunk in full.
context_idNoAlias for profile_id (either name works)
key_valuesNometadata-set: JSON object of field-name -> value, max 100 entries, matching the workspace field VOCABULARY (list names with `metadata action=fields-list`) — NOT template fields; templates were removed. ADDITIVE: send ONLY the fields you are changing, and note it CANNOT clear a field (use metadata-delete with an explicit `keys` list).
lock_tokenNolock-release only — the token returned by lock-acquire. REQUIRED to release a lock.
name_matchNoauto (DEFAULT) | exact | prefix | contains | glob. exact = whole name; prefix = starts with; contains = substring — those three are LITERAL (* and ? are ordinary chars). glob = wildcards over the WHOLE name: *.pdf, report-*.xlsx. Do NOT pre-escape. Applies when search_in is filename or both; auto keeps today's relevance. Precise modes cap the pattern at 256 chars, reject an empty one.
profile_idNoPolymorphic context ID (pair with profile_type=workspace|share). Typed aliases let you omit profile_type: workspace_id (⇒ workspace) / share_id (⇒ share, on dual-type actions); also context_id / instance_id. 19-digit workspace or share ID, or custom name.
version_idNoVersion ID to restore.
as_markdownNoOpt-in (list/recent/search/details/trash-list): when true, the platform renders the response as GitHub-flavored Markdown (?output=<detail>,markdown) for compact, human/agent-readable output instead of JSON. Omit (default) for the unchanged JSON shape with web_url enrichment + _next hints. Markdown is a passthrough — no client-side reshaping.
files_scopeNoScope semantic search to file versions. See describe for full constraints.
instance_idNoAlias for profile_id (REST/how-to name; profile_id is canonical).
template_idNoRETIRED — metadata templates were removed, so there is no template to scope to. Supplying it FAILS the request: the platform hard-refuses it on metadata-extract, metadata-set and the search routes alike, and OPTIONS does not advertise it. Node metadata is written as facts against the workspace field vocabulary — use key_values to write, and extract_fields to scope an extraction.
context_typeNoAlias for profile_type (either name works)
preview_typeNoType of preview to generate. See describe for which preview_types apply to which file categories.
profile_typeNoProfile type: "workspace" or "share".
workspace_idNoAlias for profile_id when the profile is a workspace — implies profile_type=workspace (so profile_type may be omitted). Valid on every storage action.
display_limitNoHow many items to return. Default 10, max 500. The MCP trims post-fetch; backend cache stays warm. Used by: list, recent, search. list/recent paginate via the `cursor` param; search paginates via `offset` (increase offset by the page size) for additional pages.
folders_scopeNoScope semantic search to folders via BFS. See describe for full constraints.
output_formatNoOutput format: "png", "jpg", "webp".
transfer_modeNo'copy' (default) or 'move'. 'move' invalid for node_id 'root'.
case_sensitiveNoCase-sensitive matching for exact/prefix/contains/glob. Default false (like find -iname), which folds non-ASCII too. Ignored under name_match=auto.
dest_parent_idNoDestination parent folder opaque ID, or 'root'. Primary param for transfer (the parent in the OTHER instance). For copy/move within the same instance use target_parent_id — dest_parent_id is also accepted there as an alias.
extract_fieldsNometadata-extract: JSON array of field names (e.g. `["vendor","amount"]`); omit for a full-row extract. WITH a template bound it narrows extraction to those fields. WITHOUT one it is NOT a filter: the request may be REFUSED, and where accepted the names act only as a re-run key — the file is still read in full, other fields are still written, and named fields are not guaranteed to return.
parent_node_idNoParent folder opaque ID, or 'root'. (On `list`, also accepted as an alias for node_id — the folder to list; `list` defaults to 'root' when omitted.)
transform_nameNoTransform name, e.g. "image" for resize/crop/format.
describe_actionNoWhen action='describe', narrow the output to ONE action's full params/notes (e.g. 'list'). Omit to get the compact action index.
dest_instance_idNoDestination workspace or share profile ID.
metadata_filtersNosearch: JSON array of metadata predicates, e.g. '[{"field":"category","operator":"=","value":"Legal"}]'. Narrows to files whose metadata satisfies EVERY predicate BEFORE the query ranks — see describe.
target_parent_idNoDestination folder opaque ID, or 'root'.

TDQS

A4.1/5.0
Behavior5/5

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

Despite annotations already flagging destructiveHint=true and readOnlyHint=false, the description goes well beyond them by specifying which operations are destructive and what they actually do: "purge (irreversible). delete moves to trash. metadata-delete removes metadata keys." It also discloses the searchable metadata behavior and the verbosity default tiers per action. This is exactly the kind of beyond-annotation context the dimension rewards.

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

Conciseness5/5

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

The description is front-loaded with the tool's scope, then gives high-value usage hints, destructive warnings, and verbosity defaults in a compact block. Despite covering a 31-action tool, every sentence carries distinct, decision-relevant information and there is no filler or redundancy.

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

Completeness4/5

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

For a 58-parameter, 31-action tool with no output schema, the description provides an efficient high-level orientation, flags safety-critical destructive behavior, and points to action='describe' for the full action/parameter reference. The richly documented schema covers the remaining invocation details, so the combination is sufficient for correct selection and safe initial use.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description adds a small amount of parameter context by explaining the `detail` parameter defaults and the action='describe' reference for full parameter docs, but it does not meaningfully enrich parameter semantics beyond the already very detailed per-parameter schema descriptions.

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

Purpose4/5

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

The description opens with a precise resource and verb set: "Files & folders on workspaces/shares: list, search, copy, move, delete, rename, trash, transfer, versions, locks, previews, and per-node metadata". This is specific and clearly distinguishes the tool's scope from a mere tautology. However, it does not explicitly position itself against overlapping sibling tools like find, metadata, share, or upload/download, so it misses the top criterion of sibling differentiation.

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

Usage Guidelines4/5

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

The description provides clear, actionable workflow guidance: "check or search metadata before reading files" and explicitly warns about destructive actions (purge vs delete vs metadata-delete). It also explains verbosity defaults and how to override them. Still, it names no sibling tools or when-not-to-use conditions, so it falls short of the explicit exclusions/alternatives required for a 5.

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

uploadA
Destructive
Inspect

File upload: stream-upload (one-shot — auto-finalizes, no filesize needed), chunked (create-session → chunk → finalize, for files over the 100 MB blob cap), web URL import, and batch (many small files). Call action='describe' for the full action/param reference. Side effects: finalize/stream/stream-upload/web-import/batch create files and consume storage credits. Same-name uploads to a folder OVERWRITE the existing node in place (preserved as a recoverable version). BYTES → SERVER: the DEFAULT for every file/binary is the POST /blob sidecar — a plain HTTP POST outside the MCP pipe (the create-session/blob-info response hands you a ready-to-run curl command) carrying RAW BYTES — no base64 inflation, no MCP size limit, up to 100 MB. stream-upload forwards them to the platform as a raw octet stream; chunk and batch send them as multipart. Either way the bytes never pass through base64. It returns a blob_id you pass to stream-upload/chunk/batch. ⚠️ content_base64 is a LAST RESORT, NOT a peer option — ~33% inflation plus a few-MB MCP transport cap means it FAILS for all but the smallest files. If you cannot reach POST /blob, that is almost always a CLIENT-SIDE FIREWALL/PROXY/EGRESS restriction: tell the user to allow the /blob endpoint rather than degrading to base64. content is for text you are composing ON THE FLY through the MCP (verbatim UTF-8) — not a file-upload fallback. UPLOAD STRATEGY (read top-to-bottom, pick the FIRST that matches): (1) Have a URL? → web-import (single call). (2) EVERYTHING ELSE up to 100 MB → POST /blob, then stream-upload with blob_id (single call, auto-finalizes, NO filesize required). Use this EVEN WHEN THE EXACT BYTE COUNT IS KNOWN — knowing the size does not make the chunked path better, it only makes it possible, and it costs 3+ round-trips plus the 10522 mismatch trap. If /blob seems unreachable, CHECK FIREWALL/SECURITY SETTINGS FIRST — falling back to content_base64 will fail for anything but a tiny file. (3) Over the 100 MB blob cap (must split across several blobs), or you need the session id between calls → create-session + chunk(blob_id) + finalize. filesize must match the bytes you actually upload — mismatch causes finalize to fail with code 10522 and you must cancel the session. (4) Multiple small files (≤4 MB each, ≤200 total) into one folder? → batch. Use blob_id (POST /blob) for every file/binary upload. If /blob is unreachable, raise the client-side firewall/proxy restriction with the user — content_base64 is a last resort that fails above a few MB, not a substitute. Do NOT guess filesize for generated content — use stream-upload. max_size is a hard ceiling that aborts mid-transfer — always overestimate or omit (server uses plan limit).

ParametersJSON Schema
NameRequiredDescriptionDefault
orgNoOrg ID for limit resolution.
urlNoSource URL to import from.
hashNoFile hash for verification.
planNoOverride billing plan to check (e.g. free, pro).
waitNoLong-poll wait in SECONDS, 1-590 (NOT milliseconds; 0/omitted returns immediately). The server holds the connection until the upload reaches a terminal status. Sending a millisecond value here would hold for minutes and blow past the tool-call timeout.
filesNoBatch manifest (1..200 entries). Each: filename + one of blob_id/content/content_base64.
limitNoMax results (1-100, default 50).
actionYesOperation. Use 'describe' for full action reference.
offsetNoPagination offset.
statusNoFilter by status.
streamNoStream mode — size optional, single POST, auto-finalizes.
blob_idNoBlob ID from POST /blob — the **default source** for all file & binary uploads (no base64, no MCP size limit, up to 100 MB). Single-use.
contentNo**Text only** — stored verbatim UTF-8. This is for writing content you are composing **on the fly** directly through the MCP (a note, a generated report, a snippet you just produced) — NOT a fallback for uploading an existing file. Do NOT pass base64 here (use content_base64). One of content/content_base64/blob_id.
creatorNoClient identifier echoed back (alphanumeric + hyphens).
file_idNoFile ID for update context.
blob_refNoAlias for blob_id (deprecated). Accepted on chunk/stream/stream-upload only.
chunk_idNoSpecific chunk number (omit for all).
filenameNoFile name. Optional when target_node_id is set (auto-resolved); pass to rename-on-replace.
filesizeNoTotal file size in bytes.
max_sizeNoStream-body byte ceiling — aborts mid-transfer if exceeded. Always overestimate; omit to use plan limit. Stream sessions only.
passwordNoFile Share link password (profile_type=fileshare only). Forwarded ONLY as the x-ve-password header on every upload phase — never in a URL/log. Supply when the target share is password-protected.
share_idNoAlias for profile_id when the profile is a share — implies profile_type=share (so profile_type may be omitted).
folder_idNoTarget folder OpaqueId or "root". Omit for instance root.
hash_algoNoHash algorithm (e.g. 'sha256').
upload_idNoUpload session ID or web upload job ID.
chunk_sizeNoChunk size in bytes (server picks default).
context_idNoAlias for profile_id (either name works)
profile_idNoPolymorphic context ID (pair with profile_type=workspace|share|fileshare). Typed aliases let you omit profile_type: workspace_id (⇒ workspace) / share_id (⇒ share); also context_id / instance_id. Target workspace/share ID, or the File Share id for a fileshare write-back. fileshare has NO typed alias — pass profile_type=fileshare explicitly.
instance_idNoTarget workspace/share ID — also the profile_id alias for upload flows; profile_id is canonical.
chunk_numberNo1-indexed chunk number.
context_typeNoAlias for profile_type (either name works).
include_hashNoCompute SHA-256 client-side for entries without a hash (default true when omitted).
profile_typeNoTarget type: workspace | share | fileshare (alias: context_type). Use `fileshare` ONLY for content write-back to a File Share's bound file (requires target_node_id = the bound node id from `fileshare details`; create-style new-file flows are rejected for fileshare).
workspace_idNoAlias for profile_id when the profile is a workspace — implies profile_type=workspace (so profile_type may be omitted).
if_version_idNoCompare-and-swap base for an overwrite. Enforced on EVERY update target — workspace, share and File Share. Pass the version id your edit was based on; record it on create-session/stream-upload (finalize does NOT read it). On a stale base the session ends assembly_failed with CONFLICT_VERSION_MISMATCH:<id> — rebase and retry. Omitting it is last-write-wins. See action=describe.
action_contextNoContext: create or update.
content_base64NoBase64-encoded **binary**, server-decoded. ⚠️ **LAST RESORT — expect FAILURE above a few MB** (~33% inflation + MCP transport cap). If POST /blob is unreachable that is almost always a CLIENT-SIDE FIREWALL/PROXY restriction, not a server limit — have the user allow /blob instead of falling back here. Use `blob_id` for any real file.
parent_node_idNoParent folder OpaqueId or "root". On create-session, stream-upload, and web-import, folder_id is accepted as an alias (either name works).
target_node_idNoOverwrite this specific node (preserves node_id; new version). When set, parent_node_id is ignored and filename is optional (auto-resolved). Must be a file node. REQUIRED for profile_type=fileshare write-back — set it to the File Share's bound node id (from `fileshare details` → fileshare.file.id).
describe_actionNoWhen action='describe', narrow the output to ONE action's full params/notes (e.g. 'chunk'). Omit to get the compact action index.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations only say readOnlyHint=false and destructiveHint=true, but the description adds substantial behavioral context: overwriting same-name uploads in place while preserving a recoverable version, consuming storage credits on certain actions, the 10522 filesize mismatch failure, max_size aborting mid-transfer, wait being in seconds, and password being sent only as a header. This goes far beyond what annotations reveal and matches the destructiveHint of overwrites and credit consumption.

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

Conciseness2/5

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

The description is very long and contains notable redundancy: the content_base64-is-a-last-resort and firewall advice is repeated multiple times, and the 'no base64, no MCP size limit, up to 100 MB' claim appears more than once. Although the UPLOAD STRATEGY section is well-structured and front-loaded, the overall block is far from concise, and some sentences restate earlier warnings.

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

Completeness5/5

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

For a tool with 40 parameters, 20 actions, and no output schema, this description is remarkably complete: it covers the full decision tree, side effects, failure modes, error codes, CAS semantics, profile aliases, and the POST /blob sidecar flow. It also tells the agent to call action='describe' for the full per-action reference, covering remaining gaps in an actionable way.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds meaningful semantics beyond the schema for key parameters: blob_id is the default single-use source for file uploads, content_base64 is a last resort likely to fail above a few MB, content is only for on-the-fly text, filesize must match uploaded bytes to avoid the 10522 trap, and max_size should be overestimated. Not every one of the 40 parameters gets extra treatment, but the critical ambiguous ones are clarified substantially.

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

Purpose5/5

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

The description opens with a specific verb and resource — "File upload" — and immediately enumerates the distinct modes: stream-upload, chunked, web URL import, and batch. This clearly differentiates the tool from siblings like download, storage, and fileshare, and gives an agent a precise mental model of what the tool does.

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

Usage Guidelines5/5

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

The description provides an explicit, top-to-bottom UPLOAD STRATEGY with numbered decision rules: use web-import when a URL is available, prefer POST /blob + stream-upload for everything up to 100 MB, switch to chunked only over the cap or when a session id is needed, and use batch for many small files. It also explicitly warns when NOT to use content_base64 and tells the agent to check firewall settings instead, giving clear guidance versus alternatives.

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

userA
Destructive
Inspect

User profile, contacts, invitations, and assets. Call action='describe' for the full action/param reference. Destructive: close.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of items to return (1-500, default 100)
queryNoContact search substring.
actionYesOperation. Use 'describe' for full action reference.
offsetNoNumber of items to skip (default 0)
contentNoPlain text content for asset upload.
user_idNo19-digit user ID or email.
archivedNoTrue for archived shares, false for active.
filenameNoOriginal filename.
last_nameNoFamily name.
asset_nameNoAsset type name (e.g. profile_pic).
first_nameNoGiven name.
confirmationNoEmail or user ID confirmation for account close.
content_typeNoMIME type.
display_limitNoHow many items to return. Default 10, max 500. The MCP trims post-fetch; backend page_size stays MCP-internal so the platform cache stays warm. Applies to list-shares.
email_addressNoEmail address.
invitation_idNoInvitation opaque ID or key.
content_base64NoBase64-encoded binary content.
invitation_keyNoInvitation key.
describe_actionNoWhen action='describe', narrow the output to ONE action's full params/notes (e.g. 'me'). Omit to get the compact action index.

TDQS

A3.5/5.0
Behavior4/5

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

Annotations already note destructiveHint=true and readOnlyHint=false. The description adds the specific information that the 'close' action is destructive, naming the exact operation. It also points to 'describe' for more detail, which is useful transparency about how to learn behavior. 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.

Conciseness5/5

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

The description is compact: two sentences that convey the tool's scope, the key action to invoke for reference, and the destructive hint. Every clause earns its place, with no redundancy or filler. The 'Destructive: close' note is specific and valuable.

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

Completeness3/5

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

This is a complex multi-action tool with 19 parameters, no output schema, and broad capabilities. The description provides a high-level overview and defers to describe, which partially mitigates the lack of action-specific details. However, it omits return-value expectations and tool-selection guidance relative to siblings, leaving gaps for agent decision-making.

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

Parameters3/5

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

All 19 parameters have complete descriptions in the schema (100% coverage), so the description does not need to elaborate on them. It adds the hint to use describe for a full action/param reference, which is helpful but does not materially enhance parameter understanding beyond the schema. Baseline 3 is appropriate.

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

Purpose4/5

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

The description identifies the tool as covering user profile, contacts, invitations, and assets, which gives a clear resource scope. It lacks a specific verb for a single action but is appropriate for a multi-action hub. The instruction to call action='describe' helps the agent discover specifics, and the resource list differentiates it from sibling tools like 'invitation' and 'auth'.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. The only directive is to call action='describe' for the full reference, which is a within-tool navigation aid, not a selection guideline. No exclusions or sibling comparisons are offered.

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

workspaceA
Destructive
Inspect

Workspace management: list/details/update/delete, archive, members, notes, quickshares, share import, import toggle. NOTE: metadata actions MOVED — the workspace metadata vocabulary → metadata tool; node-level metadata → storage tool. There are no metadata-* actions on this tool. Call action='describe' for the full action/param reference. Destructive: delete (workspace + all files). ⚠️ intelligence COSTS CREDITS (10/page) — only enable on explicit user request; toggle is rate-limited. Verbosity (detail param): list/available/members/list-shares default to terse (compact rows). details defaults to full (drill-down). Pass an explicit detail='standard'|'full' to override.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoName. Send "null" to clear on update.
limitNoMaximum number of items to return (1-500, default 100)
actionYesOperation. Use 'describe' for full action reference.
detailNoPer-entity verbosity for list/available/members/list-shares/details. Defaults: terse for list/available/members/list-shares, full for details. See action='describe' for per-level field lists.
offsetNoNumber of items to skip (default 0)
org_idNoFilter workspaces to this org.
blob_idNoBlob ID from POST /blob. Preferred for large note content (UTF-8 decoded). Single-use.
confirmNoMust match folder_name or numeric ID.
contentNoPlain text/markdown. Notes: max 102400 bytes (100 KiB) — use blob_id for larger.
node_idNoStorage tree node opaque ID. Both files and folders are nodes — use this name regardless of which.
archivedNoFilter by archive status (default "false").
blob_refNoAlias for blob_id (deprecated).
share_idNo19-digit numeric ID or custom name of share to import.
note_nameNoNote filename (must end with .md).
parent_idNoParent folder opaque ID or 'root'.
perm_joinNoWho can join the workspace.
descriptionNoDescription. Newlines allowed. Send "null"/"" to clear on update.
folder_nameNoURL-safe workspace folder name (4-80 chars).
accent_colorNoBrand accent color JSON. "null" to clear.
check_org_idNoOrg ID for check-name — suggests org-prefixed alternative if name taken.
intelligenceNoToggle AI features. ⚠️ COSTS CREDITS (10/page) — only enable on explicit user request. Disable flushes embeddings; re-enable re-indexes. Rate-limited.
workspace_idNoWorkspace opaque ID. Use this when only workspaces are valid (not shares or other contexts). For polymorphic contexts use profile_id. 19-digit numeric ID or custom name.
display_limitNoHow many items to return. Default 10, max 500. The MCP trims post-fetch; backend page_size stays MCP-internal so the platform cache stays warm. Applies to list, list-shares, members.
name_to_checkNoFolder name to check availability.
owner_definedNoCustom properties JSON. "null"/"" to clear.
describe_actionNoWhen action='describe', narrow the output to ONE action's full params/notes (e.g. 'list'). Omit to get the compact action index.
background_color1NoBackground color 1 JSON. "null" to clear.
background_color2NoBackground color 2 JSON. "null" to clear.
perm_member_manageNoWho can manage members.

TDQS

A4.7/5.0
Behavior5/5

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

The description exposes destructive scope ('delete (workspace + all files)'), cost/rate-limit implications ('intelligence COSTS CREDITS (10/page)'), side effects of toggling intelligence ('Disable flushes embeddings; re-enable re-indexes'), and verbosity defaults. Annotations only mark destructiveHint=true and readOnlyHint=false, so the description adds substantial 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.

Conciseness5/5

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

The description is long but every sentence carries load-bearing operational information: exclusions, destructive warning, cost caveats, verbosity defaults. It front-loads purpose and is organized logically, so an agent can quickly scan the key points without wading through fluff.

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

Completeness5/5

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

For a tool with 29 parameters and 20 actions, the description covers the full scope, explicit exclusions, destructive/cost behavior, and points to action='describe' for exhaustive per-action details. It is complete enough for an agent to decide whether to invoke this tool and how to route the intent.

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

Parameters3/5

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

Schema coverage is 100%, so the baseline is 3. The tool description mostly echoes schema details like the `detail` param defaults and intelligence cost warning, which are already present in the schema's property descriptions. It does not add meaningful new parameter-level explanation beyond what the schema already conveys.

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

Purpose5/5

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

Description opens with 'Workspace management: list/details/update/delete, archive, members, notes, quickshares, share import, import toggle' – a concrete verb+resource scope that names the operations. It further distinguishes itself from siblings by stating metadata actions moved to `metadata` and `storage` tools, so an agent knows this tool's boundaries.

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

Usage Guidelines5/5

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

Explicitly tells the agent when not to use this tool: 'metadata actions MOVED — ... There are no `metadata-*` actions on this tool.' It also instructs calling action='describe' for the full action/param reference and warns to enable intelligence only on explicit user request. These are clear usage conditions beyond generic descriptions.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 1 tool update
    • Changedevent4 fields changed
      • changedInput schema / properties / action / enum
        Previous value: -[
        -  "describe",
        -  "search",
        -  "summarize",
        -  "details",
        -  "acknowledge",
        -  "activity-list",
        -  "activity-poll",
        -  "dashboard-list",
        -  "dashboard-dismiss",
        -  "dashboard-undismiss"
        -]New value: +[
        +  "describe",
        +  "search",
        +  "summarize",
        +  "details",
        +  "acknowledge",
        +  "activity-list",
        +  "activity-poll",
        +  "dashboard-list",
        +  "dashboard-dismiss",
        +  "dashboard-undismiss",
        +  "changes"
        +]
      • changedInput schema / properties / cursor / description
        Previous value: -"Last activity timestamp for incremental polling."New value: +"changes: the opaque feed cursor from the previous response — send it back unchanged; omit to bootstrap. activity-list: last activity timestamp for incremental polling."
      • changedInput schema / properties / limit / description
        Previous value: -"Max results (1-250, default 100)."New value: +"Max results (1-250; default 100, changes: 250)."
      • changedInput schema / properties / org_id / description
        Previous value: -"Filter by organization profile ID."New value: +"Organization profile ID (19-digit). Filter for search/summarize; the org to read for changes."
  2. 1 tool update
    • Addedsign
  3. 1 tool update
    • Changedorg4 fields changed
      • changedInput schema / properties / action / enum
        Previous value: -[
        -  "describe",
        -  "list",
        -  "details",
        -  "create",
        -  "update",
        -  "close",
        -  "public-details",
        -  "limits",
        -  "industry-list",
        -  "list-workspaces",
        -  "list-shares",
        -  "create-workspace",
        -  "billing-plans",
        -  "billing-create",
        -  "billing-cancel",
        -  "billing-reactivate",
        -  "billing-details",
        -  "billing-invoices",
        -  "billing-members",
        -  "billing-meters",
        -  "members",
        -  "invite-member",
        -  "remove-member",
        -  "update-member-role",
        -  "member-details",
        -  "leave",
        -  "transfer-ownership",
        -  "join",
        -  "invitations-list",
        -  "invitation-update",
        -  "invitation-delete",
        -  "transfer-token-create",
        -  "transfer-token-list",
        -  "transfer-token-delete",
        -  "transfer-claim",
        -  "discover-all",
        -  "discover-available",
        -  "discover-check-domain",
        -  "discover-external",
        -  "asset-upload",
        -  "asset-delete",
        -  "asset-types",
        -  "asset-list"
        -]New value: +[
        +  "describe",
        +  "list",
        +  "details",
        +  "create",
        +  "update",
        +  "close",
        +  "public-details",
        +  "limits",
        +  "industry-list",
        +  "list-workspaces",
        +  "list-shares",
        +  "create-workspace",
        +  "billing-plans",
        +  "billing-create",
        +  "billing-cancel",
        +  "billing-reactivate",
        +  "billing-details",
        +  "billing-invoices",
        +  "billing-members",
        +  "billing-meters",
        +  "members",
        +  "invite-member",
        +  "remove-member",
        +  "update-member-role",
        +  "member-details",
        +  "leave",
        +  "transfer-ownership",
        +  "join",
        +  "invitations-list",
        +  "invitation-update",
        +  "invitation-delete",
        +  "discover-all",
        +  "discover-available",
        +  "discover-check-domain",
        +  "discover-external",
        +  "asset-upload",
        +  "asset-delete",
        +  "asset-types",
        +  "asset-list"
        +]
      • changedInput schema / properties / billing_plan / description
        Previous value: -"Paid plan ID for billing-create, e.g. 'solo_monthly', 'business_v2_monthly', 'growth_monthly' (each has an annual variant). New orgs require a paid plan — free/agent plans are legacy and closed to new subscriptions; legacy 'pro_monthly'/'business_monthly' are also closed. Call billing-plans for the currently-offered plan IDs."New value: +"Paid plan ID for billing-create, e.g. 'solo_monthly', 'business_v2_monthly', 'growth_monthly' (each has an annual variant). New orgs require a paid plan — the free plan is legacy and closed to new subscriptions; legacy 'pro_monthly'/'business_monthly' are also closed. Call billing-plans for the currently-offered plan IDs."
      • removedInput schema / properties / token
        Removed value: -{
        -  "description": "Transfer token for ownership claim.",
        -  "type": "string"
        -}
      • removedInput schema / properties / token_id
        Removed value: -{
        -  "description": "Transfer token ID.",
        -  "type": "string"
        -}

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Enables brand visibility monitoring across major AI platforms like ChatGPT, Claude, Gemini, and Perplexity. It allows users to track visibility scores, analyze competitor data, and receive actionable insights to improve AI-generated brand recommendations.
    16
    22 npm
    1
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables tracking competitor websites, changelogs, blog feeds, and pricing pages with meaningful diffs, classification, and Markdown digests via MCP tools for listing, adding, removing competitors, running checks, and retrieving digests or changes.
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Browse IndustryLens's published competitive-intelligence reports and head-to-head competitor comparisons from any AI agent — real, source-backed data.
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources