Skip to main content
Glama

Server Details

Fastio gives your team and AI agents a workspace for each project, bringing source files, comments and new work together. Connect a compatible MCP client to find files, answer questions from project material, and save results where the team can review and use them.

Sign in through Fastio and choose the workspaces the connection can reach. Read Only connections expose read tools; Read & Write connections also allow changes.

• Files and folders: browse, read, upload, and organize files, with version history and trash.
• Search: find files by keyword; search file content and meaning when Deep Indexing is enabled and files have been processed.
• Metadata: read, set, and search metadata fields, including extracted fields where available.
• Shares: create and manage shares for sending or collecting files.
• Comments and members: read and add comments, and manage workspace membership within your permissions.
• Activity: search workspace events to see what changed.

Hosted by Fastio, with no server installation required.

• Claude and most MCP clients: https://mcp.fast.io/mcp/tools
• ChatGPT: https://mcp.fast.io/mcp/operations
• ChatGPT and Codex: Fastio plugin
• Claude Code, Cursor and similar coding agents: https://mcp.fast.io/mcp/code
• Setup and client-specific capabilities: https://mcp.fast.io/docs

Paid plans. Monthly plans include a trial of up to 30 days. A card is required, and billing begins when the trial ends or trial credits run out, whichever comes first. No free plan.

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

TDQS

A4/5.0

Scored across 37 tools

Disambiguation5/5

Tools are organized as explicit read/write pairs (e.g., storage/storage_manage) with detailed descriptions that cross-reference each other. Overlapping search tools (find, storage search, metadata search) are clearly differentiated, leaving no ambiguity about which tool to use for a given action.

Naming Consistency4/5

Most tools follow a consistent noun/noun_manage pattern for read/write pairs, which is predictable. However, a few tools (download, find, how-to) deviate from this pattern, and 'how-to' uses a hyphen instead of an underscore, introducing minor inconsistency.

Tool Count2/5

With 37 tools, the server far exceeds the recommended 3-15 range and is likely to overwhelm an agent's tool selection. While the domain is broad, the count is excessive and could be consolidated.

Completeness5/5

The surface covers the full lifecycle of workspaces, files, shares, members, invitations, e-signatures, AI, metadata, and more, with create/read/update/delete operations for all major resources. No obvious dead ends or missing critical operations.

Available Tools

37 tools
aiAI ChatA
Read-only
Inspect

Fastio AI chat (read): chats and their details, messages, a message's answer with citations, AI credit transactions. Workspace or share context. Writes are on ai_manage. action='describe' gives the full action/param reference.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNochat-list filter: 'user' (default — user-driven chats), 'agent' (agentic chats), or 'all'.
waitNomessage-read only. Default true: bounded-wait for completion (up to ~24s on a workspace via the activity long-poll). false: a single-shot status probe (one details fetch, ~1 round-trip), within strict ~30s client timeouts.
limitNochat-list/message-list page size. Forwarded best-effort: these endpoints document no paging and may return all rows.
actionYesOperation. Use 'describe' for full action reference.
detailNoVerbosity for chat-list/chat-details/message-list/message-details (best-effort server-side). Defaults: terse for lists, full for details. Levels: see describe.
offsetNochat-list/message-list offset (best-effort, see limit).
chat_idNoAI chat ID.
share_idNoprofile_id alias; implies profile_type=share.
context_idNoAlias for profile_id (either name works)
message_idNoAI message ID.
profile_idNo19-digit workspace or share ID (pair with profile_type). Aliases: workspace_id / share_id (imply the type), context_id, instance_id.
instance_idNoAlias for profile_id.
context_typeNoAlias for profile_type (either name works)
profile_typeNoProfile type: "workspace" or "share".
workspace_idNoprofile_id alias; implies profile_type=workspace.
include_deletedNochat-list: if true, list deleted chats via the /deleted variant (workspace AND share).

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered by structured data. The description reinforces the read-only nature and notes that answers carry citations, but adds little behavioral detail beyond the annotations (no rate limits, no pagination behavior). With annotations carrying the burden, a 3 is 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?

Three short sentences, front-loaded with the read scope and resource list, then the write-boundary, then the self-reference pointer. No wasted words despite covering a 7-action, 16-parameter tool.

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

Completeness4/5

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

For a wide read tool with 16 parameters and no output schema, the description covers the domain, the read/write boundary, and defers detailed action semantics to action='describe', which is an effective completeness strategy. It does not explain return shapes for the citation or transaction actions, a minor gap.

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 16 parameters — including the alias relationships and the `wait` long-poll semantics — are already documented in the schema. The description adds no parameter-level meaning beyond what the schema provides, only deferring to action='describe'. Baseline 3 applies.

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

Purpose5/5

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

States a specific domain ('Fastio AI chat (read)') and enumerates the resources covered: chats and their details, messages, a message's answer with citations, and AI credit transactions. It explicitly marks the read scope and names the sibling that handles writes, so an agent can separate it from `ai_manage` without opening either schema.

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

Usage Guidelines4/5

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

Explicitly routes write operations to `ai_manage` and points to action='describe' for the full action/param reference, which is real usage guidance for a tool with seven actions. It stops short of saying when to pick each action (e.g. message-read vs message-details), so it is clear context without full exclusions.

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

ai_manageAI Chat ManagementA
Destructive
Inspect

Fastio AI chat (write): ask a question about workspace or share files and get a cited answer, a workspace status summary, create/update/publish/cancel chats, send messages, generate an AI share. Destructive: chat-delete. ask, status, chat-create and message-send consume AI credits. Reads are on ai. action='describe' gives the full action/param reference.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNochat-create (workspace only): 'user' (default) or 'agent' (agentic; immutable).
nameNoNew chat name.
filesNoFile opaque IDs (max 25, share share-generate).
actionYesOperation. Use 'describe' for full action reference.
effortNoReply effort for THIS message: 'normal' (default) or 'high' (deeper reasoning, no per-reply step limit; slower, more credits). Per message — resend it on each message that should use it.
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_idNoprofile_id alias; implies profile_type=share.
context_idNoAlias for profile_id (either name works)
profile_idNo19-digit workspace or share ID (pair with profile_type). Aliases: workspace_id / share_id (imply the type), context_id, instance_id.
query_textNoQuestion or prompt (max 32,000 chars).
instance_idNoAlias for profile_id.
context_typeNoAlias for profile_type (either name works)
files_attachNoFiles for the AI to read: comma-separated nodeId:versionId (versionId optional = current). Works without Deep Indexing; an unreadable node errors.
profile_typeNoProfile type: "workspace" or "share".
workspace_idNoprofile_id alias; implies profile_type=workspace.
subject_filesNoFiles pinned as the turn's focus subjects (sent as `subjects`): comma-separated nodeId:versionId, same format and limits as files_attach.
folders_attachNoFolders for the AI to read: comma-separated folder nodeIds (no depth). Denied on restricted-view shares.
subject_foldersNoFolders pinned as the turn's focus subjects (sent as `subjects`): comma-separated folder nodeIds, same format as folders_attach.

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, readOnlyHint=false, and openWorldHint=true, so the safety profile is covered. The description adds value beyond that by identifying exactly which action is destructive (chat-delete) and by disclosing that ask, status, chat-create, and message-send consume AI credits. It stops short of stating reversibility or permission requirements.

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 dense sentences, front-loaded with the write-vs-read distinction and the action inventory, with no filler. Every clause carries operational information (destructive action, cost, fallback reference).

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 multi-action tool with no output schema, the description covers scope, destructive surface, cost, and the read alternative, and points to action='describe' for the full reference. It only lightly gestures at return content ('a cited answer', 'a workspace status summary'), which is the remaining gap.

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% across all 20 parameters, so aliasing, enum meanings, and limits are already documented. The description adds only marginal parameter-level meaning, mainly tying credit consumption to specific actions; baseline 3 is appropriate.

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

Purpose5/5

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

States a specific verb and resource ('Fastio AI chat (write)') and then enumerates the concrete action surface: ask, status, chat create/update/publish/cancel, message-send, share-generate. It also explicitly distinguishes itself from the read counterpart ('Reads are on `ai`'), so an agent can separate it from the sibling `ai` tool without opening the schema.

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

Usage Guidelines4/5

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

Names the alternative for reads ('Reads are on `ai`') and flags the destructive action ('Destructive: chat-delete') plus the credit-consuming actions. It does not, however, explain when to pick one action over another (e.g. chat-publish vs share-generate), instead deferring to action='describe', which is a reasonable routing move but shifts the guidance out of the description.

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

assetBrand AssetsA
Read-only
Inspect

Brand assets (logos, banners, profile photos) on an org, workspace, share, or user: asset types, list, read an asset's bytes. Writes are on asset_manage.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYesOperation. Use 'describe' for full action reference.
asset_idNoAsset ID or name.
entity_idNoEntity ID (optional for user).
asset_typeNoAsset type key (e.g. 'logo', 'banner', 'photo').
entity_typeNoEntity type.

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is covered. The description adds that reads return an asset's bytes and that mutations live elsewhere, but says nothing about permission requirements, rate limits, or byte-return size/format.

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?

A single front-loaded sentence: resource, scope, capabilities, then the exclusion. No padding whatsoever.

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 5-param read-only tool with full schema coverage and no output schema, the description covers scope, entities, and capabilities adequately. It omits the 'describe' action and any detail on what 'read bytes' returns, but those gaps are minor given the schema enumerates every action.

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% with per-parameter descriptions and two enums, so the schema does the heavy lifting. The description's enumeration of operations (types, list, read) loosely maps to the action enum but adds no format or syntax detail beyond it. Baseline 3 applies.

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

Purpose5/5

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

States the resource concretely (brand assets: logos, banners, profile photos), the scoping entities (org, workspace, share, user), and the read operations performed (types, list, read bytes). An agent can distinguish this from asset_manage purely from the description.

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

Usage Guidelines4/5

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

Explicitly routes writes to the sibling `asset_manage`, which is a clean when-not-to-use rule. It lacks a positive trigger statement ('use this when you need to inspect or retrieve assets'), but the read/write split with the alternative named is clear guidance.

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

asset_manageBrand Asset ManagementA
Destructive
Inspect

Brand assets (logos, banners, profile photos) on an org, workspace, share, or user: upload, delete. Destructive: delete. Reads are on asset.

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_idNoEntity 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 already declare destructiveHint=true and openWorldHint=true, but the description adds precision annotations cannot: it pinpoints that `delete` specifically is the destructive path, leaving `upload` non-destructive-by-capability. It stops short of describing what deletion removes (asset only vs. referencing entities) or any auth/permission requirements.

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 clauses, front-loaded with the resource and scope, followed by the destructive-action warning and the sibling pointer. No filler and nothing buried.

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, multi-action tool with no output schema, the description covers scope, entity types, the destructive action, and the read alternative. The notable omission is the `describe` action, which the schema itself surfaces and the description never mentions.

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 documented in the schema, and every field carries its own description. The tool description adds no parameter-level meaning beyond that, so the baseline 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?

Names the resource (brand assets: logos, banners, profile photos), the scope (org, workspace, share, user), and the two mutating verbs (upload, delete). It also explicitly distinguishes itself from the read-only sibling `asset`, so an agent can route without opening either schema.

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

Usage Guidelines4/5

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

States the conditional split clearly: writes belong here, 'Reads are on `asset`.' It also flags which action is destructive. It gives no guidance on the third action (`describe`) or on when a given entity_type should be chosen over another.

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

authAuthenticationA
Read-only
Inspect

Fastio session and credential state (read): sign-in check, session and scope details, email availability, 2FA status, API keys, OAuth sessions. Sign-in, sign-up, 2FA changes, PKCE login and credential changes are on auth_manage.

ParametersJSON Schema
NameRequiredDescriptionDefault
emailNoEmail address.
actionYesOperation. Use 'describe' for full action reference.
key_idNoAPI key identifier.
session_idNoOAuth session identifier.
describe_actionNoWith action='describe': return one action's params and notes instead of the action index.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered; the description adds the useful behavioral boundary that all credential-mutating operations live on a different tool, preventing an agent from expecting write capability here. It does not mention auth requirements, rate limits, or error behavior, but those are lower-priority for a read-only inspection 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?

Two sentences, zero filler. The read scope is front-loaded and the routing constraint to `auth_manage` follows immediately, so the most decision-relevant information arrives first.

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 read-only tool with no output schema, the description covers the resource families an agent needs to recognize relevance and correctly routes writes elsewhere. It leaves the per-action semantics to the schema's `describe` action, which is a reasonable division of labor, though it does not hint at what `describe`/`check` return.

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 each of the five parameters is documented in-schema, including the 11-value action enum and the `describe_action` modifier. The description adds no parameter-level syntax or format detail, so the baseline 3 applies.

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

Purpose5/5

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

States the specific resource and mode ('Fastio session and credential state (read)') and then enumerates exactly what is covered: sign-in check, session/scope details, email availability, 2FA status, API keys, OAuth sessions. It explicitly distinguishes itself from the sibling `auth_manage`, so an agent can pick between them without opening either schema.

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

Usage Guidelines5/5

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

The description names the alternative tool and the condition that selects it: mutations ('Sign-in, sign-up, 2FA changes, PKCE login and credential changes') go to `auth_manage`, everything read stays here. That is an explicit when/when-not routing rule, not an inference.

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

auth_manageAuthentication ManagementA
Destructive
Inspect

Fastio sign-in and credentials (write): PKCE browser sign-in, signup, signout, set an API key, email verification, password reset, 2FA enrolment, API key create/update/delete, OAuth session update/revoke. Password signin and 2fa-verify are refused. Destructive: api-key-delete, oauth-revoke, oauth-revoke-all. Reads are on auth.

ParametersJSON Schema
NameRequiredDescriptionDefault
codeNoVerification or authorization code. Meaning is action-specific — see action='describe' for the per-action reference (e.g. reset code for password-reset). pkce-complete ignores it.
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_actionNoWith action='describe': return one action's params and notes instead of the 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.6/5.0
Behavior5/5

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

Annotations already flag destructiveHint=true and readOnlyHint=false, but the description goes further by naming exactly which actions are destructive (api-key-delete, oauth-revoke, oauth-revoke-all) and which are refused. It also signals the auth/consent flow implicitly through the action vocabulary, giving the agent concrete per-action risk information that the boolean annotations cannot.

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

Conciseness4/5

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

Two dense sentences that front-load the purpose before the enumeration, and every element earns its place (action groups, refusals, destructive list, read routing). Slightly list-heavy, but not padded.

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 25-parameter, action-dispatch tool with no output schema, the description is appropriately complete: it scopes the tool, names the alternatives, flags the destructive subset, and points to action='describe' for the per-action reference the schema declines to inline. Nothing critical is missing given the schema's own richness.

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

Parameters3/5

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

Schema coverage is 100% and the schema descriptions are unusually rich (per-action meaning of `code`/`token`, `scopes` syntax, `admin`/`account_settings` ceiling semantics, `agent_name` provenance caveat), so the schema carries the parameter burden. The description lists the action set but adds no parameter syntax or format detail beyond what the schema already provides, so the baseline 3 is correct.

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 precise verb+resource ('Fastio sign-in and credentials (write)') and then enumerates the concrete operations covered — PKCE sign-in, signup, signout, API key CRUD, 2FA, OAuth session update/revoke. It explicitly carves out what is NOT handled here ('Password signin and 2fa-verify are refused') and routes reads to the sibling `auth` tool, so an agent can distinguish it from `auth` without opening either schema.

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

Usage Guidelines5/5

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

States both when to use this tool (write-side auth operations) and when not to ('Reads are on `auth`'), plus the explicit refusal cases ('Password signin and 2fa-verify are refused'). The alternative tool is named rather than implied, which is the textbook 5 condition.

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

commentCommentsA
Read-only
Inspect

Fastio comments on files (read): list a file's comments, all comments in a workspace or share, comment details, a comment's attachments. Writes are on comment_manage. action='describe' gives the full action/param reference.

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNoDefault -created (newest first).
limitNoPage size 2-200.
actionYesOperation. Use 'describe' for full action reference.
detailNoterse|standard|full (best-effort). Defaults: terse for list/list-all, full for details.
offsetNoOffset for pagination.
node_idNoFile node opaque ID.
share_idNoAlias for profile_id; implies profile_type=share.
comment_idNoComment opaque ID.
context_idNoAlias for profile_id (either name works)
profile_idNoWorkspace, share or File Share ID (pair with profile_type).
context_typeNoAlias for profile_type (either name works)
profile_typeNoProfile type.
workspace_idNoAlias for profile_id; implies profile_type=workspace.
display_limitNolist-all only: comments to return (default 10, max 200), trimmed after fetch.
include_totalNoInclude total count in response.
reference_typeNoFilter by anchor type.
include_deletedNoInclude soft-deleted.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, openWorldHint=true, so the safety profile is covered. The description adds context beyond that: it makes the read/write division of labor with comment_manage explicit and points to action='describe' for a full action/param reference, which is genuinely useful self-documentation behavior.

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 tightly written sentences: the read scope and its four operations are front-loaded, and routing to the write sibling plus the describe hint follow. No filler, every clause 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 a 17-parameter tool with no output schema, the description covers the essentials: scope, the operation set, and a pointer to action='describe' for the full reference. It doesn't explain the alias relationships (e.g., context_id/share_id/workspace_id vs profile_id), but the schema documents those, and no output schema means return values needn't be described.

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% with 17 documented parameters and 6 enums, so the schema already carries parameter meaning. The description only reinforces the 'action' parameter via action='describe' and adds no syntax or alias guidance beyond what the schema provides, so the baseline 3 is appropriate.

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

Purpose5/5

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

States a specific verb+resource ('comments on files (read)') and enumerates the four concrete operations: list a file's comments, all comments in a workspace or share, comment details, and a comment's attachments. It also explicitly differentiates itself from the write sibling comment_manage, so an agent can distinguish the two without opening schemas.

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

Usage Guidelines4/5

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

'Writes are on comment_manage' explicitly routes mutation intent to the correct sibling, and the parenthetical '(read)' plus the enumerated action list make the read context clear. It stops short of per-action selection guidance (e.g., when to choose list vs list-all), but the main when-to-use/when-not split is legible.

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

comment_manageComment ManagementA
Destructive
Inspect

Fastio comments on files (write): add (with an optional anchor or attachments), edit, delete, bulk-delete, emoji reactions, attach/detach objects. Destructive: delete, bulk-delete. Reads are on comment. action='describe' gives the full action/param reference.

ParametersJSON Schema
NameRequiredDescriptionDefault
textNoMax 8192 characters; display text (mention markup excluded) max 500, usually the binding limit. CJK and emoji count as one.
emojiNoSingle emoji character.
actionYesOperation. Use 'describe' for full action reference.
node_idNoFile node opaque ID.
share_idNoAlias for profile_id; implies profile_type=share.
referenceNoAnchor: image region, A/V timestamp, PDF page, or text selection. Max 2048 bytes JSON-encoded (non-ASCII costs 6 each).
target_idNoObject to attach: node, workspace, share, File Share or envelope ID.
comment_idNoComment opaque ID.
context_idNoAlias for profile_id (either name works)
profile_idNoWorkspace, share or File Share ID (pair with profile_type).
propertiesNoJSON object of app-defined key-values: stored on add, merged on edit (server-managed keys ignored).
target_idsNoObjects to attach (max 25 per comment).
comment_idsNoComment IDs (max 100).
context_typeNoAlias for profile_type (either name works)
profile_typeNoProfile type.
workspace_idNoAlias for profile_id; implies profile_type=workspace.
parent_comment_idNoParent comment ID (reply; one level).

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, so the description's job is to add detail — and it does, naming exactly which actions are destructive (delete, bulk-delete) rather than leaving the agent to guess across nine actions. It stops short of describing permission requirements, reversibility, or side effects of attachment detach.

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 tightly packed sentences: the write scope first, the destructive warning second, the routing to `comment` and 'describe' last. No filler and every clause carries information the agent needs.

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 17-parameter tool with nested objects and no output schema, the description covers scope, destructiveness, and the read alternative, and delegates exhaustive detail to action='describe'. What is missing is any hint about required identifiers (profile_id/node_id) or what a successful mutation returns, though the describe action mitigates that.

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 17 parameters in detail, including the nested anchor object and the region coordinate conventions. The description only alludes to 'optional anchor or attachments' and adds no syntax or constraint detail beyond that, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb+resource ('Fastio comments on files (write)') and then enumerates the exact operations covered: add with anchor/attachments, edit, delete, bulk-delete, reactions, attach/detach. It also distinguishes itself from the sibling read tool `comment`, so an agent can route without opening either schema.

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

Usage Guidelines4/5

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

Explicitly routes reads to the `comment` tool and points to action='describe' for the full action/param reference. It does not give per-action when-to-use conditions (e.g. when to prefer bulk-delete over repeated delete), but the write/read split and the describe escape hatch are clear context.

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

downloadDownloadA
Read-onlyIdempotent
Inspect

Download URLs for files (file-url) and folder ZIPs (zip-url), and details of existing QuickShare links (quickshare-details, deprecated; new links are created on fileshare_manage). Consumes bandwidth credits. action='describe' gives 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.1/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive/openWorld, and the description adds genuinely new context: it consumes bandwidth credits and flags quickshare-details as deprecated. It does not describe URL expiry or output shape, so not a 5.

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

Conciseness4/5

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

Front-loaded with the core capability, then the deprecation caveat, then the cost and the describe pointer in a compact two-sentence block. Dense but every clause carries information; slightly telegraphic phrasing costs it a point.

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 tool with no output schema, the description covers the action space, the credit cost, the deprecation status, and a discovery escape hatch via describe. It omits return-value/URL-lifetime details, but annotations carry the safety profile and the schema carries parameter detail.

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 already documents the polymorphic profile_id aliases, node_id, and version_id in detail. The description only repeats the action-value names, adding little beyond what the schema provides, so baseline 3 applies.

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

Purpose5/5

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

States a specific verb (download) plus the exact resources returned (file URLs, folder ZIPs) and maps the action enum values file-url/zip-url/quickshare-details to those outcomes. It also distinguishes itself from the sibling fileshare_manage for link creation, so an agent can tell it apart without inspecting schemas.

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

Usage Guidelines4/5

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

Gives clear context for each action and explicitly routes quickshare link creation to fileshare_manage, plus points to action='describe' for the full reference. It lacks explicit when-not-to-use guidance versus read siblings like find or storage, so it falls just 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.

eventEvents & ActivityA
Read-only
Inspect

Fastio event log and activity (read): search audit events, event details, list and long-poll workspace/share activity, the per-member workspace Dashboard feed (dashboard-list), and the org-wide storage change feed (changes: one cursor for every workspace and share in an org). Writes and the billed AI summary are on event_manage. action='describe' gives the full action/param reference.

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.
detailNoterse|standard|full. Defaults: terse for search/activity-list/activity-poll, standard for summarize, full for details. Only search and details honor it.
offsetNoPagination offset.
org_idNoOrganization profile ID (19-digit). Filter-style scope filter; the org to read for changes.
user_idNoFilters the event's stored subject column, which the platform derives instead of taking it from the emitter, so it can name an arbitrary related user rather than the person the event concerns. The actor is calling_user_id. The search note covers both.
categoryNoEvent category; valid values are in describe. `node` is the AI/RAG pipeline, not file operations; file activity is under both `workspace` and `share`. Cloud import is category="import" (subcategory="cloud_import" for graft traffic only); `cloudsync` is an activity field on a different taxonomy and matches nothing here.
event_idNoAlphanumeric event opaque ID.
share_idNoFilter by share profile ID.
entity_idNoactivity-poll: the workspace, share, or File Share ID to long-poll (a File Share's file_share_* feed reaches 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_idNoactivity-list: the workspace, share, or File Share ID (pair with profile_type).
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).
workspace_idNoFilter-style scope filter by workspace ID. dashboard-*: the workspace.
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

A3.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds useful scope context — the changes feed being 'one cursor for every workspace and share in an org' and the per-member dashboard feed — but says nothing about auth requirements, rate limits, or polling cost beyond what the schema already states.

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?

A single dense paragraph that front-loads the read-only scope and the operation inventory before the hand-off to `event_manage`. Every clause carries information, though the sentence is long and could be broken for scanability.

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 27-parameter, action-dispatch tool with no output schema and full schema coverage, the description covers scope, the read/write boundary, and defers detailed action semantics to the describe action. That is sufficient for correct invocation; the omission of return-shape or pagination expectations is minor given the schema.

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 27 parameters (including the 6 enums and cursor/long-poll semantics) are already documented in the schema. The description's mentions (cursor over an org, dashboard-list scoping) add framing but no syntax or format detail beyond 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 opens with an explicit verb+resource+mode ('Fastio event log and activity (read)') and then enumerates the concrete read surfaces: audit event search, event details, activity list/long-poll, dashboard-list, and the org-wide changes feed. It names the sibling it is not ('Writes and the billed AI summary are on event_manage'), so an agent can route between `event` and `event_manage` without opening either schema.

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

Usage Guidelines4/5

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

It gives explicit routing guidance (reads here, writes/billed summarization on `event_manage`) and points to action='describe' for the full action/param reference. It does not spell out when to pick search vs details vs activity-list vs dashboard-list, leaving that to the action names and the describe reference.

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

event_manageEvent ManagementA
Destructive
Inspect

Fastio events (write): AI-summarize audit events (summarize: an LLM call billed to the org's AI credits), acknowledge an event (marks it read for the caller; idempotent), and dismiss/snooze or undismiss a Dashboard card in the caller's own feed (a view change; the underlying item is unchanged). Reads are on event. action='describe' gives the full action/param reference.

ParametersJSON Schema
NameRequiredDescriptionDefault
eventNoExact event name. See describe action for catalog.
limitNoMax results (1-250; default 100, changes: 250).
actionYesOperation. Use 'describe' for full action reference.
detailNoterse|standard|full. Defaults: terse for search/activity-list/activity-poll, standard for summarize, full for details. Only search and details honor it.
offsetNoPagination offset.
org_idNoOrganization profile ID (19-digit). Filter-style scope filter; the org to read for changes.
user_idNoFilters the event's stored subject column, which the platform derives instead of taking it from the emitter, so it can name an arbitrary related user rather than the person the event concerns. The actor is calling_user_id. The search note covers both.
card_keyNoDashboard card key "<lane>:<id>" from a dashboard-list card.
categoryNoEvent category; valid values are in describe. `node` is the AI/RAG pipeline, not file operations; file activity is under both `workspace` and `share`. Cloud import is category="import" (subcategory="cloud_import" for graft traffic only); `cloudsync` is an activity field on a different taxonomy and matches nothing here.
event_idNoAlphanumeric event opaque ID.
share_idNoFilter by share profile ID.
object_idNoFilter by related object opaque ID (file, folder, etc.).
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.
snooze_untilNodashboard-dismiss: a future "Y-m-d H:i:s UTC" to snooze until; omit to dismiss permanently.
user_contextNoFocus guidance for AI summary, e.g. "Focus on uploads".
workspace_idNoFilter-style scope filter by workspace ID. dashboard-*: the workspace.
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.5/5.0
Behavior5/5

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

Annotations only give a blanket destructiveHint=true, but the description differentiates the operations: summarize incurs a billed LLM call against org AI credits, acknowledge is idempotent and only marks read for the caller, and dashboard dismiss/snooze is a per-caller view change that leaves the underlying item unchanged. That is exactly the kind of nuance the annotations cannot express.

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

Conciseness4/5

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

Front-loaded with the write-scope and each action's effect in a single dense sentence, followed by the sibling routing and the describe pointer. Every clause is informative, though the stacked parentheticals make it slightly heavy to parse.

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 5-action, 22-parameter write tool with no output schema, it covers what each action does and where to find full parameter details. It stops short of describing what each action returns, but the describe pointer partially 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 carries the parameter semantics (including the nuanced user_id/subcategory/category notes), making 3 the baseline. The description adds only the pointer to action='describe' for the full reference rather than new per-parameter meaning.

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

Purpose5/5

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

States a specific verb+resource ('Fastio events (write)') and enumerates the three distinct write capabilities (summarize, acknowledge, dashboard dismiss/undismiss) with their effects. It explicitly distinguishes itself from the read sibling by saying 'Reads are on `event`', so an agent can separate the two without opening either schema.

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

Usage Guidelines5/5

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

The read/write split against the `event` sibling is stated explicitly, which is the primary routing decision. It also points to action='describe' as the authoritative reference for the action/param catalog, giving a clear fallback when details are needed.

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

fileshareFile SharesA
Read-only
Inspect

Fastio File Shares (read): list and details, grants, version history, and direct download/preview/version URLs for durable single-file share links. Writes are on fileshare_manage. action='describe' gives the full action/param reference. Recipient 404 is uniform (not-found, revoked and expired look alike). The URL actions return a direct API URL; gated shares need Authorization and/or x-ve-password headers on the GET.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNolist: page size (1-500, default 100).
actionYesOperation. Use 'describe' for full action reference.
offsetNolist: pagination offset (default 0).
passwordNoRecipient password for a gated share, sent only as the x-ve-password header (never in a URL or log).
version_idNoversion-download-url: the version ID (from versions-list).
fileshare_idNoFile Share ID.
preview_typeNopreview-url: the preview variant (e.g. 'image', 'pdf', 'video').
workspace_idNoParent workspace ID.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, yet the description still adds non-obvious behavior: recipient 404s are deliberately uniform so not-found/revoked/expired are indistinguishable, URL actions return a direct API URL rather than content, and gated shares require Authorization and/or x-ve-password headers on the GET. It does not cover rate limits or pagination edge behavior, so it stops short of a 5.

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

Conciseness4/5

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

Three tightly packed sentences with no filler, front-loaded with the read-scope statement and the sibling routing. The 404 and header details are dense but each earns its place; slightly heavy clause density is the only cost.

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 read-only, no-output-schema tool with 8 fully documented parameters, the description covers scope, action set, sibling boundary, ambiguity behavior, and auth requirements for the URL actions. Only the shape of list/details results and pagination semantics go unmentioned, which is minor given the schema and the action='describe' escape hatch.

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 description coverage is 100%, so the baseline is 3, but the description adds meaning the schema does not: it explains that the password is transmitted only as the x-ve-password header on the resulting GET, and that version_id comes from versions-list. That ties the URL actions back to the parameters rather than merely restating them.

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 ('Fastio File Shares (read)') and enumerates the exact capabilities: list/details, grants, version history, and download/preview/version URLs. It explicitly distinguishes itself from the write sibling by naming `fileshare_manage`, so an agent can route correctly without opening a schema.

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

Usage Guidelines4/5

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

It clearly states the when-not condition ('Writes are on `fileshare_manage`') and routes to action='describe' for the full action/param reference. It doesn't spell out when to pick `list` vs `details` vs `grant-list`, but the enum plus per-action parameter descriptions make that inferable.

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

fileshare_manageFile Share ManagementA
Destructive
Inspect

Fastio File Shares (write): create a durable share link bound to one workspace file (immutable binding), update, delete, and add/revoke per-user grants (grant-by-email creates a pending invite for an unregistered address). Destructive: delete (removes the share, not the file), grant-revoke. Reads are on fileshare. action='describe' gives the full action/param reference.

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeNocreate: the workspace file node ID to bind (immutable).
userNogrant-add/grant-revoke: grantee user ID. Exactly one of user/email.
emailNogrant-add/grant-revoke: grantee email. Exactly one of user/email. An unregistered email becomes a pending invite.
titleNoHuman-readable share title. create / update.
actionYesOperation. Use 'describe' for full action reference.
expiresNocreate/update: relative expiry in SECONDS from now (1..3155760000). Mutually exclusive with expires_at.
passwordNocreate/update: sets the share password ('' on update clears it).
capabilityNogrant-add: view | download | edit (ordered); edit allows content write-back.
expires_atNocreate/update: absolute expiry 'YYYY-MM-DD HH:MM:SS UTC'. Exclusive with expires. update: '' clears it.
fileshare_idNoFile Share ID.
workspace_idNoParent workspace ID.
access_optionNoAccess tier (create/update). A tier never confers `edit`; that needs an explicit edit grant.
comments_enabledNocreate/update: allow comments on the File Share (create default: off). Always off on anyone_with_link shares.

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already mark this destructive/openWorld, but the description adds non-obvious behavior the booleans cannot convey: delete removes the share and not the file, the file binding is immutable, and grant-by-email to an unregistered address creates a pending invite. These are exactly the operational nuances an agent needs before calling a destructive 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?

Three sentences, front-loaded with the write scope and destructive actions, no filler. The action/param reference is delegated to `describe` instead of bloating the description with 13 parameters.

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?

Thirteen parameters are fully documented in the schema, annotations carry the safety profile, and there is no output schema to explain. The description fills the remaining gaps (destructive semantics, sibling routing, describe escape hatch), so nothing an agent needs to invoke correctly is missing.

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

Parameters4/5

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

Schema description coverage is 100% and each parameter already documents its own constraints (enums, exclusivity, expiry ranges). The description restates a couple of these (immutable binding, pending invite) rather than adding syntax the schema lacks, but its framing of grants and access tiers gives useful orientation. Slightly above the baseline-3 case for full coverage.

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?

Names a specific verb set (create/update/delete/grant-add/grant-revoke) on a specific resource (Fastio File Shares), and explicitly scopes it as the write side by pointing reads to the `fileshare` sibling. An agent can distinguish it from `fileshare`, `share_manage`, and `workspace_manage` without opening a schema.

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

Usage Guidelines5/5

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

Explicitly routes reads to `fileshare`, flags exactly which actions are destructive (delete, grant-revoke), and offers `action='describe'` as the lookup path for the full reference. This covers when-to-use, when-not-to-use, and the alternative in three compact clauses.

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

findUnified Search (Find)A
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. action='describe' gives the full action/param reference. storage action=search is the files-only search, with a smaller default page, files_scope/metadata_filters and the depth surface; find adds metadata-only hits and comments in the same call; metadata action=search covers 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. Sending it changes the response shape (adds a search_metadata block); omitting it reproduces today's behavior byte-for-byte. filename pairs 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. No pre-escaping needed. 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.3/5.0
Behavior4/5

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

Annotations already declare read-only, non-destructive, open-world behavior, so the safety profile is covered. The description adds real context beyond that: the bucket model (files, metadata workspace-only, comments), independent pagination, and health reporting. It omits any auth or rate-limit notes, but the annotation baseline makes this solid.

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

Conciseness4/5

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

Three dense sentences with the core purpose front-loaded before the sibling comparisons. Nothing is wasted, though the middle sentence is heavily parenthetical and slightly harder to parse on first read.

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 no output schema, the description conveys the essential shape of results (typed buckets, per-bucket pagination) and defers detail to action='describe'. That is close to sufficient, though a single clause on what 'health-reported' means for a bucket would close the remaining gap.

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 20 parameters including enums, aliases and pagination defaults. The description adds only a pointer to action='describe' for the full action/param reference and does not elaborate meaning beyond what the schema carries. Baseline 3 is appropriate.

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

Purpose5/5

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

States a specific verb and resource ('unified search across a workspace or share') and immediately clarifies the distinguishing behavior — results grouped by type into buckets. It explicitly separates itself from the two closest siblings (`storage action=search` and `metadata action=search`), so an agent can route without opening schemas.

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?

Names the alternatives and the exact condition selecting each: storage is files-only with a smaller page and depth surface, metadata covers lexical metadata alone, and find adds metadata-only hits plus comments in one call. It also routes deep dives to action='describe'. This is explicit when/when-not guidance.

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

how-toHow-To — Built-in Product HelpA
Read-only
Inspect

Built-in product help — a natural-language "how do I…" question about Fastio returns a grounded, product-aware answer (or a short clarifying question) 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); the actions themselves are on 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, in place of guessed endpoints or exploratory calls. Q&A over the user's uploaded files (RAG) is the ai_manage tool; how-to answers questions about Fastio ITSELF. Costs no credits; needs only an authenticated user (no org needed). action='describe' gives 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 cover safety (readOnlyHint=true, destructiveHint=false, openWorldHint=true), yet the description adds non-trivial context beyond them: it performs NO platform action, returns guidance text only, costs no credits, needs only authentication, and phrases answers as concrete '<tool> action=…' calls rather than guessed endpoints.

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?

Dense but front-loaded: the core purpose leads, then boundaries, then sibling differentiation, then cost/auth notes. Slightly heavy with parentheticals and repeated emphasis on the no-action guarantee, but every sentence carries actionable information.

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

Completeness5/5

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

With no output schema, the description still tells the agent what comes back (grounded answer or clarifying question) and what does not (no actions, no side effects). Combined with full schema coverage and rich annotations, an agent has everything needed to select and invoke it 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?

Schema coverage is 100%, so the baseline is 3; the description still adds value by explaining that action='describe' yields the full action/param reference and that a vague question yields a clarifying question instead of an answer, which shapes how the agent should phrase input.

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

Purpose5/5

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

States a specific verb and resource: a natural-language 'how do I…' question about Fastio returns a grounded, product-aware answer (or clarifying question) in one call. It explicitly distinguishes itself from the closest sibling by declaring 'Q&A over the user's uploaded files (RAG) is the ai_manage tool; how-to answers questions about Fastio ITSELF.'

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?

Gives explicit when-to-use (questions about Fastio itself), when-not (RAG over uploaded files goes to ai_manage), the precondition (authenticated user, no org needed), the cost profile (no credits), and the operational boundary (explain-only, no platform actions). Nothing is left to inference.

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

intentAgent IntentsA
Read-only
Inspect

Agent Intents (read): workspace-scoped declarations of what agents are working on. browse lists every live intent (topics only); expand returns full records. Writes are on intent_manage.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYesOperation. Use 'describe' for full action reference.
cursorNobrowse only: opaque cursor from a previous response. Omit for the first page.
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). Intents are workspace-only — there is no share variant.
describe_actionNoWith action='describe': return one action's params and notes instead of the action index.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already establish readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds genuinely useful behavior beyond that: intents are workspace-scoped with no share variant, browse returns topics only while expand returns full records. Pagination/return-shape detail is left to the schema.

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

Conciseness5/5

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

Three tight sentences: identity/scope first, mode distinction second, routing to the write sibling last. No filler, and the most decision-relevant facts are front-loaded.

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

Completeness4/5

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

There is no output schema, and the description compensates by sketching what each action returns (topic summaries vs full records). Cursor pagination and the describe action are only implied, but the schema covers those parameters, so coverage is adequate.

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

Parameters3/5

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

Schema description coverage is 100%, so every parameter is already documented in the schema (including browse-only cursor and expand-only intent_ids). The description reinforces the browse/expand parameter mapping but adds no syntax or format detail beyond it, matching the baseline 3.

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

Purpose5/5

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

States a specific verb+resource ('Agent Intents (read): workspace-scoped declarations of what agents are working on') and immediately distinguishes the two read modes, browse vs expand. It also names the sibling that owns writes, so an agent can separate this tool from intent_manage without opening either schema.

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

Usage Guidelines4/5

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

It clearly routes writes to `intent_manage` and explains the browse/expand split (list topics vs full records). It does not cover the third action, 'describe', or when to prefer this over other read tools, so the guidance is strong but not exhaustive.

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

intent_manageAgent Intent ManagementA
Destructive
Inspect

Agent Intents (write): allocate a slot (content-free; get-or-create — it can return an existing slot), fill it with a topic/message (fill is also the heartbeat), release it. Destructive: release. Reads are on intent.

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.
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. Matched byte-for-byte as received.
workspace_idNoWorkspace ID (19-digit numeric). Intents are workspace-only — there is no share variant.
describe_actionNoWith action='describe': return one action's params and notes instead of the action index.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations give a blanket destructiveHint=true, but the description narrows it: only `release` is destructive, which is genuinely useful disambiguation. It also discloses that allocate is get-or-create (may return an existing slot) and that fill doubles as the heartbeat — behavior not visible in the schema. Auth/permission requirements and rate limits are still unstated.

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?

Tight and front-loaded: the write scope and the destructive action appear immediately, and the sibling routing is at the end. The parenthetical nesting makes it dense but every clause carries information; no filler sentences.

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 9-parameter write tool with no output schema, the description covers the action lifecycle, the destructive action, and sibling routing, while the schema covers per-parameter constraints (version CAS, 409, ID formats). Missing is any mention of permissions or what release actually destroys.

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 schema already documents all 9 parameters; baseline would be 3. The description earns above baseline by adding action-level semantics the schema lacks — get-or-create on allocate and heartbeat behavior on fill — which help the agent choose the right action.

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?

Names a specific resource (Agent Intents) and enumerates the three write operations — allocate, fill, release — with concrete semantics for each. It also explicitly distinguishes itself from the sibling `intent` tool, so an agent can route without opening either schema.

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

Usage Guidelines4/5

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

Explicitly routes read operations to `intent`, and the allocate→fill→release lifecycle implies the intended ordering. It does not, however, state preconditions for each action (e.g., when allocate is preferable to reusing a slot) beyond the get-or-create hint.

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

invitationInvitationA
Read-only
Inspect

Fastio workspace and share invitations (read): list invitations, filter by state. Writes are on invitation_manage.

ParametersJSON Schema
NameRequiredDescriptionDefault
stateNoInvitation state filter.
actionYesOperation; 'describe' lists the actions.
entity_idNoWorkspace or share ID (19-digit numeric or custom name). Must match entity_type.
entity_typeNoWorkspace or share.

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is covered. The description reinforces '(read)' and adds the write-path routing, but discloses nothing about pagination, result size, or output shape. Consistent with annotations, 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?

Two short sentences with the read scope front-loaded and the delegation to invitation_manage immediately after. Zero waste.

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

Completeness4/5

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

A read-only list tool with fully documented parameters and no output schema; the description plus schema covers what an agent needs to invoke it. Minor gap on intra-action selection (describe vs list-by-state) keeps it short of a 5.

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 four parameters (action, state, entity_id, entity_type) are already documented inline, including enum values. The description only restates the state filter, adding no syntax or format detail beyond 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?

States a specific verb+resource ('list invitations, filter by state') scoped to workspace and share invitations, and explicitly marks it as the read-side tool. An agent can distinguish it from invitation_manage without opening either schema.

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

Usage Guidelines4/5

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

Explicitly routes write operations to `invitation_manage`, which is a clear when-not-to-use signal. It does not explain when to choose 'describe' vs 'list' vs 'list-by-state', so the intra-tool routing is left to inference.

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

invitation_manageInvitation ManagementA
Destructive
Inspect

Fastio workspace and share invitations (write): update an invitation, revoke one. Destructive: delete. Reads are on invitation.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYesOperation; 'describe' lists the actions.
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

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, destructiveHint=true, and openWorldHint=true, so the safety profile is covered; the description adds value by pinpointing that 'delete' specifically is the destructive action rather than the update path. It does not disclose side effects of update (e.g., notification behavior) or permission requirements, which keeps it below a 5.

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

Conciseness5/5

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

Two short sentences with the write scope, the destructive action, and the read alternative all front-loaded and free of 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 9-parameter mutation tool with no output schema, the description covers routing and the destructive path, and the fully described schema carries the parameter burden. It omits the `describe` action and any indication of required combinations per action, leaving a small completeness gap.

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 three parameters carry enums, so the schema fully documents action, entity_type, new_state, expires, and the rest. The description adds no parameter-level meaning beyond the action names, making the baseline 3 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?

Names a specific resource (workspace and share invitations) with concrete write verbs (update, revoke) and explicitly marks delete as the destructive path. It also draws a clean boundary against the `invitation` sibling, which handles reads, so an agent can route without opening either schema.

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

Usage Guidelines4/5

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

Explicitly routes read operations to `invitation`, which is exactly the alternative-selection guidance an agent needs for this family. It stops short of stating preconditions (required IDs, entity_type/entity_id matching, permissions needed), so it is clear context rather than full when/when-not coverage.

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

memberMemberA
Read-only
Inspect

Fastio workspace and share members (read): list (active and pending), details. Writes are on member_manage.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of items to return (1-500, default 100)
actionYesOperation; 'describe' lists the actions.
offsetNoNumber of items to skip (default 0)
user_idNoUser profile ID (share).
entity_idNoWorkspace or share ID (19-digit numeric or custom name). Must match entity_type.
member_idNoMember ID (workspace).
entity_typeNoWorkspace or share.
display_limitNoHow many members the list action returns (default 10, max 500), trimmed after the fetch.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations declare readOnlyHint=true, so the safety profile is already structured. The description adds value by clarifying that it lists both active and pending members, which the annotations don't say. It could add more (pagination behavior, permissions), but it's solid.

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 sentences, zero waste, and the sibling routing is front-loaded. Every word 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?

Complete for a read tool with full schema coverage and annotations covering safety. It clearly routes to the write counterpart. The only minor gap is not detailing return structure, but with no output schema and a list operation, that's acceptable and could be inferred.

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 does the heavy lifting. The description maps the two list modes ('active and pending', 'details') to the `action` enum values, which is useful but minimal. Baseline 3 is appropriate.

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

Purpose5/5

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

The description uses a specific verb ('read') on a specific resource ('workspace and share members') and explicitly distinguishes the read tool from its write sibling ('member_manage'). It also clarifies the sub-operations (list active and pending, details).

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

Usage Guidelines5/5

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

It explicitly states when to use this tool versus the alternative: 'read' operations belong here, 'Writes are on member_manage'. This is the exact sibling routing pattern.

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

member_manageMember ManagementA
Destructive
Inspect

Fastio workspace and share members (write): add, remove, update, transfer ownership, join, leave, answer an invitation. Destructive: remove, transfer-ownership, leave. Reads are on member.

ParametersJSON Schema
NameRequiredDescriptionDefault
roleNoShare permission level.
actionYesOperation; 'describe' lists the actions.
expiresNoMembership expiration, `YYYY-MM-DD HH:MM:SS UTC` for workspace and share. ISO 8601 is rejected (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.
notificationsNoAlias for notify_options.
invitation_keyNoInvitation key string.
notify_optionsNoMember notification preference: 'Do not notify me', 'Notify me in app', 'Notify me in app and via email' or 'Notify me via app, email and text message'.
email_or_user_idNoEmail (to invite) or user ID (to add directly).
invitation_actionNoAccept or decline.
force_notificationNotrue: email the membership notification to an added existing user (sent as notification=force).
invitation_expiresNoEmail invitation expiration, `YYYY-MM-DD HH:MM:SS UTC`.

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, but the description goes further by naming exactly which actions are destructive: remove, transfer-ownership, leave. That specificity is genuine added value, though it does not cover auth requirements, reversibility, or side effects like notification emails triggered on add.

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

Conciseness5/5

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

Two short sentences with zero filler; the action inventory leads and the destructive warning plus sibling pointer are front-loaded. Every clause 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 a 17-parameter multi-action tool, the description covers the action set, the destructive subset, and the read/write boundary with its sibling, while the schema carries the parameter detail and there is no output schema to explain. The remaining gap is per-action parameter pairing, which is only partially implied by schema hints like '(share)' and '(workspace)'.

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% across all 17 parameters, with enums and format constraints (e.g., the UTC date format and the 406 rejection note) already documented in the schema. The description adds no parameter syntax or pairing information beyond what the schema provides, so the baseline 3 applies.

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

Purpose5/5

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

Names a specific verb+resource ('Fastio workspace and share members (write)') and enumerates all eight operations, so the agent knows exactly what surface it covers. It also explicitly distinguishes itself from the sibling read tool by ending with 'Reads are on `member`.'

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 routing context: this tool is the write path, and reads belong to `member`. However, with eight distinct actions in one tool, it gives no per-action selection guidance (e.g., when to use 'join' vs 'join-invitation', or 'remove' vs 'leave'), so the agent must fall back on the enum descriptions.

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

metadataMetadataA
Read-only
Inspect

Fastio workspace metadata (read): the field VOCABULARY (fields-list), lexical value search (search), metadata+content matching (compound-search), extraction eligibility (eligible), merge proposals (fields-merge-candidates), saved filters (filters-list, filter-details, filter-nodes). Templates and saved views were removed; extraction is on storage_manage. Writes are on metadata_manage. action='describe' gives the full reference.

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 cursor from the prior page's response, echoed back verbatim. Omit for the first page.
offsetNosearch: results to skip (offset+limit <= 10000). fields-merge-candidates: the prior next_offset.
sort_dirNofilter-nodes: sort direction. Default desc for updated, asc otherwise.
filter_idNoSaved filter ID (from filters-list).
page_sizeNoeligible/fields-list: cursor page size (1-250, default 100). Server caps at 250.
sort_fieldNofilter-nodes: order by a file column. Not with sort_metadata_field.
template_idNoRETIRED (metadata templates were removed): supplying it fails the request on every action. Narrow by field name (fields-list).
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). 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 (page past 100 with offset).
describe_actionNoWith action='describe': return one action's params and notes instead of the action index.
metadata_filtersNocompound-search: JSON predicate array `[{"field","operator","value"}]` (sent to the platform as `filters`). Required for compound-search.
sort_metadata_fieldNofilter-nodes: order by this metadata field's value. Not with sort_field.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds useful non-obvious context: retired features, that template_id now fails on every action, and that a describe action exists to fetch the full reference. It does not discuss rate limits or response shape beyond pointing at describe.

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

Conciseness4/5

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

Front-loaded with the tool scope and the read/write split, with the long action parenthetical placed mid-sentence. The sentence listing eight actions is dense but every clause maps to a real enum value, so little is wasted.

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 16-parameter, 9-action router with no output schema, the description is compact yet covers scope, sibling boundaries, deprecations, and a pointer to action='describe' for the full reference. That pointer compensates for the lack of per-action detail in the description itself.

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

Parameters3/5

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

Schema description coverage is 100%, so every one of the 16 parameters is already documented in structured form, including the cursor, offset, and required-for-compound-search details. The description adds only the action glosses (fields-list, search, compound-search, etc.), which is the expected baseline when the schema does the heavy lifting.

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

Purpose5/5

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

States a specific verb and resource ('Fastio workspace metadata (read)') and enumerates the nine operations it exposes, so an agent knows exactly what capability set this covers. It also explicitly separates itself from metadata_manage (writes) and storage_manage (extraction), making sibling disambiguation immediate.

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?

Names the alternatives by tool ('Writes are on metadata_manage', 'extraction is on storage_manage') and flags the removed capabilities (templates, saved views). It also gives the escape hatch for deeper detail via action='describe', which is an explicit when-to-use instruction.

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

metadata_manageMetadata ManagementA
Destructive
Inspect

Fastio workspace metadata (write): fold one field name into another, workspace-wide; create, replace or delete saved filters. Destructive: fields-merge (irreversible; unconfirmed it is a preview), filter-delete. Reads are on metadata. action='describe' gives the full reference.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoSaved filter name, 1-100 characters, unique per workspace.
actionYesOperation. Use 'describe' for full action reference.
confirmNofields-merge: 'true' performs the IRREVERSIBLE workspace-wide merge; omitted, the call is a preview that changes nothing.
filter_idNoSaved filter ID (from filters-list).
predicateNoSaved filter predicate: JSON array of up to 5 AND-ed {field,operator,value} clauses; [] matches all.
projectionNoSaved filter projection (JSON object or array, stored as sent); only {"sort":{field,dir}} is applied.
descriptionNoSaved filter description, max 255 characters.
template_idNoRETIRED (metadata templates were removed): supplying it fails the request on every action. Narrow by field name (fields-list).
source_fieldNoThe field NAME that is FOLDED AWAY and stops existing. Names, not ids.
target_fieldNoThe 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.
describe_actionNoWith action='describe': return one action's params and notes instead of the action index.

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, but the description adds which specific actions are destructive (fields-merge, filter-delete) and that fields-merge is workspace-wide and irreversible unless confirm is set. The 'unconfirmed it is a preview' phrasing is slightly murky about what remains unverified, which keeps this short of a 5.

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

Conciseness5/5

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

Three tight clauses with zero filler, front-loading the write scope, then the destructive-action list, then the read alternative and the describe escape hatch. 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 a 12-parameter, no-output-schema tool with a retired `template_id`, the description covers the safety-critical surface (which actions destroy data, preview behavior) and the alternatives. It relies on the schema for field-level detail, which is reasonable, but does not mention result shape or how filter_id is obtained.

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

Parameters3/5

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

Schema coverage is 100% and the schema already documents every parameter, including the preview semantics of `confirm`. The description's only parameter-level contribution is pointing at action='describe', so the baseline 3 for schema-carried semantics is appropriate.

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

Purpose5/5

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

States a specific verb and resource ('Fastio workspace metadata (write)') and enumerates the concrete operations: field folding, saved-filter create/replace/delete. It explicitly distinguishes itself from the read sibling ('Reads are on `metadata`'), so an agent can route without opening either schema.

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

Usage Guidelines4/5

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

Gives clear routing context: use this for writes, use `metadata` for reads, and use action='describe' to get the full action reference. It does not, however, say when to pick fields-merge versus filter-* operations or state prerequisites beyond workspace scoping.

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

orgOrganizationA
Read-only
Inspect

Fastio organizations (read): list, details, limits, workspaces, shares, billing, members, invitations, discovery, assets. Writes are on org_manage.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoPage size.
meterNoMeter type, e.g. storage_bytes, transfer_bytes, ai_tokens.
stateNoInvitation state, e.g. pending, accepted.
actionYesOperation; 'describe' lists the actions.
detailNoPer-entity verbosity. Default terse for list/discover-*/members/list-workspaces, full for details; describe lists the fields per level.
offsetNoPagination offset (0-based).
org_idNoOrganization 19-digit ID or domain string.
user_idNoUser ID.
end_timeNoEnd datetime (default now).
share_idNoFilter by share ID.
start_timeNoStart datetime (default 30 days ago).
domain_nameNoDomain to check for availability.
workspace_idNobilling-meters: filter by workspace ID.
display_limitNoNumber of orgs to return to the agent (default 10, max 100).
starting_afterNobilling-invoices cursor: a prior invoice's `id`.
describe_actionNoWith action='describe': return one action's params and notes instead of the action index.

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description's read/write split reinforces that and points to org_manage, but adds nothing about pagination, default time windows, or permission requirements for the org-scoped reads.

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

Conciseness4/5

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

Two sentences, no filler, with the read scope and the org_manage handoff front-loaded. The middle clause is a dense keyword list rather than prose, which is efficient but slightly reads as a dump of action names.

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

Completeness3/5

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

For a 16-parameter, 22-action multiplexed tool with no output schema, the description gives the agent a category map but no per-action requirements (which actions need org_id, meter, or workspace_id) and no return-shape hints. The `describe` action in the schema partially compensates, so this is adequate but not complete.

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

Parameters3/5

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

Schema description coverage is 100% and every parameter (detail defaults, meter, starting_after, describe_action, workspace_id scoping) is already documented inline. The description only repeats the action category names, adding no format, default, or interaction semantics 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?

States the resource (Fastio organizations) and the read-only scope, then enumerates the operation families (list, details, limits, workspaces, shares, billing, members, invitations, discovery, assets) that map onto the 22-value action enum. That is enough to tell it apart from org_manage, though it never names a single verb+resource pair per action.

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?

Explicitly routes write operations to the sibling `org_manage`, which is a genuine when-not rule. It does not, however, say when to pick a specific action over another (e.g. details vs public-details, discover-all vs discover-available), leaving that to the schema's 'describe' action.

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

org_manageOrganization ManagementA
Destructive
Inspect

Fastio organizations (write): create, update, workspaces, billing, members, invitations, assets. Destructive: close (org and all data), billing-cancel, remove-member, leave, transfer-ownership, invitation-delete, asset-delete. Reads are on org.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoDisplay name (3-100 chars).
roleNoOrg role: `member` or `admin`. `owner` is not assignable; `guest`/`view` are workspace/share roles, rejected (1605).
emailNoInvitee email.
stateNoInvitation state, e.g. pending, accepted.
actionYesOperation; 'describe' lists the actions.
domainNoSubdomain: lowercase alphanumeric and hyphens, globally unique, not reserved.
org_idNoOrganization 19-digit ID or domain string.
confirmNoOrg domain or ID, confirming close.
contentNoPlain-text asset body, e.g. SVG.
expiresNoUpdated expiration datetime.
messageNoInvitation message (10-255 chars).
user_idNoUser ID.
industryNoIndustry key (see industry-list).
metadataNoAsset metadata as a JSON array string.
file_nameNoFile name, e.g. logo.png.
member_idNoMember user ID or email.
perm_joinNoPermission level required to join workspace.
asset_nameNoAsset name, e.g. "logo", "banner".
descriptionNoDescription (10-1000 chars).
file_base64NoBase64 binary asset content.
folder_nameNoWorkspace folder name (4-80 chars).
join_actionNoAccept or decline the invitation (default accept).
permissionsNoUpdated permission level.
twitter_urlNoTwitter/X URL.
youtube_urlNoYouTube URL.
accent_colorNoBrand accent color as JSON.
billing_planNoPlan ID, e.g. solo_monthly; billing-plans lists current IDs. The free plan is closed to new subscriptions.
content_typeNoMIME type (default application/octet-stream).
facebook_urlNoFacebook URL.
homepage_urlNoWebsite URL.
billing_emailNoBilling contact email.
deep_indexingNoDeep Indexing (RAG indexing), 10 credits per page. Default "false". Responses report it as `intelligence`.
instagram_urlNoInstagram URL.
invitation_idNoInvitation ID or invitee email.
owner_definedNoOwner-defined properties as JSON.
invitation_keyNoInvitation key from invite link.
use_backgroundNoShow the background: "true" or "false".
background_modeNoBackground mode, e.g. 'stretched', 'fixed'.
describe_actionNoWith action='describe': return one action's params and notes instead of the 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'.
metadata_extractionNoAutomatic metadata extraction for new uploads (default "true"); effective only while Deep Indexing is on.
perm_authorized_domainsNoAuthorized email domain for auto-join.

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, openWorldHint=true, readOnlyHint=false, but the description adds real value by naming which actions are destructive and spelling out the worst consequence (close destroys the org and all data). It does not cover auth/permission requirements or rate limits. Note the tool does expose a `describe` read action even though the text says reads live on `org` — a minor inconsistency, not an annotation 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?

Three tight clauses with zero filler: scope first, capability families second, destructive actions third, sibling routing last. Every phrase earns its place in a tool whose schema carries the bulk of the detail.

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 18-action, 45-parameter tool with no output schema, the description covers the high-risk information (which actions destroy data) and the read/write split. It omits mention of the `describe` mechanism and the `confirm` requirement for close, though both are fully documented in the schema.

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 45 parameters with constraints, enums, and cross-references (billing-plans, industry-list). The description adds no parameter-level detail beyond grouping the actions, so the baseline 3 is appropriate.

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

Purpose5/5

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

States the resource (Fastio organizations) and the scope (write) and enumerates the operation families it covers: create, update, workspaces, billing, members, invitations, assets. It explicitly distinguishes itself from the read sibling by naming `org` as the read path, so an agent can route without opening either schema.

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

Usage Guidelines4/5

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

Gives a clear routing rule — writes here, reads on `org` — and flags the destructive subset, which tells the agent when caution is required. It stops short of stating when a write should be avoided entirely or what prerequisites (e.g. confirm for close) gate each action.

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

shareShareA
Read-only
Inspect

Fastio shares (read): list and details, public details, members, available shares, name availability, password auth for a protected share. Writes are on share_manage. action='describe' gives the full action/param reference.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNocheck-name: the custom share URL name to check.
typeNoFilter by share type.
limitNoBackend page size (list/members); display_limit sets how many rows are returned.
actionYesOperation. Use 'describe' for full action reference.
detailNoterse|standard|full. Defaults: terse for list/available/members, standard for public-details, full for details.
offsetNoNumber of items to skip (default 0)
org_idNoFilter shares to this org.
passwordNopassword-auth: the share password.
share_idNoShare profile ID or custom name.
display_limitNolist: rows to return (default 10, max 500), trimmed after fetch.
describe_actionNoWith action='describe': return one action's params and notes instead of the action index.

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description reinforces the read scope and mentions password-auth for protected shares, but adds nothing about pagination, response shape, or auth prerequisites beyond what the schema already encodes.

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 tight sentences with the read scope front-loaded, followed by the routing pointer and the describe hint. No filler; each clause carries information.

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

Completeness4/5

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

Given 11 parameters and three enum fields but no output schema, the description supplies the essential orientation: read-only scope, the write alternative, and the action='describe' escape hatch for full parameter detail. Only minor gaps remain around return-shape expectations, which annotations and the describe action largely absorb.

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 11 parameters are already documented in the schema (including action, name, password, display_limit, limit). The description only gestures at 'password auth' and 'name availability' and adds no format or syntax detail beyond the schema, so baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource ('Fastio shares (read)') and enumerates the concrete capabilities: list and details, public details, members, available shares, name availability, password auth. It also names share_manage as the write counterpart, so an agent can distinguish it from the sibling without opening a schema.

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

Usage Guidelines4/5

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

Explicitly routes writes to `share_manage` and points to action='describe' for the full action/param reference, which is a clear usage signal. It stops short of explaining which read action (details vs public-details vs members) to pick when, so it is clear context without full exclusions.

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

share_manageShare ManagementA
Destructive
Inspect

Fastio shares (write): create, update, archive/unarchive, delete, autotitle (AI-generates and applies a title/description; consumes credits). quickshare-create is deprecated (error 10756); single-file links are fileshare_manage action create. Destructive: delete (permanent). Reads are on share. action='describe' gives the full action/param reference. Enabling Deep Indexing costs credits (10 per page).

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoShare title (2-80 chars; maps to API 'title').
titleNoShare title (2-80 chars). Alias of name.
actionYesOperation. Use 'describe' for full action reference.
expandNoquickshare-create only: 'node' adds the full backend payload under `node`.
inviteNoWho can invite others (default: owners).
notifyNoNotification setting (default: never).
confirmNodelete: the share's custom_name or id.
expiresNoExpiration: 'YYYY-MM-DD HH:MM:SS' for create/update; seconds (default 10800, max 604800) for quickshare-create.
node_idNoFile node ID (quickshare-create).
passwordNoPassword (only with 'Anyone with the link').
share_idNoShare profile ID or custom name.
room_goalNoREMOVED with Coordination Rooms (2026-08-25); a call that supplies it is refused.
custom_urlNoCustom URL name for the share link (10-100 chars), distinct from custom_name. update: "null" clears 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). On create, omit it 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).
storage_modeNoStorage mode (default: independent).
user_contextNoautotitle only: context to guide the generated title/description.
workspace_idNoParent workspace ID (create, quickshare-create).
create_folderNoCreate a new workspace folder (workspace_folder mode).
deep_indexingNoDeep Indexing (RAG indexing); costs credits (10/page). create: default false; always false on workspace_folder shares. Responses report it as `intelligence`.
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_actionNoWith action='describe': return one action's params and notes instead of the action index.
workspace_styleNoUse workspace styling (default: true).
background_imageNoBackground image index (0-128, default 0).
comments_enabledNoEnable comments (default: true).
external_invitesNoupdate: this share's external-invite switch; only tightens the organization's policy and cannot be reset to inherit.
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.5/5.0
Behavior5/5

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

Annotations already declare destructiveHint=true, but the description sharpens it ('Destructive: delete (permanent)') and then adds traits annotations cannot express: credit consumption for autotitle and Deep Indexing (10 per page), plus a deprecated action that fails with a specific error code. That is meaningful cost/behavior 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?

Five dense sentences cover eight actions, deprecation, cost, and a reference escape hatch with no filler, and the write-scope statement is front-loaded. It is terser than the surface area warrants in a couple of places (e.g. cost mentions appear twice: ai/autotitle and Deep Indexing), but nothing is wasted.

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 8-action, 38-param tool with no output schema, the definition supplies the essentials: action set, sibling routing, destructive/cost warnings, and a discovery mechanism for per-action detail. It does not characterize response shapes per action, but action='describe' is presented as covering that gap.

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% across 38 params, so the schema already documents formats, defaults, enums and per-action applicability (e.g. expires differs between create and quickshare-create). The description adds almost nothing parameter-level beyond pointing at action='describe', so the baseline 3 for heavily schema-documented tools is correct.

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?

Opens with a specific verb+resource and enumerated write actions ('Fastio shares (write): create, update, archive/unarchive, delete, autotitle'), which maps directly to the action enum. It also names what it is not (reads are on `share`; single-file links are `fileshare_manage` action create), so an agent can separate it from siblings without opening a schema.

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

Usage Guidelines5/5

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

Explicitly routes the agent: reads go to `share`, single-file links to `fileshare_manage`, and quickshare-create is deprecated with the exact error code (10756). It also tells the agent to call action='describe' to get the full per-action param reference, which is real when-to-use guidance for a multi-action tool.

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

signE-SignatureA
Read-only
Inspect

Fastio e-signature reads: sign envelopes and sign templates in a workspace, plus document and audit-certificate download URLs. Writes are on sign_manage.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoPagination limit (max 500).
actionYesOperation. Use 'describe' for full action reference.
offsetNoPagination offset (default 0).
document_idNosign-document-*: document OpaqueId.
envelope_idNosign-*: numeric envelope ID.
template_idNosign-template-get: template id (30-char base32, `sa` family).
workspace_idNoWorkspace ID (19-digit NUMERIC; the document/audit download stream route rejects custom workspace names). Envelopes are workspace-parented.
display_limitNoMax list rows rendered inline (default 10; the full page is still fetched).
describe_actionNoWith action='describe': return one action's params and notes instead of the action index.
envelope_statusNosign-list: status filter.

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safe-read profile is covered and the description's 'reads' is partly redundant. It does add useful context beyond the annotations – that some actions yield document and audit-certificate download URLs and that writes are delegated elsewhere – but discloses nothing about auth needs, rate limits, or return format specifics.

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

Conciseness4/5

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

Two tightly written sentences: the first front-loads the read scope and the second names the write alternative. No filler, and the important routing information is placed early – only slightly terse for a tool with ten parameters and ten actions.

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

Completeness3/5

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

For a read-only, ten-parameter tool with full schema coverage and no output schema, the description covers the read/write split and the return categories but does not help an agent choose among the ten actions or explain the 'describe' workflow. Adequate, but a good part of the selection burden rests on the schema.

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 ten parameters (including the numeric workspace_id constraint and the action enum) and the baseline is 3. The description adds no parameter-level detail beyond what the schema provides.

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 names the domain (Fastio e-signature) and enumerates the read resource categories – sign envelopes, sign templates, and document/audit-certificate download URLs – within a workspace, and explicitly routes writes to the sibling sign_manage. It is clear and sibling-differentiating, though 'reads' is a broad category label rather than a single precise verb.

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 a clear condition for use: read operations live here, while 'Writes are on sign_manage', naming the alternative explicitly. It gives no guidance on which of the ten read actions to pick or on ordering (e.g. describe first), leaving that to the schema.

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

sign_manageE-Signature ManagementA
Destructive
Inspect

Fastio e-signature writes: draft envelopes, send (reserves signing credits), void, retry, the caller's signing link, and sign templates. Destructive: sign-send, sign-void, sign-template-delete (confirm='true'). Reads are on sign.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoEnvelope or template name (required on sign-template-create). sign-template-instantiate defaults it to the template name.
actionYesOperation. Use 'describe' for full action reference.
fieldsNosign-create/-update: JSON array of field placements (coords 0..1; see note).
reasonNosign-void: void reason.
confirmNo'true' is required for sign-send, sign-void and sign-template-delete.
snapshotNosign-template-create/-update: JSON {recipient_slots, document_slots, fields, policy}; a full replacement on update.
documentsNoJSON array. sign-create/-update: 1-20 documents (see note). sign-template-instantiate: slot overrides [{document_slot_index, source_node_id, source_version_id?}].
expires_atNosign-create/-update: expiry 'Y-m-d H:i:s UTC' (not a day count; omit = policy default).
recipientsNosign-create/-update: JSON recipients array (see note).
descriptionNosign-template-create/-update: template description.
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 (19-digit NUMERIC; the document/audit download stream route rejects custom workspace names). Envelopes are workspace-parented.
describe_actionNoWith action='describe': return one action's params and notes instead of the action index.
expected_versionNosign-template-update: the `version` from sign-template-get (optimistic CAS; 409 on a concurrent write).
recipient_bindingsNosign-template-instantiate: JSON object slot_key -> {email, display_name?, auth_method?} (not an array).

TDQS

A4.2/5.0
Behavior4/5

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

Annotations only say destructiveHint=true generically; the description narrows it to the exact three actions (sign-send, sign-void, sign-template-delete) and states the confirm='true' gate, plus the billing side effect that send 'reserves signing credits'. It omits reversibility and rate-limit behavior, but the per-action destructive mapping is real added 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?

Three dense sentences with zero filler: capability list first, destructive/confirm caveat second, sibling routing last. Every clause carries information an agent needs.

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 17-parameter, 11-action tool with no output schema, the description supplies scope, sibling routing, the destructive subset, and the describe escape hatch — enough to call it correctly given 100% schema coverage. It stops short of mapping actions to intents, which is the remaining gap.

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 every parameter carries a per-action note, so the schema does the heavy lifting; baseline 3 applies. The description only repeats the confirm='true' requirement and adds the credit-reservation note for send, adding little parameter meaning 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?

Opens with a specific verb+resource ('Fastio e-signature writes') and enumerates the concrete operations (draft, send, void, retry, signing link, templates), so the agent knows exactly what surface this tool covers. It also explicitly delimits itself from the sibling read tool ('Reads are on `sign`').

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 write-vs-read split and routes reads to `sign`, and it points to action='describe' for the full action reference. What it does not do is help choose among the eleven write actions for a given intent — the agent must go to the schema enum or call describe.

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

storageStorageA
Read-only
Inspect

Fastio files and folders in workspaces and shares (read): list, recent, search, details, trash, versions, locks, previews, content reads, and per-node metadata. FILES OFTEN ALREADY CARRY AI-EXTRACTED METADATA, AND IT IS SEARCHABLE: it frequently answers the question without opening anything, and finds files by value without listing folders. Writes are on storage_manage. action='describe' gives the full reference.

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.
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 Deep Indexing 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: attach the hydrated node to each hit (default limit drops to 10). Distinct from `detail` (see describe).
node_idNoStorage node opaque ID (files and folders are both nodes), 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.
max_sizeNoMax read-content bytes (default 512000, max 1048576).
node_idsNoStorage node opaque IDs (details: 1-25 max).
share_idNoAlias for profile_id implying profile_type=share (dual-type actions).
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.
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. Sending it changes the response shape (adds a search_metadata block); omitting it reproduces today's behavior byte-for-byte. filename pairs with name_match.
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)
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. No pre-escaping needed. 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 ID (19-digit, or custom name); pair with profile_type. Typed aliases imply the type: workspace_id (workspace), share_id (share, dual-type actions); also context_id / instance_id.
as_markdownNoOpt-in (list/recent/search/details/trash-list): the platform renders the response as GitHub-flavored Markdown (?output=<detail>,markdown) instead of JSON. Omit for JSON with web_url enrichment + _next hints.
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).
context_typeNoAlias for profile_type (either name works)
preview_typeNoPreview kind; each applies only to compatible file categories (see describe).
profile_typeNoProfile type: "workspace" or "share".
workspace_idNoAlias for profile_id that implies profile_type=workspace. Valid on every action.
display_limitNoHow many items to return (default 10, max 500) on list, recent and search. list/recent page via `cursor`; search pages via `offset` (increase it by the page size).
folders_scopeNoScope semantic search to folders via BFS. See describe for full constraints.
output_formatNoOutput format: "png", "jpg", "webp".
case_sensitiveNoCase-sensitive matching for exact/prefix/contains/glob. Default false (like find -iname), which folds non-ASCII too. Ignored under name_match=auto.
parent_node_idNoParent folder opaque ID, or 'root'. On `list`, an alias for node_id.
transform_nameNoTransform name, e.g. "image" for resize/crop/format.
describe_actionNoWith action='describe': return one action's params and notes instead of the action index.
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.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so safety is covered. The description still adds useful behavior: the read-only action inventory, the pointer to storage_manage for mutations, and the important note that metadata is AI-extracted and searchable, which steers agents away from expensive content reads. It does not describe rate limits or pagination semantics in prose.

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

Conciseness4/5

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

Three compact sentences, front-loaded with the read scope and the write boundary before the metadata hint. The ALL-CAPS emphasis is slightly noisy but the content is dense and 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 a 43-parameter, 15-action tool with no output schema, the description cannot enumerate everything, and it correctly provides a discovery path via `action='describe'` plus the scope/mutation boundary. Return-value shape is left to the schema's per-action descriptions, which is acceptable given the deferral mechanism.

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% across all 43 parameters, and the schema descriptions are unusually rich (aliases, defaults, cross-param conflicts such as q vs max_bytes). The description adds only the pointer to `action='describe'` for the full action reference, so baseline 3 is appropriate.

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

Purpose5/5

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

States a specific verb family (read operations) plus resource (files and folders) and enumerates the sub-operations: list, recent, search, details, trash, versions, locks, previews, content reads, and per-node metadata. It also explicitly contrasts itself with the sibling `storage_manage`, so an agent can tell the read tool from the write tool without opening either schema.

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

Usage Guidelines4/5

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

Names the alternative for writes ('Writes are on `storage_manage`') and gives a real usage heuristic: files often carry AI-extracted metadata that is searchable and 'frequently answers the question without opening anything.' It does not say when to pick one of the 15 actions over another, deferring that to `action='describe'`.

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

storage_manageStorage ManagementA
Destructive
Inspect

Fastio files and folders (write): create folders, copy, move, rename, restore, add files/links, transfer, versions, locks, node metadata set/extract. Destructive: delete (to trash), purge (permanent), metadata-delete. Reads are on storage. action='describe' gives the full reference.

ParametersJSON Schema
NameRequiredDescriptionDefault
keysNometadata-delete: JSON array of metadata keys to delete (omit to clear all).
nameNoName for new folder or file.
actionYesOperation. Use 'describe' for full action reference.
node_idNoStorage node opaque ID (files and folders are both nodes), or 'root'.
durationNolock-acquire: lock length in seconds (60-3600). The platform default is short (300s measured).
new_nameNoNew name for file or folder.
node_idsNoStorage node opaque IDs (details: 1-25 max).
share_idNoadd-link: the share to link. Dual-type actions: alias for profile_id implying profile_type=share.
node_typeNorename: optional type hint; skips the type-probe round-trip. Omit to probe.
upload_idNoOpaque ID of completed upload session.
context_idNoAlias for profile_id (either name works)
key_valuesNometadata-set: JSON object of field-name -> value (max 100) from the workspace field vocabulary. Writes only the named fields; cannot clear one (metadata-delete clears).
lock_tokenNolock-release: the token lock-acquire returned (required).
profile_idNoWorkspace or share ID (19-digit, or custom name); pair with profile_type. Typed aliases imply the type: workspace_id (workspace), share_id (share, dual-type actions); also context_id / instance_id.
version_idNoVersion ID to restore.
instance_idNoAlias for profile_id (REST/how-to name; profile_id is canonical).
template_idNoRETIRED (metadata templates were removed): supplying it fails the request. Write with key_values; scope extraction with extract_fields.
context_typeNoAlias for profile_type (either name works)
profile_typeNoProfile type: "workspace" or "share".
workspace_idNoAlias for profile_id that implies profile_type=workspace. Valid on every action.
if_version_idNorename: compare-and-swap base, the node's `version` from your last read. A stale base is rejected with a 409 naming the current version; nothing changes.
transfer_modeNo'copy' (default) or 'move'. 'move' invalid for node_id 'root'.
dest_parent_idNotransfer: destination parent folder in the OTHER instance, or 'root'. copy/move: alias for target_parent_id.
extract_fieldsNometadata-extract(-all): JSON array of field names (e.g. `["vendor","amount"]`); omit for a full extract. Not a strict filter on single-node extraction (see describe).
parent_node_idNoParent folder opaque ID, or 'root'.
describe_actionNoWith action='describe': return one action's params and notes instead of the action index.
dest_instance_idNoDestination workspace or share profile ID.
target_parent_idNoDestination folder opaque ID, or 'root'.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations flag destructiveHint=true and openWorldHint=true, so the safety profile is partly covered. The description adds real value beyond that by grading destruction: delete goes 'to trash' while purge is 'permanent', and metadata-delete is destructive. It does not cover auth/permission requirements or return behavior, keeping it below a 5.

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

Conciseness4/5

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

Three dense sentences, front-loaded with the write scope and followed by the destructive list and the escape hatch. Efficient, though the action list is compressed to near-telegraphic style with minimal connective text.

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 18 actions, 28 params, and no output schema, the description summarizes scope correctly and delegates full detail to action='describe', which is an adequate completeness strategy. It could say more about the dual-instance transfer/auth model, but nothing critical for correct invocation is missing.

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

Parameters3/5

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

Schema description coverage is 100% and the schema itself documents every parameter (including aliases, lock durations, extract_fields). The description adds no parameter-level syntax beyond pointing the agent to action='describe', so the schema does the heavy lifting and baseline 3 applies.

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

Purpose5/5

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

States a specific verb class (write operations) on a specific resource (Fastio files and folders), then enumerates the mutation categories. It explicitly distinguishes itself from the 'storage' sibling by declaring 'Reads are on `storage`', so an agent can route without opening either schema.

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

Usage Guidelines4/5

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

Clearly routes read vs write via the 'storage' pointer and directs discovery through action='describe'. It gives clear context for when to use this tool versus the read sibling, but does not disambiguate among the many actions beyond grouping them.

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

uploadUploadA
Read-only
Inspect

Fastio uploads (read): upload session status (wait long-polls), active sessions, chunk status, web-import jobs, upload limits, allowed extensions, and the POST /blob sidecar details (blob-info). Writes are on upload_manage. action='describe' gives the full action/param reference.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgNoOrg ID for limit resolution.
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.
limitNoMax results (1-100, default 50).
actionYesOperation. Use 'describe' for full action reference.
offsetNoPagination offset.
statusNoFilter by status.
file_idNoFile ID for update context.
chunk_idNoSpecific chunk number (omit for all).
passwordNoFile Share link password (profile_type=fileshare only). Sent only as the x-ve-password header on each call, never in a URL/log; needed when the target share is password-protected.
upload_idNoUpload session ID or web upload job ID.
instance_idNoTarget workspace/share ID — also the profile_id alias for upload flows; profile_id is canonical.
action_contextNoContext: create or update.
describe_actionNoWith action='describe': return one action's params and notes instead of the action index.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered; the description still adds value by disclosing that `wait` long-polls and that blob-info is a POST /blob sidecar, which are behavioral traits an agent needs. It does not mention auth requirements, rate limits, or what the read payloads contain.

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, front-loaded with the read scope and the sibling boundary, then the action reference escape hatch. Every clause maps to a capability or routing decision; nothing is padding.

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 14-parameter, multi-action read tool with no output schema, the description covers scope, sibling boundary, and points to `describe` for per-action detail, which is a sound completeness strategy. It leaves return shapes and per-action prerequisites unstated, though the describe mechanism mitigates that.

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 description coverage is 100%, so the baseline is 3, and the description earns a step above by tying key parameters to behavior: `wait` long-polling, `blob-info` for sidecar details, and action='describe' for the action/param index. It adds framing rather than raw syntax, which the schema already supplies.

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 specific resource (Fastio uploads) and scopes it precisely as the read half: session status, sessions, chunk status, web-import jobs, limits, extensions, blob-info. It explicitly contrasts itself with `upload_manage`, so an agent can distinguish it from its write sibling without opening either schema.

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

Usage Guidelines4/5

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

It gives an explicit boundary ("Writes are on `upload_manage`") and routes the agent to action='describe' for the full reference, which is a real usage rule. It does not say when to prefer one action (e.g. status vs chunk-status) over another, so it stops short of full when/when-not coverage.

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

upload_manageUpload ManagementA
Destructive
Inspect

Fastio uploads (write): stream-upload (one call, auto-finalizes, no filesize), chunked sessions (create-session, chunk, finalize), web URL import, batch (many small files), cancellation. For files and binary the default byte source is the POST /blob sidecar: raw bytes over plain HTTP outside MCP (up to 100 MB, no base64), returning a blob_id for stream-upload/chunk/batch. The chunked path is for files over 100 MB. content is UTF-8 text composed in the call; content_base64 inflates ~33% and fails above a few MB. Uploads create files and consume storage credits; a same-name upload overwrites in place as a new version. Destructive: cancel, cancel-all, chunk-delete, web-cancel. Reads are on upload. action='describe' gives the full action/param reference.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoSource URL to import from.
hashNoHash of the bytes this call sends (a chunk, or the whole stream body). Pair with hash_algo. If both are omitted, the CRC-32C of the bytes is sent.
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.
actionYesOperation. Use 'describe' for full action reference.
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. Base64 goes in content_base64. One of content/content_base64/blob_id.
creatorNoClient identifier echoed back (alphanumeric + hyphens).
blob_refNoAlias for blob_id (deprecated). Accepted on chunk/stream/stream-upload only.
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. An overestimate is safe; omitted, the organization's file-size limit applies. Stream sessions only.
passwordNoFile Share link password (profile_type=fileshare only). Sent only as the x-ve-password header on each call, never in a URL/log; needed 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_algoNomd5, sha1, sha256, sha384 or crc32c (8 lowercase hex). Pair with hash.
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.
file_crc32cNochunk only: CRC-32C of the WHOLE file (8 lowercase hex), checked once all bytes arrive; combine each chunk's returned `crc32c` in order. Send on the first send of the chunk whose CRC completes last (sequential: the last chunk) and its retries; never move it. A different value: 10779; after every byte arrived: 10507.
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 a CRC-32C 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, fileshare.file.id in the File Share's 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.
content_base64NoBase64-encoded **binary**, server-decoded. ⚠️ **LAST RESORT — expect FAILURE above a few MB** (~33% inflation + MCP transport cap). An unreachable POST /blob is almost always a CLIENT-SIDE FIREWALL/PROXY restriction, not a server limit; allowing /blob there lifts it. `blob_id` carries real files.
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 (fileshare.file.id in the File Share's details).
describe_actionNoWith action='describe': return one action's params and notes instead of the action index.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations declare the tool is destructive, and the description goes further by naming exactly which actions are destructive (cancel, cancel-all, chunk-delete, web-cancel), disclosing storage-credit consumption, and explaining that same-name uploads overwrite in place as a new version. These are side-effect details the annotations cannot express.

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

Conciseness4/5

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

Front-loaded with the action inventory before byte-source and side-effect details, which is the right ordering for a 12-action tool. It is dense and some clauses (base64 inflation, storage credits) duplicate schema text, but for a 33-parameter mega-tool the length is earned.

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 12 actions, 33 parameters, and no output schema, the description covers the decision-critical surface: which action, which byte source, size limits, and destructive semantics. It defers the exhaustive action/param matrix to action='describe', which is a reasonable pointer, though per-action return behavior remains unstated.

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 description coverage is 100%, so the baseline is 3. The description still adds cross-parameter routing value beyond the schema by synthesizing which byte source (blob_id vs content vs content_base64) to use and why, rather than restating field definitions individually.

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?

Opens with a specific verb+resource framing ('Fastio uploads (write)') and enumerates the full set of write actions (stream-upload, chunked sessions, web import, batch, cancellation). It explicitly distinguishes itself from the read-side sibling by noting 'Reads are on `upload`', so an agent can route without opening either schema.

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

Usage Guidelines5/5

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

The description gives concrete selection rules: the POST /blob sidecar is the default byte source for files and binaries, chunked is for files over 100 MB, `content` is for text composed in-call, and `content_base64` is a rare fallback. It also names the alternative tool for reads and points to action='describe' for the full action/param reference.

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

userUserA
Read-only
Inspect

Fastio user account (read): profile, contacts, limits, shares, invitations, assets. Writes are on user_manage.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of items to return (1-500, default 100)
queryNoContact search substring.
actionYesOperation; 'describe' lists the actions.
offsetNoNumber of items to skip (default 0)
user_idNo19-digit user ID or email.
archivedNotrue: archived shares; false: active.
display_limitNolist-shares row cap (default 10, max 500), applied after the fetch.
invitation_idNoInvitation opaque ID or key.
invitation_keyNoInvitation key.
describe_actionNoWith action='describe': return one action's params and notes instead of the action index.

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is covered structurally. The description adds the read/write boundary and the redirect to user_manage, which is useful context, but says nothing about pagination behavior, rate limits, or auth requirements for a 12-action 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?

Two clauses, zero filler, and the resource scope is front-loaded before the sibling redirect. Every word 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 a 10-parameter read-only tool with no output schema, the description plus 100% schema coverage and a built-in 'describe' action give an agent enough to invoke it correctly. The remaining gap is routing among the other read-oriented siblings, which the description does not address.

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

Parameters3/5

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

Schema description coverage is 100%, so every parameter is already documented in the schema, including the 12-value action enum and the 'describe' self-documentation action. The description adds no parameter-level meaning beyond the schema, which is the baseline-3 case.

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

Purpose5/5

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

States a specific resource (Fastio user account) and a clear scope (read: profile, contacts, limits, shares, invitations, assets). The parenthetical '(read)' plus the enumerated resource list lets an agent distinguish it from user_manage and from other read siblings at a glance.

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?

Explicitly routes write operations to `user_manage`, which is a concrete when-not-to-use signal. It stops short of distinguishing this tool from other read siblings such as member, invitation, or share, so it is not a full alternative map.

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

user_manageUser ManagementA
Destructive
Inspect

Fastio user account (write): profile, invitations, assets, report-bug. Destructive: close, asset-delete, invitation-decline. Reads are on user.

ParametersJSON Schema
NameRequiredDescriptionDefault
blobNoPlain-text excerpt (error body, short log), max 32 KB. No secrets or file content.
titleNoBug report title, 1-200 chars.
actionYesOperation; 'describe' lists the actions.
contentNoPlain-text asset content.
user_idNo19-digit user ID or email.
categoryNoBug report area.
endpointNoFailing call as 'METHOD /path', no host or query.
filenameNoOriginal filename.
last_nameNoFamily name.
asset_nameNoAsset type name (e.g. profile_pic).
error_codeNoError code of the failed call.
first_nameNoGiven name.
request_idNoFrom the failed tool result.
descriptionNoBug report body: steps, expected vs actual. Max 8 KB. No secrets.
http_statusNoHTTP status of the failed call.
occurred_atNoFailure time, 'YYYY-MM-DD HH:MM:SS UTC', last 30 days.
confirmationNoAccount email or user ID.
content_typeNoMIME type.
invitation_idNoInvitation opaque ID or key.
content_base64NoBase64 binary content.
invitation_keyNoInvitation key.
describe_actionNoWith action='describe': return one action's params and notes instead of the action index.
idempotency_keyNo16-64 chars [A-Za-z0-9_-]; generated when omitted.

TDQS

A4.4/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, but the description adds the specific destructive action set, which is useful beyond the generic annotation. It does not explain permissions, reversibility, or confirmation requirements.

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 compact fragments, front-loaded with scope, then destructive actions, then the read alternative. Every clause carries routing or safety value and there is no padding.

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 23-parameter multi-action tool, the description supplies essential write-vs-read routing and destructive-action categorization. The fully described schema and safety annotations cover most remaining gaps, though the description omits confirmation/idempotency nuances and per-action return expectations.

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 all 23 parameters are documented in the input schema. The description adds grouping for the `action` enum and identifies destructive action values, but does not clarify conditional requirements such as when `confirmation` is needed or how the other parameters interact per action.

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

Purpose5/5

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

States the resource (Fastio user account) and operation type (write), enumerates action groups (profile, invitations, assets, report-bug) and destructive actions. Explicitly distinguishes this tool from the read-only `user` sibling.

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?

Directs all read operations to the `user` sibling, which clearly scopes this tool to writes. It also flags destructive actions (close, asset-delete, invitation-decline) so the agent can route and call them cautiously.

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

workspaceWorkspaceA
Read-only
Inspect

Fastio workspaces (read): list and details, members, shares in a workspace, available workspaces, name availability, notes, QuickShare links, async job status. Writes are on workspace_manage. action='describe' gives the full action/param reference. Metadata is not here: the workspace field vocabulary is on metadata, node-level metadata on storage. Verbosity (detail param): list/available/members/list-shares default to terse; details defaults to full.

ParametersJSON Schema
NameRequiredDescriptionDefault
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.
node_idNoStorage tree node opaque ID. Both files and folders are nodes — use this name regardless of which.
archivedNoFilter by archive status (default "false").
share_idNoShare ID or custom name: the share to import, or (read-note) the share holding the note.
check_org_idNoOrg ID for check-name (required — you must be a member). Suggests an org-prefixed alternative if the name is taken.
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.
describe_actionNoWith action='describe': return one action's params and notes instead of the action index.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds real context on top: the `describe` self-reference mechanism, an async job-status action, and the terse/full verbosity behavior per action. It omits auth requirements and pagination nuance, keeping it short of a 5.

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

Conciseness4/5

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

Front-loads what the tool reads, then handles boundaries, then verbosity defaults in roughly three dense clauses. No wasted sentences, though the parenthetical action list and the trailing verbosity sentence are somewhat cramped for a single run-on block.

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-action multiplexed tool with 13 params and no output schema, the description covers scope, sibling boundaries, and the `describe` escape hatch for the full action/param reference. What remains unstated (pagination semantics, auth) is minor and partly covered by the schema.

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 13 parameters are already documented. The description restates the `detail` verbosity defaults, which the schema already documents verbatim, and points to `describe` for per-action field lists, adding only marginal meaning 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.

Purpose5/5

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

States a specific resource and scope ('Fastio workspaces (read)') and enumerates the operations covered: list/details, members, shares, available, name availability, notes, QuickShare links, job status. It also names the sibling that handles the write side (`workspace_manage`), so an agent can separate the two without opening a schema.

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

Usage Guidelines5/5

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

Explicit routing: writes go to `workspace_manage`, metadata vocabulary to `metadata`, node-level metadata to `storage`, and `action='describe'` for the full reference. This tells the agent both when to use this tool and which alternatives to reach for otherwise.

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

workspace_manageWorkspace ManagementA
Destructive
Inspect

Fastio workspaces (write): update settings, archive/unarchive, delete, import a share, create/update notes, delete QuickShare links, enable/disable cloud import. Destructive: delete (the workspace and all its files), quickshare-delete. Reads are on workspace. action='describe' gives the full action/param reference. Enabling Deep Indexing costs credits (10 per page); the toggle is rate-limited.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoDisplay name (2-100 chars on update). Cannot be cleared.
actionYesOperation. Use 'describe' for full action reference.
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.
blob_refNoAlias for blob_id (deprecated).
share_idNoShare ID or custom name: the share to import, or (read-note) the share holding the note.
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.
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.
deep_indexingNoToggle Deep Indexing (AI indexing of file content). Enabling costs credits (10/page) to index existing files. Disable flushes embeddings; re-enable re-indexes. Rate-limited. Responses report it as `intelligence`.
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.
if_version_idNoCompare-and-swap base for update-note: the note's `version` from the read your edit was based on (read-note returns it as note.version). If the note has changed since, the update is rejected with a 409 version conflict naming the current version id, and nothing is changed. Omit for last-write-wins.
owner_definedNoCustom properties JSON. "null"/"" to clear.
sharing_sharesNoWhether new shares can be created here. Off blocks new ones only; the organization's setting is a ceiling.
cloud_sync_modeNoCloud sync direction ceiling: read (inbound only) or read_write. Not an on/off switch.
describe_actionNoWith action='describe': return one action's params and notes instead of the action index.
external_invitesNoThis workspace's external-invite switch; only tightens the organization's policy and cannot be reset to inherit.
background_color1NoBackground color 1 JSON. "null" to clear.
background_color2NoBackground color 2 JSON. "null" to clear.
perm_member_manageNoWho can manage members.
sharing_file_linksNoAs sharing_shares, for single-file share links.
metadata_extractionNoAutomatic metadata extraction for new uploads; effective only while Deep Indexing is on. Off deletes nothing.

TDQS

A4.2/5.0
Behavior4/5

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

The annotations already declare destructiveHint=true and readOnlyHint=false, but the description adds useful specifics: delete removes the workspace and all its files, quickshare-delete is destructive, and enabling Deep Indexing costs 10 credits/page and is rate-limited. It does not cover auth requirements or confirmation behavior, but the added behavioral context is solid.

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 and dense with useful information: it lists the write operations, flags destructive actions, names the read alternative, points to action='describe', and notes credit/rate-limit behavior. Every sentence earns its place with no filler.

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

Completeness4/5

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

For a complex 28-parameter action-based tool with no output schema, the description covers the main operation categories, destructive scope, read alternative, self-describe mechanism, and cost/rate-limit behavior. It is nearly complete, though it leaves permission and confirmation details to the schema.

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 28 parameters thoroughly. The description mentions action='describe' and the Deep Indexing credit/rate-limit behavior, but it does not add parameter-level syntax or meaning beyond what the schema provides.

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

Purpose5/5

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

The description names the resource ('Fastio workspaces') and clearly frames the tool as the write/mutation surface, listing specific operations such as update, archive/unarchive, delete, import-share, and note management. It explicitly distinguishes itself from the sibling read tool by stating 'Reads are on `workspace`.'

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 primary usage context ('write') and names the read alternative (`workspace`). It also points to action='describe' for full action/param reference, but it does not explain when to choose each action or list prerequisites for actions like delete or quickshare-delete.

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. 2 tool updates
    • Changedai_manage1 field changed
      • addedInput schema / properties / effort
        Added value: +{
        +  "description": "Reply effort for THIS message: 'normal' (default) or 'high' (deeper reasoning, no per-reply step limit; slower, more credits). Per message — resend it on each message that should use it.",
        +  "enum": [
        +    "normal",
        +    "high"
        +  ],
        +  "type": "string"
        +}
    • Changeduser_manage1 field changed
      • removedInput schema / properties / email_address
        Removed value: -{
        -  "description": "Email address.",
        -  "type": "string"
        -}
  2. 14 tool updates
    • Changedai_manage2 fields changed
      • addedInput schema / properties / subject_files
        Added value: +{
        +  "description": "Files pinned as the turn's focus subjects (sent as `subjects`): comma-separated nodeId:versionId, same format and limits as files_attach.",
        +  "type": "string"
        +}
      • addedInput schema / properties / subject_folders
        Added value: +{
        +  "description": "Folders pinned as the turn's focus subjects (sent as `subjects`): comma-separated folder nodeIds, same format as folders_attach.",
        +  "type": "string"
        +}
    • Changedcomment3 fields changed
      • changedInput schema / properties / action / enum
        Previous value: -[
        -  "describe",
        -  "list",
        -  "list-all",
        -  "details"
        -]New value: +[
        +  "describe",
        +  "list",
        +  "list-all",
        +  "details",
        +  "attachment-list"
        +]
      • changedInput schema / properties / profile_id / description
        Previous value: -"Workspace or share ID (pair with profile_type)."New value: +"Workspace, share or File Share ID (pair with profile_type)."
      • changedInput schema / properties / profile_type / enum
        Previous value: -[
        -  "workspace",
        -  "share"
        -]New value: +[
        +  "workspace",
        +  "share",
        +  "fileshare"
        +]
    • Changedcomment_manage6 fields changed
      • changedInput schema / properties / action / enum
        Previous value: -[
        -  "describe",
        -  "add",
        -  "edit",
        -  "delete",
        -  "bulk-delete",
        -  "reaction-add",
        -  "reaction-remove"
        -]New value: +[
        +  "describe",
        +  "add",
        +  "edit",
        +  "delete",
        +  "bulk-delete",
        +  "reaction-add",
        +  "reaction-remove",
        +  "attachment-add",
        +  "attachment-detach"
        +]
      • changedInput schema / properties / profile_id / description
        Previous value: -"Workspace or share ID (pair with profile_type)."New value: +"Workspace, share or File Share ID (pair with profile_type)."
      • changedInput schema / properties / profile_type / enum
        Previous value: -[
        -  "workspace",
        -  "share"
        -]New value: +[
        +  "workspace",
        +  "share",
        +  "fileshare"
        +]
      • changedInput schema / properties / properties / description
        Previous value: -"edit only: JSON object merged into the comment's properties (server-managed keys ignored)."New value: +"JSON object of app-defined key-values: stored on add, merged on edit (server-managed keys ignored)."
      • addedInput schema / properties / target_id
        Added value: +{
        +  "description": "Object to attach: node, workspace, share, File Share or envelope ID.",
        +  "minLength": 1,
        +  "type": "string"
        +}
      • addedInput schema / properties / target_ids
        Added value: +{
        +  "description": "Objects to attach (max 25 per comment).",
        +  "items": {
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
    • Changedfileshare_manage1 field changed
      • addedInput schema / properties / comments_enabled
        Added value: +{
        +  "description": "create/update: allow comments on the File Share (create default: off). Always off on anyone_with_link shares.",
        +  "type": "boolean"
        +}
    • Changedmember_manage4 fields changed
      • changedInput schema / properties / force_notification / description
        Previous value: -"Force notify existing user (workspace-only)."New value: +"true: email the membership notification to an added existing user (sent as notification=force)."
      • changedInput schema / properties / invitation_expires / description
        Previous value: -"Invitation expiration ISO 8601 (workspace-only)."New value: +"Email invitation expiration, `YYYY-MM-DD HH:MM:SS UTC`."
      • changedInput schema / properties / notifications / description
        Previous value: -"Notification preference (workspace)."New value: +"Alias for notify_options."
      • changedInput schema / properties / notify_options / description
        Previous value: -"Notification preference (share)."New value: +"Member notification preference: 'Do not notify me', 'Notify me in app', 'Notify me in app and via email' or 'Notify me via app, email and text message'."
    • Changedmetadata6 fields changed
      • changedInput schema / properties / action / enum
        Previous value: -[
        -  "describe",
        -  "eligible",
        -  "fields-list",
        -  "search",
        -  "compound-search"
        -]New value: +[
        +  "describe",
        +  "eligible",
        +  "fields-list",
        +  "search",
        +  "compound-search",
        +  "fields-merge-candidates",
        +  "filters-list",
        +  "filter-details",
        +  "filter-nodes"
        +]
      • addedInput schema / properties / filter_id
        Added value: +{
        +  "description": "Saved filter ID (from filters-list).",
        +  "minLength": 1,
        +  "type": "string"
        +}
      • changedInput schema / properties / offset / description
        Previous value: -"search: results to skip (default 0). offset+limit must stay <= 10000."New value: +"search: results to skip (offset+limit <= 10000). fields-merge-candidates: the prior next_offset."
      • addedInput schema / properties / sort_dir
        Added value: +{
        +  "description": "filter-nodes: sort direction. Default desc for updated, asc otherwise.",
        +  "enum": [
        +    "asc",
        +    "desc"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / sort_field
        Added value: +{
        +  "description": "filter-nodes: order by a file column. Not with sort_metadata_field.",
        +  "enum": [
        +    "name",
        +    "size",
        +    "updated"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / sort_metadata_field
        Added value: +{
        +  "description": "filter-nodes: order by this metadata field's value. Not with sort_field.",
        +  "minLength": 1,
        +  "type": "string"
        +}
    • Changedmetadata_manage6 fields changed
      • changedInput schema / properties / action / enum
        Previous value: -[
        -  "describe",
        -  "fields-merge"
        -]New value: +[
        +  "describe",
        +  "fields-merge",
        +  "filter-create",
        +  "filter-update",
        +  "filter-delete"
        +]
      • addedInput schema / properties / description
        Added value: +{
        +  "description": "Saved filter description, max 255 characters.",
        +  "type": "string"
        +}
      • addedInput schema / properties / filter_id
        Added value: +{
        +  "description": "Saved filter ID (from filters-list).",
        +  "minLength": 1,
        +  "type": "string"
        +}
      • addedInput schema / properties / name
        Added value: +{
        +  "description": "Saved filter name, 1-100 characters, unique per workspace.",
        +  "type": "string"
        +}
      • addedInput schema / properties / predicate
        Added value: +{
        +  "description": "Saved filter predicate: JSON array of up to 5 AND-ed {field,operator,value} clauses; [] matches all.",
        +  "type": "string"
        +}
      • addedInput schema / properties / projection
        Added value: +{
        +  "description": "Saved filter projection (JSON object or array, stored as sent); only {\"sort\":{field,dir}} is applied.",
        +  "type": "string"
        +}
    • Changedorg_manage1 field changed
      • addedInput schema / properties / metadata_extraction
        Added value: +{
        +  "description": "Automatic metadata extraction for new uploads (default \"true\"); effective only while Deep Indexing is on.",
        +  "enum": [
        +    "true",
        +    "false"
        +  ],
        +  "type": "string"
        +}
    • Changedshare_manage4 fields changed
      • changedInput schema / properties / custom_name / description
        Previous value: -"Custom share URL name (4-80 chars; Unicode letters, digits, hyphens, underscores). Omit to have one auto-generated."New value: +"Custom share URL name (4-80 chars; Unicode letters, digits, hyphens, underscores). On create, omit it to have one auto-generated."
      • addedInput schema / properties / custom_url
        Added value: +{
        +  "description": "Custom URL name for the share link (10-100 chars), distinct from custom_name. update: \"null\" clears it.",
        +  "maxLength": 100,
        +  "type": "string"
        +}
      • changedInput schema / properties / deep_indexing / description
        Previous value: -"Enable Deep Indexing (RAG indexing); costs credits (10/page). Default false; forced false on workspace_folder shares. Responses report it as `intelligence`."New value: +"Deep Indexing (RAG indexing); costs credits (10/page). create: default false; always false on workspace_folder shares. Responses report it as `intelligence`."
      • addedInput schema / properties / external_invites
        Added value: +{
        +  "description": "update: this share's external-invite switch; only tightens the organization's policy and cannot be reset to inherit.",
        +  "enum": [
        +    "allowed",
        +    "denied"
        +  ],
        +  "type": "string"
        +}
    • Changedstorage_manage1 field changed
      • addedInput schema / properties / if_version_id
        Added value: +{
        +  "description": "rename: compare-and-swap base, the node's `version` from your last read. A stale base is rejected with a 409 naming the current version; nothing changes.",
        +  "minLength": 1,
        +  "type": "string"
        +}
    • Changedupload_manage1 field changed
      • changedInput schema / properties / max_size / description
        Previous value: -"Stream-body byte ceiling — aborts mid-transfer if exceeded. An overestimate is safe; omitted, the plan limit applies. Stream sessions only."New value: +"Stream-body byte ceiling — aborts mid-transfer if exceeded. An overestimate is safe; omitted, the organization's file-size limit applies. Stream sessions only."
    • Changeduser_manage2 fields changed
      • changedInput schema / properties / action / enum
        Previous value: -[
        -  "describe",
        -  "update",
        -  "close",
        -  "accept-all-invitations",
        -  "asset-upload",
        -  "asset-delete",
        -  "report-bug"
        -]New value: +[
        +  "describe",
        +  "update",
        +  "close",
        +  "accept-all-invitations",
        +  "invitation-accept",
        +  "invitation-decline",
        +  "asset-upload",
        +  "asset-delete",
        +  "report-bug"
        +]
      • addedInput schema / properties / invitation_id
        Added value: +{
        +  "description": "Invitation opaque ID or key.",
        +  "type": "string"
        +}
    • Changedworkspace1 field changed
      • addedInput schema / properties / share_id
        Added value: +{
        +  "description": "Share ID or custom name: the share to import, or (read-note) the share holding the note.",
        +  "type": "string"
        +}
    • Changedworkspace_manage8 fields changed
      • addedInput schema / properties / cloud_sync_mode
        Added value: +{
        +  "description": "Cloud sync direction ceiling: read (inbound only) or read_write. Not an on/off switch.",
        +  "enum": [
        +    "read",
        +    "read_write"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / external_invites
        Added value: +{
        +  "description": "This workspace's external-invite switch; only tightens the organization's policy and cannot be reset to inherit.",
        +  "enum": [
        +    "allowed",
        +    "denied"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / if_version_id
        Added value: +{
        +  "description": "Compare-and-swap base for update-note: the note's `version` from the read your edit was based on (read-note returns it as note.version). If the note has changed since, the update is rejected with a 409 version conflict naming the current version id, and nothing is changed. Omit for last-write-wins.",
        +  "minLength": 1,
        +  "type": "string"
        +}
      • addedInput schema / properties / metadata_extraction
        Added value: +{
        +  "description": "Automatic metadata extraction for new uploads; effective only while Deep Indexing is on. Off deletes nothing.",
        +  "enum": [
        +    "true",
        +    "false"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / name / description
        Previous value: -"Name. Send \"null\" to clear on update."New value: +"Display name (2-100 chars on update). Cannot be cleared."
      • changedInput schema / properties / share_id / description
        Previous value: -"19-digit numeric ID or custom name of share to import."New value: +"Share ID or custom name: the share to import, or (read-note) the share holding the note."
      • addedInput schema / properties / sharing_file_links
        Added value: +{
        +  "description": "As sharing_shares, for single-file share links.",
        +  "enum": [
        +    "true",
        +    "false"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / sharing_shares
        Added value: +{
        +  "description": "Whether new shares can be created here. Off blocks new ones only; the organization's setting is a ceiling.",
        +  "enum": [
        +    "true",
        +    "false"
        +  ],
        +  "type": "string"
        +}
  3. 1 tool update
    • Changedupload_manage5 fields changed
      • addedInput schema / properties / file_crc32c
        Added value: +{
        +  "description": "chunk only: CRC-32C of the WHOLE file (8 lowercase hex), checked once all bytes arrive; combine each chunk's returned `crc32c` in order. Send on the first send of the chunk whose CRC completes last (sequential: the last chunk) and its retries; never move it. A different value: 10779; after every byte arrived: 10507.",
        +  "type": "string"
        +}
      • changedInput schema / properties / files / items / properties / hash_algo / enum
        Previous value: -[
        -  "md5",
        -  "sha1",
        -  "sha256",
        -  "sha384"
        -]New value: +[
        +  "md5",
        +  "sha1",
        +  "sha256",
        +  "sha384",
        +  "crc32c"
        +]
      • changedInput schema / properties / hash / description
        Previous value: -"File hash for verification."New value: +"Hash of the bytes this call sends (a chunk, or the whole stream body). Pair with hash_algo. If both are omitted, the CRC-32C of the bytes is sent."
      • changedInput schema / properties / hash_algo / description
        Previous value: -"Hash algorithm (e.g. 'sha256')."New value: +"md5, sha1, sha256, sha384 or crc32c (8 lowercase hex). Pair with hash."
      • changedInput schema / properties / include_hash / description
        Previous value: -"Compute SHA-256 client-side for entries without a hash (default true when omitted)."New value: +"Compute a CRC-32C client-side for entries without a hash (default true when omitted)."
  4. 5 tool updates
    • Changedai_manage1 field changed
      • changedInput schema / properties / files_attach / description
        Previous value: -"Files for the AI to read: comma-separated nodeId:versionId (versionId optional = current). Works without intelligence; an unreadable node errors."New value: +"Files for the AI to read: comma-separated nodeId:versionId (versionId optional = current). Works without Deep Indexing; an unreadable node errors."
    • Changedorg_manage2 fields changed
      • addedInput schema / properties / deep_indexing
        Added value: +{
        +  "description": "Deep Indexing (RAG indexing), 10 credits per page. Default \"false\". Responses report it as `intelligence`.",
        +  "type": "string"
        +}
      • removedInput schema / properties / intelligence
        Removed value: -{
        -  "description": "RAG indexing, 10 credits per page. Default \"false\".",
        -  "type": "string"
        -}
    • Changedshare_manage2 fields changed
      • addedInput schema / properties / deep_indexing
        Added value: +{
        +  "description": "Enable Deep Indexing (RAG indexing); costs credits (10/page). Default false; forced false on workspace_folder shares. Responses report it as `intelligence`.",
        +  "type": "boolean"
        +}
      • removedInput schema / properties / intelligence
        Removed value: -{
        -  "description": "Enable RAG indexing; costs credits (10/page). Default false; forced false on workspace_folder shares.",
        -  "type": "boolean"
        -}
    • Changedstorage1 field changed
      • changedInput schema / properties / query / description
        Previous value: -"Search query — keyword, or keyword + semantic when intelligence is on."New value: +"Search query — keyword, or keyword + semantic when Deep Indexing is on."
    • Changedworkspace_manage2 fields changed
      • addedInput schema / properties / deep_indexing
        Added value: +{
        +  "description": "Toggle Deep Indexing (AI indexing of file content). Enabling costs credits (10/page) to index existing files. Disable flushes embeddings; re-enable re-indexes. Rate-limited. Responses report it as `intelligence`.",
        +  "enum": [
        +    "true",
        +    "false"
        +  ],
        +  "type": "string"
        +}
      • removedInput schema / properties / intelligence
        Removed value: -{
        -  "description": "Toggle AI features. Enabling costs credits (10/page) to index existing files. Disable flushes embeddings; re-enable re-indexes. Rate-limited.",
        -  "enum": [
        -    "true",
        -    "false"
        -  ],
        -  "type": "string"
        -}
  5. 35 tool updates
    • Changedai17 fields changed
      • changedInput schema / properties / action / enum
        Previous value: -[
        -  "describe",
        -  "ask",
        -  "status",
        -  "chat-create",
        -  "chat-list",
        -  "chat-details",
        -  "chat-update",
        -  "chat-delete",
        -  "chat-publish",
        -  "chat-cancel",
        -  "message-send",
        -  "message-list",
        -  "message-details",
        -  "message-read",
        -  "share-generate",
        -  "transactions"
        -]New value: +[
        +  "describe",
        +  "chat-list",
        +  "chat-details",
        +  "message-list",
        +  "message-details",
        +  "message-read",
        +  "transactions"
        +]
      • changedInput schema / properties / detail / description
        Previous value: -"Per-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."New value: +"Verbosity for chat-list/chat-details/message-list/message-details (best-effort server-side). Defaults: terse for lists, full for details. Levels: see describe."
      • removedInput schema / properties / files
        Removed value: -{
        -  "description": "File opaque IDs (max 25, share share-generate).",
        -  "items": {
        -    "type": "string"
        -  },
        -  "type": "array"
        -}
      • removedInput schema / properties / files_attach
        Removed value: -{
        -  "description": "Attach 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.",
        -  "type": "string"
        -}
      • removedInput schema / properties / folders_attach
        Removed value: -{
        -  "description": "Attach workspace FOLDERS for the AI to read (comma-separated folder nodeIds; no depth). Denied on restricted-view shares. See describe.",
        -  "type": "string"
        -}
      • changedInput schema / properties / instance_id / description
        Previous value: -"Alias for profile_id (REST/how-to name; profile_id is canonical)."New value: +"Alias for profile_id."
      • changedInput schema / properties / kind / description
        Previous value: -"chat-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'."New value: +"chat-list filter: 'user' (default — user-driven chats), 'agent' (agentic chats), or 'all'."
      • changedInput schema / properties / limit / description
        Previous value: -"chat-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."New value: +"chat-list/message-list page size. Forwarded best-effort: these endpoints document no paging and may return all rows."
      • removedInput schema / properties / name
        Removed value: -{
        -  "description": "New chat name.",
        -  "type": "string"
        -}
      • removedInput schema / properties / node_ids
        Removed value: -{
        -  "description": "File node IDs (max 25, workspace share-generate).",
        -  "items": {
        -    "type": "string"
        -  },
        -  "type": "array"
        -}
      • changedInput schema / properties / offset / description
        Previous value: -"chat-list/message-list pagination offset — see the limit caveat (no documented paging on these endpoints; forwarded best-effort)."New value: +"chat-list/message-list offset (best-effort, see limit)."
      • removedInput schema / properties / privacy
        Removed value: -{
        -  "description": "Chat privacy (default: private). Workspace chat-create only — share chats are always private.",
        -  "enum": [
        -    "private",
        -    "public"
        -  ],
        -  "type": "string"
        -}
      • changedInput schema / properties / profile_id / description
        Previous value: -"Polymorphic 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."New value: +"19-digit workspace or share ID (pair with profile_type). Aliases: workspace_id / share_id (imply the type), context_id, instance_id."
      • removedInput schema / properties / query_text
        Removed value: -{
        -  "description": "Question or prompt (max 32,000 chars).",
        -  "maxLength": 32000,
        -  "type": "string"
        -}
      • changedInput schema / properties / share_id / description
        Previous value: -"Alias for profile_id when the profile is a share — implies profile_type=share (so profile_type may be omitted)."New value: +"profile_id alias; implies profile_type=share."
      • changedInput schema / properties / wait / description
        Previous value: -"message-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."New value: +"message-read only. Default true: bounded-wait for completion (up to ~24s on a workspace via the activity long-poll). false: a single-shot status probe (one details fetch, ~1 round-trip), within strict ~30s client timeouts."
      • changedInput schema / properties / workspace_id / description
        Previous value: -"Alias for profile_id when the profile is a workspace — implies profile_type=workspace (so profile_type may be omitted)."New value: +"profile_id alias; implies profile_type=workspace."
    • Addedai_manage
    • Changedasset7 fields changed
      • changedInput schema / properties / action / enum
        Previous value: -[
        -  "describe",
        -  "upload",
        -  "delete",
        -  "types",
        -  "list",
        -  "read"
        -]New value: +[
        +  "describe",
        +  "types",
        +  "list",
        +  "read"
        +]
      • removedInput schema / properties / content
        Removed value: -{
        -  "description": "Plain text content (e.g. SVG).",
        -  "type": "string"
        -}
      • removedInput schema / properties / content_type
        Removed value: -{
        -  "description": "MIME type (default application/octet-stream).",
        -  "type": "string"
        -}
      • changedInput schema / properties / entity_id / description
        Previous value: -"Opaque ID of a specific object (file, comment, etc.). Pair with entity_type to disambiguate. Entity ID (optional for user)."New value: +"Entity ID (optional for user)."
      • removedInput schema / properties / file_base64
        Removed value: -{
        -  "description": "Base64-encoded binary content.",
        -  "type": "string"
        -}
      • removedInput schema / properties / file_name
        Removed value: -{
        -  "description": "Original file name.",
        -  "type": "string"
        -}
      • removedInput schema / properties / metadata
        Removed value: -{
        -  "description": "Additional metadata as JSON array string.",
        -  "type": "string"
        -}
    • Addedasset_manage
    • Changedauth22 fields changed
      • removedInput schema / properties / account_settings
        Removed value: -{
        -  "description": "pkce-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.",
        -  "type": "boolean"
        -}
      • changedInput schema / properties / action / enum
        Previous value: -[
        -  "describe",
        -  "signin",
        -  "signout",
        -  "signup",
        -  "check",
        -  "session",
        -  "status",
        -  "scopes",
        -  "set-api-key",
        -  "email-check",
        -  "email-verify",
        -  "password-reset-request",
        -  "password-reset",
        -  "2fa-verify",
        -  "2fa-status",
        -  "2fa-enable",
        -  "2fa-disable",
        -  "2fa-send",
        -  "2fa-verify-setup",
        -  "pkce-login",
        -  "pkce-complete",
        -  "api-key-create",
        -  "api-key-list",
        -  "api-key-get",
        -  "api-key-update",
        -  "api-key-delete",
        -  "oauth-list",
        -  "oauth-details",
        -  "oauth-update",
        -  "oauth-revoke",
        -  "oauth-revoke-all"
        -]New value: +[
        +  "describe",
        +  "check",
        +  "session",
        +  "status",
        +  "scopes",
        +  "email-check",
        +  "2fa-status",
        +  "api-key-list",
        +  "api-key-get",
        +  "oauth-list",
        +  "oauth-details"
        +]
      • removedInput schema / properties / admin
        Removed value: -{
        -  "description": "pkce-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.",
        -  "type": "boolean"
        -}
      • removedInput schema / properties / agent_name
        Removed value: -{
        -  "description": "Agent 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.",
        -  "type": "string"
        -}
      • removedInput schema / properties / api_key
        Removed value: -{
        -  "description": "Fastio API key.",
        -  "type": "string"
        -}
      • removedInput schema / properties / channel
        Removed value: -{
        -  "description": "2FA channel.",
        -  "enum": [
        -    "sms",
        -    "totp",
        -    "whatsapp",
        -    "call"
        -  ],
        -  "type": "string"
        -}
      • removedInput schema / properties / code
        Removed value: -{
        -  "description": "Verification 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).",
        -  "type": "string"
        -}
      • removedInput schema / properties / current_session_id
        Removed value: -{
        -  "description": "Current session ID for exclusion.",
        -  "type": "string"
        -}
      • changedInput schema / properties / describe_action / description
        Previous value: -"When action='describe', narrow the output to ONE action's full params/notes (e.g. 'status'). Omit to get the compact action index."New value: +"With action='describe': return one action's params and notes instead of the action index."
      • removedInput schema / properties / email_token
        Removed value: -{
        -  "description": "Email verification code.",
        -  "type": "string"
        -}
      • removedInput schema / properties / exclude_current
        Removed value: -{
        -  "description": "Skip current session in revoke-all.",
        -  "type": "boolean"
        -}
      • removedInput schema / properties / expires
        Removed value: -{
        -  "description": "Token lifetime in seconds.",
        -  "maximum": 9007199254740991,
        -  "minimum": 1,
        -  "type": "integer"
        -}
      • removedInput schema / properties / first_name
        Removed value: -{
        -  "description": "Given name.",
        -  "type": "string"
        -}
      • removedInput schema / properties / key_expires
        Removed value: -{
        -  "description": "ISO 8601 expiration datetime.",
        -  "type": "string"
        -}
      • removedInput schema / properties / last_name
        Removed value: -{
        -  "description": "Family name.",
        -  "type": "string"
        -}
      • removedInput schema / properties / name
        Removed value: -{
        -  "description": "API key label.",
        -  "type": "string"
        -}
      • removedInput schema / properties / password
        Removed value: -{
        -  "description": "Account password.",
        -  "type": "string"
        -}
      • removedInput schema / properties / password1
        Removed value: -{
        -  "description": "New password.",
        -  "type": "string"
        -}
      • removedInput schema / properties / password2
        Removed value: -{
        -  "description": "New password confirmation.",
        -  "type": "string"
        -}
      • removedInput schema / properties / scope_type
        Removed value: -{
        -  "description": "PKCE scope type. Default 'user' (full access).",
        -  "enum": [
        -    "user",
        -    "org",
        -    "workspace",
        -    "all_orgs",
        -    "all_workspaces",
        -    "all_shares"
        -  ],
        -  "type": "string"
        -}
      • removedInput schema / properties / scopes
        Removed value: -{
        -  "description": "Scope 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.",
        -  "items": {
        -    "type": "string"
        -  },
        -  "type": "array"
        -}
      • removedInput schema / properties / token
        Removed value: -{
        -  "description": "2FA / 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).",
        -  "type": "string"
        -}
    • Addedauth_manage
    • Changedcomment14 fields changed
      • changedInput schema / properties / action / enum
        Previous value: -[
        -  "describe",
        -  "list",
        -  "list-all",
        -  "add",
        -  "edit",
        -  "delete",
        -  "bulk-delete",
        -  "details",
        -  "reaction-add",
        -  "reaction-remove"
        -]New value: +[
        +  "describe",
        +  "list",
        +  "list-all",
        +  "details"
        +]
      • removedInput schema / properties / comment_ids
        Removed value: -{
        -  "description": "Array of comment opaque IDs.",
        -  "items": {
        -    "type": "string"
        -  },
        -  "type": "array"
        -}
      • changedInput schema / properties / detail / description
        Previous value: -"Per-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."New value: +"terse|standard|full (best-effort). Defaults: terse for list/list-all, full for details."
      • changedInput schema / properties / display_limit / description
        Previous value: -"list-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."New value: +"list-all only: comments to return (default 10, max 200), trimmed after fetch."
      • removedInput schema / properties / emoji
        Removed value: -{
        -  "description": "Single emoji character.",
        -  "type": "string"
        -}
      • changedInput schema / properties / node_id / description
        Previous value: -"Storage tree node opaque ID. Both files and folders are nodes — use this name regardless of which."New value: +"File node opaque ID."
      • removedInput schema / properties / parent_comment_id
        Removed value: -{
        -  "description": "Parent comment ID for reply (single-level threading).",
        -  "type": "string"
        -}
      • changedInput schema / properties / profile_id / description
        Previous value: -"Polymorphic 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."New value: +"Workspace or share ID (pair with profile_type)."
      • removedInput schema / properties / properties
        Removed value: -{
        -  "description": "Arbitrary 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.",
        -  "type": "string"
        -}
      • removedInput schema / properties / reference
        Removed value: -{
        -  "description": "Anchor: image region, A/V timestamp, PDF page, or text selection.",
        -  "properties": {
        -    "end_offset": {
        -      "description": "Selection end char offset.",
        -      "maximum": 9007199254740991,
        -      "minimum": 0,
        -      "type": "integer"
        -    },
        -    "exact": {
        -      "description": "Verbatim selected text (max 500 characters).",
        -      "maxLength": 1000,
        -      "type": "string"
        -    },
        -    "page": {
        -      "description": "PDF page (1-based).",
        -      "maximum": 9007199254740991,
        -      "minimum": 1,
        -      "type": "integer"
        -    },
        -    "prefix": {
        -      "description": "~30-50 chars before selection (max 100 characters).",
        -      "maxLength": 200,
        -      "type": "string"
        -    },
        -    "region": {
        -      "description": "Spatial region for image/video/PDF — CORNERS on a 0-100 PERCENT scale: {x1,y1,x2,y2}, not {x,y,width,height} and not 0-1 normalized.",
        -      "properties": {
        -        "x1": {
        -          "description": "Left edge, 0-100 PERCENT.",
        -          "maximum": 100,
        -          "minimum": 0,
        -          "type": "number"
        -        },
        -        "x2": {
        -          "description": "Right edge, 0-100 PERCENT (must be > x1).",
        -          "maximum": 100,
        -          "minimum": 0,
        -          "type": "number"
        -        },
        -        "y1": {
        -          "description": "Top edge, 0-100 PERCENT.",
        -          "maximum": 100,
        -          "minimum": 0,
        -          "type": "number"
        -        },
        -        "y2": {
        -          "description": "Bottom edge, 0-100 PERCENT (must be > y1).",
        -          "maximum": 100,
        -          "minimum": 0,
        -          "type": "number"
        -        }
        -      },
        -      "required": [
        -        "x1",
        -        "y1",
        -        "x2",
        -        "y2"
        -      ],
        -      "type": "object"
        -    },
        -    "start_offset": {
        -      "description": "Selection start char offset.",
        -      "maximum": 9007199254740991,
        -      "minimum": 0,
        -      "type": "integer"
        -    },
        -    "suffix": {
        -      "description": "~30-50 chars after selection (max 100 characters).",
        -      "maxLength": 200,
        -      "type": "string"
        -    },
        -    "text_snippet": {
        -      "description": "Selected PDF text snippet.",
        -      "type": "string"
        -    },
        -    "timestamp": {
        -      "description": "Seconds (video/audio).",
        -      "minimum": 0,
        -      "type": "number"
        -    },
        -    "type": {
        -      "description": "Anchor content type. 'document' covers PDF and text; 'text' aliases 'document'.",
        -      "enum": [
        -        "image",
        -        "video",
        -        "audio",
        -        "pdf",
        -        "document",
        -        "text",
        -        "general"
        -      ],
        -      "type": "string"
        -    }
        -  },
        -  "type": "object"
        -}
      • changedInput schema / properties / share_id / description
        Previous value: -"Alias for profile_id when the profile is a share — implies profile_type=share (so profile_type may be omitted)."New value: +"Alias for profile_id; implies profile_type=share."
      • changedInput schema / properties / sort / description
        Previous value: -"Sort: 'created' or '-created' (default newest first)."New value: +"Default -created (newest first)."
      • removedInput schema / properties / text
        Removed value: -{
        -  "description": "Max 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.",
        -  "type": "string"
        -}
      • changedInput schema / properties / workspace_id / description
        Previous value: -"Alias for profile_id when the profile is a workspace — implies profile_type=workspace (so profile_type may be omitted)."New value: +"Alias for profile_id; implies profile_type=workspace."
    • Addedcomment_manage
    • Changedevent11 fields changed
      • changedInput schema / properties / action / enum
        Previous value: -[
        -  "describe",
        -  "search",
        -  "summarize",
        -  "details",
        -  "acknowledge",
        -  "activity-list",
        -  "activity-poll",
        -  "dashboard-list",
        -  "dashboard-dismiss",
        -  "dashboard-undismiss",
        -  "changes"
        -]New value: +[
        +  "describe",
        +  "search",
        +  "details",
        +  "activity-list",
        +  "activity-poll",
        +  "dashboard-list",
        +  "changes"
        +]
      • removedInput schema / properties / card_key
        Removed value: -{
        -  "description": "Dashboard 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.",
        -  "minLength": 1,
        -  "type": "string"
        -}
      • changedInput schema / properties / category / description
        Previous value: -"Event 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."New value: +"Event category; valid values are in describe. `node` is the AI/RAG pipeline, not file operations; file activity is under both `workspace` and `share`. Cloud import is category=\"import\" (subcategory=\"cloud_import\" for graft traffic only); `cloudsync` is an activity field on a different taxonomy and matches nothing here."
      • changedInput schema / properties / detail / description
        Previous value: -"Per-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."New value: +"terse|standard|full. Defaults: terse for search/activity-list/activity-poll, standard for summarize, full for details. Only search and details honor it."
      • changedInput schema / properties / entity_id / description
        Previous value: -"Opaque 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)."New value: +"activity-poll: the workspace, share, or File Share ID to long-poll (a File Share's file_share_* feed reaches WORKSPACE MEMBERS only; recipients get no feed)."
      • changedInput schema / properties / org_id / description
        Previous value: -"Organization profile ID (19-digit). Filter for search/summarize; the org to read for changes."New value: +"Organization profile ID (19-digit). Filter-style scope filter; the org to read for changes."
      • changedInput schema / properties / profile_id / description
        Previous value: -"Polymorphic 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)."New value: +"activity-list: the workspace, share, or File Share ID (pair with profile_type)."
      • removedInput schema / properties / snooze_until
        Removed value: -{
        -  "description": "Optional 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.",
        -  "type": "string"
        -}
      • removedInput schema / properties / user_context
        Removed value: -{
        -  "description": "Focus guidance for AI summary, e.g. \"Focus on uploads\".",
        -  "maxLength": 64,
        -  "type": "string"
        -}
      • changedInput schema / properties / user_id / description
        Previous value: -"Filter 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."New value: +"Filters the event's stored subject column, which the platform derives instead of taking it from the emitter, so it can name an arbitrary related user rather than the person the event concerns. The actor is calling_user_id. The search note covers both."
      • changedInput schema / properties / workspace_id / description
        Previous value: -"Workspace 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."New value: +"Filter-style scope filter by workspace ID. dashboard-*: the workspace."
    • Addedevent_manage
    • Changedfileshare14 fields changed
      • removedInput schema / properties / access_option
        Removed value: -{
        -  "description": "Access 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.",
        -  "enum": [
        -    "anyone_with_link",
        -    "any_registered",
        -    "named_people"
        -  ],
        -  "type": "string"
        -}
      • changedInput schema / properties / action / enum
        Previous value: -[
        -  "describe",
        -  "create",
        -  "list",
        -  "details",
        -  "update",
        -  "delete",
        -  "grant-list",
        -  "grant-add",
        -  "grant-revoke",
        -  "download-url",
        -  "preview-url",
        -  "versions-list",
        -  "version-download-url"
        -]New value: +[
        +  "describe",
        +  "list",
        +  "details",
        +  "grant-list",
        +  "download-url",
        +  "preview-url",
        +  "versions-list",
        +  "version-download-url"
        +]
      • removedInput schema / properties / capability
        Removed value: -{
        -  "description": "grant-add: the capability to grant — view | download | edit (ordered). `edit` allows content write-back. Required for grant-add.",
        -  "enum": [
        -    "view",
        -    "download",
        -    "edit"
        -  ],
        -  "type": "string"
        -}
      • removedInput schema / properties / email
        Removed value: -{
        -  "description": "grant-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).",
        -  "type": "string"
        -}
      • removedInput schema / properties / expires
        Removed value: -{
        -  "description": "create/update: relative expiry in SECONDS from now (1..3155760000). Mutually exclusive with expires_at.",
        -  "maximum": 3155760000,
        -  "minimum": 1,
        -  "type": "integer"
        -}
      • removedInput schema / properties / expires_at
        Removed value: -{
        -  "description": "create/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.",
        -  "type": "string"
        -}
      • changedInput schema / properties / fileshare_id / description
        Previous value: -"File Share ID (19-digit numeric). Required for every action except create / list."New value: +"File Share ID."
      • removedInput schema / properties / node
        Removed value: -{
        -  "description": "create: 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.",
        -  "type": "string"
        -}
      • changedInput schema / properties / password / description
        Previous value: -"create/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."New value: +"Recipient password for a gated share, sent only as the x-ve-password header (never in a URL or log)."
      • changedInput schema / properties / preview_type / description
        Previous value: -"preview-url: the preview variant (e.g. 'image', 'pdf', 'video'). Multi-file previews 307-redirect to a token-bearing sub-file URL."New value: +"preview-url: the preview variant (e.g. 'image', 'pdf', 'video')."
      • removedInput schema / properties / title
        Removed value: -{
        -  "description": "Human-readable share title. create / update.",
        -  "type": "string"
        -}
      • removedInput schema / properties / user
        Removed value: -{
        -  "description": "grant-add / grant-revoke: the grantee's numeric user ID (19-digit). EXACTLY ONE of user / email.",
        -  "type": "string"
        -}
      • changedInput schema / properties / version_id / description
        Previous value: -"version-download-url: the specific version OpaqueId to download (from versions-list / details)."New value: +"version-download-url: the version ID (from versions-list)."
      • changedInput schema / properties / workspace_id / description
        Previous value: -"Parent workspace ID (19-digit or custom name). create / list — the management authz anchor."New value: +"Parent workspace ID."
    • Addedfileshare_manage
    • Changedfind2 fields changed
      • changedInput schema / properties / name_match / description
        Previous value: -"auto (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."New value: +"auto (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. No pre-escaping needed. 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."
      • changedInput schema / properties / search_in / description
        Previous value: -"filename | 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."New value: +"filename | content | both (DEFAULT). filename = name only, find-style. content = the AI's summary + semantic, NOT grep. Sending it changes the response shape (adds a search_metadata block); omitting it reproduces today's behavior byte-for-byte. filename pairs with name_match."
    • Changedintent9 fields changed
      • changedInput schema / properties / action / enum
        Previous value: -[
        -  "describe",
        -  "allocate",
        -  "browse",
        -  "fill",
        -  "expand",
        -  "release"
        -]New value: +[
        +  "describe",
        +  "browse",
        +  "expand"
        +]
      • addedInput schema / properties / describe_action
        Added value: +{
        +  "description": "With action='describe': return one action's params and notes instead of the action index.",
        +  "type": "string"
        +}
      • removedInput schema / properties / intent
        Removed value: -{
        -  "description": "What KIND of work this is — closed vocabulary, server-validated. Optional on allocate and fill.",
        -  "enum": [
        -    "edit",
        -    "read",
        -    "upload",
        -    "move",
        -    "delete",
        -    "analyze",
        -    "organize"
        -  ],
        -  "type": "string"
        -}
      • removedInput schema / properties / intent_id
        Removed value: -{
        -  "description": "Intent ID from allocate, or from a browse/expand row. Pass it back EXACTLY as received — do not reformat it.",
        -  "minLength": 1,
        -  "type": "string"
        -}
      • removedInput schema / properties / message
        Removed value: -{
        -  "description": "fill only: long-form detail, max 8192 characters. Absent from browse rows — read it with expand.",
        -  "type": "string"
        -}
      • removedInput schema / properties / node_id
        Removed value: -{
        -  "description": "allocate only: scope the declaration to one node. Omit for a workspace-wide intent. Part of the slot key.",
        -  "minLength": 1,
        -  "type": "string"
        -}
      • removedInput schema / properties / topic
        Removed value: -{
        -  "description": "fill only: one-line label, max 256 characters. No newlines or tabs. This is what browse shows.",
        -  "type": "string"
        -}
      • removedInput schema / properties / version
        Removed value: -{
        -  "description": "fill only, REQUIRED: the version you last read for this slot. Compare-and-set — a stale or omitted version is refused with 409.",
        -  "maximum": 9007199254740991,
        -  "minimum": 0,
        -  "type": "integer"
        -}
      • changedInput schema / properties / workspace_id / description
        Previous value: -"Workspace ID (19-digit numeric). Required for every action except describe. Intents are workspace-only — there is no share variant."New value: +"Workspace ID (19-digit numeric). Intents are workspace-only — there is no share variant."
    • Addedintent_manage
    • Changedinvitation8 fields changed
      • changedInput schema / properties / action / description
        Previous value: -"Operation. Use 'describe' for full action reference."New value: +"Operation; 'describe' lists the actions."
      • changedInput schema / properties / action / enum
        Previous value: -[
        -  "describe",
        -  "list",
        -  "list-by-state",
        -  "update",
        -  "delete"
        -]New value: +[
        +  "describe",
        +  "list",
        +  "list-by-state"
        +]
      • removedInput schema / properties / expires
        Removed value: -{
        -  "description": "Updated expiration — `YYYY-MM-DD HH:MM:SS UTC`. ISO 8601 is NOT documented as accepted.",
        -  "type": "string"
        -}
      • removedInput schema / properties / invitation_id
        Removed value: -{
        -  "description": "Invitation opaque ID or invitee email.",
        -  "type": "string"
        -}
      • removedInput schema / properties / new_state
        Removed value: -{
        -  "description": "New invitation state.",
        -  "enum": [
        -    "pending",
        -    "accepted",
        -    "declined",
        -    "expired",
        -    "revoked"
        -  ],
        -  "type": "string"
        -}
      • removedInput schema / properties / notifications
        Removed value: -{
        -  "description": "Notification preference (workspace).",
        -  "type": "string"
        -}
      • removedInput schema / properties / notify_options
        Removed value: -{
        -  "description": "Notification preference (share).",
        -  "type": "string"
        -}
      • removedInput schema / properties / permissions
        Removed value: -{
        -  "description": "Updated permission level.",
        -  "type": "string"
        -}
    • Addedinvitation_manage
    • Changedmember15 fields changed
      • changedInput schema / properties / action / description
        Previous value: -"Operation. Use 'describe' for full action reference."New value: +"Operation; 'describe' lists the actions."
      • changedInput schema / properties / action / enum
        Previous value: -[
        -  "describe",
        -  "list",
        -  "add",
        -  "remove",
        -  "details",
        -  "update",
        -  "transfer-ownership",
        -  "leave",
        -  "join",
        -  "join-invitation"
        -]New value: +[
        +  "describe",
        +  "list",
        +  "details"
        +]
      • changedInput schema / properties / display_limit / description
        Previous value: -"How 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."New value: +"How many members the list action returns (default 10, max 500), trimmed after the fetch."
      • removedInput schema / properties / email_or_user_id
        Removed value: -{
        -  "description": "Email (to invite) or user ID (to add directly).",
        -  "type": "string"
        -}
      • removedInput schema / properties / expiration
        Removed value: -{
        -  "description": "Alias for expires (share only).",
        -  "type": "string"
        -}
      • removedInput schema / properties / expires
        Removed value: -{
        -  "description": "Membership expiration — `YYYY-MM-DD HH:MM:SS UTC` for BOTH workspace and share. ISO 8601 is NOT accepted (406).",
        -  "type": "string"
        -}
      • removedInput schema / properties / force_notification
        Removed value: -{
        -  "description": "Force notify existing user (workspace-only).",
        -  "type": "boolean"
        -}
      • removedInput schema / properties / invitation_action
        Removed value: -{
        -  "description": "Accept or decline.",
        -  "enum": [
        -    "accept",
        -    "decline"
        -  ],
        -  "type": "string"
        -}
      • removedInput schema / properties / invitation_expires
        Removed value: -{
        -  "description": "Invitation expiration ISO 8601 (workspace-only).",
        -  "type": "string"
        -}
      • removedInput schema / properties / invitation_key
        Removed value: -{
        -  "description": "Invitation key string.",
        -  "type": "string"
        -}
      • removedInput schema / properties / message
        Removed value: -{
        -  "description": "Invitation email message (10-255 chars).",
        -  "maxLength": 255,
        -  "minLength": 10,
        -  "type": "string"
        -}
      • removedInput schema / properties / notifications
        Removed value: -{
        -  "description": "Notification preference (workspace string).",
        -  "type": "string"
        -}
      • removedInput schema / properties / notify_options
        Removed value: -{
        -  "description": "Notification preference (share).",
        -  "type": "string"
        -}
      • removedInput schema / properties / permissions
        Removed value: -{
        -  "description": "Workspace permission level.",
        -  "enum": [
        -    "admin",
        -    "member",
        -    "guest"
        -  ],
        -  "type": "string"
        -}
      • removedInput schema / properties / role
        Removed value: -{
        -  "description": "Share permission level.",
        -  "enum": [
        -    "admin",
        -    "member",
        -    "guest",
        -    "view"
        -  ],
        -  "type": "string"
        -}
    • Addedmember_manage
    • Changedmetadata9 fields changed
      • changedInput schema / properties / action / enum
        Previous value: -[
        -  "describe",
        -  "eligible",
        -  "fields-list",
        -  "search",
        -  "compound-search",
        -  "fields-merge"
        -]New value: +[
        +  "describe",
        +  "eligible",
        +  "fields-list",
        +  "search",
        +  "compound-search"
        +]
      • removedInput schema / properties / confirm
        Removed value: -{
        -  "description": "fields-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.",
        -  "enum": [
        -    "true",
        -    "false"
        -  ],
        -  "type": "string"
        -}
      • changedInput schema / properties / content_query / description
        Previous value: -"compound-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."New value: +"compound-search: free-text query run against INDEXED FILE CONTENT (1-1024 chars). 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."
      • changedInput schema / properties / cursor / description
        Previous value: -"eligible/fields-list: opaque pagination cursor from a prior page's response — echo it back verbatim rather than constructing one. Omit for the first page."New value: +"eligible/fields-list: opaque cursor from the prior page's response, echoed back verbatim. Omit for the first page."
      • changedInput schema / properties / describe_action / description
        Previous value: -"When action='describe', narrow the output to ONE action's full params/notes (e.g. 'fields-list'). Omit to get the compact action index."New value: +"With action='describe': return one action's params and notes instead of the action index."
      • changedInput schema / properties / display_limit / description
        Previous value: -"search: 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)."New value: +"search: how many items to return post-fetch. Default 10, max 100 (page past 100 with offset)."
      • removedInput schema / properties / source_field
        Removed value: -{
        -  "description": "fields-merge: the field NAME that is FOLDED AWAY and stops existing. Names, not ids.",
        -  "minLength": 1,
        -  "type": "string"
        -}
      • removedInput schema / properties / target_field
        Removed value: -{
        -  "description": "fields-merge: the field NAME that SURVIVES and absorbs the source's values.",
        -  "minLength": 1,
        -  "type": "string"
        -}
      • changedInput schema / properties / template_id / description
        Previous value: -"RETIRED — 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`."New value: +"RETIRED (metadata templates were removed): supplying it fails the request on every action. Narrow by field name (fields-list)."
    • Addedmetadata_manage
    • Changedorg46 fields changed
      • removedInput schema / properties / accent_color
        Removed value: -{
        -  "description": "Brand accent color as JSON.",
        -  "type": "string"
        -}
      • changedInput schema / properties / action / description
        Previous value: -"Operation. Use 'describe' for full action reference."New value: +"Operation; 'describe' lists the actions."
      • 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",
        -  "discover-all",
        -  "discover-available",
        -  "discover-check-domain",
        -  "discover-external",
        -  "asset-upload",
        -  "asset-delete",
        -  "asset-types",
        -  "asset-list"
        -]New value: +[
        +  "describe",
        +  "list",
        +  "details",
        +  "public-details",
        +  "limits",
        +  "industry-list",
        +  "list-workspaces",
        +  "list-shares",
        +  "billing-plans",
        +  "billing-details",
        +  "billing-invoices",
        +  "billing-members",
        +  "billing-meters",
        +  "members",
        +  "member-details",
        +  "invitations-list",
        +  "discover-all",
        +  "discover-available",
        +  "discover-check-domain",
        +  "discover-external",
        +  "asset-types",
        +  "asset-list"
        +]
      • removedInput schema / properties / asset_name
        Removed value: -{
        -  "description": "Asset name, e.g. \"logo\", \"banner\".",
        -  "type": "string"
        -}
      • removedInput schema / properties / background_color
        Removed value: -{
        -  "description": "Background color as JSON.",
        -  "type": "string"
        -}
      • removedInput schema / properties / background_color1
        Removed value: -{
        -  "description": "Primary background color as JSON.",
        -  "type": "string"
        -}
      • removedInput schema / properties / background_color2
        Removed value: -{
        -  "description": "Secondary background color as JSON.",
        -  "type": "string"
        -}
      • removedInput schema / properties / background_mode
        Removed value: -{
        -  "description": "Background display mode, e.g. 'stretched', 'fixed'.",
        -  "type": "string"
        -}
      • removedInput schema / properties / billing_email
        Removed value: -{
        -  "description": "Billing contact email.",
        -  "type": "string"
        -}
      • removedInput schema / properties / billing_plan
        Removed value: -{
        -  "description": "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.",
        -  "type": "string"
        -}
      • removedInput schema / properties / confirm
        Removed value: -{
        -  "description": "Confirmation string, must match org domain or ID.",
        -  "type": "string"
        -}
      • removedInput schema / properties / content
        Removed value: -{
        -  "description": "Plain text content. asset-upload: e.g. SVG body.",
        -  "type": "string"
        -}
      • removedInput schema / properties / content_type
        Removed value: -{
        -  "description": "MIME type, e.g. image/png. Defaults to application/octet-stream.",
        -  "type": "string"
        -}
      • changedInput schema / properties / describe_action / description
        Previous value: -"When action='describe', narrow the output to ONE action's full params/notes (e.g. 'list'). Omit to get the compact action index."New value: +"With action='describe': return one action's params and notes instead of the action index."
      • removedInput schema / properties / description
        Removed value: -{
        -  "description": "Description (10-1000 chars).",
        -  "maxLength": 1000,
        -  "minLength": 10,
        -  "type": "string"
        -}
      • changedInput schema / properties / detail / description
        Previous value: -"Per-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."New value: +"Per-entity verbosity. Default terse for list/discover-*/members/list-workspaces, full for details; describe lists the fields per level."
      • changedInput schema / properties / display_limit / description
        Previous value: -"Number 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."New value: +"Number of orgs to return to the agent (default 10, max 100)."
      • removedInput schema / properties / domain
        Removed value: -{
        -  "description": "URL-safe subdomain (2-80 chars, lowercase alphanumeric + hyphens, globally unique, not reserved).",
        -  "maxLength": 80,
        -  "minLength": 2,
        -  "type": "string"
        -}
      • removedInput schema / properties / email
        Removed value: -{
        -  "description": "Email address of user to invite.",
        -  "type": "string"
        -}
      • removedInput schema / properties / expires
        Removed value: -{
        -  "description": "Updated expiration datetime.",
        -  "type": "string"
        -}
      • removedInput schema / properties / facebook_url
        Removed value: -{
        -  "description": "Facebook page URL.",
        -  "type": "string"
        -}
      • removedInput schema / properties / file_base64
        Removed value: -{
        -  "description": "Base64 file content for binary assets.",
        -  "type": "string"
        -}
      • removedInput schema / properties / file_name
        Removed value: -{
        -  "description": "Original file name, e.g. logo.png.",
        -  "type": "string"
        -}
      • removedInput schema / properties / folder_name
        Removed value: -{
        -  "description": "URL-safe workspace folder name (4-80 chars).",
        -  "maxLength": 80,
        -  "minLength": 4,
        -  "type": "string"
        -}
      • removedInput schema / properties / homepage_url
        Removed value: -{
        -  "description": "Organization website URL.",
        -  "type": "string"
        -}
      • removedInput schema / properties / industry
        Removed value: -{
        -  "description": "Industry type, e.g. technology, healthcare, financial.",
        -  "type": "string"
        -}
      • removedInput schema / properties / instagram_url
        Removed value: -{
        -  "description": "Instagram profile URL.",
        -  "type": "string"
        -}
      • removedInput schema / properties / intelligence
        Removed value: -{
        -  "description": "Enable RAG indexing. COSTS 10 credits/page. Defaults \"false\". See describe.",
        -  "type": "string"
        -}
      • removedInput schema / properties / invitation_id
        Removed value: -{
        -  "description": "Invitation ID or invitee email.",
        -  "type": "string"
        -}
      • removedInput schema / properties / invitation_key
        Removed value: -{
        -  "description": "Invitation key from invite link.",
        -  "type": "string"
        -}
      • removedInput schema / properties / join_action
        Removed value: -{
        -  "description": "Invitation action: accept or decline (default accept). Appended to the join URL path — restricted to these two values to prevent path injection.",
        -  "enum": [
        -    "accept",
        -    "decline"
        -  ],
        -  "type": "string"
        -}
      • removedInput schema / properties / member_id
        Removed value: -{
        -  "description": "User ID or email of member.",
        -  "type": "string"
        -}
      • removedInput schema / properties / message
        Removed value: -{
        -  "description": "Custom invitation email message (10-255 chars).",
        -  "type": "string"
        -}
      • removedInput schema / properties / metadata
        Removed value: -{
        -  "description": "Additional metadata as JSON array string.",
        -  "type": "string"
        -}
      • removedInput schema / properties / name
        Removed value: -{
        -  "description": "Display name (3-100 chars).",
        -  "maxLength": 100,
        -  "minLength": 3,
        -  "type": "string"
        -}
      • removedInput schema / properties / owner_defined
        Removed value: -{
        -  "description": "Custom owner-defined properties as JSON.",
        -  "type": "string"
        -}
      • removedInput schema / properties / perm_authorized_domains
        Removed value: -{
        -  "description": "Authorized email domain for auto-join.",
        -  "type": "string"
        -}
      • removedInput schema / properties / perm_join
        Removed value: -{
        -  "description": "Permission level required to join workspace.",
        -  "type": "string"
        -}
      • removedInput schema / properties / perm_member_manage
        Removed value: -{
        -  "description": "Who can manage members, e.g. 'Owner only'.",
        -  "type": "string"
        -}
      • removedInput schema / properties / permissions
        Removed value: -{
        -  "description": "Updated permission level.",
        -  "type": "string"
        -}
      • removedInput schema / properties / role
        Removed value: -{
        -  "description": "Org 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).",
        -  "type": "string"
        -}
      • changedInput schema / properties / starting_after / description
        Previous value: -"billing-invoices cursor: pass a prior invoice's `id` to fetch the next page (cursor pagination, not offset)."New value: +"billing-invoices cursor: a prior invoice's `id`."
      • removedInput schema / properties / twitter_url
        Removed value: -{
        -  "description": "Twitter/X profile URL.",
        -  "type": "string"
        -}
      • removedInput schema / properties / use_background
        Removed value: -{
        -  "description": "Enable/disable background, \"true\"/\"false\".",
        -  "type": "string"
        -}
      • changedInput schema / properties / workspace_id / description
        Previous value: -"Workspace opaque ID. Use this when only workspaces are valid (not shares or other contexts). For polymorphic contexts use profile_id. Filter by workspace ID."New value: +"billing-meters: filter by workspace ID."
      • removedInput schema / properties / youtube_url
        Removed value: -{
        -  "description": "YouTube channel URL.",
        -  "type": "string"
        -}
    • Addedorg_manage
    • Changedshare38 fields changed
      • removedInput schema / properties / accent_color
        Removed value: -{
        -  "description": "Accent color as JSON string.",
        -  "type": "string"
        -}
      • removedInput schema / properties / access_options
        Removed value: -{
        -  "description": "Access level. 'Anyone with the link' not allowed for receive/exchange.",
        -  "enum": [
        -    "Only members of the Share or Workspace",
        -    "Members of the Share, Workspace or Org",
        -    "Anyone with a registered account",
        -    "Anyone with the link"
        -  ],
        -  "type": "string"
        -}
      • changedInput schema / properties / action / enum
        Previous value: -[
        -  "describe",
        -  "list",
        -  "details",
        -  "create",
        -  "update",
        -  "delete",
        -  "public-details",
        -  "archive",
        -  "unarchive",
        -  "password-auth",
        -  "members",
        -  "available",
        -  "check-name",
        -  "quickshare-create",
        -  "autotitle"
        -]New value: +[
        +  "describe",
        +  "list",
        +  "details",
        +  "public-details",
        +  "password-auth",
        +  "members",
        +  "available",
        +  "check-name"
        +]
      • removedInput schema / properties / anonymous_uploads_enabled
        Removed value: -{
        -  "description": "Allow guests to upload anonymously on public Receive/Exchange shares.",
        -  "type": "boolean"
        -}
      • removedInput schema / properties / background_color1
        Removed value: -{
        -  "description": "Primary background color as JSON string.",
        -  "type": "string"
        -}
      • removedInput schema / properties / background_color2
        Removed value: -{
        -  "description": "Secondary background color as JSON string.",
        -  "type": "string"
        -}
      • removedInput schema / properties / background_image
        Removed value: -{
        -  "description": "Background image index (0-128, default 0).",
        -  "maximum": 128,
        -  "minimum": 0,
        -  "type": "integer"
        -}
      • removedInput schema / properties / comments_enabled
        Removed value: -{
        -  "description": "Enable comments (default: true).",
        -  "type": "boolean"
        -}
      • removedInput schema / properties / confirm
        Removed value: -{
        -  "description": "delete: must match the share's custom_name or id (validated client-side before the call).",
        -  "type": "string"
        -}
      • removedInput schema / properties / create_folder
        Removed value: -{
        -  "description": "Create a new workspace folder (workspace_folder mode).",
        -  "type": "boolean"
        -}
      • removedInput schema / properties / custom_name
        Removed value: -{
        -  "description": "Custom share URL name (4-80 chars; Unicode letters, digits, hyphens, underscores). Omit to have one auto-generated.",
        -  "maxLength": 80,
        -  "minLength": 4,
        -  "type": "string"
        -}
      • changedInput schema / properties / describe_action / description
        Previous value: -"When action='describe', narrow the output to ONE action's full params/notes (e.g. 'create'). Omit to get the compact action index."New value: +"With action='describe': return one action's params and notes instead of the action index."
      • removedInput schema / properties / description
        Removed value: -{
        -  "description": "Share description (10-500 chars).",
        -  "maxLength": 500,
        -  "minLength": 10,
        -  "type": "string"
        -}
      • changedInput schema / properties / detail / description
        Previous value: -"Per-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."New value: +"terse|standard|full. Defaults: terse for list/available/members, standard for public-details, full for details."
      • changedInput schema / properties / display_limit / description
        Previous value: -"How 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."New value: +"list: rows to return (default 10, max 500), trimmed after fetch."
      • removedInput schema / properties / display_type
        Removed value: -{
        -  "description": "Display mode (default: grid).",
        -  "enum": [
        -    "list",
        -    "grid"
        -  ],
        -  "type": "string"
        -}
      • removedInput schema / properties / download_security
        Removed value: -{
        -  "description": "Download security: off (default), medium (no guest download), high (block all guest downloads).",
        -  "enum": [
        -    "off",
        -    "medium",
        -    "high"
        -  ],
        -  "type": "string"
        -}
      • removedInput schema / properties / expand
        Removed value: -{
        -  "description": "quickshare-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}`.",
        -  "enum": [
        -    "node"
        -  ],
        -  "type": "string"
        -}
      • removedInput schema / properties / expires
        Removed value: -{
        -  "description": "Expiration: 'YYYY-MM-DD HH:MM:SS' for create/update; seconds (default 10800, max 604800) for quickshare-create.",
        -  "type": "string"
        -}
      • removedInput schema / properties / expires_at
        Removed value: -{
        -  "description": "ISO 8601 datetime for quickshare expiration.",
        -  "type": "string"
        -}
      • removedInput schema / properties / folder_name
        Removed value: -{
        -  "description": "Name for new folder (default: 'Shared Folder').",
        -  "type": "string"
        -}
      • removedInput schema / properties / folder_node_id
        Removed value: -{
        -  "description": "Workspace folder node ID (workspace_folder mode).",
        -  "type": "string"
        -}
      • removedInput schema / properties / guest_chat_enabled
        Removed value: -{
        -  "description": "Enable guest chat (default: false).",
        -  "type": "boolean"
        -}
      • removedInput schema / properties / intelligence
        Removed value: -{
        -  "description": "Enable RAG indexing. ⚠️ COSTS CREDITS (10/page) — default false unless user requests it. Forced false on workspace_folder shares.",
        -  "type": "boolean"
        -}
      • removedInput schema / properties / invite
        Removed value: -{
        -  "description": "Who can invite others (default: owners).",
        -  "enum": [
        -    "owners",
        -    "guests"
        -  ],
        -  "type": "string"
        -}
      • changedInput schema / properties / limit / description
        Previous value: -"Internal 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."New value: +"Backend page size (list/members); display_limit sets how many rows are returned."
      • changedInput schema / properties / name / description
        Previous value: -"Share title (2-80 chars; maps to API 'title')."New value: +"check-name: the custom share URL name to check."
      • removedInput schema / properties / node_id
        Removed value: -{
        -  "description": "Storage 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.",
        -  "type": "string"
        -}
      • removedInput schema / properties / notify
        Removed value: -{
        -  "description": "Notification setting (default: never).",
        -  "enum": [
        -    "never",
        -    "notify_on_file_received",
        -    "notify_on_file_sent_or_received"
        -  ],
        -  "type": "string"
        -}
      • removedInput schema / properties / owner_defined
        Removed value: -{
        -  "description": "Custom metadata as JSON string.",
        -  "type": "string"
        -}
      • changedInput schema / properties / password / description
        Previous value: -"Password (only with 'Anyone with the link')."New value: +"password-auth: the share password."
      • removedInput schema / properties / room_goal
        Removed value: -{
        -  "description": "REMOVED — 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.",
        -  "maxLength": 1000,
        -  "minLength": 1,
        -  "type": "string"
        -}
      • removedInput schema / properties / share_type
        Removed value: -{
        -  "description": "New share type.",
        -  "enum": [
        -    "send",
        -    "receive",
        -    "exchange"
        -  ],
        -  "type": "string"
        -}
      • removedInput schema / properties / storage_mode
        Removed value: -{
        -  "description": "Storage mode (default: independent).",
        -  "enum": [
        -    "independent",
        -    "workspace_folder"
        -  ],
        -  "type": "string"
        -}
      • removedInput schema / properties / title
        Removed value: -{
        -  "description": "Share title (2-80 chars). Alias of name.",
        -  "maxLength": 80,
        -  "minLength": 2,
        -  "type": "string"
        -}
      • removedInput schema / properties / user_context
        Removed value: -{
        -  "description": "autotitle only: optional user-provided context to guide the AI-generated title/description.",
        -  "type": "string"
        -}
      • removedInput schema / properties / workspace_id
        Removed value: -{
        -  "description": "Workspace opaque ID. Use this when only workspaces are valid (not shares or other contexts). For polymorphic contexts use profile_id. Parent workspace ID.",
        -  "type": "string"
        -}
      • removedInput schema / properties / workspace_style
        Removed value: -{
        -  "description": "Use workspace styling (default: true).",
        -  "type": "boolean"
        -}
    • Addedshare_manage
    • Changedsign16 fields changed
      • changedInput schema / properties / action / enum
        Previous value: -[
        -  "describe",
        -  "sign-list",
        -  "sign-create",
        -  "sign-get",
        -  "sign-update",
        -  "sign-send",
        -  "sign-void",
        -  "sign-document-source-download",
        -  "sign-document-source-preview",
        -  "sign-document-signed-download",
        -  "sign-audit-download",
        -  "sign-audit-pdf-download",
        -  "sign-retry",
        -  "dashboard-sign-link",
        -  "sign-template-create",
        -  "sign-template-list",
        -  "sign-template-get",
        -  "sign-template-update",
        -  "sign-template-delete",
        -  "sign-template-instantiate"
        -]New value: +[
        +  "describe",
        +  "sign-list",
        +  "sign-get",
        +  "sign-document-source-download",
        +  "sign-document-source-preview",
        +  "sign-document-signed-download",
        +  "sign-audit-download",
        +  "sign-audit-pdf-download",
        +  "sign-template-list",
        +  "sign-template-get"
        +]
      • removedInput schema / properties / confirm
        Removed value: -{
        -  "description": "Confirmation gate ('true'). REQUIRED for sign-send/sign-void; refused without it.",
        -  "enum": [
        -    "true",
        -    "false"
        -  ],
        -  "type": "string"
        -}
      • changedInput schema / properties / describe_action / description
        Previous value: -"When action='describe', narrow the output to ONE action's full params/notes (e.g. 'sign-create'). Omit to get the compact action index."New value: +"With action='describe': return one action's params and notes instead of the action index."
      • removedInput schema / properties / description
        Removed value: -{
        -  "description": "sign-template-create/-update: template description (max 1024).",
        -  "maxLength": 1024,
        -  "type": "string"
        -}
      • removedInput schema / properties / documents
        Removed value: -{
        -  "description": "sign-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?}].",
        -  "type": "string"
        -}
      • removedInput schema / properties / expected_version
        Removed value: -{
        -  "description": "sign-template-update: the `version` you read from sign-template-get (optimistic CAS). A concurrent write returns 409 — re-read and retry.",
        -  "maximum": 9007199254740991,
        -  "minimum": 1,
        -  "type": "integer"
        -}
      • removedInput schema / properties / expires_at
        Removed value: -{
        -  "description": "sign-create/-update: envelope expiry as a UTC timestamp 'Y-m-d H:i:s UTC' (NOT a day count; omit/null = policy default).",
        -  "type": "string"
        -}
      • removedInput schema / properties / fields
        Removed value: -{
        -  "description": "sign-create/-update: JSON array of field placements (coords 0..1; see note).",
        -  "type": "string"
        -}
      • removedInput schema / properties / name
        Removed value: -{
        -  "description": "sign-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).",
        -  "maxLength": 255,
        -  "minLength": 1,
        -  "type": "string"
        -}
      • removedInput schema / properties / policy_json
        Removed value: -{
        -  "description": "sign-create/-update: optional JSON policy {auth_method,...}.",
        -  "type": "string"
        -}
      • removedInput schema / properties / reason
        Removed value: -{
        -  "description": "sign-void: void reason (max 1024).",
        -  "maxLength": 1024,
        -  "type": "string"
        -}
      • removedInput schema / properties / recipient_bindings
        Removed value: -{
        -  "description": "sign-template-instantiate: JSON OBJECT keyed by slot_key -> {email, display_name?, auth_method?}. An ARRAY is rejected by the platform.",
        -  "type": "string"
        -}
      • removedInput schema / properties / recipients
        Removed value: -{
        -  "description": "sign-create/-update: JSON recipients array (see note).",
        -  "type": "string"
        -}
      • removedInput schema / properties / snapshot
        Removed value: -{
        -  "description": "sign-template-create/-update: JSON snapshot object {recipient_slots, document_slots, fields, policy}. On update it is a FULL replacement (see note).",
        -  "type": "string"
        -}
      • changedInput schema / properties / template_id / description
        Previous value: -"sign-template-get/-update/-delete/-instantiate: template id (30-char base32, `sa` family)."New value: +"sign-template-get: template id (30-char base32, `sa` family)."
      • changedInput schema / properties / workspace_id / description
        Previous value: -"Workspace ID. Envelopes are workspace-parented; use the 19-digit NUMERIC workspace ID (the document/audit download stream route rejects custom workspace names)."New value: +"Workspace ID (19-digit NUMERIC; the document/audit download stream route rejects custom workspace names). Envelopes are workspace-parented."
    • Addedsign_manage
    • Changedstorage28 fields changed
      • changedInput schema / properties / action / enum
        Previous value: -[
        -  "describe",
        -  "list",
        -  "recent",
        -  "details",
        -  "search",
        -  "trash-list",
        -  "create-folder",
        -  "copy",
        -  "move",
        -  "delete",
        -  "rename",
        -  "purge",
        -  "restore",
        -  "add-file",
        -  "add-link",
        -  "transfer",
        -  "version-list",
        -  "version-restore",
        -  "lock-acquire",
        -  "lock-status",
        -  "lock-release",
        -  "preview-url",
        -  "preview-transform",
        -  "read-content",
        -  "content",
        -  "metadata-facts",
        -  "metadata-get",
        -  "metadata-set",
        -  "metadata-delete",
        -  "metadata-extract",
        -  "metadata-extract-all",
        -  "metadata-versions"
        -]New value: +[
        +  "describe",
        +  "list",
        +  "recent",
        +  "details",
        +  "search",
        +  "trash-list",
        +  "version-list",
        +  "lock-status",
        +  "preview-url",
        +  "preview-transform",
        +  "read-content",
        +  "content",
        +  "metadata-facts",
        +  "metadata-get",
        +  "metadata-versions"
        +]
      • changedInput schema / properties / as_markdown / description
        Previous value: -"Opt-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."New value: +"Opt-in (list/recent/search/details/trash-list): the platform renders the response as GitHub-flavored Markdown (?output=<detail>,markdown) instead of JSON. Omit for JSON with web_url enrichment + _next hints."
      • changedInput schema / properties / describe_action / description
        Previous value: -"When action='describe', narrow the output to ONE action's full params/notes (e.g. 'list'). Omit to get the compact action index."New value: +"With action='describe': return one action's params and notes instead of the action index."
      • removedInput schema / properties / dest_instance_id
        Removed value: -{
        -  "description": "Destination workspace or share profile ID.",
        -  "type": "string"
        -}
      • removedInput schema / properties / dest_parent_id
        Removed value: -{
        -  "description": "Destination 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.",
        -  "type": "string"
        -}
      • changedInput schema / properties / details / description
        Previous value: -"Search-only. Return fully-hydrated node objects per result (default limit drops to 10). Distinct from `detail` — call action='describe' for the contrast."New value: +"Search-only: attach the hydrated node to each hit (default limit drops to 10). Distinct from `detail` (see describe)."
      • changedInput schema / properties / display_limit / description
        Previous value: -"How 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."New value: +"How many items to return (default 10, max 500) on list, recent and search. list/recent page via `cursor`; search pages via `offset` (increase it by the page size)."
      • removedInput schema / properties / duration
        Removed value: -{
        -  "description": "lock-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.",
        -  "maximum": 3600,
        -  "minimum": 60,
        -  "type": "integer"
        -}
      • removedInput schema / properties / extract_fields
        Removed value: -{
        -  "description": "metadata-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.",
        -  "type": "string"
        -}
      • removedInput schema / properties / key_values
        Removed value: -{
        -  "description": "metadata-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).",
        -  "type": "string"
        -}
      • removedInput schema / properties / keys
        Removed value: -{
        -  "description": "metadata-delete: JSON array of metadata keys to delete (omit to clear all).",
        -  "type": "string"
        -}
      • removedInput schema / properties / lock_token
        Removed value: -{
        -  "description": "lock-release only — the token returned by lock-acquire. REQUIRED to release a lock.",
        -  "type": "string"
        -}
      • removedInput schema / properties / name
        Removed value: -{
        -  "description": "Name for new folder or file.",
        -  "type": "string"
        -}
      • changedInput schema / properties / name_match / description
        Previous value: -"auto (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."New value: +"auto (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. No pre-escaping needed. 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."
      • removedInput schema / properties / new_name
        Removed value: -{
        -  "description": "New name for file or folder.",
        -  "type": "string"
        -}
      • changedInput schema / properties / node_id / description
        Previous value: -"Storage 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."New value: +"Storage node opaque ID (files and folders are both nodes), 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."
      • removedInput schema / properties / node_type
        Removed value: -{
        -  "description": "rename-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.",
        -  "enum": [
        -    "file",
        -    "folder",
        -    "link",
        -    "note"
        -  ],
        -  "type": "string"
        -}
      • changedInput schema / properties / parent_node_id / description
        Previous value: -"Parent 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.)"New value: +"Parent folder opaque ID, or 'root'. On `list`, an alias for node_id."
      • changedInput schema / properties / preview_type / description
        Previous value: -"Type of preview to generate. See describe for which preview_types apply to which file categories."New value: +"Preview kind; each applies only to compatible file categories (see describe)."
      • changedInput schema / properties / profile_id / description
        Previous value: -"Polymorphic 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."New value: +"Workspace or share ID (19-digit, or custom name); pair with profile_type. Typed aliases imply the type: workspace_id (workspace), share_id (share, dual-type actions); also context_id / instance_id."
      • changedInput schema / properties / search_in / description
        Previous value: -"filename | 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."New value: +"filename | content | both (DEFAULT). filename = name only, find-style. content = the AI's summary + semantic, NOT grep. Sending it changes the response shape (adds a search_metadata block); omitting it reproduces today's behavior byte-for-byte. filename pairs with name_match."
      • changedInput schema / properties / share_id / description
        Previous value: -"For 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)."New value: +"Alias for profile_id implying profile_type=share (dual-type actions)."
      • removedInput schema / properties / target_parent_id
        Removed value: -{
        -  "description": "Destination folder opaque ID, or 'root'.",
        -  "type": "string"
        -}
      • removedInput schema / properties / template_id
        Removed value: -{
        -  "description": "RETIRED — 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.",
        -  "type": "string"
        -}
      • removedInput schema / properties / transfer_mode
        Removed value: -{
        -  "description": "'copy' (default) or 'move'. 'move' invalid for node_id 'root'.",
        -  "enum": [
        -    "copy",
        -    "move"
        -  ],
        -  "type": "string"
        -}
      • removedInput schema / properties / upload_id
        Removed value: -{
        -  "description": "Opaque ID of completed upload session.",
        -  "type": "string"
        -}
      • removedInput schema / properties / version_id
        Removed value: -{
        -  "description": "Version ID to restore.",
        -  "type": "string"
        -}
      • changedInput schema / properties / workspace_id / description
        Previous value: -"Alias for profile_id when the profile is a workspace — implies profile_type=workspace (so profile_type may be omitted). Valid on every storage action."New value: +"Alias for profile_id that implies profile_type=workspace. Valid on every action."
    • Addedstorage_manage
    • Changedupload29 fields changed
      • changedInput schema / properties / action / enum
        Previous value: -[
        -  "describe",
        -  "create-session",
        -  "stream-upload",
        -  "batch",
        -  "chunk",
        -  "stream",
        -  "finalize",
        -  "status",
        -  "cancel",
        -  "list-sessions",
        -  "cancel-all",
        -  "chunk-status",
        -  "chunk-delete",
        -  "web-import",
        -  "web-list",
        -  "web-cancel",
        -  "web-status",
        -  "limits",
        -  "extensions",
        -  "blob-info"
        -]New value: +[
        +  "describe",
        +  "status",
        +  "list-sessions",
        +  "chunk-status",
        +  "web-list",
        +  "web-status",
        +  "limits",
        +  "extensions",
        +  "blob-info"
        +]
      • removedInput schema / properties / blob_id
        Removed value: -{
        -  "description": "Blob ID from POST /blob — the **default source** for all file & binary uploads (no base64, no MCP size limit, up to 100 MB). Single-use.",
        -  "type": "string"
        -}
      • removedInput schema / properties / blob_ref
        Removed value: -{
        -  "description": "Alias for blob_id (deprecated). Accepted on chunk/stream/stream-upload only.",
        -  "type": "string"
        -}
      • removedInput schema / properties / chunk_number
        Removed value: -{
        -  "description": "1-indexed chunk number.",
        -  "maximum": 9007199254740991,
        -  "minimum": 1,
        -  "type": "integer"
        -}
      • removedInput schema / properties / chunk_size
        Removed value: -{
        -  "description": "Chunk size in bytes (server picks default).",
        -  "maximum": 9007199254740991,
        -  "minimum": 1,
        -  "type": "integer"
        -}
      • removedInput schema / properties / content
        Removed value: -{
        -  "description": "**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.",
        -  "type": "string"
        -}
      • removedInput schema / properties / content_base64
        Removed value: -{
        -  "description": "Base64-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.",
        -  "type": "string"
        -}
      • removedInput schema / properties / context_id
        Removed value: -{
        -  "description": "Alias for profile_id (either name works)",
        -  "minLength": 1,
        -  "type": "string"
        -}
      • removedInput schema / properties / context_type
        Removed value: -{
        -  "description": "Alias for profile_type (either name works).",
        -  "enum": [
        -    "workspace",
        -    "share",
        -    "fileshare"
        -  ],
        -  "type": "string"
        -}
      • removedInput schema / properties / creator
        Removed value: -{
        -  "description": "Client identifier echoed back (alphanumeric + hyphens).",
        -  "maxLength": 150,
        -  "minLength": 1,
        -  "type": "string"
        -}
      • changedInput schema / properties / describe_action / description
        Previous value: -"When action='describe', narrow the output to ONE action's full params/notes (e.g. 'chunk'). Omit to get the compact action index."New value: +"With action='describe': return one action's params and notes instead of the action index."
      • removedInput schema / properties / filename
        Removed value: -{
        -  "description": "File name. Optional when target_node_id is set (auto-resolved); pass to rename-on-replace.",
        -  "type": "string"
        -}
      • removedInput schema / properties / files
        Removed value: -{
        -  "description": "Batch manifest (1..200 entries). Each: filename + one of blob_id/content/content_base64.",
        -  "items": {
        -    "properties": {
        -      "blob_id": {
        -        "description": "Blob ID from POST /blob. One of blob_id/content/content_base64.",
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "content": {
        -        "description": "Inline **text** content (verbatim UTF-8; ≤4 MB). Do NOT pass base64 here.",
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "content_base64": {
        -        "description": "Inline **binary** as base64 (server-decoded; ≤4 MB).",
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "filename": {
        -        "description": "File name (1-255 characters). An over-length name is a hard ERROR — the platform no longer truncates.",
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "hash": {
        -        "description": "Hex hash digest. Both hash and hash_algo must be supplied together.",
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "hash_algo": {
        -        "description": "Hash algorithm. Pair with hash.",
        -        "enum": [
        -          "md5",
        -          "sha1",
        -          "sha256",
        -          "sha384"
        -        ],
        -        "type": "string"
        -      },
        -      "relative_path": {
        -        "description": "Sub-folder path under folder_id (trailing slash auto-added; no leading slash, no '.' or '..').",
        -        "minLength": 1,
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "filename"
        -    ],
        -    "type": "object"
        -  },
        -  "maxItems": 200,
        -  "minItems": 1,
        -  "type": "array"
        -}
      • removedInput schema / properties / filesize
        Removed value: -{
        -  "description": "Total file size in bytes.",
        -  "maximum": 9007199254740991,
        -  "minimum": 1,
        -  "type": "integer"
        -}
      • removedInput schema / properties / folder_id
        Removed value: -{
        -  "description": "Target folder OpaqueId or \"root\". Omit for instance root.",
        -  "type": "string"
        -}
      • removedInput schema / properties / hash
        Removed value: -{
        -  "description": "File hash for verification.",
        -  "type": "string"
        -}
      • removedInput schema / properties / hash_algo
        Removed value: -{
        -  "description": "Hash algorithm (e.g. 'sha256').",
        -  "type": "string"
        -}
      • removedInput schema / properties / if_version_id
        Removed value: -{
        -  "description": "Compare-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.",
        -  "minLength": 1,
        -  "type": "string"
        -}
      • removedInput schema / properties / include_hash
        Removed value: -{
        -  "description": "Compute SHA-256 client-side for entries without a hash (default true when omitted).",
        -  "type": "boolean"
        -}
      • removedInput schema / properties / max_size
        Removed value: -{
        -  "description": "Stream-body byte ceiling — aborts mid-transfer if exceeded. Always overestimate; omit to use plan limit. Stream sessions only.",
        -  "maximum": 9007199254740991,
        -  "minimum": 1,
        -  "type": "integer"
        -}
      • removedInput schema / properties / parent_node_id
        Removed value: -{
        -  "description": "Parent folder OpaqueId or \"root\". On create-session, stream-upload, and web-import, folder_id is accepted as an alias (either name works).",
        -  "type": "string"
        -}
      • changedInput schema / properties / password / description
        Previous value: -"File 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."New value: +"File Share link password (profile_type=fileshare only). Sent only as the x-ve-password header on each call, never in a URL/log; needed when the target share is password-protected."
      • removedInput schema / properties / profile_id
        Removed value: -{
        -  "description": "Polymorphic 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.",
        -  "type": "string"
        -}
      • removedInput schema / properties / profile_type
        Removed value: -{
        -  "description": "Target 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).",
        -  "enum": [
        -    "workspace",
        -    "share",
        -    "fileshare"
        -  ],
        -  "type": "string"
        -}
      • removedInput schema / properties / share_id
        Removed value: -{
        -  "description": "Alias for profile_id when the profile is a share — implies profile_type=share (so profile_type may be omitted).",
        -  "type": "string"
        -}
      • removedInput schema / properties / stream
        Removed value: -{
        -  "description": "Stream mode — size optional, single POST, auto-finalizes.",
        -  "type": "boolean"
        -}
      • removedInput schema / properties / target_node_id
        Removed value: -{
        -  "description": "Overwrite 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).",
        -  "minLength": 1,
        -  "type": "string"
        -}
      • removedInput schema / properties / url
        Removed value: -{
        -  "description": "Source URL to import from.",
        -  "type": "string"
        -}
      • removedInput schema / properties / workspace_id
        Removed value: -{
        -  "description": "Alias for profile_id when the profile is a workspace — implies profile_type=workspace (so profile_type may be omitted).",
        -  "type": "string"
        -}
    • Addedupload_manage
    • Changeduser24 fields changed
      • changedInput schema / properties / action / description
        Previous value: -"Operation. Use 'describe' for full action reference."New value: +"Operation; 'describe' lists the actions."
      • changedInput schema / properties / action / enum
        Previous value: -[
        -  "describe",
        -  "me",
        -  "update",
        -  "search-contacts",
        -  "close",
        -  "details-by-id",
        -  "profiles",
        -  "allowed",
        -  "org-limits",
        -  "list-shares",
        -  "invitation-list",
        -  "invitation-details",
        -  "accept-all-invitations",
        -  "asset-upload",
        -  "asset-delete",
        -  "asset-types",
        -  "asset-list",
        -  "report-bug"
        -]New value: +[
        +  "describe",
        +  "me",
        +  "search-contacts",
        +  "details-by-id",
        +  "profiles",
        +  "allowed",
        +  "org-limits",
        +  "list-shares",
        +  "invitation-list",
        +  "invitation-details",
        +  "asset-types",
        +  "asset-list"
        +]
      • changedInput schema / properties / archived / description
        Previous value: -"True for archived shares, false for active."New value: +"true: archived shares; false: active."
      • removedInput schema / properties / asset_name
        Removed value: -{
        -  "description": "Asset type name (e.g. profile_pic).",
        -  "type": "string"
        -}
      • removedInput schema / properties / blob
        Removed value: -{
        -  "description": "report-bug: plain-text excerpt (error body, short log), max 32 KB. No secrets or file content.",
        -  "type": "string"
        -}
      • removedInput schema / properties / category
        Removed value: -{
        -  "description": "report-bug: area of the suspected platform defect.",
        -  "enum": [
        -    "api",
        -    "mcp",
        -    "docs",
        -    "auth",
        -    "storage",
        -    "ai",
        -    "billing",
        -    "other"
        -  ],
        -  "type": "string"
        -}
      • removedInput schema / properties / confirmation
        Removed value: -{
        -  "description": "Email or user ID confirmation for account close.",
        -  "type": "string"
        -}
      • removedInput schema / properties / content
        Removed value: -{
        -  "description": "Plain text content for asset upload.",
        -  "type": "string"
        -}
      • removedInput schema / properties / content_base64
        Removed value: -{
        -  "description": "Base64-encoded binary content.",
        -  "type": "string"
        -}
      • removedInput schema / properties / content_type
        Removed value: -{
        -  "description": "MIME type.",
        -  "type": "string"
        -}
      • changedInput schema / properties / describe_action / description
        Previous value: -"When action='describe', narrow the output to ONE action's full params/notes (e.g. 'me'). Omit to get the compact action index."New value: +"With action='describe': return one action's params and notes instead of the action index."
      • removedInput schema / properties / description
        Removed value: -{
        -  "description": "report-bug: what you did, steps, expected vs actual. Max 8 KB. No secrets.",
        -  "type": "string"
        -}
      • changedInput schema / properties / display_limit / description
        Previous value: -"How 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."New value: +"list-shares row cap (default 10, max 500), applied after the fetch."
      • removedInput schema / properties / email_address
        Removed value: -{
        -  "description": "Email address.",
        -  "type": "string"
        -}
      • removedInput schema / properties / endpoint
        Removed value: -{
        -  "description": "report-bug: failing call as 'METHOD /path' — no host, no query string.",
        -  "type": "string"
        -}
      • removedInput schema / properties / error_code
        Removed value: -{
        -  "description": "report-bug: numeric error code of the failing call.",
        -  "maximum": 9007199254740991,
        -  "minimum": -9007199254740991,
        -  "type": "integer"
        -}
      • removedInput schema / properties / filename
        Removed value: -{
        -  "description": "Original filename.",
        -  "type": "string"
        -}
      • removedInput schema / properties / first_name
        Removed value: -{
        -  "description": "Given name.",
        -  "type": "string"
        -}
      • removedInput schema / properties / http_status
        Removed value: -{
        -  "description": "report-bug: HTTP status of the failing call.",
        -  "maximum": 599,
        -  "minimum": 100,
        -  "type": "integer"
        -}
      • removedInput schema / properties / idempotency_key
        Removed value: -{
        -  "description": "report-bug: 16-64 chars [A-Za-z0-9_-]. Generated when omitted and returned — reuse it on a manual retry.",
        -  "type": "string"
        -}
      • removedInput schema / properties / last_name
        Removed value: -{
        -  "description": "Family name.",
        -  "type": "string"
        -}
      • removedInput schema / properties / occurred_at
        Removed value: -{
        -  "description": "report-bug: when it happened, 'YYYY-MM-DD HH:MM:SS UTC' (last 30 days).",
        -  "type": "string"
        -}
      • removedInput schema / properties / request_id
        Removed value: -{
        -  "description": "report-bug: request_id from the failed tool result (the call's x-ve-reqid).",
        -  "type": "string"
        -}
      • removedInput schema / properties / title
        Removed value: -{
        -  "description": "report-bug: one-line summary, 1-200 chars.",
        -  "type": "string"
        -}
    • Addeduser_manage
    • Changedworkspace20 fields changed
      • removedInput schema / properties / accent_color
        Removed value: -{
        -  "description": "Brand accent color JSON. \"null\" to clear.",
        -  "type": "string"
        -}
      • changedInput schema / properties / action / enum
        Previous value: -[
        -  "describe",
        -  "list",
        -  "details",
        -  "update",
        -  "delete",
        -  "archive",
        -  "unarchive",
        -  "members",
        -  "list-shares",
        -  "import-share",
        -  "available",
        -  "check-name",
        -  "create-note",
        -  "update-note",
        -  "read-note",
        -  "quickshare-get",
        -  "quickshare-delete",
        -  "quickshares-list",
        -  "jobs-status",
        -  "enable-import",
        -  "disable-import"
        -]New value: +[
        +  "describe",
        +  "list",
        +  "details",
        +  "members",
        +  "list-shares",
        +  "available",
        +  "check-name",
        +  "read-note",
        +  "quickshare-get",
        +  "quickshares-list",
        +  "jobs-status"
        +]
      • removedInput schema / properties / background_color1
        Removed value: -{
        -  "description": "Background color 1 JSON. \"null\" to clear.",
        -  "type": "string"
        -}
      • removedInput schema / properties / background_color2
        Removed value: -{
        -  "description": "Background color 2 JSON. \"null\" to clear.",
        -  "type": "string"
        -}
      • removedInput schema / properties / blob_id
        Removed value: -{
        -  "description": "Blob ID from POST /blob. Preferred for large note content (UTF-8 decoded). Single-use.",
        -  "type": "string"
        -}
      • removedInput schema / properties / blob_ref
        Removed value: -{
        -  "description": "Alias for blob_id (deprecated).",
        -  "type": "string"
        -}
      • changedInput schema / properties / check_org_id / description
        Previous value: -"Org ID for check-name — suggests org-prefixed alternative if name taken."New value: +"Org ID for check-name (required — you must be a member). Suggests an org-prefixed alternative if the name is taken."
      • removedInput schema / properties / confirm
        Removed value: -{
        -  "description": "Must match folder_name or numeric ID.",
        -  "type": "string"
        -}
      • removedInput schema / properties / content
        Removed value: -{
        -  "description": "Plain text/markdown. Notes: max 102400 bytes (100 KiB) — use blob_id for larger.",
        -  "type": "string"
        -}
      • changedInput schema / properties / describe_action / description
        Previous value: -"When action='describe', narrow the output to ONE action's full params/notes (e.g. 'list'). Omit to get the compact action index."New value: +"With action='describe': return one action's params and notes instead of the action index."
      • removedInput schema / properties / description
        Removed value: -{
        -  "description": "Description. Newlines allowed. Send \"null\"/\"\" to clear on update.",
        -  "maxLength": 2000,
        -  "type": "string"
        -}
      • removedInput schema / properties / folder_name
        Removed value: -{
        -  "description": "URL-safe workspace folder name (4-80 chars).",
        -  "maxLength": 80,
        -  "minLength": 4,
        -  "type": "string"
        -}
      • removedInput schema / properties / intelligence
        Removed value: -{
        -  "description": "Toggle AI features. ⚠️ COSTS CREDITS (10/page) — only enable on explicit user request. Disable flushes embeddings; re-enable re-indexes. Rate-limited.",
        -  "enum": [
        -    "true",
        -    "false"
        -  ],
        -  "type": "string"
        -}
      • removedInput schema / properties / name
        Removed value: -{
        -  "description": "Name. Send \"null\" to clear on update.",
        -  "maxLength": 255,
        -  "minLength": 1,
        -  "type": "string"
        -}
      • removedInput schema / properties / note_name
        Removed value: -{
        -  "description": "Note filename (must end with .md).",
        -  "type": "string"
        -}
      • removedInput schema / properties / owner_defined
        Removed value: -{
        -  "description": "Custom properties JSON. \"null\"/\"\" to clear.",
        -  "type": "string"
        -}
      • removedInput schema / properties / parent_id
        Removed value: -{
        -  "description": "Parent folder opaque ID or 'root'.",
        -  "type": "string"
        -}
      • removedInput schema / properties / perm_join
        Removed value: -{
        -  "description": "Who can join the workspace.",
        -  "enum": [
        -    "Only Org Owners",
        -    "Admin or above",
        -    "Member or above"
        -  ],
        -  "type": "string"
        -}
      • removedInput schema / properties / perm_member_manage
        Removed value: -{
        -  "description": "Who can manage members.",
        -  "enum": [
        -    "Admin or above",
        -    "Member or above"
        -  ],
        -  "type": "string"
        -}
      • removedInput schema / properties / share_id
        Removed value: -{
        -  "description": "19-digit numeric ID or custom name of share to import.",
        -  "type": "string"
        -}
    • Addedworkspace_manage
  6. 1 tool update
    • Changeduser11 fields changed
      • changedInput schema / properties / action / enum
        Previous value: -[
        -  "describe",
        -  "me",
        -  "update",
        -  "search-contacts",
        -  "close",
        -  "details-by-id",
        -  "profiles",
        -  "allowed",
        -  "org-limits",
        -  "list-shares",
        -  "invitation-list",
        -  "invitation-details",
        -  "accept-all-invitations",
        -  "asset-upload",
        -  "asset-delete",
        -  "asset-types",
        -  "asset-list"
        -]New value: +[
        +  "describe",
        +  "me",
        +  "update",
        +  "search-contacts",
        +  "close",
        +  "details-by-id",
        +  "profiles",
        +  "allowed",
        +  "org-limits",
        +  "list-shares",
        +  "invitation-list",
        +  "invitation-details",
        +  "accept-all-invitations",
        +  "asset-upload",
        +  "asset-delete",
        +  "asset-types",
        +  "asset-list",
        +  "report-bug"
        +]
      • addedInput schema / properties / blob
        Added value: +{
        +  "description": "report-bug: plain-text excerpt (error body, short log), max 32 KB. No secrets or file content.",
        +  "type": "string"
        +}
      • addedInput schema / properties / category
        Added value: +{
        +  "description": "report-bug: area of the suspected platform defect.",
        +  "enum": [
        +    "api",
        +    "mcp",
        +    "docs",
        +    "auth",
        +    "storage",
        +    "ai",
        +    "billing",
        +    "other"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / description
        Added value: +{
        +  "description": "report-bug: what you did, steps, expected vs actual. Max 8 KB. No secrets.",
        +  "type": "string"
        +}
      • addedInput schema / properties / endpoint
        Added value: +{
        +  "description": "report-bug: failing call as 'METHOD /path' — no host, no query string.",
        +  "type": "string"
        +}
      • addedInput schema / properties / error_code
        Added value: +{
        +  "description": "report-bug: numeric error code of the failing call.",
        +  "maximum": 9007199254740991,
        +  "minimum": -9007199254740991,
        +  "type": "integer"
        +}
      • addedInput schema / properties / http_status
        Added value: +{
        +  "description": "report-bug: HTTP status of the failing call.",
        +  "maximum": 599,
        +  "minimum": 100,
        +  "type": "integer"
        +}
      • addedInput schema / properties / idempotency_key
        Added value: +{
        +  "description": "report-bug: 16-64 chars [A-Za-z0-9_-]. Generated when omitted and returned — reuse it on a manual retry.",
        +  "type": "string"
        +}
      • addedInput schema / properties / occurred_at
        Added value: +{
        +  "description": "report-bug: when it happened, 'YYYY-MM-DD HH:MM:SS UTC' (last 30 days).",
        +  "type": "string"
        +}
      • addedInput schema / properties / request_id
        Added value: +{
        +  "description": "report-bug: request_id from the failed tool result (the call's x-ve-reqid).",
        +  "type": "string"
        +}
      • addedInput schema / properties / title
        Added value: +{
        +  "description": "report-bug: one-line summary, 1-200 chars.",
        +  "type": "string"
        +}
  7. 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."
  8. 1 tool update
    • Addedsign

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables AI assistants like Claude, Cursor, VS Code, and Windsurf to manage workspaces, projects, tasks, and AI agents through natural language, with a hosted OAuth server or a local stdio package. Also supports generating MCP tools from any OpenAPI spec.
    1,264 npm
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Connects MCP-compatible AI clients and agents to one durable Project Brain plus controlled access to authorized project folders on your own machine. Enables file editing, terminal and Git operations, project intelligence, browser automation, and local MCP server federation, all scoped to explicit workspace grants.
    28 npm
    Apache 2.0
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources