Skip to main content
Glama

AFFiNE MCP Server

A Model Context Protocol (MCP) server for AFFiNE. It exposes AFFiNE workspaces and documents to AI assistants over stdio (default) or HTTP (/mcp) and supports both AFFiNE Cloud and self-hosted deployments.

Version MCP SDK CI License

Table of Contents

Related MCP server: Yuque MCP Server

Overview

AFFiNE MCP Server is designed for three common scenarios:

  • Run a local stdio MCP server for Claude Code, Codex CLI, Cursor, or Claude Desktop

  • Expose a remote HTTP MCP endpoint for hosted or browser-connected clients

  • Automate AFFiNE workspace, document, database, organization, and comment workflows through a stable MCP tool surface

Highlights:

  • Supports AFFiNE Cloud and self-hosted AFFiNE instances

  • Supports stdio and HTTP transports

  • Supports session-cookie and email/password authentication, plus compatible bearer tokens for older deployments

  • Exposes 105 canonical MCP tools backed by AFFiNE GraphQL and WebSocket APIs

  • Includes semantic page composition, native template instantiation, database intent composition, capability and fidelity reporting, and workspace blueprint helpers

  • Includes Docker images, health probes, and end-to-end test coverage

Scope boundaries:

  • This server can access only server-backed AFFiNE workspaces

  • Browser-local workspaces stored only in local storage are not available through AFFiNE server APIs

  • AFFiNE 0.27+ removed the legacy personal-access-token GraphQL API; this server no longer exposes token-management tools

  • AFFiNE Cloud requires browser-session authentication for this external GraphQL integration; programmatic email/password sign-in is blocked by Cloudflare

New in v3.2.1: Scripted cookie login now keeps session secrets out of process arguments, validates workspace access before saving credentials, and restores document pagination for ordinary workspace members.

Choose Your Path

Goal

Start here

Set up a local stdio server with the least friction

docs/getting-started.md

Run the server in Docker or another OCI runtime

docs/getting-started.md#path-c-run-from-the-docker-image

Configure Claude Code, Claude Desktop, Codex CLI, or Cursor

docs/client-setup.md

Run the server remotely over HTTP or behind OAuth

docs/configuration-and-deployment.md

Lock down tool exposure for least-privilege deployments

docs/configuration-and-deployment.md#least-privilege-tool-exposure

Learn common AFFiNE workflows and tool sequences

docs/workflow-recipes.md

Browse the tool catalog by domain

docs/tool-reference.md

Quick Start

1. Install the CLI

npm i -g affine-mcp-server
affine-mcp --version

You can also run the package ad hoc:

npx -y -p affine-mcp-server affine-mcp -- --version

2. Or run the server in Docker

docker run -d \
  -p 3000:3000 \
  -e MCP_TRANSPORT=http \
  -e AFFINE_BASE_URL=https://your-affine-instance.com \
  -e AFFINE_EMAIL=you@example.com \
  -e AFFINE_PASSWORD=your-password \
  -e AFFINE_MCP_AUTH_MODE=bearer \
  -e AFFINE_MCP_HTTP_TOKEN=your-strong-secret \
  ghcr.io/dawncr0w/affine-mcp-server:latest

Then point your client at:

{
  "mcpServers": {
    "affine": {
      "type": "http",
      "url": "http://localhost:3000/mcp",
      "headers": {
        "Authorization": "Bearer your-strong-secret"
      }
    }
  }
}

For Docker, health checks, and remote deployment details, see docs/configuration-and-deployment.md#docker.

3. Save credentials with interactive login

affine-mcp login

This stores credentials in $XDG_CONFIG_HOME/affine-mcp/config when XDG_CONFIG_HOME is set, otherwise in ~/.config/affine-mcp/config, with mode 600.

  • For AFFiNE Cloud, paste the Cookie request header from a signed-in browser session

  • For self-hosted AFFiNE, use email/password (recommended) or a signed-in session cookie

  • AFFINE_API_TOKEN remains available only for deployments that still accept a compatible GraphQL bearer token

For scripted session-cookie setup, keep the cookie out of process arguments:

affine-mcp login --url https://app.affine.pro --cookie-stdin --workspace-id your-workspace-id --force

Paste the cookie at the hidden prompt, or pipe it from a trusted secret source. The CLI verifies --workspace-id against the authenticated account before saving it. Piped input requires --force when existing credentials would be replaced.

4. Register the server with your client

Claude Code project config:

{
  "mcpServers": {
    "affine": {
      "command": "affine-mcp"
    }
  }
}

Codex CLI:

codex mcp add affine -- affine-mcp

More client-specific setup is in docs/client-setup.md.

5. Verify the connection

affine-mcp status
affine-mcp doctor

If you want to expose the server remotely over HTTP instead of stdio, start with docs/configuration-and-deployment.md.

Compatibility Matrix

Node.js 20.18.1 is the minimum supported runtime. CI validates the Node.js 20, 22, 24, and 26 release lines.

Target

Transport

Recommended auth

Recommended path

Claude Code

stdio

Saved config

docs/client-setup.md#claude-code

Claude Desktop

stdio

Saved config or session cookie

docs/client-setup.md#claude-desktop

Codex CLI

stdio

Saved config or self-hosted email/password

docs/client-setup.md#codex-cli

Cursor

stdio

Saved config or session cookie

docs/client-setup.md#cursor

Containerized remote deployment

HTTP

Bearer token or OAuth

docs/getting-started.md#path-c-run-from-the-docker-image

Remote MCP clients

HTTP

Bearer token or OAuth

docs/configuration-and-deployment.md#http-mode

AFFiNE Cloud

stdio or HTTP

Signed-in browser session cookie

docs/configuration-and-deployment.md#auth-strategy-matrix

Self-hosted AFFiNE

stdio or HTTP

Email/password or session cookie

docs/configuration-and-deployment.md#auth-strategy-matrix

Tool Surface

tool-manifest.json is the source of truth for canonical tool names. The MCP server exposes those tools through tools/list and tools/call; tool definitions returned by tools/list include MCP annotations that mark read-only, destructive, idempotent, and external-world behavior for client-side tool selection.

Every canonical tool also declares an MCP outputSchema for its structuredContent. Object results retain their existing top-level fields, while array and scalar results use stable { items }, { text }, or { value } envelopes. The existing text content remains unchanged for compatibility with clients that do not consume structured results.

Advertised input and output schemas omit the SDK-generated draft-07 $schema marker. Schema interpretation follows the client context, allowing clients that reject an explicit draft-07 declaration to consume the tool surface.

Domains:

  • Workspace: create, inspect, update, delete, and traverse workspaces

  • Organization: collections, collection-rule sync, workspace blueprints, and experimental organize or folder helpers

  • Documents: search, read, create, publish, move, tag, custom properties, import/export, semantic composition, template inspection and native instantiation, capability and fidelity reporting, and block-level mutation

  • Databases: create columns, add rows, update rows, inspect schema, and compose database structures from intent

  • Comments: list, create, update, delete, and resolve

  • History: version history listing

  • Users and authentication: current user, sign-in, and profile/settings

  • Notifications: list and mark notifications as read

  • Blob storage: upload, delete, and cleanup blobs

Use AFFINE_TOOL_PROFILE=read_only, core, or authoring when a deployment should expose a smaller surface than the complete full default. This is the recommended path for hosted, browser-connected, or least-privilege deployments because it reduces agent choice overload while keeping the full tool catalog available as an opt-in surface. You can also combine profiles with AFFINE_DISABLED_GROUPS such as docs.database, destructive, or admin for finer control.

Full-note replacement with replace_doc_with_markdown is destructive and requires full without disabling the destructive group. core and authoring retain incremental editing through append_markdown and update_block.

For the grouped catalog, notes, and operational caveats, see docs/tool-reference.md.

Documentation Map

Document

Purpose

docs/getting-started.md

First-run setup paths and verification

docs/client-setup.md

Client-specific configuration snippets and tips

docs/configuration-and-deployment.md

Environment variables, auth modes, Docker, HTTP mode, and deployment guidance

docs/workflow-recipes.md

End-to-end workflows and example tool sequences

docs/tool-reference.md

Tool catalog grouped by domain

docs/edgeless-canvas-cookbook.md

Edgeless canvas layout helpers and surface elements, worked end-to-end

CONTRIBUTING.md

Contributor workflow

SECURITY.md

Security reporting

Verify Your Setup

Useful CLI commands:

  • affine-mcp status - test the effective configuration

  • affine-mcp status --json - machine-readable status output

  • affine-mcp doctor - diagnose config and connectivity issues

  • affine-mcp show-config - print the effective config with secrets redacted

  • affine-mcp config-path - print the config file path

  • affine-mcp snippet <claude|cursor|codex|all> [--env] - generate ready-to-paste client config

  • affine-mcp logout - remove stored credentials

status, doctor, and the server runtime use the same environment > saved config > defaults resolution. For a self-hosted deployment with a non-standard GraphQL route, use affine-mcp login --graphql-path /your/graphql/path or set AFFINE_GRAPHQL_PATH; show-config --json prints the exact resolved graphqlEndpoint without exposing secrets.

For common failures, see:

Security and Scope

  • Never commit passwords, session cookies, or compatible bearer tokens

  • Use a dedicated least-privilege AFFiNE account for unattended deployments

  • Email/password HTTP sessions share one login and never fall back to anonymous backend requests after authentication failure

  • Use HTTPS for non-local deployments

  • Keep remote HTTP MCP listeners authenticated; bearer mode refuses a non-loopback bind without AFFINE_MCP_HTTP_TOKEN

  • Send MCP bearer tokens in the Authorization header, never in the URL

  • Re-run affine-mcp login when a saved browser session expires

  • Restrict exposed tools with AFFINE_DISABLED_GROUPS and AFFINE_DISABLED_TOOLS for least-privilege setups

  • Treat OAuth mode as a shared AFFiNE service-account deployment: it defaults to read_only, and write-capable profiles require AFFINE_OAUTH_ALLOW_SERVICE_WRITES=true

  • Use /healthz and /readyz when running the HTTP server behind a container platform or load balancer

  • Set HTTP body, session, idle, and shutdown limits explicitly for high-volume deployments

Development

Run the main quality gates before opening a PR:

npm run ci

Additional validation:

  • npm test verifies tool metadata, test-suite coverage, and the fast regression suite without requiring a live AFFiNE instance

  • npm run test:comprehensive boots a local Docker AFFiNE stack and validates the tool surface

  • npm run test:e2e runs Docker, MCP, and Playwright together

  • npm run test:playwright runs the Playwright suite only

  • Focused runners for the new high-level tool surface include npm run test:create-placement, npm run test:capabilities-fidelity, npm run test:native-template, npm run test:mutation-ack, node tests/test-database-intent.mjs, node tests/test-semantic-page-composer.mjs, node tests/test-structured-receipts.mjs, node tests/test-organize-tools.mjs, and node tests/test-supporting-tools.mjs

Live tests can mutate or delete AFFiNE data. They allow loopback targets by default and refuse non-loopback targets unless the disposable target is explicitly enabled and confirmed as documented in CONTRIBUTING.md. Never run them against production.

Local clone flow:

git clone https://github.com/dawncr0w/affine-mcp-server.git
cd affine-mcp-server
npm install
npm run build
node dist/index.js

Release Notes

License

MIT License - see LICENSE.

Support

Acknowledgments

Available Tools

95 tools
add_database_columnAdd Database ColumnA

Add a column to an existing AFFiNE database block. Supports rich-text, select, multi-select, number, checkbox, link, date types.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesColumn display name
typeNoColumn typerich-text
docIdYesDocument ID containing the database
widthNoColumn width in pixels (default 200)
optionsNoPredefined options for select/multi-select columns
workspaceIdNoWorkspace ID (optional if default set)
databaseBlockIdYesBlock ID of the affine:database block

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already indicate non-readonly, open-world, non-idempotent, non-destructive behavior. The description adds no additional behavioral context (e.g., idempotency of adding same column, authentication needs, or side effects). It aligns with annotations but doesn't expand beyond the basic action.

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 concise sentences with no redundant information. The first sentence clearly states the action and target, while the second lists supported types. Every word earns its place.

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?

While the description covers the core action and type support, it lacks details on return values, error scenarios (e.g., adding a duplicate column), or prerequisites like the existence of the database block. Given no output schema and 7 parameters, more context would improve completeness.

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% with descriptions for all parameters. The description adds value by clarifying that 'options' are for select/multi-select types and listing supported types, enhancing understanding of the 'type' and 'options' parameters beyond the schema.

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

Purpose5/5

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

The description clearly states the action ('Add a column') and the resource ('existing AFFiNE database block'), and lists the supported column types, distinguishing it from sibling tools like 'add_database_row' or 'read_database_columns'.

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

Usage Guidelines3/5

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

The description does not explicitly state when to use this tool versus alternatives (e.g., 'add_database_row', 'read_database_columns'). Usage is implied by the focus on adding columns, but no guidance on when not to use or substitutes is provided.

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

add_database_rowAdd Database RowA

Add a row to an AFFiNE database block. Provide cell values mapped by column name or column ID. Title column text is stored on the row paragraph block. Select columns auto-create options by label.

ParametersJSON Schema
NameRequiredDescriptionDefault
cellsYesMap of column name (or column ID) to cell value. For select columns, pass the display label (option auto-created if new).
docIdYesDocument ID containing the database
linkedDocIdNoLink this row to an existing doc by ID. The row will open the linked doc in center peek when clicked.
workspaceIdNoWorkspace ID (optional if default set)
databaseBlockIdYesBlock ID of the affine:database block

TDQS

A3.8/5.0
Behavior4/5

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

The description adds meaningful context beyond annotations: select columns auto-create options by label, and title column text is stored on the row paragraph block. Annotations indicate readOnlyHint=false, openWorldHint=true, etc., and the description does not contradict them. No mention of error handling or row duplication behavior, but overall good.

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 focused sentences with no wasted words. Front-loaded purpose in first sentence. Efficient and to the 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?

Given the tool's moderate complexity, annotations, and no output schema, the description covers main behaviors and parameter use. Could mention non-idempotent behavior (creating a new row each call) but is otherwise sufficient.

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 baseline is 3. The description clarifies the 'cells' map usage and behavior for select columns, adding value beyond the schema. However, it does not elaborate on other parameters like linkedDocId or workspaceId beyond what the schema already states.

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

Purpose5/5

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

The description clearly states the action ('Add a row') and the resource ('AFFiNE database block'). It provides specific details about cell value mapping by column name or ID, and behavior for title and select columns, which helps distinguish from update/delete database row tools.

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

Usage Guidelines2/5

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

No explicit guidance on when to use this tool versus alternatives (e.g., update_database_row for modifications). No prerequisites like having the docId or databaseBlockId mentioned. The description implies usage for adding rows but does not set boundaries or exclusions.

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

add_doc_to_collectionAdd Doc To CollectionA

Add an existing document id to an AFFiNE collection allow-list. Use update_collection_rules instead when membership should be rule-driven.

ParametersJSON Schema
NameRequiredDescriptionDefault
docIdYesAFFiNE document id.
workspaceIdNoAFFiNE workspace id. Omit only when AFFINE_WORKSPACE_ID is configured.
collectionIdYesAFFiNE collection id from list_collections or create_collection.

TDQS

A4.3/5.0
Behavior3/5

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

Annotations indicate mutation (readOnlyHint false) and non-idempotent, but description does not elaborate on edge cases like duplicate addition or missing collection. Adequate but not enhanced beyond annotations.

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

Conciseness5/5

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

Two sentences, no fluff, front-loaded with main action. Every sentence adds value.

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?

Simple operation with no output schema; description provides complete context for selecting and invoking the tool given sibling differentiation.

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

Parameters3/5

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

All parameters have descriptions in schema (100% coverage). Description adds no additional meaning beyond schema, meeting baseline.

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

Purpose5/5

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

Description clearly states the action (add), the resource (existing document id to AFFiNE collection allow-list), and distinguishes from sibling tool 'update_collection_rules'.

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 states the alternative tool 'update_collection_rules' for rule-driven membership, providing clear when-to-use guidance.

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

add_surface_elementAdd Surface ElementA

Add a shape, connector, text, or group to the AFFiNE edgeless canvas surface. Shapes support rect/ellipse/diamond/triangle with fill, stroke, and text. Connectors draw arrows between shapes (by id) or between absolute points. Use for building diagrams programmatically. Style fields that don't apply to the chosen element type are reported in the response 'ignored' list (mirrors update_surface_element).

ParametersJSON Schema
NameRequiredDescriptionDefault
xNoX position on canvas (shape/text; default 0).
yNoY position on canvas (shape/text; default 0).
modeNoConnector mode: 0=straight, 1=orthogonal (elbow), 2=curve (default 2). Connector only.
textNoText content (shape/text) or connector label. Replaces existing Y.Text on update.
typeYesElement type
colorNoText color. Shape default `#000000` — keep unless the fill is dark, then pass a contrasting hex. Canvas text default `--affine-text-primary-color` (theme-adaptive). Shape/text.
docIdYesDocument ID
indexNoBlockSuite fractional-index string controlling z-order. On add, defaults to a key above every existing element's index (new elements render on top). On update, replaces the stored value — pass a key less than some existing index to send-to-back, or greater to bring-to-front. Use the value returned by list_surface_elements to pick a specific position.
labelNoConnector label (stored as text on the connector). Connector only.
titleNoGroup title. Group only.
widthNoWidth (shape default 100, text default 200).
filledNoWhether shape is filled (default true). Shape only.
heightNoHeight (shape default 100, text default 30).
radiusNoCorner radius for rect (0.1 = rounded). Shape only.
strokeNoConnector stroke color (default '--affine-text-primary-color' — theme-adaptive, near-black in light / near-white in dark). Accepts any CSS color or AFFiNE palette token. Connector only.
childrenNoChild element ids. Group only.
fontSizeNoFont size (shape default 20, text default 16). Shape/text.
sourceIdNoConnector source element id. Connector only.
targetIdNoConnector target element id. Connector only.
fillColorNoFill color. Prefer the `--affine-palette-shape-<color>` family (yellow/orange/red/magenta/purple/navy/blue/green/teal/grey/white/black). These are fixed colors — AFFiNE shape colors are not theme-adaptive by design. Shape only.
shapeTypeNoShape type (default rect). Shape only.
fontWeightNoFont weight (shape default 600, text default 400). Shape/text.
strokeColorNoStroke color. Prefer the `--affine-palette-line-<color>` family (same color names as fillColor). Fixed colors, not theme-adaptive. Shape only.
strokeStyleNoStroke style. Shape/connector.
strokeWidthNoStroke width (default 2). Shape/connector.
workspaceIdNoWorkspace ID (optional if default set)
sourcePositionNoSource [x,y]: relative [0-1] if sourceId set, absolute otherwise. Connector only.
targetPositionNoTarget [x,y]: relative [0-1] if targetId set, absolute otherwise. Connector only. When both source/target are bound by id and neither position is provided, endpoints snap to the BlockSuite side-midpoint facing the other endpoint so connectors flow in a clear direction. Pass [0.5,0] top, [0.5,1] bottom, [0,0.5] left, [1,0.5] right to force a specific side.
rearEndpointStyleNoRear endpoint style (default Arrow). Connector only.
frontEndpointStyleNoFront endpoint style (default None). Connector only.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already indicate mutability and non-destructiveness. Description adds that inapplicable fields are reported in the 'ignored' list and explains element-type-specific behaviors (shapes vs connectors). No contradictions.

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

Conciseness5/5

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

Three sentences, each earning its place: purpose, detailed feature description, and usage guidance. No wasted words.

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

Completeness4/5

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

With 30 parameters and no output schema, the description provides a high-level map of element types and key behavior. It covers the essential behavioral nuance (ignored list) but could elaborately tie all parameters together, though the schema descriptions are rich.

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 has 100% coverage. Description adds context beyond schema by explaining shape capabilities, connector drawing modes, and the ignored field behavior. Adds value despite high schema 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?

The description clearly states the verb 'Add' and the resource 'shape, connector, text, or group to the AFFiNE edgeless canvas surface'. It distinguishes from sibling tools like 'update_surface_element' and 'delete_surface_element' by focusing on creation.

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 recommends usage 'for building diagrams programmatically' and references 'update_surface_element' for ignored list behavior. Could more directly state when not to use, but context is clear.

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

add_tag_to_docAdd Tag To DocumentA

Attach a workspace tag to a document, creating the workspace tag option if needed. This updates workspace metadata and attempts to sync the document's own metadata.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagYesTag name to attach to the document.
docIdYesAFFiNE document id.
workspaceIdNoAFFiNE workspace id. Omit only when AFFINE_WORKSPACE_ID is configured.

TDQS

A4/5.0
Behavior4/5

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

Beyond annotations (not read-only, not idempotent, not destructive), the description adds that the tool updates workspace metadata and attempts to sync document metadata. It also mentions creating the tag option if needed, which is additional behavioral context.

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

Conciseness5/5

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

The description is two sentences, front-loaded with the main verb, and contains no unnecessary words. Every sentence adds value.

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

Completeness4/5

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

Given the simplicity of the tool (3 params, no output schema), the description covers the purpose and key side effects. It could optionally explain what happens if the tag already exists, but it is largely complete.

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

Parameters3/5

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

With 100% schema coverage, the baseline is 3. The description does not add extra meaning to individual parameters; it only explains the overall effect.

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

Purpose5/5

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

The description clearly states the action (attach a workspace tag) and the resource (document), and distinguishes from sibling tools like create_tag and remove_tag_from_doc by mentioning creation if needed.

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

Usage Guidelines3/5

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

The description implies the tool is for attaching tags but does not explicitly state when to use or provide alternatives. It could mention that create_tag is for creating tags without attaching, or that remove_tag_from_doc is for removal.

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

analyze_doc_fidelityAnalyze Document FidelityA
Read-onlyIdempotent

Inspect a document for markdown export fidelity risk, including unsupported AFFiNE block flavours and risky content paths.

ParametersJSON Schema
NameRequiredDescriptionDefault
docIdYesAFFiNE document id.
workspaceIdNoAFFiNE workspace id. Omit only when AFFINE_WORKSPACE_ID is configured.

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint false, so the safety profile is clear. Description adds context about unsupported flavours and risky paths, but doesn't disclose additional behavioral traits like rate limits or return format beyond 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?

Single, well-structured sentence that conveys purpose and specific aspects without redundancy. Every word earns its place.

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?

Given the tool's simplicity and rich annotations, the description is mostly complete. However, it lacks any mention of the output format or return value, which would be helpful for an inspection tool. No output schema is provided, so the description should clarify what the agent can expect.

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?

Input schema descriptions are clear and cover 100% of parameters. Description does not add any additional meaning beyond the schema, so baseline score of 3 is appropriate.

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

Purpose5/5

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

Description states specific verb 'Inspect' and resource 'document for markdown export fidelity risk'. It mentions key aspects like 'unsupported AFFiNE block flavours' and 'risky content paths'. While it doesn't explicitly differentiate from siblings like 'export_with_fidelity_report', the focus on risk inspection is distinct enough.

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

Usage Guidelines3/5

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

No explicit when-to-use or when-not-to-use guidance. The description implies use before export, but no alternatives or exclusions are mentioned. Adequate but not explicit.

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

append_blockAppend BlockA

Append document blocks with canonical types and legacy aliases (supports placement + strict validation).

ParametersJSON Schema
NameRequiredDescriptionDefault
xNoX position on the edgeless canvas for frame/edgeless_text/note (default 0). Prefer ≥40px between sibling bounds; BlockSuite does not auto-arrange.
yNoY position on the edgeless canvas for frame/edgeless_text/note (default 0).
urlNoURL for bookmark/embeds
htmlNoRaw html for embed_html
nameNoAttachment file name
rowsNoTable row count
sizeNoAttachment/image file size in bytes
textNoBlock content text
typeYesBlock type. Canonical: paragraph|heading|quote|list|code|divider|callout|latex|table|bookmark|image|attachment|embed_youtube|embed_github|embed_figma|embed_loom|embed_html|embed_linked_doc|embed_synced_doc|embed_iframe|database|data_view|surface_ref|frame|edgeless_text|note. Legacy aliases remain supported.
docIdYesAFFiNE document id.
embedNoAttachment embed mode
latexNoLatex expression
levelNoHeading level for type=heading
styleNoList style for type=list
widthNoWidth for frame/edgeless_text/note.
designNoDesign payload for embed_html
heightNoHeight for frame/edgeless_text/note. When `markdown` is set and height is omitted, an over-estimate is computed from the content — AFFiNE's render-time ResizeObserver corrects `prop:xywh` to the true DOM-measured height on first browser open.
pageIdNoTarget page/doc id for linked/synced doc embeds
strictNoStrict validation mode (default true)
captionNoCode caption when type is code
checkedNoTodo state when type is todo
columnsNoTable column count
paddingNoDefault padding (px) for `childElementIds` auto-sizing on frames (each side, plus +30px title band) and fallback gap for `stackAfter` (default 40).
languageNoCode language when type is code
markdownNoWhen type='note', parse this markdown into heading/paragraph/list/code child blocks inside the note (BlockSuite-native: mirrors what happens when you paste markdown into an edgeless note). Takes precedence over 'text' for note children. Ignored for other block types.
mimeTypeNoAttachment mime type
sourceIdNoBlob source id for image/attachment
viewModeNoInitial data view preset for type=database or type=data_view. Defaults: database=table, data_view=kanban
iframeUrlNoOverride iframe src for embed_iframe
placementNoOptional insertion target/position
referenceNoTarget id for surface_ref
backgroundNoBackground for frame/note. Frame default 'transparent'. For notes, prefer AFFiNE's adaptive `--affine-note-background-<color>` family — `blue` / `purple` / `yellow` / `green` / `teal` / `red` / `orange` / `magenta` / `grey` / `white` / `black`. For specific per-theme colors, pass a `{light, dark}` hex object like `{light:'#fff', dark:'#252525'}`.
refFlavourNoTarget flavour for surface_ref (e.g. affine:frame)
stackAfterNoLayout helper — position this block relative to one or more existing edgeless blocks. Picks the furthest anchor in `direction` for the stack axis, and centers the new block on the anchor group's union on the orthogonal axis (matches how BlockSuite aligns selection-derived blocks; reduces to inherit-anchor-x when widths match). Caller-provided x/y on the orthogonal axis still wins. Works for frame/note/edgeless_text. Example: `stackAfter: { blockId: [f1, f2, f3], gap: 80 }` stacks below whichever column frame ends lowest, centered across all three. Note heights shift at first render (page-root grows with the title, content notes shrink/grow with their children); give extra gap and fix up with `update_edgeless_block` if the down/right chain drifts.
workspaceIdNoAFFiNE workspace id. Omit only when AFFINE_WORKSPACE_ID is configured.
bookmarkStyleNoBookmark card style
childElementIdsNoFor type='frame' only. The frame's contents. Accepts ids of surface elements (shapes/connectors/groups) AND edgeless blocks (notes/frames/edgeless-text) — BlockSuite's prop:childElementIds holds both, matching what the editor writes when you drag a note into a frame. Dragging the frame drags every owned member. Ids that don't resolve come back under 'missing'. When width/height are omitted the frame is sized to the union of resolvable child bounds + padding + a 30px title band.

TDQS

A3.5/5.0
Behavior3/5

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

Annotations indicate mutation (readOnlyHint=false) but description does not elaborate on side effects, idempotency, or destructive potential. The mention of 'strict validation' adds minor behavioral context, but overall the description adds little beyond what annotations already provide.

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?

Single sentence, front-loaded with key information, no wasted words. Perfectly concise for the high-level purpose.

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?

Given the complexity (37 params, nested objects, no output schema), the description is too brief. It does not explain the variety of block types or placement options, relying heavily on the schema. Could be more complete to aid agent understanding.

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 detailed parameter descriptions. The tool description adds no new parameter meaning beyond referencing 'placement' and 'strict', which are already documented in 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?

The description clearly states the action (append), the resource (document blocks), and key features (canonical types, legacy aliases, placement, strict validation). It differentiates from sibling tools like append_markdown or delete_block.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives (e.g., append_markdown, update_edgeless_block). Does not mention prerequisites, exclusions, or comparison to siblings.

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

append_markdownAppend MarkdownB

Append markdown content to an existing AFFiNE document.

ParametersJSON Schema
NameRequiredDescriptionDefault
docIdYesAFFiNE document id.
strictNo
markdownYesMarkdown content to append
placementNoOptional insertion target/position
workspaceIdNoAFFiNE workspace id. Omit only when AFFINE_WORKSPACE_ID is configured.

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already indicate the tool is not read-only, not idempotent, and not destructive. The description adds no further behavioral context (e.g., effect on document structure, performance implications) beyond 'append'.

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

Conciseness4/5

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

The description is a single clear sentence with no redundancy. It could benefit from a structured format, but conciseness is appropriate for a straightforward tool.

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?

The description omits context like document existence requirement, default placement behavior, and success feedback. With no output schema, more detail would be helpful.

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 80%, with most parameters having descriptions. The tool description does not add extra meaning beyond the schema, meeting the baseline for this coverage level.

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

Purpose4/5

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

The description clearly states the action (append markdown) and target (existing AFFiNE document), but does not distinguish from sibling tools like append_block or replace_doc_with_markdown.

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

Usage Guidelines2/5

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

No information is provided about when to use this tool versus alternatives, such as when to append vs replace, or prerequisites like document existence.

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

append_semantic_sectionAppend Semantic SectionB

Append a semantic section to an existing AFFiNE document by heading title and native block composition.

ParametersJSON Schema
NameRequiredDescriptionDefault
docIdYesAFFiNE document id.
bulletsNoBulleted items to append under the new section.
calloutsNoCallout blocks to append under the new section.
paragraphsNoParagraphs to append under the new section.
workspaceIdNoAFFiNE workspace id. Omit only when AFFINE_WORKSPACE_ID is configured.
sectionTitleYesHeading text for the new semantic section.
afterSectionTitleNoOptional existing section heading to append after.

TDQS

B3.1/5.0
Behavior3/5

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

Annotations already indicate non-read-only and non-destructive behavior. The description adds that the tool appends a semantic section to an existing document, but does not elaborate on side effects, permission requirements, or behavior when the specified section title already exists. It provides moderate transparency beyond annotations.

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

Conciseness4/5

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

The description is a single sentence that clearly states the action and key concepts. It is concise without being overly terse, though it could benefit from slightly more detail. No wasted words.

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

Completeness2/5

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

Given the tool has 7 parameters and no output schema, the description should explain what the tool returns, prerequisites (e.g., document existence), and error conditions. It lacks this information, making it incomplete for an agent to fully understand the tool's behavior.

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

Parameters3/5

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

The input schema has 100% description coverage, so the schema already documents each parameter. The description does not add new meaning beyond 'by heading title and native block composition', which is a high-level summary. Baseline score of 3 is appropriate.

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

Purpose4/5

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

The description specifies the verb 'append', the resource 'semantic section', and the mechanism 'by heading title and native block composition', making the tool's purpose clear. However, it does not explicitly distinguish itself from sibling tools like 'append_block' or 'create_semantic_page', which slightly reduces differentiation.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives such as 'append_block' or 'append_markdown'. There are no explicit conditions, prerequisites, or exclusions mentioned, leaving the agent to infer usage context.

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

cleanup_blobsCleanup Deleted BlobsA
Destructive

Permanently release blobs that were already marked deleted in a workspace. This is destructive cleanup and should be used only after confirming deleted blobs are no longer needed.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdYesAFFiNE workspace id whose deleted blobs should be released.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already indicate destructive=true and readOnly=false. The description reinforces this with 'destructive', adds condition 'already marked deleted', and warns about confirmation. No contradictions.

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

Conciseness5/5

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

Two sentences, front-loaded with action and key constraints. No unnecessary words.

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

Completeness5/5

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

Given the tool's simplicity (one parameter, no output schema), the description fully covers purpose, usage guidance, and behavioral implications.

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 description's reference to 'workspaceId' adds no meaning beyond the schema's description. Baseline score 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 clearly states it permanently releases blobs already marked deleted, distinguishing it from the sibling 'delete_blob' which likely just marks for deletion.

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 says to use only after confirming deleted blobs are no longer needed, providing clear context. Lacks explicit 'when not to use' or alternative tool references.

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

clear_doc_propertyClear Document PropertyC

Remove a custom property value from a document (property by id or name).

ParametersJSON Schema
NameRequiredDescriptionDefault
docIdYes
propertyYesProperty id or name
workspaceIdNo

TDQS

C2.9/5.0
Behavior2/5

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

Annotations indicate readOnlyHint false and destructiveHint false, but the description does not clarify potential side effects, error conditions, or required permissions. The mutation behavior is implied but not detailed.

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

Conciseness4/5

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

The description is a single sentence with no extraneous words. However, it could be more informative without sacrificing brevity.

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

Completeness2/5

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

The tool lacks an output schema, and the description does not explain return values or behavior in edge cases (e.g., missing property). Given the complexity of a mutation tool with three parameters, the description is insufficient.

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

Parameters2/5

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

Schema description coverage is only 33% (only 'property' has a description). The description adds no additional meaning beyond what the schema already provides for 'property', and it offers no context for 'docId' or 'workspaceId'.

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

Purpose5/5

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

The description explicitly states the action (remove), the resource (custom property value from a document), and the identification method (by id or name). This clearly distinguishes it from siblings like 'set_doc_property' and 'create_custom_property'.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives. It does not mention prerequisites (e.g., property must exist) or scenarios where other tools like 'delete_custom_property' would be more appropriate.

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

compose_database_from_intentCompose Database From IntentA

Create a useful AFFiNE database/data-view from declarative intent. Supports task_board and issue_tracker presets with starter schema, kanban view, and optional starter rows.

ParametersJSON Schema
NameRequiredDescriptionDefault
docIdYesDocument ID containing the database
titleNoOptional database title. Defaults to the intent preset title.
intentYesDeclarative database intent to compose.
seedRowsNoOptional starter rows. If omitted, the preset starter rows are used.
placementNoOptional insertion target/position
workspaceIdNoWorkspace ID (optional if default set)

TDQS

A3.8/5.0
Behavior3/5

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

Annotations indicate a write operation (readOnlyHint=false). Description adds that presets include starter schema and kanban view, but does not clarify behavior if doc already has content or effects on existing blocks. No contradiction with annotations.

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

Conciseness5/5

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

Two sentences, front-loaded with essential information, no redundant words.

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 6 parameters, nested objects, and no output schema, the description covers core functionality. Could explain what the tool returns or prerequisites (e.g., doc existence), but acceptable for a creation tool.

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

Parameters3/5

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

Schema covers all 6 parameters (100% coverage). Description adds nuance for seedRows (preset vs custom). Minimal added value beyond 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?

Description clearly states it creates a database from intent, naming presets and components. Differentiates from sibling tools that are more atomic (e.g., add_database_column, add_database_row).

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

Usage Guidelines3/5

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

Implies use for high-level database creation from intent, but no explicit when-to-use or when-not-use, and no mention of alternative tools for manual construction.

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

create_collectionCreate CollectionA

Create a new AFFiNE sidebar collection with optional rules. This writes workspace sidebar metadata but does not create documents.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesCollection name
rulesNoOptional rule set to initialize the collection with.
workspaceIdNoAFFiNE workspace id. Omit only when AFFINE_WORKSPACE_ID is configured.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations (readOnlyHint=false, destructiveHint=false) are complemented by description stating it writes sidebar metadata but does not create documents. This adds meaningful behavioral context beyond annotations, though it omits details like idempotency or side effects.

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, no redundant words. First sentence states purpose, second provides key behavioral constraint. Efficient and front-loaded.

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?

Description is adequate but omits return value (no output schema). It covers basic functionality but could be more complete by explaining the rules structure or what the response looks like.

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 descriptions for all parameters. The description adds minimal extra meaning beyond schema but provides context that the collection is sidebar metadata. Baseline 3 is appropriate.

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

Purpose5/5

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

Description clearly specifies the action ('Create'), resource ('AFFiNE sidebar collection'), and scope ('with optional rules', 'does not create documents'). It distinguishes from siblings like add_doc_to_collection by clarifying it only writes metadata.

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

Usage Guidelines3/5

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

Description implies when to use (when creating a new collection) but does not explicitly state when not to use or mention alternatives. It contrasts with document creation but lacks explicit guidance against other use cases.

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

create_commentCreate CommentA

Create a new comment on an existing document. This writes collaboration state; use update_comment when editing an existing comment instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
docIdYesDocument id that will receive the new comment.
contentYesComment content accepted by AFFiNE. Plain strings are normalized to { text }, and rich AFFiNE payload objects are passed through.
docModeNoDocument surface for the comment. Defaults to page.
docTitleNoOptional document title stored with the comment metadata.
mentionsNoOptional AFFiNE user ids to mention in the comment.
workspaceIdNoAFFiNE workspace id. Omit only when AFFINE_WORKSPACE_ID is configured.

TDQS

A4.6/5.0
Behavior4/5

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

Description says 'This writes collaboration state,' confirming it's a mutation, which aligns with annotations (readOnlyHint=false). No contradictions. Could add auth or response details, but with annotations present, this is sufficient.

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 only. First sentence states purpose, second gives usage alternative. No wasted words.

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

Completeness4/5

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

No output schema, but description covers key aspects: creation, usage alternative, parameter nuance. Could mention success response, but not essential for selection.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. Description adds nuance for 'content' parameter: explains normalization of plain strings and pass-through of rich payloads. This provides value beyond 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?

Clearly states it creates a new comment on an existing document. Distinguishes from sibling 'update_comment' by saying 'use update_comment when editing an existing comment instead.'

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

Usage Guidelines5/5

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

Explicitly says when to use this tool (create new comment) and when not to (use update_comment for editing). Also mentions it writes collaboration state, indicating it's a write operation.

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

create_custom_propertyCreate Custom PropertyA

Create a workspace-wide custom property definition (text, number, checkbox, or date). Returns its propertyId.

ParametersJSON Schema
NameRequiredDescriptionDefault
iconNoOptional icon name
nameYesDisplay name of the property
typeYesProperty value type
workspaceIdNo

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already indicate non-read-only and non-destructive. Description adds return value info but lacks behavioral details such as idempotency, error handling, or side effects. Adequate but minimal extra value.

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

Conciseness5/5

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

Two concise sentences with no fluff. Front-loads the core action and return value.

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

Completeness4/5

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

No output schema, but description mentions returned propertyId. Covers purpose, type constraints, and return. Missing explanation of workspaceId parameter, but it is optional. Sufficient for a straightforward creation tool.

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

Parameters3/5

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

Schema describes 3 of 4 parameters (75% coverage). Description does not add meaning beyond the schema. WorkspaceId parameter is not explained. Baseline score applies as schema covers most parameters.

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

Purpose5/5

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

Description clearly states it creates a workspace-wide custom property definition, lists the valid types, and mentions the return value. Distinguishes from sibling tools like delete_custom_property and set_doc_property.

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

Usage Guidelines3/5

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

Implies workspace-level use but does not explicitly state when to use this tool vs. alternatives like set_doc_property for document-level properties. No when-not-to-use guidance.

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

create_docCreate DocumentA

Create a new AFFiNE document with optional content. If parentDocId is provided, the new doc is linked into the sidebar tree immediately. If folderId is provided, the doc is placed inside that folder in the sidebar.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleNoOptional initial document title.
contentNoOptional initial plain text or markdown-like content.
folderIdNoOptional folder ID to place the doc in. Use list_organize_nodes to find folder IDs.
parentDocIdNoOptional parent doc to link the new doc under in the sidebar.
workspaceIdNoAFFiNE workspace id. Omit only when AFFINE_WORKSPACE_ID is configured.

TDQS

A4.2/5.0
Behavior4/5

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

Adds context beyond annotations: explains that parentDocId links the doc to the sidebar tree and folderId places it in a folder. Annotations already indicate non-destructive write, so description enriches with specific side effects.

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, front-loaded with main purpose, then specific conditions. No extraneous 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?

Covers main behavior and key parameter effects. No output schema, so return value not needed. Missing error cases or prerequisites, but adequate for a create tool with simple inputs.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. Description adds value by explaining the real-world effect of parentDocId and folderId parameters (sidebar linking and folder placement), which is not in schema descriptions.

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?

Clearly states 'create a new AFFiNE document' with optional content, and specifies behavioral details about parentDocId and folderId. Differentiates from sibling tools like create_folder and create_doc_from_markdown.

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

Usage Guidelines3/5

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

Implies usage through parameter descriptions, but does not explicitly state when to use this tool versus alternatives like create_doc_from_markdown or append_markdown. No when-not or alternatives provided.

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

create_doc_from_markdownCreate Document From MarkdownA

Create a new AFFiNE document and import markdown content. Use parentDocId to automatically embed the new doc into a parent, making it visible in the sidebar instead of being an orphan.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleNo
strictNo
markdownYesMarkdown content to import
parentDocIdNoIf provided, the new doc is automatically embedded into this parent doc as a linked child (visible in sidebar).
workspaceIdNoAFFiNE workspace id. Omit only when AFFINE_WORKSPACE_ID is configured.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations show it's a write operation with no idempotency or destructiveness. The description adds value by explaining the embedding behavior (parentDocId) and that the doc would be 'visible in the sidebar instead of being an orphan'. No contradictions with annotations.

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

Conciseness5/5

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

Two concise sentences front-loaded with the core purpose. Every word adds value, zero fluff.

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

Completeness4/5

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

Given 5 parameters and no output schema, the description covers the main function and key parameter (parentDocId). It explains embedding but omits details on error states or title handling. Adequate for a create tool.

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

Parameters3/5

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

Schema description coverage is 60% (descriptions for markdown, parentDocId, workspaceId, but not title or strict). The description adds meaning for parentDocId (embedding) but not for title or strict. Baseline 3 is appropriate as the description partially compensates.

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

Purpose5/5

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

The description clearly states the tool creates a new AFFiNE document from markdown content. It distinguishes from siblings like create_doc (empty doc) and append_markdown (append to existing docs) by specifying importing markdown and optional embedding via parentDocId.

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

Usage Guidelines4/5

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

The description provides guidance on when to use this tool (creating docs with markdown) and mentions a key parameter (parentDocId) for embedding. However, it doesn't explicitly state when to use alternatives like create_doc or append_markdown, leaving some inference to the agent.

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

create_folderCreate FolderA

Experimental: create an AFFiNE organize folder node in the sidebar tree. This only changes sidebar organization, not document content.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesFolder name
indexNoOptional fractional index. Defaults to append-after-last.
parentIdNoParent folder id. Omit for root-level folders.
workspaceIdNoAFFiNE workspace id. Omit only when AFFINE_WORKSPACE_ID is configured.

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already indicate non-readonly and non-destructive behavior. The description adds context that it only changes sidebar organization without modifying document content. However, it does not disclose potential side effects or permissions needed.

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 concise sentences: first states the purpose, second clarifies the scope. No unnecessary words or repetition.

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

Completeness4/5

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

Given the presence of annotations and full schema coverage, the description adequately covers the tool's main behavior and non-destructive nature. It could mention the output (created node id) but is not required without an output 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 documentation coverage is 100%, so parameters are fully described in the schema. The description adds no additional semantic value beyond listing the folder name and optional parameters.

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

Purpose5/5

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

The description clearly states the action 'create an AFFiNE organize folder node' and specifies the location 'in the sidebar tree'. It distinguishes itself from other creation tools by clarifying that it only affects sidebar organization, not document content.

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

Usage Guidelines2/5

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

No explicit guidance on when to use this tool versus alternatives like create_collection or create_tag. The only hint is 'Experimental' which indicates instability but not usage context.

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

create_semantic_pageCreate Semantic PageA

Create an AFFiNE-native page with intentional section structure and native block composition.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleNoPage title.
pageTypeNoSemantic page template to seed default sections.
sectionsNoOptional explicit section structure. If omitted, the page type defaults are used.
parentDocIdNoOptional parent doc to link the new page under in the sidebar.
workspaceIdNoAFFiNE workspace id. Omit only when AFFINE_WORKSPACE_ID is configured.

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, openWorldHint=true, idempotentHint=false, destructiveHint=false. The description adds minimal behavioral context beyond creating a page. It doesn't specify side effects like sidebar linking or template application details, but annotations cover the safety profile adequately.

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?

Single sentence, front-loaded with the key action ('Create an AFFiNE-native page'). No redundant phrases. Very concise.

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?

Given full schema coverage and standard annotations, the description is minimally complete. However, it lacks explanation of what a 'Semantic Page' is or guidance on choosing pageType templates. With many sibling creation tools, more context would help.

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 has 100% description coverage for all 5 parameters. The description does not add extra meaning beyond what the schema provides. Baseline of 3 is appropriate as no compensation is needed.

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

Purpose4/5

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

The description clearly states it creates an AFFiNE-native page with intentional section structure and native block composition. It distinguishes from siblings like create_doc or create_doc_from_markdown by emphasizing 'semantic' structure, but does not explicitly differentiate.

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

Usage Guidelines3/5

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

The description implies use for creating structured pages with sections, but provides no explicit when-to-use or when-not-to-use guidance. No alternatives are mentioned, leaving the agent to infer context from the name and schema.

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

create_tagCreate TagA

Create a workspace-level tag entry for future reuse. This does not attach the tag to a document; use add_tag_to_doc for that.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagYesTag name to create in the workspace tag registry.
workspaceIdNoAFFiNE workspace id. Omit only when AFFINE_WORKSPACE_ID is configured.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already indicate it's a non-read, non-destructive mutation. Description adds workspace-level scope and clarifies it doesn't attach to doc. No contradictions. Could mention any side effects or permissions, but is sufficient given annotation presence.

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 concise sentences, no wasted words. Front-loaded with purpose and quickly provides exclusion guidance.

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 simple creation tool with 2 parameters, good annotations, and no output schema, the description fully covers what the tool does and when to use it. No gaps.

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 both parameters have clear descriptions. Description adds no additional meaning beyond the schema, so baseline 3 is appropriate.

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

Purpose5/5

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

Description clearly states the action (create), resource (tag), and scope (workspace-level). It explicitly distinguishes from the sibling tool 'add_tag_to_doc', leaving no ambiguity.

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 states when to use (creating a tag for future reuse) and when not (to attach to a document), and names the alternative tool 'add_tag_to_doc'.

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

create_workspaceCreate WorkspaceA

Create a new workspace with initial document (accessible in UI)

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesWorkspace name
avatarNoAvatar emoji or URL

TDQS

A4/5.0
Behavior4/5

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

Annotations already indicate mutation (readOnlyHint=false) and non-destructiveness. Description adds the side effect of creating an initial document, which goes beyond annotations. However, no discussion of authorization, error cases, or idempotency.

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?

Single sentence, no filler. Action is front-loaded. Concise and efficient.

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

Completeness4/5

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

For a simple creation tool with 2 parameters and annotations present, the description is fairly complete. However, lacks guidance on uniqueness constraints or error conditions.

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 provides full coverage for both parameters (name, avatar). Description does not add parameter-specific guidance, 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?

Description clearly states verb (create) and resource (workspace), and adds specificity about initial document being accessible in UI. This distinguishes from update and deletion siblings.

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

Usage Guidelines3/5

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

No explicit when/not or alternatives provided. Implied that this is for creation, but no comparison to siblings like create_workspace_blueprint.

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

create_workspace_blueprintCreate Workspace BlueprintA

Create a simple AFFiNE organize folder blueprint with one root folder and optional child folders. This is a convenience wrapper around create_folder.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdNoAFFiNE workspace id. Omit only when AFFINE_WORKSPACE_ID is configured.
rootFolderNameYesRoot folder name
childFolderNamesNoOptional child folder names to seed under the root folder.

TDQS

A4/5.0
Behavior3/5

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

Annotations already provide readOnlyHint=false and destructiveHint=false. The description adds that it is a wrapper and creates a blueprint, but does not detail side effects like behavior on existing folders or error conditions. It is adequate given the annotations, but not rich.

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

Conciseness5/5

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

The description is two sentences, no wasted words, and directly states the tool's purpose and relationship to create_folder. It is optimally concise.

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

Completeness4/5

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

Given the tool's simplicity, the schema and annotations cover most essentials. The description lacks return value information, but as a convenience wrapper, the agent can infer it likely returns similar results to create_folder. Otherwise, it is complete enough for this complexity.

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

Parameters3/5

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

Schema coverage is 100%, so the baseline is 3. The description adds no additional meaning beyond the schema, simply restating that it creates a root with optional child folders.

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

Purpose5/5

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

The description clearly states it creates a 'simple AFFiNE organize folder blueprint with one root folder and optional child folders' and explicitly positions itself as a convenience wrapper around create_folder. This distinguishes it from the sibling create_folder and other tools.

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

Usage Guidelines4/5

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

The description indicates it is a convenience wrapper around create_folder, which implies it should be used when you want to create a folder structure in one call rather than multiple calls. However, it does not explicitly mention when not to use it or provide alternative tools.

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

current_userCurrent UserA
Read-onlyIdempotent

Return the currently authenticated AFFiNE user profile. Use this read-only check to verify credentials before workspace or document operations.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds the context of credential verification, which is useful and consistent with annotations.

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

Conciseness5/5

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

Two sentences, no wasted words. Purpose and usage are stated upfront.

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?

Simple tool with adequate description. Covers what it returns, when to use it, and its read-only nature. No output schema needed.

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?

No parameters. Baseline score of 4 for 0-parameter tools. No additional parameter information needed.

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?

Clearly states it returns the current authenticated user profile. Verb 'return' and resource 'user profile' are specific and distinguish from all sibling tools.

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

Usage Guidelines4/5

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

Explicitly tells to use before workspace or document operations to verify credentials, providing clear usage context. No mention of when not to use, but that's less critical for a simple read tool.

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

delete_blobDelete BlobA
Destructive

Delete a blob from AFFiNE workspace storage. Set permanently only when the blob should bypass recoverable deletion.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYesBlob key returned by upload_blob or AFFiNE document metadata.
permanentlyNoIf true, permanently delete the blob instead of marking it deleted.
workspaceIdYesAFFiNE workspace id that owns the blob.

TDQS

A4/5.0
Behavior3/5

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

Annotations already indicate destructiveHint: true. The description adds the nuance of recoverable vs permanent deletion via the 'permanently' parameter, but does not explain default behavior (soft delete?) or side effects.

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 consists of two clear sentences with no redundant information. It is front-loaded and efficiently communicates the tool's purpose and a key usage nuance.

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

Completeness4/5

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

For a simple 3-parameter tool with no output schema, the description covers the core behavior and the parameter nuance. It does not address error cases or return values, but these are adequately handled by the schema and annotations.

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 baseline is 3. The description adds value by explaining the 'permanently' parameter's purpose, but does not provide additional detail beyond the schema for other parameters.

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

Purpose5/5

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

The description clearly states the action ('Delete a blob'), the resource ('blob'), and the scope ('from AFFiNE workspace storage'). This distinguishes it from siblings like 'upload_blob' and 'cleanup_blobs'.

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

Usage Guidelines4/5

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

It provides guidance on when to set the 'permanently' parameter ('only when the blob should bypass recoverable deletion'). However, it lacks explicit alternatives or when-not-to-use context, though the sibling list includes many different resource types.

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

delete_blockDelete BlockA
Destructive

Delete a block by id. Removes descendants and unlinks from the parent's sys:children by default; set deleteChildren=false to keep descendants orphaned (for re-parenting), or pruneConnectors=true to also drop surface connectors referencing any deleted id. Refuses affine:page — use delete_doc for whole docs.

ParametersJSON Schema
NameRequiredDescriptionDefault
docIdYesDocument ID
blockIdYesBlock id to delete.
workspaceIdNoWorkspace ID (optional if default set)
deleteChildrenNoAlso delete descendants (default true).
pruneConnectorsNoAlso delete connectors bound to any deleted id (default false).

TDQS

A4.9/5.0
Behavior5/5

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

Discloses default behavior (removes descendants), and describes effects of deleteChildren and pruneConnectors. No contradiction with annotations.

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

Conciseness5/5

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

Three sentences, no fluff, front-loaded with the core action.

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?

Covers key behaviors, options, and exclusions adequately for a destructive block tool with no output schema.

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

Parameters4/5

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

Schema covers all parameters with descriptions, but description adds practical context for deleteChildren and pruneConnectors 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?

Description clearly states it deletes a block by ID, and explicitly distinguishes from delete_doc for whole pages ('Refuses affine:page — use delete_doc for whole docs.').

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

Usage Guidelines5/5

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

Explicitly tells when not to use (for pages, use delete_doc) and describes options for controlling child deletion and connector pruning.

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

delete_collectionDelete CollectionA
Destructive

Delete an AFFiNE sidebar collection. This removes the collection metadata but does not delete the documents it referenced.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdNoAFFiNE workspace id. Omit only when AFFINE_WORKSPACE_ID is configured.
collectionIdYesAFFiNE collection id from list_collections or create_collection.

TDQS

A4/5.0
Behavior4/5

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

The description discloses that only metadata is removed and documents are preserved, adding valuable context beyond the destructiveHint annotation. It clarifies the non-destructive effect on documents.

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 front-load the core action and key behavioral nuance. No superfluous words; every sentence adds essential 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?

For a straightforward deletion tool with full schema coverage and annotations, the description is nearly complete. It could mention permission requirements or irreversibility, but the core behavior is well covered.

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

Parameters3/5

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

The schema covers 100% of parameters with descriptions, so the description adds no additional parameter meaning. Baseline score of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool deletes an AFFiNE sidebar collection, with the critical clarification that it does not delete referenced documents. This distinguishes it from related tools like delete_doc.

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

Usage Guidelines3/5

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

The description implies the tool is for deleting collection metadata only, but does not explicitly state when to use it versus alternatives (e.g., delete_doc, delete_tag). No direct guidance on when not to use it.

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

delete_commentDelete CommentA
Destructive

Delete an existing comment by id. This is destructive for that comment; use resolve_comment when you only want to mark a thread resolved.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesComment id returned by list_comments or create_comment.

TDQS

A4.5/5.0
Behavior4/5

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

The description states 'This is destructive for that comment', which aligns with the 'destructiveHint: true' annotation and adds context that the destruction is limited to the specific comment. It adds value beyond the annotation by specifying the scope of destruction.

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 extremely concise with just two sentences, yet it covers the essential purpose, usage guidance, and behavioral note. No unnecessary words.

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 simple deletion tool with one parameter, no output schema, and clear annotations, the description covers the core purpose, alternative usage, and behavioral impact. It is fully adequate for an agent to understand and use the tool correctly.

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

Parameters3/5

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

The input schema already has a well-described 'id' parameter with 100% coverage. The tool description does not add any additional meaning or context about the parameter beyond what the schema provides, so a baseline score of 3 is appropriate.

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

Purpose5/5

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

The description clearly states 'Delete an existing comment by id', which is a specific verb and resource. It also distinguishes itself from the sibling tool 'resolve_comment' by explaining the difference in intent.

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 explicitly tells when to use this tool (delete a comment) and when not to ('use resolve_comment when you only want to mark a thread resolved'). This provides clear guidance on alternatives.

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

delete_custom_propertyDelete Custom PropertyA
Destructive

Soft-delete a workspace custom property definition (by propertyId or name). Existing values are hidden.

ParametersJSON Schema
NameRequiredDescriptionDefault
propertyYesProperty id or name
workspaceIdNo

TDQS

A3.9/5.0
Behavior4/5

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

The description adds valuable behavioral context beyond annotations by specifying 'soft-delete' and 'existing values are hidden,' which clarifies the non-destructive nature despite the destructiveHint annotation. It does not fully explain reversibility or permissions, but the addition is meaningful.

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 a single sentence of 12 words, front-loading the action and resource with no extraneous information. Every word earns its place.

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?

Given the tool has two parameters and no output schema, the description adequately conveys the core action but lacks details on error handling, permissions, or impact on associated data. For a destructive tool, more context would be beneficial.

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

Parameters3/5

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

Schema coverage is 50% (only 'property' is described in the description, while 'workspaceId' is not). The description adds meaning for the 'property' parameter (id or name) but leaves 'workspaceId' unexplained, providing partial compensation.

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

Purpose5/5

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

The description clearly states the verb (soft-delete), the resource (workspace custom property definition), and the identification method (by propertyId or name), distinguishing it from siblings like create_custom_property or clear_doc_property.

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

Usage Guidelines3/5

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

The description implies usage through the resource type but does not explicitly state when to use this tool versus alternatives, nor does it mention prerequisites or exclusions. The agent must infer context from sibling tool names.

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

delete_database_rowDelete Database RowB
Destructive

Delete a row from an AFFiNE database block.

ParametersJSON Schema
NameRequiredDescriptionDefault
docIdYesDocument ID containing the database
rowBlockIdYesRow paragraph block ID to delete
workspaceIdNoWorkspace ID (optional if default set)
databaseBlockIdYesBlock ID of the affine:database block

TDQS

B3.3/5.0
Behavior2/5

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

Annotations already indicate destructiveHint=true, but the description adds no additional behavioral details (e.g., cascading deletes, reversibility, 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?

The description is a single concise sentence that communicates the tool's purpose without any unnecessary words, demonstrating efficient structure.

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?

The description is adequate for a straightforward delete operation, but lacks critical context like return value behavior (no output schema) or post-deletion effects. Some additional detail would improve completeness.

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 fully documents all four parameters. The description does not add extra meaning beyond what is in schema, earning a baseline score of 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?

The description clearly states the tool deletes a row from an AFFiNE database block, specifying the verb 'Delete' and the resource 'row' with context. It distinguishes from sibling tools like add_database_row and update_database_row.

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

Usage Guidelines2/5

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

No guidance on when to use this tool compared to alternatives (e.g., when to delete vs update). The description lacks any usage context or conditions.

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

delete_docDelete DocumentA
Destructive

Delete a document by removing its workspace metadata entry and sending the AFFiNE WebSocket delete request for its content. This is destructive; use revoke_doc when you only need to remove public access.

ParametersJSON Schema
NameRequiredDescriptionDefault
docIdYesAFFiNE document id.
workspaceIdNoAFFiNE workspace id. Omit only when AFFINE_WORKSPACE_ID is configured.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already mark destructiveHint: true, but description adds specifics about what gets deleted (metadata and content via WebSocket), enhancing transparency.

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

Conciseness5/5

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

Two concise sentences, front-loaded with action, no wasted words.

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

Completeness4/5

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

For a destructive tool without output schema, the description explains effect and provides alternative, making it sufficiently complete.

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

Parameters3/5

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

Schema description coverage is 100%, so parameters are well-documented there. Description adds no extra parameter details, meeting the baseline.

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

Purpose5/5

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

Description clearly states it deletes a document by removing metadata and sending a delete request, and distinguishes from revoke_doc by specifying its destructive nature.

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

Usage Guidelines5/5

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

Explicitly tells when to use this tool (for full deletion) and when to use revoke_doc (only for removing public access), providing clear guidance.

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

delete_folderDelete FolderA
Destructive

Experimental: delete an AFFiNE organize folder and every nested folder or link node. This is destructive for sidebar organization but does not delete target documents, tags, or collections.

ParametersJSON Schema
NameRequiredDescriptionDefault
folderIdYesAFFiNE organize folder node id.
workspaceIdNoAFFiNE workspace id. Omit only when AFFINE_WORKSPACE_ID is configured.

TDQS

A4/5.0
Behavior4/5

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

Annotations already indicate destructiveHint=true. The description adds that the operation is 'Experimental' and specifies it is destructive only for sidebar organization, not for target documents/tags/collections. This is valuable context beyond annotations.

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

Conciseness5/5

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

The description is two sentences with no wasted words. The first sentence states the action and scope; the second clarifies non-destructive aspects. Highly efficient.

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

Completeness4/5

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

For a destructive delete tool with no output schema, the description covers key behavioral aspects: what gets destroyed and what remains. It also notes experimental status. Minimal gaps exist, such as not mentioning response behavior or error cases.

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 both parameters described. The description does not add additional meaning beyond the schema, such as constraints or examples, so it meets but does not exceed the baseline.

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 'delete' and clearly identifies the resource: an AFFiNE organize folder and all nested folders or link nodes. It further distinguishes itself by stating what it does NOT delete (target documents, tags, or collections), differentiating it from sibling tools like delete_doc, delete_collection, etc.

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

Usage Guidelines3/5

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

The description mentions 'Experimental' as a warning but does not explicitly state when to use this tool versus alternatives. It implies use for removing folder structure without affecting underlying items, but lacks clear when-not or alternative tool references.

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

delete_surface_elementDelete Surface ElementA
Destructive

Delete a surface element by id. Set pruneConnectors=true to also delete any connectors whose source or target referenced the deleted element.

ParametersJSON Schema
NameRequiredDescriptionDefault
docIdYesDocument ID
elementIdYesElement ID to delete
workspaceIdNoWorkspace ID (optional if default set)
pruneConnectorsNoAlso delete connectors referencing this element (default false)

TDQS

A4/5.0
Behavior4/5

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

Annotations already show destructiveHint=true. The description adds valuable detail about the 'pruneConnectors' option, which cascades deletion to related connectors, providing behavioral context beyond annotations.

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

Conciseness5/5

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

Two concise sentences that front-load the main action and elaborate on an option. No unnecessary words or repetition.

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

Completeness4/5

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

For a delete tool, the description covers the core action and cascading behavior. However, it does not mention error handling (e.g., what happens if element not found) or idempotency, which annotations indicate false. Slightly incomplete but acceptable.

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

Parameters3/5

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

The input schema has 100% coverage, so baseline is 3. The description repeats the pruneConnectors behavior but does not add significant new 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 clearly states the action ('Delete a surface element by id'), specifying the resource and method. It distinguishes itself from sibling tools like 'update_surface_element' and 'add_surface_element'.

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

Usage Guidelines3/5

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

The description implies usage for deleting surface elements but does not explicitly state when to use this tool versus alternatives (e.g., removing via other means). No guidance on prerequisites or when not to use it.

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

delete_tagDelete TagA
Destructive

Delete a workspace-level tag and remove it from every document that references it. Accepts a tag id or name; an ambiguous name is rejected with the candidate ids.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagYesTag id or name to delete. Ambiguous tag names are rejected with candidate ids.
workspaceIdNoAFFiNE workspace id. Omit only when AFFINE_WORKSPACE_ID is configured.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already indicate destructiveHint=true. The description adds critical behavior: it removes the tag from all documents referencing it, and explains how ambiguous names are handled. This goes beyond annotations but could still note if the operation is reversible or if confirmation is needed.

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 with no redundancy. The key action and consequences are front-loaded. Every sentence adds valuable information without 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?

Given the tool has two parameters, no output schema, and annotations, the description covers the deletion behavior, side effects, and parameter ambiguity. It is sufficient for an agent to use correctly, though mentioning the return type (e.g., success/failure) would be ideal.

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%. The description adds meaning by explaining that the 'tag' parameter can be an id or name, and that ambiguous names cause rejection with candidate ids. This clarifies the parameter's flexibility and error handling.

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

Purpose5/5

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

The description explicitly states the action (delete), the resource (workspace-level tag), and the scope (remove from every document referencing it). This clearly distinguishes it from sibling tools like remove_tag_from_doc or create_tag.

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

Usage Guidelines3/5

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

The description does not provide explicit guidance on when to use this tool vs alternatives. It implies usage for permanent deletion of a tag, but lacks a direct comparison with siblings like remove_tag_from_doc. The mention of ambiguous name rejection is helpful but not a usage guideline.

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

delete_workspaceDelete WorkspaceA
Destructive

Delete a workspace permanently

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesWorkspace ID

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already indicate destructiveHint=true. The description adds 'permanently' confirming irreversibility but does not disclose additional behavioral traits like impact on contained data, required permissions, or undo capability.

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 a single, concise sentence that is front-loaded and contains no superfluous words. Every word is meaningful.

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

Completeness4/5

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

For a simple delete operation with one parameter, the description is largely adequate given the annotations cover destructiveness. However, no return value specification is provided (no output schema), but this is typical for delete operations.

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% for the single parameter 'id' with description 'Workspace ID'. The tool description does not add any further meaning, so baseline score of 3 applies.

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

Purpose5/5

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

The description 'Delete a workspace permanently' clearly specifies the action (delete), the resource (workspace), and the scope (permanently), distinguishing it from sibling tools like update_workspace or create_workspace.

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

Usage Guidelines2/5

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

No explicit guidance on when to use this tool versus alternatives (e.g., update_workspace for non-destructive changes) or prerequisites. For a destructive operation, warnings or preconditions (e.g., workspace emptiness) are absent.

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

export_doc_markdownExport Document MarkdownB
Read-onlyIdempotent

Export AFFiNE document content to markdown.

ParametersJSON Schema
NameRequiredDescriptionDefault
docIdYesAFFiNE document id.
workspaceIdNoAFFiNE workspace id. Omit only when AFFINE_WORKSPACE_ID is configured.
includeFrontmatterNo

TDQS

B3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds that the output is markdown, but does not disclose error behavior, response format, or any side effects beyond what annotations provide.

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

Conciseness4/5

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

The description is a single short sentence that conveys the core purpose without waste. It is front-loaded and efficient, though it could restructure to include brief usage hints without losing conciseness.

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?

Given the moderate complexity (3 params, no output schema), the description is somewhat incomplete. It does not explain the output format details, error conditions, or the effect of 'includeFrontmatter'. Annotations fill some gaps, but the description lacks full contextual coverage.

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

Parameters2/5

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

Schema description coverage is 67%, with docId and workspaceId described in the schema. However, the tool description adds no meaning for any parameter, especially 'includeFrontmatter', which remains undocumented. The description should clarify the role of this critical parameter.

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

Purpose4/5

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

The description clearly states the tool's function: exporting AFFiNE document content to markdown. It uses a specific verb and resource, but does not differentiate from siblings like 'export_with_fidelity_report' or 'replace_doc_with_markdown' that also involve markdown output.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives such as 'read_doc' for JSON output. There are no mentions of preconditions, typical use cases, or exclusions.

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

export_with_fidelity_reportExport With Fidelity ReportB
Read-onlyIdempotent

Export document markdown together with a structured fidelity report that highlights markdown loss risk and unsupported AFFiNE-native content.

ParametersJSON Schema
NameRequiredDescriptionDefault
docIdYesAFFiNE document id.
workspaceIdNoAFFiNE workspace id. Omit only when AFFINE_WORKSPACE_ID is configured.
includeFrontmatterNo

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=true, and destructiveHint=false. The description adds context about the fidelity report content (highlights markdown loss risk and unsupported content), but does not specify output format, side effects, or whether the export is a file download or inline response.

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 a single, well-structured sentence of 21 words. It front-loads the core purpose and contains no extraneous information.

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

Completeness2/5

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

Given the tool has 3 parameters and no output schema, the description omits important context: the structure of the fidelity report, how the output is delivered, and the effect of the 'includeFrontmatter' parameter. This leaves the agent with insufficient information to use the tool correctly.

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

Parameters2/5

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

Schema coverage is 67% (docId and workspaceId have descriptions, includeFrontmatter does not). The tool description does not mention any parameters or add meaning beyond the schema. Notably, 'includeFrontmatter' is left entirely unexplained, which the description should compensate for.

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

Purpose5/5

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

The description clearly states the tool exports document markdown together with a structured fidelity report highlighting markdown loss risk and unsupported AFFiNE-native content. This distinguishes it from sibling tools like 'export_doc_markdown' (plain markdown export) and 'analyze_doc_fidelity' (fidelity analysis only).

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives such as 'export_doc_markdown' or 'analyze_doc_fidelity'. It does not mention use cases, prerequisites, or exclusions.

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

find_doc_by_titleFind Doc by TitleA
Read-onlyIdempotent

Resolve docs by exact title. Returns ALL matches up to limit (callers handle ambiguity). Case-sensitive by default; pass caseInsensitive: true to fold case. Reads workspace metadata — fast, no per-doc fetch. Unlike search_docs (which is always case-insensitive and capped at limit 20), this tool defaults to case-sensitive matching and returns up to limit matches (default 50, max 200). Prefer this over search_docs when you know the exact title and want every match. Returns: { query, caseInsensitive, matches: [{ id, title, createdAt, updatedAt, inTrash }], workspaceDocCount, truncated }.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax matches to return (default: 50).
titleYesThe exact title to match.
workspaceIdNoWorkspace ID (optional if AFFINE_WORKSPACE_ID is set).
caseInsensitiveNoIf true, fold case for comparison (default: false).

TDQS

A4.6/5.0
Behavior5/5

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

Discloses that it reads workspace metadata without per-doc fetch, and describes return structure including truncated flag. Annotations (readOnlyHint, idempotentHint) are consistent, and no contradictions.

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

Conciseness4/5

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

Well-structured and front-loaded, but slightly verbose. Every sentence adds value, but could be tightened without losing clarity.

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

Completeness5/5

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

Given no output schema, the description provides a detailed return structure, behavior (fast, no per-doc fetch), and explains the difference from sibling. Highly complete for a read tool.

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

Parameters3/5

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

Schema coverage is 100%, and the description adds some context (e.g., default limit of 50, max 200) but does not significantly enhance understanding beyond what the parameter descriptions provide.

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

Purpose5/5

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

The description clearly states it resolves docs by exact title, providing a specific verb and resource. It distinguishes itself from the sibling 'search_docs' by noting case-sensitivity and higher limit.

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 advises preferring this tool over 'search_docs' when exact title is known and all matches are desired. Also notes case-sensitivity default and optional switch.

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

generate_access_tokenGenerate Access TokenA

Generate a new personal access token and return its one-time secret. This creates a credential; store the returned token securely because it may not be shown again.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesHuman-readable token name shown in AFFiNE token settings.
expiresAtNoOptional expiration timestamp accepted by AFFiNE, typically an ISO 8601 string.

TDQS

A4.5/5.0
Behavior5/5

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

Beyond annotations, the description adds critical behavior: the secret is one-time and may not be shown again. No contradiction with annotations.

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

Conciseness5/5

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

Two sentences, efficient, front-loaded with key action and warning. No unnecessary verbiage.

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 simple generation tool with no output schema, the description adequately covers the return value behavior and token handling.

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

Parameters3/5

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

Schema coverage is 100%, so the description adds minimal value for parameters. Baseline of 3 applies; no extra parameter details provided.

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

Purpose5/5

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

The description clearly states the tool creates a personal access token and returns a one-time secret, distinguishing it from sibling tools like list_access_tokens and revoke_access_token.

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

Usage Guidelines4/5

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

The description implies usage for generating tokens but doesn't explicitly state when not to use or mention alternatives like revoking or listing tokens. Sibling names provide context.

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

get_capabilitiesGet CapabilitiesA
Read-onlyIdempotent

Return machine-readable capability flags for this MCP server, including block, database, collaboration, and export support.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint, covering safety and idempotency. The description adds value by specifying the categories of flags (block, database, collaboration, export), which provides useful behavioral context beyond annotations.

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

Conciseness5/5

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

The description is a single sentence, front-loaded with the action and resource, and contains no unnecessary words or repetition.

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

Completeness4/5

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

For a tool with no parameters and no output schema, the description provides a reasonable summary of what the tool returns. It could be improved by hinting at the structure of the flags (e.g., JSON object with boolean fields), but it is generally complete.

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?

There are no parameters, and schema coverage is 100%. The description does not need to add parameter details. Baseline for 0 parameters is 4, and the description appropriately avoids extraneous information.

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

Purpose5/5

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

The description clearly states the tool returns machine-readable capability flags for the MCP server, specifying the types of support included. The verb 'Return' and resource 'capability flags' are specific and distinguish this tool from sibling tools that perform actions or read specific data.

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

Usage Guidelines3/5

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

No explicit guidance on when to use this tool versus alternatives. While it's implied to check server capabilities before other operations, the description lacks context about prerequisites or conditions.

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

get_collectionGet CollectionA
Read-onlyIdempotent

Read one AFFiNE sidebar collection by id, including rules and allow-list. Use list_collections first when the id is unknown.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdNoAFFiNE workspace id. Omit only when AFFINE_WORKSPACE_ID is configured.
collectionIdYesAFFiNE collection id from list_collections or create_collection.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint. Description adds context that it returns rules and allow-list, no side effects.

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, front-loaded with verb and resource, no fluff.

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

Completeness4/5

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

No output schema but description explains returned content (rules, allow-list). Sufficient for a simple read tool.

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

Parameters3/5

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

Schema coverage is 100% with descriptions. Description adds minimal extra info (source of collectionId). 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?

Description clearly states it reads a collection by id, including rules and allow-list. Distinguishes from sibling list_collections (which lists all) and update_collection (write).

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 instructs to use list_collections first when id is unknown, providing clear when-to-use guidance.

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

get_docGet DocumentA
Read-onlyIdempotent

Read GraphQL metadata for one document, such as title, summary, public state, roles, and timestamps. Use read_doc when you need block content.

ParametersJSON Schema
NameRequiredDescriptionDefault
docIdYesAFFiNE document id.
workspaceIdNoAFFiNE workspace id. Omit only when AFFINE_WORKSPACE_ID is configured.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, destructiveHint false. Description adds value by specifying the metadata fields retrieved, but no additional behavioral traits like auth or edge cases.

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

Conciseness5/5

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

Two sentences, front-loaded with purpose and examples, zero wasted words. Efficient and structured.

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

Completeness4/5

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

For a simple read tool with comprehensive annotations, description covers purpose and alternative. Lacks mention of error responses or behavior if docId not found, but adequate given low complexity.

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 both parameters described. Description does not add parameter-specific details beyond schema, 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?

Description clearly states it reads GraphQL metadata for one document, listing specific fields like title, summary, public state, roles, timestamps. It differentiates from sibling read_doc by noting that read_doc is for block content.

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 instructs to use read_doc when block content is needed, providing a clear alternative. The description implies use for metadata retrieval, making when-to-use unambiguous.

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

get_doc_iconGet Document IconA
Read-onlyIdempotent

Read the current sidebar icon of a document. Returns null when none is set.

ParametersJSON Schema
NameRequiredDescriptionDefault
docIdYesThe document whose icon to read.
workspaceIdNo

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior. The description adds the return-null behavior but little else beyond that.

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, no extra words, purpose and behavior front-loaded. Efficient and clear.

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 simple read tool with rich annotations and no output schema, the description provides sufficient information: what it does and the null case. Context is complete.

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

Parameters2/5

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

Schema description coverage is 50%—only docId has a description. workspaceId is undocumented. The tool description does not add any parameter explanation, failing to compensate for missing schema descriptions.

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

Purpose5/5

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

The description clearly states the verb 'Read' and the resource 'current sidebar icon of a document,' with return behavior specified. It distinguishes from sibling tools like 'update_doc_icon' and 'get_folder_icon'.

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

Usage Guidelines3/5

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

Usage is implied as a read operation for icons, but no explicit when-to-use or when-not-to-use guidance is provided. No alternatives are mentioned.

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

get_edgeless_canvasGet Edgeless CanvasA
Read-onlyIdempotent

Read the full edgeless canvas: all edgeless-positioned blocks (notes, frames, edgeless-text) with their xywh, plus all surface elements (shapes, connectors, text, groups). Includes aggregate bounding box and per-type element counts. Use this when you need to understand canvas layout end-to-end before placing new elements.

ParametersJSON Schema
NameRequiredDescriptionDefault
docIdYesDocument ID
workspaceIdNoWorkspace ID (optional if default set)

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, idempotentHint=true, destructiveHint=false. The description adds specific behavioral details: it returns aggregate bounding box and per-type element counts, which go beyond the annotations without contradicting them.

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

Conciseness5/5

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

Two sentences, approximately 50 words, front-loaded purpose and usage guidance. No filler, every sentence provides value.

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

Completeness5/5

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

No output schema, but the description completely describes the return value: all blocks with xywh, all surface elements, aggregate bounding box, per-type counts. For a read-only tool with safe annotations, this is fully 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?

The input schema has 100% description coverage for both parameters (docId, workspaceId). The description does not add any extra meaning about the parameters beyond what the schema provides, so baseline score of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the verb 'Read', the resource 'full edgeless canvas', and specifies exactly what it returns (edgeless-positioned blocks with xywh, surface elements, aggregate bounding box, per-type counts). This distinguishes it from sibling tools like 'list_surface_elements' or 'get_doc'.

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 says 'Use this when you need to understand canvas layout end-to-end before placing new elements', providing a clear when-to-use scenario. However, it does not mention when not to use it or name specific alternatives.

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

get_folder_iconGet Folder IconA
Read-onlyIdempotent

Read the current sidebar icon of an organize folder. Returns null when none is set. Experimental.

ParametersJSON Schema
NameRequiredDescriptionDefault
folderIdYesThe organize folder whose icon to read.
workspaceIdNo

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, etc. The description adds that it returns null when no icon is set and marks the tool as 'Experimental,' providing useful behavioral context beyond the annotations.

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

Conciseness5/5

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

The description is extremely concise with two sentences, no filler, and front-loaded with the core purpose. Every sentence adds value: the first states the action, the second gives return behavior and experimental status.

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

Completeness4/5

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

For a simple read tool with no output schema, the description covers the basic functionality (reading icon, null return) and the experimental tag. However, it could specify the format or type of the returned icon (e.g., URL or path) to be fully complete.

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

Parameters2/5

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

Schema description coverage is 50%: only 'folderId' has a description. The description does not add meaning for 'workspaceId' (undocumented). The description mentions 'sidebar icon of an organize folder' which implies the folder is identified, but does not clarify the role of workspaceId.

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

Purpose5/5

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

The description clearly states the tool reads the sidebar icon of an organize folder and specifies the return behavior when none is set. The verb 'Read' and resource 'sidebar icon of an organize folder' are specific and distinct from sibling tools like 'update_folder_icon' or 'get_doc_icon'.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives is provided. It does not mention prerequisites, context, or when not to use it (e.g., if the icon is not set, it returns null but doesn't advise checking null). No sibling differentiation is discussed.

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

get_orphan_docsGet Orphan DocumentsA
Read-onlyIdempotent

Find all documents that have no parent (not linked from any other doc via embed_linked_doc / embed_synced_doc blocks or inline LinkedPage references). Useful for workspace hygiene. Note: scans all docs — O(n). Each doc includes an inTrash flag.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdNo

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already provide readOnly, idempotent, openWorld, not destructive. The description adds 'scans all docs — O(n)' and 'Each doc includes an inTrash flag', providing algorithmic complexity and a result field detail beyond annotations.

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

Conciseness5/5

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

Three sentences, each earning its place: definition, use case, behavioral note. No wasted words, front-loaded with core purpose.

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?

Given one optional parameter and no output schema, the description explains orphan concept, performance, and a result field. However, it fails to describe the workspaceId parameter, which is essential to control scope.

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

Parameters1/5

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

Schema coverage is 0% and the description does not mention the workspaceId parameter at all. The agent receives no guidance on what the parameter does or its optionality, leaving a significant gap.

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

Purpose5/5

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

The description clearly states the verb 'Find' and the resource 'all documents that have no parent', with specific criteria excluding linked docs. It distinguishes this tool from siblings like list_docs, search_docs, and list_docs_by_tag by focusing on orphan detection.

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 says 'Useful for workspace hygiene', implying a cleanup context. It notes O(n) performance, suggesting careful use. However, it doesn't explicitly contrast with alternatives or state when not to use it.

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

get_workspaceGet WorkspaceA
Read-onlyIdempotent

Get details of a specific workspace

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesWorkspace ID

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds no additional behavioral context, but does not contradict annotations.

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

Conciseness5/5

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

The description is a single, front-loaded sentence with no redundant information, achieving maximum conciseness.

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

Completeness4/5

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

Given the simplicity of the operation and the presence of rich annotations, the description is adequate. However, it could mention that an ID is required or hint at the return value, though not strictly necessary.

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 parameter 'id' is described as 'Workspace ID'. The description does not add further 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?

The description clearly specifies the verb 'Get' and the resource 'workspace', distinguishing it from sibling tools like 'list_workspaces', 'update_workspace', and 'delete_workspace'.

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

Usage Guidelines3/5

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

The description implies usage when a user needs details of a specific workspace by ID, but it does not provide explicit guidance on when to use this tool versus alternatives like listing workspaces first.

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

inspect_template_structureInspect Template StructureA
Read-onlyIdempotent

Inspect a template doc's native structure, tags, and fallback risk before instantiation.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdNoAFFiNE workspace id. Omit only when AFFINE_WORKSPACE_ID is configured.
templateDocIdYesThe template doc to inspect.

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the agent knows it's safe and idempotent. The description adds value by specifying the exact scope of inspection (structure, tags, fallback risk), though 'fallback risk' could be more defined. No contradictions with annotations.

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

Conciseness5/5

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

A single sentence that is front-loaded with the purpose. Every word earns its place. No redundancy or fluff. Ideal length for quick comprehension.

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

Completeness4/5

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

The description covers the tool's purpose and scope given its simplicity (2 params, rich annotations). However, without an output schema, a brief note on the return format (e.g., 'returns JSON with structure and risk flags') would improve completeness. Still, it is adequate for a read-only inspection tool.

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

Parameters3/5

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

Schema coverage is 100%, so the baseline is 3. The description does not add any parameter-specific information beyond what the schema's descriptions already provide (e.g., workspaceId condition, templateDocId purpose). No additional semantic value is contributed.

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

Purpose5/5

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

The description clearly states the verb 'Inspect' and the resources: 'template doc's native structure, tags, and fallback risk'. It distinguishes this tool from siblings like instantiate_template_native and analyze_doc_fidelity by focusing on pre-instantiation inspection of templates. The purpose is specific and unambiguous.

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

Usage Guidelines4/5

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

The description includes 'before instantiation', which provides useful context for when to use this tool relative to instantiate_template_native. However, it does not explicitly mention when not to use it or compare it to alternative tools like analyze_doc_fidelity. The guidance is clear but not exhaustive.

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

instantiate_template_nativeInstantiate Template NativelyA

Instantiate a template using native AFFiNE block cloning when supported, falling back to markdown materialization only when necessary.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleNoOptional title for the new document. Defaults to the template title.
variablesNoKey-value map of {{variable}} substitutions applied during cloning.
parentDocIdNoOptional parent doc to link the instantiated doc under in the sidebar.
workspaceIdNoAFFiNE workspace id. Omit only when AFFINE_WORKSPACE_ID is configured.
preserveTagsNoIf true (default), copy the template's tags onto the instantiated doc.
allowFallbackNoIf false, fail instead of falling back to markdown materialization when native cloning is unsupported.
templateDocIdYesThe template doc to instantiate.

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already indicate it's not read-only and not destructive. The description adds value by explaining the fallback mechanism and reliance on native cloning support, which provides behavioral context beyond annotations.

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

Conciseness5/5

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

Single, front-loaded sentence that efficiently conveys the core action and fallback behavior. No unnecessary words.

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?

The description covers the main action but lacks details on return values (no output schema) and does not elaborate on the variable substitution or fallback conditions. Schema compensates somewhat, but for a tool with 7 parameters, more contextual completeness would help.

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 baseline is 3. The description does not add extra meaning to parameters beyond what the schema already provides.

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

Purpose5/5

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

Description clearly states the tool instantiates templates using native block cloning with fallback. It distinguishes from siblings like 'create_doc_from_markdown' or 'inspect_template_structure' by specifying the unique method and fallback behavior.

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

Usage Guidelines2/5

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

No explicit guidance on when to use this tool versus alternatives. The description implies usage context (native cloning support) but does not compare with other instantiation or creation tools.

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

list_access_tokensList Access TokensA
Read-onlyIdempotent

List metadata for the current user's personal access tokens. Token secrets are not returned; use generate_access_token only when a new secret is needed.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, etc. The description adds that token secrets are not returned, which is a behavioral detail beyond what annotations provide. 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 sentences with no wasted words. The purpose is front-loaded, and every sentence adds value.

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?

Despite no output schema, the description clarifies what is returned (metadata) and what is not (secrets). For a parameterless tool, this is fully adequate.

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?

Tool has 0 parameters, so schema coverage is 100%. Description adds no parameter info, which is appropriate for an empty schema. Baseline 4.

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 states 'List metadata for the current user's personal access tokens' with a specific verb and resource. It distinguishes from siblings like generate_access_token and revoke_access_token by clarifying that secrets are not returned.

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 says 'use generate_access_token only when a new secret is needed,' providing a clear when-not-to-use and an alternative. The description implies using list for metadata retrieval.

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

list_childrenList Document ChildrenA
Read-onlyIdempotent

List the direct children of a document in the sidebar (embed_linked_doc / embed_synced_doc blocks and inline LinkedPage references). Returns docId, title, URL, and inTrash for each child.

ParametersJSON Schema
NameRequiredDescriptionDefault
docIdYesThe parent doc whose children to list.
workspaceIdNo

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint, so the safety profile is covered. The description adds value by specifying the return fields (docId, title, URL, inTrash), which are not in annotations or output schema. No contradictions.

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

Conciseness5/5

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

Two sentences, no redundancy. The first sentence defines purpose and scope, the second details return fields. 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 simple list tool with no output schema, the description adequately covers return fields. It is missing details on error handling, ordering, or pagination, but these are reasonable gaps for a straightforward read tool. The behavioral annotations fill some context.

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

Parameters2/5

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

Schema description coverage is 50%, with only docId having a description. The description adds no new parameter info: it mentions the parent doc but does not explain workspaceId or add constraints. For docId, the schema already covers it. The description fails to compensate for the missing workspaceId description.

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

Purpose5/5

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

The description clearly states the verb (list), the resource (direct children of a document), and specifies the types of children: embed_linked_doc, embed_synced_doc blocks, and inline LinkedPage references. It differentiates from siblings like list_docs and list_docs_by_tag by focusing on a specific parent doc and direct children only.

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

Usage Guidelines3/5

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

The description implies usage when you need the children of a document, but it does not explicitly state when to use this tool versus alternatives like list_workspace_tree for a full hierarchy or list_docs for all documents. No exclusions or alternatives are mentioned.

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

list_collectionsList CollectionsA
Read-onlyIdempotent

List AFFiNE sidebar collections and their rules. Use this read-only tool before updating, deleting, or adding documents to a collection.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdNoAFFiNE workspace id. Omit only when AFFINE_WORKSPACE_ID is configured.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnly and idempotent. Description adds that it lists collections and their rules, which is beyond annotation info. 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 sentences, front-loaded purpose, second provides usage guidance. No wasted words.

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

Completeness4/5

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

For a simple list tool with good annotations and schema, description is nearly complete. Could mention return format but not essential.

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?

Only one parameter with full schema description. Description does not add additional parameter semantics beyond what schema provides. Baseline 3 per rules.

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

Purpose5/5

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

Description clearly states it lists AFFiNE sidebar collections and their rules, using specific verb and resource. Distinguishes from siblings like get_collection or update_collection.

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 says to use this read-only tool before updating, deleting, or adding documents to a collection, providing clear when-to-use context.

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

list_commentsList CommentsA
Read-onlyIdempotent

List paginated comments for a document, including nested replies and resolution state. Use this before update_comment, delete_comment, or resolve_comment when you need the existing comment ids.

ParametersJSON Schema
NameRequiredDescriptionDefault
afterNoCursor from pageInfo.endCursor for fetching the next page.
docIdYesDocument id whose comments should be listed.
firstNoMaximum number of comments to return from the AFFiNE pagination connection.
offsetNoZero-based offset used by AFFiNE pagination. Do not combine with after unless the AFFiNE API requires it.
workspaceIdNoAFFiNE workspace id. Omit only when AFFINE_WORKSPACE_ID is configured.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already provide readOnlyHint=true, idempotentHint=true, etc. Description adds context that results are paginated and include nested replies and resolution state. No contradictions, and the added context is valuable beyond the annotations.

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

Conciseness5/5

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

Two sentences, front-loaded with key information. No redundant words. Efficient and clear.

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

Completeness4/5

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

With 5 parameters and no output schema, description covers essential behavioral aspects (pagination, content of responses) and usage guidance. Could mention output structure briefly, but overall sufficient for an agent to use correctly.

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

Parameters3/5

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

Schema coverage is 100%, so parameters are already documented. Description mentions 'paginated' but does not add new meaning to input parameters. Baseline 3 is appropriate as description does not need to compensate.

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

Purpose5/5

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

Description clearly states verb 'List', resource 'comments for a document', and includes scope 'including nested replies and resolution state'. It effectively distinguishes from sibling tools like create_comment, update_comment, etc.

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 states 'Use this before update_comment, delete_comment, or resolve_comment when you need the existing comment ids.' Provides clear contextual guidance on when to use this tool.

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

list_doc_propertiesList Document PropertiesA
Read-onlyIdempotent

List the workspace custom-property definitions and a document's current values for them.

ParametersJSON Schema
NameRequiredDescriptionDefault
docIdYes
workspaceIdNo

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false. The description adds context beyond annotations by specifying the tool lists both property definitions and document values. It does not contradict any annotation.

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 a single, front-loaded sentence with no wasted words. Every part of the sentence is necessary and informative.

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?

The tool has no output schema, so the description should explain the return value structure. It mentions listing definitions and values but does not describe the format or fields. For a simple read operation with two parameters, this is adequate but incomplete.

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

Parameters2/5

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

Schema description coverage is 0%, meaning the description adds no information about the parameters (docId, workspaceId). The description does not explain what docId or workspaceId represent or how they are used. With low coverage, the description should compensate, but it does not.

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

Purpose5/5

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

The description clearly states the tool lists workspace custom-property definitions and a document's current values. The verb 'list' and the specific resource 'workspace custom-property definitions and document values' precisely define the tool's action, distinguishing it from sibling tools like set_doc_property or clear_doc_property.

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

Usage Guidelines3/5

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

The description implies usage for reading property definitions and values, but does not explicitly state when to use this tool versus alternatives like set_doc_property or clear_doc_property. No when-to-use or when-not-to-use guidance is provided.

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

list_docsList DocumentsA
Read-onlyIdempotent

List documents in a workspace (GraphQL). Each doc includes an inTrash flag.

ParametersJSON Schema
NameRequiredDescriptionDefault
afterNoCursor from pageInfo.endCursor for fetching the next page.
firstNoMaximum number of items to return from the AFFiNE pagination connection.
offsetNoZero-based offset used by AFFiNE pagination. Do not combine with after unless the AFFiNE API requires it.
workspaceIdNoAFFiNE workspace id. Omit only when AFFINE_WORKSPACE_ID is configured.

TDQS

A3.7/5.0
Behavior3/5

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

Annotations (readOnlyHint, idempotentHint, destructiveHint) already cover the read-only and non-destructive nature. The description adds the detail about the 'inTrash flag' but provides no further behavioral context beyond annotations.

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

Conciseness5/5

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

Single sentence that is clear, front-loaded, and contains no extraneous information. Every word adds value.

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?

Given the complexity of pagination (after, first, offset, workspaceId) and no output schema, the description omits details about how pagination works or the return structure. It is adequate but not comprehensive.

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?

Input schema coverage is 100% with all four parameters described. The description does not augment the schema's parameter descriptions, 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?

The description clearly states the verb 'List' and the resource 'documents in a workspace', adding a specific detail about the output ('Each doc includes an inTrash flag'). It distinguishes from sibling tools like search_docs or get_doc.

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

Usage Guidelines3/5

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

No explicit guidance on when to use this tool versus alternatives such as list_docs_by_tag or search_docs. The mention of GraphQL is present but does not clarify context for usage.

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

list_docs_by_tagList Documents By TagA
Read-onlyIdempotent

List documents that contain the requested tag. This is read-only and each result includes title metadata and an inTrash flag.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagYesTag name to match against workspace tag labels.
ignoreCaseNoCase-insensitive tag matching (default: true).
workspaceIdNoAFFiNE workspace id. Omit only when AFFINE_WORKSPACE_ID is configured.

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, destructiveHint. Description adds context about result content (title metadata and inTrash flag), which adds value beyond annotations.

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

Conciseness5/5

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

Two lean sentences: one for purpose, one for behavioral traits and output. No wasted words.

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

Completeness4/5

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

No output schema, but description clarifies that results include title metadata and inTrash flag. Lacks pagination or full structure, but given safety annotations, it is fairly complete for a filtered list tool.

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

Parameters3/5

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

Schema coverage is 100%, so baseline is 3. Description does not add extra meaning beyond what the schema provides for parameters; it only mentions output structure.

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

Purpose5/5

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

Description clearly states 'List documents that contain the requested tag' with a specific verb and resource. Distinguishes from siblings like list_docs and search_docs by focusing on tag-based filtering.

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

Usage Guidelines3/5

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

States 'read-only' implying safe usage, but does not explicitly mention when to use this tool vs alternatives like list_docs or search_docs. No exclusion criteria provided.

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

list_historiesList HistoriesB
Read-onlyIdempotent

List doc histories (timestamps) for a doc.

ParametersJSON Schema
NameRequiredDescriptionDefault
guidYes
takeNo
beforeNo
workspaceIdNo

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare safe read operations (readOnlyHint=true, destructiveHint=false). The description adds that the output includes timestamps, which aligns with annotations. No contradiction, but no additional behavioral insights beyond what annotations provide.

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

Conciseness4/5

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

The description is a single short sentence, front-loaded, and free of fluff. However, it omits important details that could be added concisely, like parameter hints.

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 simple list tool with safety annotations, the description is minimally adequate but lacks parameter explanations and usage context. Given no output schema, some explanation of return format would improve completeness.

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

Parameters2/5

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

The input schema has 4 parameters with 0% description coverage, and the tool description does not explain any parameter (guid, take, before, workspaceId). The mention of 'for a doc' hints at guid but leaves others completely undocumented.

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

Purpose5/5

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

The description clearly states the verb (List), resource (doc histories/timestamps), and scope (for a doc). It effectively distinguishes this tool from sibling list tools like list_docs, list_tags, etc.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives like list_docs or list_comments. The description does not mention context, prerequisites, or exclusions.

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

list_notificationsList NotificationsA
Read-onlyIdempotent

List the current user's AFFiNE notifications with optional unread filtering. This is read-only and returns notification ids, read state, level, and timestamps.

ParametersJSON Schema
NameRequiredDescriptionDefault
afterNoCursor for pagination
firstNoNumber of notifications to fetch
offsetNoOffset for pagination
unreadOnlyNoShow only unread notifications

TDQS

A4/5.0
Behavior4/5

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

The description adds beyond annotations by stating it is read-only and returns specific fields (ids, read state, level, timestamps). Annotations already mark readOnlyHint, idempotentHint, and destructiveHint false, and the description aligns and supplements.

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 concise sentences that front-load the key purpose and behavior. Every sentence adds value without redundancy.

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

Completeness4/5

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

Given 4 optional parameters, no output schema, and complex sibling tools, the description is fairly complete. It specifies return fields and highlights the optional filter, though pagination details are left to 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 coverage is 100%, so the schema already documents all parameters. The description mentions 'optional unread filtering' which maps to the unreadOnly parameter, but adds no additional meaning or usage details beyond the schema descriptions.

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

Purpose5/5

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

The description clearly states the tool lists notifications for the current user, with optional unread filtering. It specifies the verb 'list', resource 'notifications', scope 'current user', and distinguishes from siblings like 'list_comments'.

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

Usage Guidelines3/5

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

The description implies usage for viewing notifications, but does not provide explicit guidance on when to use this tool versus alternatives (e.g., search or other list tools). No when-not-to-use or context for exclusion is given.

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

list_organize_nodesList Organize NodesA
Read-onlyIdempotent

Experimental: list AFFiNE sidebar organize folder and link nodes from the folders workspace DB. Use this before moving or deleting organize nodes.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdNoAFFiNE workspace id. Omit only when AFFINE_WORKSPACE_ID is configured.

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint true/false. Description adds experimental status and data source, but no extra behavioral detail beyond what annotations provide.

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

Conciseness5/5

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

Two sentences: first states purpose, second gives usage hint. No extraneous words, well-structured.

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 list tool with rich annotations, the description provides experimental context, data source, and usage guidance. Return format is not described, but not critical given the tool's simplicity.

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% for the single optional parameter workspaceId, and the description does not add any additional meaning beyond the schema description.

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

Purpose5/5

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

The description clearly states the tool lists AFFiNE sidebar organize folder and link nodes from the folders workspace DB, distinguishing it from sibling tools like add_organize_link and delete_organize_link.

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 advises using this tool before moving or deleting organize nodes, providing a clear usage context. Could mention when not to use, but the hint is sufficient.

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

list_surface_elementsList Surface ElementsA
Read-onlyIdempotent

List all shape/connector/text/group elements on the AFFiNE edgeless canvas surface. Returns raw xywh strings plus parsed {x,y,width,height} bounds, with Y.Text fields serialized to plain strings. Optional filters by element type or id.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoFilter by element type
docIdYesDocument ID
elementIdNoFilter to a single element id
workspaceIdNoWorkspace ID (optional if default set)

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already indicate read-only, idempotent, non-destructive behavior. The description adds value by specifying return format (raw xywh strings, parsed bounds, serialized Y.Text), but does not cover potential edge cases or constraints.

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, front-loaded with the primary action, no unnecessary words.

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?

Despite lacking an output schema, the description adequately explains the return format (xywh, bounds, serialized Y.Text) and optional filters, providing sufficient context for a read-only listing tool.

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

Parameters3/5

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

The input schema already provides complete parameter descriptions (100% coverage). The description only mentions 'element type or id' filters, adding no significant semantic information beyond the schema.

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

Purpose5/5

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

The description clearly states it lists elements (shape/connector/text/group) on the AFFiNE edgeless canvas surface, differentiating it from sibling tools like add_surface_element or delete_surface_element.

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

Usage Guidelines4/5

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

The description indicates optional filters by type or id, providing clear context for when to use. However, it does not explicitly state when not to use it or mention alternatives.

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

list_tagsList TagsA
Read-onlyIdempotent

List all workspace-level tags and the number of documents attached to each tag. Use this before tag mutation when the exact tag name or id is unknown.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdNoAFFiNE workspace id. Omit only when AFFINE_WORKSPACE_ID is configured.

TDQS

A4.3/5.0
Behavior3/5

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

Annotations already indicate read-only, idempotent, and non-destructive behavior. Description adds minor output context but doesn't reveal additional behavioral traits.

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, purpose first, usage second. No wasted words.

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 simple list tool with one parameter, complete context given schema, annotations, and output description.

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 has full coverage of the only parameter; description adds no extra 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?

Clearly states it lists workspace-level tags with document counts, distinguishing it from tag mutation tools.

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

Usage Guidelines5/5

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

Explicitly advises using it before tag mutation when tag name/id is unknown, providing clear context.

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

list_workspacesList WorkspacesA
Read-onlyIdempotent

List all available AFFiNE workspaces

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already indicate readOnly, openWorld, idempotent, and non-destructive behavior. The description adds context ('AFFiNE workspaces') and does not contradict annotations, but does not provide additional behavioral details beyond what annotations already convey.

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 that is extremely concise and contains precisely the needed information with no wasted words.

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

Completeness4/5

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

For a simple list-all tool with no parameters and rich annotations, the description is adequate. It does not specify sorting or filtering, but given the tool's name and annotations, it is sufficiently complete.

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

Parameters4/5

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

The tool has zero parameters, so schema coverage is complete. The description's phrase 'all available' adds clarity beyond the empty schema, justifying a baseline score of 4.

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

Purpose5/5

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

The description clearly states the verb 'List' and the resource 'all available AFFiNE workspaces', which distinguishes it from sibling tools like 'get_workspace' (singular) and 'create_workspace'.

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

Usage Guidelines3/5

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

The purpose is clear but there is no explicit guidance on when to use this tool versus alternatives like 'get_workspace' or other list tools. Usage is implied by the name and description, but no exclusions or context are provided.

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

list_workspace_treeList Workspace TreeA
Read-onlyIdempotent

Returns the full document hierarchy as a tree (roots → children → grandchildren). Use depth to limit nesting (default: 3). Note: loads all docs — may be slow on large workspaces. Each node includes an inTrash flag.

ParametersJSON Schema
NameRequiredDescriptionDefault
depthNoMax nesting depth to return (default: 3).
workspaceIdNo

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint as false, covering safety and idempotency. The description adds a performance warning ('may be slow on large workspaces') and notes the inTrash flag on each node, which are valuable behavioral details beyond the annotations. No contradictions.

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

Conciseness5/5

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

The description is two sentences: the first states the core purpose, the second provides parameter context and a performance note. Every word earns its place; no fluff or repetition. It is appropriately sized and front-loaded.

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?

With no output schema, the description must explain the return format. It describes the tree structure (roots → children → grandchildren) and mentions the inTrash flag but does not specify other fields or how the tree is represented (e.g., list of root nodes with nested children). Annotations cover idempotency and openness, but the description could be more complete about the response structure.

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 50% (only depth has a description). The description adds meaning for depth by specifying the default value (3) and its role in limiting nesting. However, workspaceId is not addressed, leaving its purpose unclear. The description adds moderate value over the schema but does not fully compensate for the parameter lacking schema documentation.

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

Purpose5/5

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

The description clearly states the tool returns the full document hierarchy as a tree (roots → children → grandchildren), which is specific and distinct from siblings like list_children (direct children only) or list_docs (flat list). The verb 'Returns' combined with the resource 'document hierarchy as a tree' makes the purpose unambiguous.

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

Usage Guidelines3/5

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

The description mentions using the depth parameter to limit nesting and warns that loading all docs may be slow on large workspaces, which implies caution. However, it does not explicitly state when to use this tool over alternatives like list_children or get_orphan_docs, leaving the agent to infer the appropriate context. The guidance is adequate but not comprehensive.

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

move_docMove Document in SidebarA

Move a doc in the AFFiNE sidebar by embedding it under a new parent. Optionally removes it from the old parent (fromParentDocId). If fromParentDocId is omitted, the doc is added to the new parent but not removed from the old one.

ParametersJSON Schema
NameRequiredDescriptionDefault
docIdYesThe doc to move.
workspaceIdNo
toParentDocIdYesThe new parent doc that will contain the embed.
fromParentDocIdNoThe current parent doc to remove the embed from. If omitted, only adds to new parent.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations indicate a non-read-only, non-idempotent mutation. The description adds behavioral context: if fromParentDocId is omitted, the doc is only added to the new parent, not removed from the old one. This goes beyond the annotations without contradicting them.

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

Conciseness5/5

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

Two concise sentences front-load the core action ('Move a doc in the AFFiNE sidebar by embedding it under a new parent') and then explain the optional parameter behavior. No superfluous 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?

Given the moderate complexity (4 parameters, no nested objects) and annotations covering the safety profile, the description provides enough context for correct use. No output schema is needed for a move operation, and the behavior is fully explained.

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?

With 75% schema description coverage, the description adds meaning to fromParentDocId by explaining its effect when omitted. workspaceId lacks description but is self-explanatory as a workspace identifier. The added context justifies a score above the baseline of 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?

The description clearly states that the tool moves a doc in the AFFiNE sidebar by embedding it under a new parent. It uses specific verbs and resources, distinguishing it from siblings like delete_doc or create_doc.

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

Usage Guidelines4/5

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

The description explains the optional behavior of removing from the old parent via the fromParentDocId parameter. However, it does not explicitly state when to use this tool versus alternatives like move_organize_node, so it lacks exclusion guidance.

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

move_organize_nodeMove Organize NodeA

Experimental: move an AFFiNE organize folder or link node to another folder or root. This preserves the target document, tag, or collection and changes only sidebar placement.

ParametersJSON Schema
NameRequiredDescriptionDefault
indexNoOptional fractional index. Defaults to append-after-last.
nodeIdYesAFFiNE organize node id from list_organize_nodes.
parentIdNoDestination folder id. Omit for root-level placement.
workspaceIdNoAFFiNE workspace id. Omit only when AFFINE_WORKSPACE_ID is configured.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations indicate write operation (readOnlyHint=false) and non-destructive (destructiveHint=false). The description adds that it is experimental and that only sidebar placement changes, which provides helpful behavioral context beyond annotations. No contradictions.

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

Conciseness5/5

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

Two sentences, no filler. The first sentence gives the purpose and experimental nature; the second clarifies the effect. 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?

Given the tool's simple function (move node) and good schema/annotations, the description adequately explains the core behavior. Missing details like error handling or prerequisites, but for a straightforward move operation it's near-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 coverage is 100%, so parameters are well-documented. The description adds minimal extra meaning beyond the schema—it implies the destination choices (folder or root) but doesn't detail parameter syntax or behaviors like indexing. Baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states the verb ('move'), resource ('AFFiNE organize folder or link node'), and destination ('another folder or root'). It distinguishes from siblings like add_organize_link (creates new) and delete_organize_link (removes), making the tool's purpose unambiguous.

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

Usage Guidelines4/5

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

The description implies usage context: reorganizing sidebar without affecting content ('preserves the target... changes only sidebar placement'). It doesn't explicitly state when not to use or list alternatives, but the effect is clear enough for an agent to decide.

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

publish_docPublish DocumentA

Make a document publicly accessible through AFFiNE public sharing. This changes sharing state; use revoke_doc to disable public access later.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoPublic document mode to publish. Omit to let AFFiNE use its default.
docIdYesAFFiNE document id.
workspaceIdNoAFFiNE workspace id. Omit only when AFFINE_WORKSPACE_ID is configured.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations indicate mutation (readOnlyHint=false) and non-destructive (destructiveHint=false). The description adds context that it changes sharing state, which is consistent. No contradictions, but it doesn't detail side effects like permissions or idempotency.

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 concise sentences: first states the purpose, second provides usage guidance. No redundant 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?

For a simple mutation tool with full schema coverage and annotations, the description adequately covers the main action and points to the reverse tool, making it 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 coverage is 100%, so the description adds no extra 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?

The description uses a specific verb ('make publicly accessible') and identifies the resource ('document through AFFiNE public sharing'). It also distinguishes from the sibling tool revoke_doc by noting the opposite action.

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 explicitly states when to use this tool ('make a document publicly accessible') and directs to the alternative revoke_doc for disabling public access, providing clear guidance.

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

read_all_notificationsMark All Notifications ReadA

Mark every current-user notification as read. This mutates notification state; use list_notifications first when you need to inspect unread items.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

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

The description notes that the tool mutates notification state, which aligns with annotations (readOnlyHint=false). While annotations already indicate a write operation, the description adds explicit behavioral context without contradiction.

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

Conciseness5/5

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

The description is two sentences, front-loaded with the action, and contains no unnecessary words. Every sentence earns its place.

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 simple mutation tool with no output schema and no parameters, the description is complete. It explains the action, mutational nature, and provides usage guidance, leaving no obvious gaps.

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?

With zero parameters, the schema coverage is 100%, so the description adds no parameter meaning. Baseline is 4 for no parameters, and the description does not need to elaborate.

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

Purpose5/5

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

The description clearly states the tool marks all current-user notifications as read, a specific action on a specific resource. It distinguishes itself from sibling tools like list_notifications by indicating mutation vs. inspection.

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 explicitly advises using list_notifications first when inspection is needed, providing clear guidance on when to use this tool vs. an alternative.

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

read_database_cellsRead Database CellsA
Read-onlyIdempotent

Read row titles and database cell values from an AFFiNE database block.

ParametersJSON Schema
NameRequiredDescriptionDefault
docIdYesDocument ID containing the database
columnsNoOptional column name or ID filter.
rowBlockIdsNoOptional row block ID filter. Omit to return all rows.
workspaceIdNoWorkspace ID (optional if default set)
databaseBlockIdYesBlock ID of the affine:database block

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, etc. The description adds that it reads 'row titles and database cell values', which clarifies the exact type of data retrieved. No contradictions.

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

Conciseness5/5

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

A single, front-loaded sentence that communicates the core function without extraneous words. 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 read tool with 5 parameters and no output schema, the description adequately states what is returned (row titles and cell values). It could benefit from noting the return format or structure, but it is sufficient for selection.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description does not add additional meaning beyond what is already in the schema for each parameter.

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

Purpose5/5

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

The description clearly states the verb 'Read' and the resource 'row titles and database cell values' from an AFFiNE database block. This specific resource distinguishes it from sibling tools like read_database_columns or add_database_row.

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

Usage Guidelines3/5

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

No explicit guidance on when to use this tool versus alternatives. While the read-only and safe nature is implied by annotations, the description does not provide context for selection.

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

read_database_columnsRead Database ColumnsA
Read-onlyIdempotent

Read schema metadata for an AFFiNE database block, including columns, select options, and view column mappings. Useful for empty databases before any rows exist.

ParametersJSON Schema
NameRequiredDescriptionDefault
docIdYesDocument ID containing the database
workspaceIdNoWorkspace ID (optional if default set)
databaseBlockIdYesBlock ID of the affine:database block

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, fully describing the safe, non-mutating behavior. The description adds minor behavioral context (reads schema metadata, useful for empty databases) but does not go beyond what annotations imply. It does not contradict annotations, so score is appropriate baseline.

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

Conciseness5/5

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

The description is two sentences: the first delivers the core purpose, the second adds a specific use-case context. Every sentence is informative and non-redundant, with no wasted words. It is front-loaded and easy 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?

Given the simple read-only nature, rich annotations, and full schema coverage, the description adequately conveys the tool's function and when it is useful. It mentions the returned data (columns, select options, mappings), compensating for the lack of an output schema. It is sufficiently complete for an agent to select and invoke correctly.

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

Parameters3/5

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

Schema description coverage is 100%, so each parameter (docId, workspaceId, databaseBlockId) already has a clear description in the schema. The tool description does not provide additional parameter-level information, such as format or constraints. Per rubric, baseline is 3 when coverage exceeds 80%.

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

Purpose5/5

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

The description clearly states the verb 'Read' and the resource 'schema metadata for an AFFiNE database block', specifying included elements (columns, select options, view column mappings). This distinguishes it from sibling tools like 'read_database_cells' (reads cell values) and 'add_database_column' (adds a column), making purpose unambiguous.

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

Usage Guidelines4/5

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

The description provides clear context by stating 'Useful for empty databases before any rows exist,' indicating a specific scenario. However, it does not explicitly exclude alternatives or mention when not to use this tool, such as when column metadata is not needed or when rows exist. The guidance is helpful but lacks explicit comparisons to siblings.

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

read_docRead Document ContentA
Read-onlyIdempotent

Read document block content via WebSocket snapshot (blocks + plain text). Set includeMarkdown: true to also get the rendered markdown — useful when you need to read content without a separate export_doc_markdown call.

ParametersJSON Schema
NameRequiredDescriptionDefault
docIdYesAFFiNE document id.
workspaceIdNoAFFiNE workspace id. Omit only when AFFINE_WORKSPACE_ID is configured.
includeMarkdownNoIf true, includes rendered markdown in the response. Equivalent to also calling export_doc_markdown.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, destructiveHint. The description adds that the tool reads via WebSocket snapshot and returns blocks+plain text, which complements the annotations without contradiction.

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

Conciseness5/5

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

Two concise sentences. The first states the core function, the second adds optional usage guidance. No wasted words.

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 no output schema, the description mentions return content (blocks + plain text) but does not detail the structure. Annotations cover safety. It is fairly complete for a read tool but could benefit from slightly more detail on the response format.

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%; all parameters have descriptions. The description adds value by explaining the purpose of includeMarkdown ('to also get the rendered markdown') and its relationship to export_doc_markdown, which goes beyond the schema's description.

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

Purpose5/5

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

The description uses a specific verb ('Read') and resource ('document block content via WebSocket snapshot'), and distinguishes from the sibling 'export_doc_markdown' by noting that includeMarkdown can avoid a separate call.

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

Usage Guidelines4/5

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

The description explicitly mentions that includeMarkdown can be used to avoid a separate export_doc_markdown call, providing clear context for that parameter. However, it does not compare to other read tools like 'get_doc' or specify when not to use this tool.

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

remove_doc_from_collectionRemove Doc From CollectionA

Remove a document id from an AFFiNE collection allow-list. This does not delete the document or change collection rules.

ParametersJSON Schema
NameRequiredDescriptionDefault
docIdYesAFFiNE document id.
workspaceIdNoAFFiNE workspace id. Omit only when AFFINE_WORKSPACE_ID is configured.
collectionIdYesAFFiNE collection id from list_collections or create_collection.

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already indicate a non-destructive mutation. The description adds clarity by specifying that the document is removed from the allow-list and not deleted, but it does not address potential side effects or return behavior, especially given the openWorldHint flag.

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: first states the core action, second clarifies exclusions. Every sentence adds value without redundancy. Front-loaded and concise.

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?

The description covers the essential behavior but lacks information about return values, success indicators, or post-conditions. For a simple mutation tool with no output schema, more context on what to expect after execution would improve completeness.

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

Parameters3/5

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

Schema coverage is 100%, so the schema already describes all three parameters. The description adds no additional meaning beyond what the schema properties provide, so baseline of 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 specific verb 'remove' and identifies the resource as 'document id from an AFFiNE collection allow-list'. It clearly distinguishes from siblings like 'delete_doc' by stating it does not delete the document or change collection rules.

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

Usage Guidelines3/5

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

The description implies usage context by stating what it does not do, but it does not explicitly state when to use this tool over alternatives or provide exclusions. No guidance on prerequisites or context.

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

remove_tag_from_docRemove Tag From DocumentA

Detach a tag from one document without deleting the workspace-level tag. Use delete_tag only when the tag should be removed from every document.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagYesTag name to detach from the document.
docIdYesAFFiNE document id.
workspaceIdNoAFFiNE workspace id. Omit only when AFFINE_WORKSPACE_ID is configured.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations indicate it's not read-only or destructive. The description adds that it doesn't delete the workspace-level tag, but does not disclose error conditions or auth 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?

Two sentences, no extraneous information. The core action is stated first, then a comparison with a sibling. Highly efficient.

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

Completeness4/5

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

For a simple detach operation, the description covers the essential distinction and action. It lacks details on return values or error handling, but annotations provide some context.

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 good descriptions for all three parameters. The tool description does not add extra parameter meaning beyond the schema, so baseline score 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 clearly states the tool detaches a tag from a single document without deleting the workspace-level tag, and explicitly distinguishes it from delete_tag.

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

Usage Guidelines5/5

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

The description provides explicit guidance: 'Use delete_tag only when the tag should be removed from every document,' directly contrasting with the sibling tool.

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

rename_folderRename FolderA

Experimental: rename an AFFiNE organize folder node. This changes sidebar metadata only and does not rename documents inside the folder.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesNon-empty sidebar folder or collection name.
folderIdYesAFFiNE organize folder node id.
workspaceIdNoAFFiNE workspace id. Omit only when AFFINE_WORKSPACE_ID is configured.

TDQS

A4/5.0
Behavior4/5

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

The description adds behavioral context beyond annotations by explicitly stating that the tool only changes sidebar metadata and does not rename documents inside the folder. This clarifies non-obvious side effects. Annotations already indicate non-idempotent mutation, so the description provides useful supplementary info.

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

Conciseness5/5

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

The description is two concise sentences: the first states the action, the second clarifies limitations. No wasted words, front-loaded with key 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?

For a simple rename tool, the description covers what it does and its limitations. It mentions 'Experimental' and the scope of changes. No output schema exists, but the description is adequate. Could add success/error hints, but not necessary given simplicity.

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 parameters are well-documented. The description does not add new meaning beyond the schema; it implies 'name' is the new folder name and 'folderId' identifies the node, but this is already clear from parameter descriptions.

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

Purpose5/5

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

The description clearly states the action 'rename an AFFiNE organize folder node' and distinguishes it from sibling tools like create_folder or delete_folder by specifying the scope: it only changes sidebar metadata and does not rename documents inside the folder.

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

Usage Guidelines3/5

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

The description implies usage for renaming folder metadata but does not explicitly state when to use this tool versus alternatives, nor does it provide conditions for when not to use it. The 'Experimental' label warns of instability but doesn't guide selection.

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

replace_doc_with_markdownReplace Document With MarkdownA

Replace the main note content of a document with markdown content.

ParametersJSON Schema
NameRequiredDescriptionDefault
docIdYesAFFiNE document id.
strictNo
markdownYesMarkdown content to replace with
workspaceIdNoAFFiNE workspace id. Omit only when AFFINE_WORKSPACE_ID is configured.

TDQS

A3.7/5.0
Behavior3/5

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

Annotations indicate the tool is not read-only, not idempotent, and not destructive, which aligns with the 'replace' action. The description adds no details beyond that, such as whether other document attributes are preserved or the fate of old content.

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 a single, concise sentence that is front-loaded with the action and resource. No unnecessary words or information.

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?

The tool has four parameters and no output schema. The description explains the basic function but does not address error conditions, prerequisites (e.g., existing document), or confirm the absence of return values beyond what a replacement implies.

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 75%, covering three of four parameters. The description does not add any parameter-specific information beyond what is in the schema, and the 'strict' parameter lacks documentation in both.

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

Purpose5/5

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

The description clearly states the tool replaces the main note content of a document with markdown, using a specific verb and resource. It differentiates from siblings like append_markdown and create_doc_from_markdown by specifying replacement rather than addition or creation.

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

Usage Guidelines3/5

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

The description implies that the tool is used when one wants to overwrite a document's content entirely, but it does not provide explicit guidance on when to use this over alternatives, nor does it mention any prerequisites or exclusions.

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

resolve_commentResolve CommentA

Set a comment thread's resolved state without changing its content. Use delete_comment only when the comment should be removed.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesComment id returned by list_comments or create_comment.
resolvedYestrue marks the comment resolved; false reopens it.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already indicate non-readonly and non-destructive; description adds that content is unchanged, aligning 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 sentences, front-loaded with purpose, no waste. Efficient and informative.

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

Completeness5/5

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

Given no output schema, the description suffices for a simple state mutation tool. Complements schema and annotations perfectly.

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 clear descriptions for both parameters. Description does not add beyond schema, so 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?

Clearly states the action is setting resolved state without content change, and distinguishes from sibling tool delete_comment. Verb 'resolve_comment' is precise.

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 says when to use (toggle resolved) and when not (use delete_comment for removal). Provides clear decision boundary.

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

revoke_access_tokenRevoke Access TokenA
Destructive

Revoke an existing personal access token by id. This is destructive for API clients using that token; list tokens first if the id is unknown.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesAccess token id returned by list_access_tokens or generate_access_token.

TDQS

A4.7/5.0
Behavior4/5

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

The description reinforces the destructive nature already indicated by the destructiveHint annotation and adds context that it affects 'API clients using that token'. This additional context goes beyond the annotation.

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

Conciseness5/5

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

The description is two concise sentences, front-loading the core action and adding essential guidance without unnecessary details.

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 simple revocation tool with one required parameter and no output schema, the description covers purpose, warning, and a helpful precursor action. It is sufficient for the agent to use correctly.

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

Parameters4/5

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

The schema has 100% coverage, but the description adds value by explaining that the 'id' parameter is 'the access token id returned by list_access_tokens or generate_access_token', providing source context not in the schema description.

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

Purpose5/5

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

The description clearly states the action: 'Revoke an existing personal access token by id.' It uses a specific verb and resource, distinguishing it from sibling tools like 'generate_access_token' and 'list_access_tokens'.

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

Usage Guidelines5/5

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

The description provides explicit guidance: it warns that revocation is destructive for API clients using the token and advises to list tokens first if the id is unknown. This helps the agent decide when to use this tool versus listing tokens.

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

revoke_docRevoke DocumentA
Destructive

Disable public sharing for a document without deleting the document. Use delete_doc only when the document itself should be removed.

ParametersJSON Schema
NameRequiredDescriptionDefault
docIdYesAFFiNE document id.
workspaceIdNoAFFiNE workspace id. Omit only when AFFINE_WORKSPACE_ID is configured.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already indicate destructiveHint=true and readOnlyHint=false. The description adds value by clarifying that the destruction is limited to disabling sharing and does not delete the document. It does not mention permissions or reversibility, which could further improve transparency.

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

Conciseness5/5

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

The description is two sentences, front-loading the main action and immediately providing alternative guidance. Every sentence serves a purpose with no wasted words.

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

Completeness4/5

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

Given the tool's simplicity (no output schema, two parameters), the description covers purpose, usage, and behavioral transparency adequately. It could mention the return value (e.g., success confirmation) but is otherwise 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% with clear parameter descriptions for docId and workspaceId. The tool description does not add additional semantic information beyond what the schema provides, meeting the baseline.

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

Purpose5/5

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

The description clearly states the verb 'disable public sharing' and the resource 'document', and distinguishes it from the sibling tool 'delete_doc' by explicitly noting the tool does not delete the document.

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

Usage Guidelines5/5

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

The description provides explicit usage guidance: 'Use delete_doc only when the document itself should be removed.' This tells the agent when to use this tool versus the alternative, which is excellent differentiation.

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

search_docsSearch Documents by TitleA
Read-onlyIdempotent

Fast search for documents by title using workspace metadata. Much faster than exporting each doc. Returns docId, title, direct URL, and inTrash for each match.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagNoOptional tag filter (case-insensitive substring match against resolved tag names).
limitNoMax results to return (default: 20).
queryYesSearch query — matched case-insensitively against doc titles.
sortByNoSort by match relevance (default) or by updatedAt.
matchModeNoHow to match titles (default: substring).
workspaceIdNoWorkspace ID (optional if default set).
sortDirectionNoSort direction for updatedAt sorting (default: desc).

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare read-only, idempotent, non-destructive. Description adds context about speed and return fields, but no additional behavioral details beyond that.

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, front-loaded with core purpose, no wasted words.

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

Completeness4/5

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

With no output schema, description lists return fields (docId, title, URL, inTrash). 7 parameters are documented in schema. Sufficient for a read-only search tool.

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

Parameters3/5

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

Schema description coverage is 100%, so parameters are well-documented. Description does not add meaning beyond what schema already 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?

Description clearly states the tool searches documents by title using workspace metadata, and lists the returned fields. It distinguishes from 'exporting each doc' but not from sibling search tools like 'find_doc_by_title'.

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

Usage Guidelines3/5

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

Description implies usage for fast title search instead of exporting, but lacks explicit when-to-use or when-not-to-use guidance relative to sibling tools.

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

set_doc_propertySet Document PropertyA

Set a document's custom property value (property by id or name). Value is validated against the property type (text/number/checkbox/date).

ParametersJSON Schema
NameRequiredDescriptionDefault
docIdYes
valueYesValue; coerced per property type (checkbox->bool, number, date YYYY-MM-DD, text)
propertyYesProperty id or name
workspaceIdNo

TDQS

A3.5/5.0
Behavior3/5

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

Annotations indicate the tool is a write operation (readOnlyHint=false) and not destructive. The description adds that the value is validated against the property type, which is helpful. However, it omits details like whether the property must already exist or if it can be created on-the-fly (given openWorldHint=true, unclear). No contradiction with annotations.

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

Conciseness4/5

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

The description is a single sentence that front-loads the purpose. It is concise with no unnecessary information, but it could potentially be split for readability.

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

Completeness2/5

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

The tool has no output schema, so the description should explain return behavior or side effects. It does not mention what the tool returns (e.g., success confirmation) or failure conditions (e.g., property not found). For a write operation with 4 parameters, this is insufficient.

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 50% (2 of 4 parameters have descriptions). The main description adds validation context for the 'value' parameter. However, it does not provide additional meaning for 'docId' and 'workspaceId' beyond the schema's type constraints. The description partially compensates but not fully.

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

Purpose5/5

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

The description clearly states the tool sets a document's custom property value, identified by id or name. This distinguishes it from sibling tools like 'clear_doc_property' (removes property) and 'create_custom_property' (creates a property definition).

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

Usage Guidelines3/5

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

The description implies usage for setting a custom property value but does not explicitly state when to use or when not to, nor does it mention alternatives like using 'clear_doc_property' to remove a property. Guidance is minimal.

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

sign_inSign InA

Sign in to AFFiNE using email and password; sets session cookies for subsequent calls.

ParametersJSON Schema
NameRequiredDescriptionDefault
emailYesAFFiNE account email address.
passwordYesAFFiNE account password. Prefer API tokens for production deployments.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations indicate write and non-idempotent behavior. The description adds the key behavioral detail that session cookies are set for subsequent calls, which is beyond what annotations provide. Could mention session duration or error states, but sufficient for simple auth.

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?

Single sentence, front-loaded with the action, includes essential side effect. No unnecessary words.

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

Completeness4/5

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

For a simple authentication tool with full schema coverage and no output schema, the description is adequate. It explains the action and its primary effect. Minor omissions like session lifetime or error cases are not critical.

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 clear parameter descriptions. The tool description does not add further meaning to the parameters beyond the schema, so baseline score of 3 applies.

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

Purpose5/5

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

The description clearly states it is for signing in to AFFiNE with email and password, and specifies the side effect of setting session cookies. This distinctively contrasts with sibling auth tools like generate_access_token.

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?

Description implies usage for initial authentication to obtain a session. The parameter description for password suggests preferring API tokens for production, which provides an alternative. However, the main description does not explicitly mention when not to use this tool (e.g., for automated tasks).

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

update_collectionUpdate CollectionA

Rename an existing AFFiNE sidebar collection without changing its rules or allow-list.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoUpdated collection name
workspaceIdNoAFFiNE workspace id. Omit only when AFFINE_WORKSPACE_ID is configured.
collectionIdYesAFFiNE collection id from list_collections or create_collection.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations provide safety profile; description adds that it only renames without altering rules, which is useful behavioral context beyond annotations.

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

Conciseness5/5

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

Single, front-loaded sentence with no wasted words.

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 low complexity and annotations, description is adequate; lacks return value info but no output schema exists.

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 descriptions already detail parameters; description adds minimal new meaning beyond 'rename' implication.

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

Purpose5/5

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

Description uses specific verb 'rename' and resource 'collection', and explicitly states it does not change rules or allow-list, clearly distinguishing it from sibling 'update_collection_rules'.

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?

Description clarifies scope (rename only) and what it does not do, but does not explicitly state when to use or avoid this tool compared to alternatives.

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

update_collection_rulesUpdate Collection RulesA

Replace an AFFiNE collection's rules and rebuild its allow-list from current workspace documents. This can change which docs appear in the collection.

ParametersJSON Schema
NameRequiredDescriptionDefault
rulesYesRule set used to rebuild the collection allow-list.
workspaceIdNoAFFiNE workspace id. Omit only when AFFINE_WORKSPACE_ID is configured.
collectionIdYesAFFiNE collection id from list_collections or create_collection.

TDQS

A3.6/5.0
Behavior3/5

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

The description adds context beyond annotations by noting that the tool 'rebuilds its allow-list from current workspace documents' and 'can change which docs appear in the collection.' However, it does not detail side effects, authorization needs, or rate limits. Annotations indicate non-destructive and non-idempotent, which aligns with the description, so 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 sentences with no wordiness. The action and effect are front-loaded. 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?

Given the tool's moderate complexity (3 params, nested objects) and no output schema, the description sufficiently explains the transformation and its impact on documents. It covers the 'why' (changes which docs appear) and the 'how' (rebuilds from current workspace docs). Slightly more detail on return value or confirmation would push to 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 coverage is 100%, so all parameters are already described in the schema. The description adds no additional meaning beyond the parameter names and restates the action. Baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool replaces collection rules and rebuilds the allow-list, which distinguishes it from sibling tools like 'update_collection' and 'create_collection'. The verb 'Replace' and specific resource 'collection rules' are precise.

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

Usage Guidelines2/5

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

No explicit guidance is given on when to use this tool versus alternatives or when not to use it. The description implies usage for changing collection rules after creation but lacks any context about exclusions or prerequisites.

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

update_commentUpdate CommentA

Replace the content of an existing comment. This preserves the comment thread; use create_comment for a new thread.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesComment id returned by list_comments or create_comment.
contentYesReplacement comment content accepted by AFFiNE.

TDQS

A4.6/5.0
Behavior5/5

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

Discloses that the comment thread is preserved, adding context beyond annotations (readOnlyHint=false, destructiveHint=false). No contradiction with annotations.

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

Conciseness5/5

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

Two concise, front-loaded sentences with no wasted words. Every sentence adds value.

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

Completeness4/5

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

The description covers purpose, usage, and behavior well. Lacks return value information but is sufficient for a simple mutation with no output 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 coverage is 100% and already describes both parameters. The description adds no additional parameter 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 clearly states the tool replaces the content of an existing comment (verb+resource) and distinguishes itself from create_comment for new threads.

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 says when to use (replace existing comment) and provides a direct alternative (use create_comment for new thread), offering clear guidance.

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

update_database_rowUpdate Database RowA

Batch update multiple cells on an existing AFFiNE database row. Include title in the cells map to update the Kanban row title.

ParametersJSON Schema
NameRequiredDescriptionDefault
cellsYesMap of column name (or column ID) to new cell value. Use `title` for the built-in row title.
docIdYesDocument ID containing the database
rowBlockIdYesRow paragraph block ID
linkedDocIdNoLink this row to an existing doc by ID. The row will open the linked doc in center peek when clicked.
workspaceIdNoWorkspace ID (optional if default set)
createOptionNoFor select and multi-select columns, create the option label if it does not exist (default true)
databaseBlockIdYesBlock ID of the affine:database block

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already indicate this is a non-read-only, non-destructive operation. The description adds that it is a 'batch update' and mentions title behavior, but does not elaborate on other behavioral aspects such as error handling, permissions, or the createOption default.

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 concise sentences: first states the core function, second provides a specific tip. No unnecessary words or repetition.

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 tool with 7 parameters, nested objects, and no output schema, the description is minimal. It covers the primary purpose but lacks details on return values, error scenarios, or batch behavior, making it only marginally 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 the schema documents each parameter. The description adds value by explaining how to use the 'cells' map for the title, but no additional semantics for other parameters.

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

Purpose5/5

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

The description clearly states the tool updates multiple cells on an existing database row, mentioning the specific use of 'title' for Kanban row title. This distinguishes it from siblings like add_database_row or delete_database_row.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives like add_database_row or other update tools. No context for when-not-to-use or prerequisites is given.

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

update_doc_iconUpdate Document IconA

Set or clear the sidebar icon (the Notion-style emoji slot) on a document. Pass an emoji string, a full icon object, or null to remove it.

ParametersJSON Schema
NameRequiredDescriptionDefault
iconYesEmoji shorthand ("🧪"), a full object ({type:"emoji",unicode:"🧪"} or {type:"icon",name:"check"}), or null to remove the icon.
docIdYesThe document whose icon to update.
workspaceIdNo

TDQS

A4/5.0
Behavior3/5

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

Annotations already indicate the tool is not read-only (readOnlyHint=false), not idempotent, and not destructive. The description adds value by detailing the acceptable input types, which goes beyond the annotations. However, it does not disclose additional behavioral traits such as error handling, permissions, or default behavior (e.g., whether setting an icon replaces existing).

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 a single sentence that front-loads the core action ('Set or clear the sidebar icon') followed by concise input instructions. There is no fluff; every word adds value.

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

Completeness4/5

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

For a simple mutation tool with three parameters (two required, one optional) and no output schema, the description covers the essential behavior and input formats. A minor gap is the lack of explanation for the optional workspaceId parameter, but the tool's context (workspace environment) likely makes it inferable.

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

Parameters3/5

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

The input schema covers the icon parameter with a detailed description, and docId has a simple description. WorkspaceId lacks description. The tool description reinforces the allowed types but adds minimal new information beyond the schema. Given 67% schema description coverage (high), the baseline is 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?

The description clearly states the tool's purpose: 'Set or clear the sidebar icon (the Notion-style emoji slot) on a document.' It specifies the action (set/clear), the resource (document icon), and the allowed inputs (emoji string, full object, null). This distinguishes it from the sibling tool get_doc_icon, which reads the icon.

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

Usage Guidelines4/5

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

The description instructs on what to pass ('emoji string, a full icon object, or null to remove it'), implying when to use the tool—to update or remove an icon. It does not explicitly state when not to use it or mention alternatives like update_folder_icon, but the context is clear enough for an agent.

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

update_doc_titleUpdate Document TitleA

Rename a document — updates both the sidebar title (workspace metadata) and the doc's internal page block title.

ParametersJSON Schema
NameRequiredDescriptionDefault
docIdYesThe doc to rename.
titleYesNew title.
workspaceIdNo

TDQS

A4/5.0
Behavior4/5

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

Annotations already indicate non-read-only, non-idempotent, non-destructive. The description adds value by revealing the dual update behavior (metadata and internal title), which is not captured in annotations.

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

Conciseness5/5

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

Single sentence that is clear and front-loaded with the action and scope. No wasted words.

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

Completeness4/5

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

For a simple rename operation with good annotation coverage and partial schema descriptions, the description adequately explains the dual effect. No output schema or further details are necessary.

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 covers 2 of 3 parameters with descriptions (67%). The tool description does not add any further 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 clearly states the tool renames a document and specifies the two affected locations (sidebar title and internal page block title), distinguishing it from sibling tools like update_doc_icon or move_doc.

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

Usage Guidelines3/5

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

The description implies usage for renaming but provides no explicit guidance on when to use this tool versus alternatives or any prerequisites/limitations.

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

update_edgeless_blockUpdate Edgeless BlockA

Partially update a note/frame/edgeless-text block by id. x/y/width/height merge with current prop:xywh (move without resizing, or vice versa). background replaces prop:background (AFFiNE token or {light, dark} hex object). Fields that don't apply to the block's flavour come back under ignored.

ParametersJSON Schema
NameRequiredDescriptionDefault
xNo
yNo
docIdYesDocument ID
widthNo
heightNo
blockIdYesBlock id (flavour affine:note/affine:frame/affine:edgeless-text).
backgroundNoNote/frame only. Prefer `--affine-note-background-<color>` or `{light, dark}` hex.
workspaceIdNoWorkspace ID (optional if default set)

TDQS

A4/5.0
Behavior4/5

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

Annotations indicate a mutating operation (readOnlyHint=false), and the description adds behavioral details: merging x/y/width/height with current xywh, replacing background, and returning ignored fields. This goes beyond annotations, though it does not cover all aspects like auth or rate limits.

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

Conciseness4/5

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

Two efficient sentences with front-loaded purpose. Every sentence adds value, though the structure could be more organized (e.g., separating parameter behavior from ignored fields).

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?

Given no output schema, the description explains input behavior but does not mention what the tool returns (e.g., the updated block or just success). It covers the key aspects for a partial update tool but lacks completeness on return values and error scenarios.

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

Parameters4/5

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

The description explains the merge behavior for positional parameters and replacement for background, adding semantic value beyond the schema's property definitions. With 50% schema description coverage, the description compensates well for undocumented parameters.

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

Purpose5/5

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

The description clearly states the tool updates a note/frame/edgeless-text block by id, with specific verb 'update' and resource. It distinguishes from siblings like delete_block or update_surface_element by targeting edgeless blocks specifically.

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

Usage Guidelines3/5

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

The description implies when to use (for partial updates of edgeless blocks) but does not explicitly state when not to use or provide alternatives. It mentions ignored fields for inapplicable flavours, offering some guidance but lacks explicit comparison with other update tools.

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

update_folder_iconUpdate Folder IconA

Set or clear the sidebar icon on an organize folder. Pass an emoji string, a full icon object, or null to remove it. Experimental.

ParametersJSON Schema
NameRequiredDescriptionDefault
iconYesEmoji shorthand ("🧪"), a full object ({type:"emoji",unicode:"🧪"} or {type:"icon",name:"check"}), or null to remove the icon.
folderIdYesThe organize folder whose icon to update.
workspaceIdNo

TDQS

A3.6/5.0
Behavior3/5

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

Annotations declare this as a write operation (readOnlyHint=false) and not destructive. The description adds 'Experimental' as a behavioral note, but does not disclose side effects, error behavior, or permission requirements beyond what annotations already provide.

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

Conciseness5/5

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

The description is two sentences, front-loaded with the core action, and each sentence adds value. No wasted words.

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 3-parameter write tool with annotations and no output schema, the description is adequate but not comprehensive. It lacks mention of return values, error cases, or permission context, though the experimental tag adds minimal context.

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

Parameters2/5

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

Schema coverage is 67% (workspaceId missing description). The description clarifies icon parameter types (emoji string, object, null) somewhat, but the schema already describes the anyOf variants. It does not compensate for the undocumented workspaceId parameter, leaving a gap.

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

Purpose5/5

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

The description clearly states the action: 'Set or clear the sidebar icon on an organize folder.' It specifies the possible inputs (emoji string, icon object, null) and distinguishes from sibling tools like get_folder_icon (read) and update_doc_icon (different resource).

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

Usage Guidelines3/5

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

The description implies usage for updating folder icons but does not provide explicit when-to-use or when-not-to-use guidance relative to siblings. The 'Experimental' note hints at caution but lacks alternatives or exclusions.

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

update_frame_childrenUpdate Frame ChildrenA

Replace a frame block's contents wholesale. Accepts ids of surface elements (shapes/connectors/groups) AND edgeless blocks (notes/frames/edgeless-text) — all go into BlockSuite's prop:childElementIds map, matching what the editor writes when you drag members into a frame. Dragging the frame drags every owned member. Ids that don't resolve come back under 'missing'. By default the frame is resized to fit its new contents (plus padding + title band); set resizeToFit=false to leave xywh untouched. Pass [] to clear ownership (resize is skipped in that case).

ParametersJSON Schema
NameRequiredDescriptionDefault
docIdYesDocument ID
blockIdYesFrame block id (flavour affine:frame).
paddingNoPadding (px) used when resizeToFit is true (default 40). Ignored when resizeToFit=false.
resizeToFitNoIf true (default), recompute xywh from the union of resolvable child bounds + padding + title band. Set to false to preserve the frame's current box (useful when you want ownership-only edits or manual positioning).
workspaceIdNoWorkspace ID (optional if default set)
childElementIdsYesFull list of ids the frame should own/contain. Replaces any existing ownership.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations show it's mutating but not destructive. The description adds rich behavioral context: missing ids returned under 'missing', ownership mapping matching editor behavior, resize logic, and skips when empty. This goes well beyond the annotations.

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

Conciseness5/5

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

The description is efficiently packed with essential details, front-loaded with the main action, and every sentence adds value. No redundancy or fluff.

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

Completeness4/5

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

Given the tool's complexity, the description covers the core behaviors and edge cases. It lacks a full return structure specification, but does mention 'missing' ids. The parameter and behavior details are sufficient for correct invocation.

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

Parameters5/5

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

Schema coverage is 100%, but the description adds meaning to each parameter: childElementIds is a full replacement list, resizeToFit controls recomputation, padding is ignored when false, blockId is flavour-bound, and the empty array case. It also hints at return value (missing ids).

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

Purpose5/5

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

The description clearly states the verb 'Replace' and specific resource 'frame block's contents wholesale'. It distinguishes from siblings by specifying it handles both surface elements and edgeless blocks together, which is unique among the listed tools.

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

Usage Guidelines4/5

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

The description explains the core usage (wholesale replacement), the effect of resizeToFit, and that passing `[]` clears ownership with skipped resize. It implies when to use this tool (for full replacement) versus potentially other tools (none for partial updates), but does not explicitly state when not to use it.

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

update_profileUpdate ProfileA

Update current user's profile information.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoDisplay name
avatarUrlNoAvatar URL

TDQS

A3.5/5.0
Behavior2/5

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

The description only says 'update,' implying mutation. Annotations confirm readOnlyHint=false (mutation allowed) and destructiveHint=false (non-destructive). However, no details are given about what happens on success, error responses, or whether partial updates are allowed. The description does not add beyond the bare minimum.

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 a single sentence that conveys the tool's purpose without any unnecessary words. It is front-loaded and efficient.

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?

Given the tool's simplicity (two optional parameters, no output schema, no nested objects), the description is minimally adequate. However, it lacks guidance on partial updates or validation, which would be useful for an agent.

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%, with clear parameter descriptions ('Display name', 'Avatar URL'). The description adds no additional meaning or examples beyond what the schema provides, so baseline is appropriate.

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

Purpose5/5

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

The description clearly states the verb 'update' and the resource 'current user's profile information.' It uniquely identifies the tool among siblings, which include many update tools but none targeting the user's own profile.

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

Usage Guidelines3/5

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

The description does not explicitly state when to use this tool versus alternatives. However, the name and context imply it is for updating the current user's profile, and sibling tool names like 'update_settings' suggest different scopes. No exclusion or alternative guidance is provided.

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

update_settingsUpdate SettingsC

Update user settings and preferences.

ParametersJSON Schema
NameRequiredDescriptionDefault
settingsYesUser notification settings

TDQS

C2.9/5.0
Behavior2/5

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

Annotations indicate mutation (readOnlyHint=false) and non-destructive behavior, but the description adds no further behavioral details (e.g., partial vs. full replacement, return value, auth requirements). A contradiction exists: openWorldHint=true suggests acceptance of additional properties, while the schema enforces additionalProperties=false.

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

Conciseness4/5

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

The description is a single sentence, concise and front-loaded, with no wasted words. However, it could be slightly more informative without losing efficiency.

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

Completeness2/5

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

For a tool with one nested parameter and no output schema, the description is incomplete. It does not clarify whether updates are partial or full, nor does it resolve the contradiction between openWorldHint and the schema's additionalProperties: false, limiting the agent's understanding.

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 description includes the repeated phrase 'User notification settings' from the schema parameter description. It adds no new meaning beyond the schema, earning a baseline score.

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

Purpose4/5

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

The description clearly states the action (update) and resource (user settings and preferences), distinguishing it from sibling tools like 'update_profile' or 'update_workspace'. However, it does not specify that it focuses on notification settings, leaving the exact domain implicit from 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 Guidelines2/5

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

No explicit guidance on when to use this tool versus alternatives such as 'update_profile' for profile changes or 'update_workspace' for workspace settings. The description lacks context for selection.

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

update_surface_elementUpdate Surface ElementA

Partially update a surface element by id. x/y/width/height merge with the element's current xywh (move without resizing, or vice versa). text/label/title replace their Y.Text wholesale. Fields that don't apply to the element's type are reported in the response 'ignored' list.

ParametersJSON Schema
NameRequiredDescriptionDefault
xNoX position on canvas (shape/text; default 0).
yNoY position on canvas (shape/text; default 0).
modeNoConnector mode: 0=straight, 1=orthogonal (elbow), 2=curve (default 2). Connector only.
textNoText content (shape/text) or connector label. Replaces existing Y.Text on update.
colorNoText color. Shape default `#000000` — keep unless the fill is dark, then pass a contrasting hex. Canvas text default `--affine-text-primary-color` (theme-adaptive). Shape/text.
docIdYesDocument ID
indexNoBlockSuite fractional-index string controlling z-order. On add, defaults to a key above every existing element's index (new elements render on top). On update, replaces the stored value — pass a key less than some existing index to send-to-back, or greater to bring-to-front. Use the value returned by list_surface_elements to pick a specific position.
labelNoConnector label (stored as text on the connector). Connector only.
titleNoGroup title. Group only.
widthNoWidth (shape default 100, text default 200).
filledNoWhether shape is filled (default true). Shape only.
heightNoHeight (shape default 100, text default 30).
radiusNoCorner radius for rect (0.1 = rounded). Shape only.
strokeNoConnector stroke color (default '--affine-text-primary-color' — theme-adaptive, near-black in light / near-white in dark). Accepts any CSS color or AFFiNE palette token. Connector only.
childrenNoChild element ids. Group only.
fontSizeNoFont size (shape default 20, text default 16). Shape/text.
sourceIdNoConnector source element id. Connector only.
targetIdNoConnector target element id. Connector only.
elementIdYesElement ID to update
fillColorNoFill color. Prefer the `--affine-palette-shape-<color>` family (yellow/orange/red/magenta/purple/navy/blue/green/teal/grey/white/black). These are fixed colors — AFFiNE shape colors are not theme-adaptive by design. Shape only.
shapeTypeNoShape type (default rect). Shape only.
fontWeightNoFont weight (shape default 600, text default 400). Shape/text.
strokeColorNoStroke color. Prefer the `--affine-palette-line-<color>` family (same color names as fillColor). Fixed colors, not theme-adaptive. Shape only.
strokeStyleNoStroke style. Shape/connector.
strokeWidthNoStroke width (default 2). Shape/connector.
workspaceIdNoWorkspace ID (optional if default set)
sourcePositionNoSource [x,y]: relative [0-1] if sourceId set, absolute otherwise. Connector only.
targetPositionNoTarget [x,y]: relative [0-1] if targetId set, absolute otherwise. Connector only. When both source/target are bound by id and neither position is provided, endpoints snap to the BlockSuite side-midpoint facing the other endpoint so connectors flow in a clear direction. Pass [0.5,0] top, [0.5,1] bottom, [0,0.5] left, [1,0.5] right to force a specific side.
rearEndpointStyleNoRear endpoint style (default Arrow). Connector only.
frontEndpointStyleNoFront endpoint style (default None). Connector only.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations provide basic traits (readOnlyHint false, destructiveHint false). The description adds valuable detail: merge behavior for xywh, wholesale replacement for text/label/title, and an 'ignored' list for non-applicable fields. This goes beyond annotations to clarify the update semantics.

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

Conciseness4/5

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

The description is three sentences, front-loaded with the main purpose. It is concise and structured, though the second and third sentences could be more compact. No wasted words.

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

Completeness4/5

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

For a tool with 30 parameters and no output schema, the description provides essential behavioral context (merge/replace, ignored fields). It mentions the response includes an 'ignored' list, partially compensating for missing output schema. It does not explain all edge cases, but is reasonably 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?

The input schema has 100% coverage with detailed parameter descriptions. The description only adds high-level context about merge vs replace, not per-parameter details. Baseline 3 is appropriate as 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?

The description clearly states the tool's purpose: 'Partially update a surface element by id.' It specifies the verb (update), resource (surface element), and the nature of the update (partial with merge/replace behavior). It distinguishes from siblings like add_surface_element (create) and delete_surface_element (delete) by implying an existing element is modified.

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

Usage Guidelines3/5

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

The description does not explicitly state when to use this tool versus alternatives such as update_edgeless_block. It is implied for updating existing surface elements, but no exclusions or comparisons are provided. The context from sibling names helps, but the description itself lacks direct guidance.

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

update_workspaceUpdate WorkspaceB

Update workspace settings

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesWorkspace ID
publicNoMake workspace public
enableAiNoEnable AI features

TDQS

B3.3/5.0
Behavior3/5

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

Annotations indicate mutation but not destructive or idempotent. Description adds no behavioral detail beyond annotations, but annotations already provide safety profile. 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?

Extremely concise at three words. Core action is clear and 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.

Completeness3/5

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

Given low complexity and full schema coverage, description is adequate but could be improved by summarizing which settings (public, enableAi) are updated. Missing return value info but no output schema expected.

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 descriptions for each parameter. Description adds no additional semantics beyond schema. Baseline 3 applies.

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

Purpose4/5

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

The description clearly states the tool updates workspace settings with verb+resource. However, it doesn't specify which settings or distinguish from other update tools like update_collection. Adequate but not excellent.

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

Usage Guidelines2/5

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

No guidance on when to use this tool vs alternatives like delete_workspace or create_workspace. No context on prerequisites or exclusions.

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

upload_blobUpload BlobA

Upload a file or blob into AFFiNE workspace storage and return its blob key. This creates stored content but does not attach it to a document by itself.

ParametersJSON Schema
NameRequiredDescriptionDefault
contentYesBase64-encoded file content or plain UTF-8 text to upload.
filenameNoOptional filename stored with the upload. Defaults to a generated .bin name.
contentTypeNoOptional MIME type. Defaults to application/octet-stream.
workspaceIdYesAFFiNE workspace id that owns the blob.

TDQS

A4/5.0
Behavior4/5

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

Annotations already provide readOnlyHint=false, idempotentHint=false, destructiveHint=false. The description adds the key behavior that it returns a blob key and does not attach to a document, providing additional context beyond annotations. No contradictions.

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

Conciseness5/5

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

The description is concise at two sentences, front-loading the core purpose and adding a key detail about attachment. Every word adds value with no redundancy.

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

Completeness4/5

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

Given the tool's simplicity, the description covers the primary functionality and return value. The annotations and schema provide additional context. Could mention size limits or encoding details, but not essential for basic completeness.

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 descriptions for all 4 parameters. The tool description does not add meaning beyond what the schema already provides, meeting the baseline expectation for high 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?

The description clearly states the action 'Upload' and the resource 'file or blob into AFFiNE workspace storage', and specifies the return value 'blob key'. It also distinguishes itself from attachment operations by noting it does not attach to a document, differentiating from sibling tools like delete_blob.

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

Usage Guidelines3/5

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

The description implies usage context (storing content without attaching), but does not explicitly state when to use versus alternatives or provide exclusions. It gives some guidance but lacks clear when-to-use and when-not-to-use directives.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 51 tool updatesv2.5.0
    • Changedadd_doc_to_collection3 fields changed
      • addedInput schema / properties / collectionId / description
        Added value: +"AFFiNE collection id from list_collections or create_collection."
      • addedInput schema / properties / docId / description
        Added value: +"AFFiNE document id."
      • addedInput schema / properties / workspaceId / description
        Added value: +"AFFiNE workspace id. Omit only when AFFINE_WORKSPACE_ID is configured."
    • Changedadd_organize_link3 fields changed
      • addedInput schema / properties / folderId / description
        Added value: +"AFFiNE organize folder node id."
      • addedInput schema / properties / type / description
        Added value: +"Type of target represented by the organize link."
      • addedInput schema / properties / workspaceId / description
        Added value: +"AFFiNE workspace id. Omit only when AFFINE_WORKSPACE_ID is configured."
    • Changedadd_tag_to_doc3 fields changed
      • addedInput schema / properties / docId / description
        Added value: +"AFFiNE document id."
      • changedInput schema / properties / tag / description
        Previous value: -"Tag name"New value: +"Tag name to attach to the document."
      • addedInput schema / properties / workspaceId / description
        Added value: +"AFFiNE workspace id. Omit only when AFFINE_WORKSPACE_ID is configured."
    • Changedanalyze_doc_fidelity2 fields changed
      • addedInput schema / properties / docId / description
        Added value: +"AFFiNE document id."
      • addedInput schema / properties / workspaceId / description
        Added value: +"AFFiNE workspace id. Omit only when AFFINE_WORKSPACE_ID is configured."
    • Changedappend_block2 fields changed
      • addedInput schema / properties / docId / description
        Added value: +"AFFiNE document id."
      • addedInput schema / properties / workspaceId / description
        Added value: +"AFFiNE workspace id. Omit only when AFFINE_WORKSPACE_ID is configured."
    • Changedappend_markdown2 fields changed
      • addedInput schema / properties / docId / description
        Added value: +"AFFiNE document id."
      • addedInput schema / properties / workspaceId / description
        Added value: +"AFFiNE workspace id. Omit only when AFFINE_WORKSPACE_ID is configured."
    • Changedappend_semantic_section2 fields changed
      • addedInput schema / properties / docId / description
        Added value: +"AFFiNE document id."
      • addedInput schema / properties / workspaceId / description
        Added value: +"AFFiNE workspace id. Omit only when AFFINE_WORKSPACE_ID is configured."
    • Changedcleanup_blobs1 field changed
      • changedInput schema / properties / workspaceId / description
        Previous value: -"Workspace ID"New value: +"AFFiNE workspace id whose deleted blobs should be released."
    • Changedcreate_collection7 fields changed
      • addedInput schema / properties / rules / properties / filters / description
        Added value: +"Collection filter rules used to build the allow-list."
      • addedInput schema / properties / rules / properties / filters / items / description
        Added value: +"Single AFFiNE collection filter rule."
      • addedInput schema / properties / rules / properties / filters / items / properties / field / description
        Added value: +"Document field evaluated by the collection rule."
      • addedInput schema / properties / rules / properties / filters / items / properties / operator / description
        Added value: +"Comparison operator for the collection rule."
      • addedInput schema / properties / rules / properties / filters / items / properties / value / description
        Added value: +"String value or list of values used by the selected operator."
      • addedInput schema / properties / rules / properties / match / description
        Added value: +"Whether all filters or any filter must match. Defaults to all."
      • addedInput schema / properties / workspaceId / description
        Added value: +"AFFiNE workspace id. Omit only when AFFINE_WORKSPACE_ID is configured."
    • Changedcreate_comment8 fields changed
      • addedInput schema / properties / content / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "additionalProperties": {},
        +    "type": "object"
        +  },
        +  {
        +    "items": {},
        +    "type": "array"
        +  }
        +]
      • addedInput schema / properties / content / description
        Added value: +"Comment content accepted by AFFiNE. Plain strings are normalized to { text }, and rich AFFiNE payload objects are passed through."
      • addedInput schema / properties / docId / description
        Added value: +"Document id that will receive the new comment."
      • addedInput schema / properties / docMode / description
        Added value: +"Document surface for the comment. Defaults to page."
      • addedInput schema / properties / docTitle / description
        Added value: +"Optional document title stored with the comment metadata."
      • addedInput schema / properties / mentions / description
        Added value: +"Optional AFFiNE user ids to mention in the comment."
      • addedInput schema / properties / workspaceId / description
        Added value: +"AFFiNE workspace id. Omit only when AFFINE_WORKSPACE_ID is configured."
      • changedInput schema / required
        Previous value: -[
        -  "docId"
        -]New value: +[
        +  "docId",
        +  "content"
        +]
    • Changedcreate_doc4 fields changed
      • addedInput schema / properties / content / description
        Added value: +"Optional initial plain text or markdown-like content."
      • addedInput schema / properties / title / description
        Added value: +"Optional initial document title."
      • addedInput schema / properties / workspaceId / description
        Added value: +"AFFiNE workspace id. Omit only when AFFINE_WORKSPACE_ID is configured."
      • addedInput schema / properties / workspaceId / minLength
        Added value: +1
    • Changedcreate_doc_from_markdown1 field changed
      • addedInput schema / properties / workspaceId / description
        Added value: +"AFFiNE workspace id. Omit only when AFFINE_WORKSPACE_ID is configured."
    • Changedcreate_folder2 fields changed
      • changedInput schema / properties / parentId / anyOf
        Previous value: -[
        -  {
        -    "minLength": 1,
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "description": "AFFiNE organize folder node id.",
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / workspaceId / description
        Added value: +"AFFiNE workspace id. Omit only when AFFINE_WORKSPACE_ID is configured."
    • Changedcreate_semantic_page1 field changed
      • addedInput schema / properties / workspaceId / description
        Added value: +"AFFiNE workspace id. Omit only when AFFINE_WORKSPACE_ID is configured."
    • Changedcreate_tag2 fields changed
      • changedInput schema / properties / tag / description
        Previous value: -"Tag name"New value: +"Tag name to create in the workspace tag registry."
      • addedInput schema / properties / workspaceId / description
        Added value: +"AFFiNE workspace id. Omit only when AFFINE_WORKSPACE_ID is configured."
    • Changedcreate_workspace_blueprint2 fields changed
      • addedInput schema / properties / childFolderNames / items / description
        Added value: +"Non-empty sidebar folder or collection name."
      • addedInput schema / properties / workspaceId / description
        Added value: +"AFFiNE workspace id. Omit only when AFFINE_WORKSPACE_ID is configured."
    • Changeddelete_blob3 fields changed
      • changedInput schema / properties / key / description
        Previous value: -"Blob key/ID to delete"New value: +"Blob key returned by upload_blob or AFFiNE document metadata."
      • changedInput schema / properties / permanently / description
        Previous value: -"Delete permanently"New value: +"If true, permanently delete the blob instead of marking it deleted."
      • changedInput schema / properties / workspaceId / description
        Previous value: -"Workspace ID"New value: +"AFFiNE workspace id that owns the blob."
    • Changeddelete_collection2 fields changed
      • addedInput schema / properties / collectionId / description
        Added value: +"AFFiNE collection id from list_collections or create_collection."
      • addedInput schema / properties / workspaceId / description
        Added value: +"AFFiNE workspace id. Omit only when AFFINE_WORKSPACE_ID is configured."
    • Changeddelete_comment1 field changed
      • addedInput schema / properties / id / description
        Added value: +"Comment id returned by list_comments or create_comment."
    • Changeddelete_doc4 fields changed
      • addedInput schema / properties / docId / description
        Added value: +"AFFiNE document id."
      • addedInput schema / properties / docId / minLength
        Added value: +1
      • addedInput schema / properties / workspaceId / description
        Added value: +"AFFiNE workspace id. Omit only when AFFINE_WORKSPACE_ID is configured."
      • addedInput schema / properties / workspaceId / minLength
        Added value: +1
    • Changeddelete_folder2 fields changed
      • addedInput schema / properties / folderId / description
        Added value: +"AFFiNE organize folder node id."
      • addedInput schema / properties / workspaceId / description
        Added value: +"AFFiNE workspace id. Omit only when AFFINE_WORKSPACE_ID is configured."
    • Changeddelete_organize_link2 fields changed
      • addedInput schema / properties / nodeId / description
        Added value: +"AFFiNE organize node id from list_organize_nodes."
      • addedInput schema / properties / workspaceId / description
        Added value: +"AFFiNE workspace id. Omit only when AFFINE_WORKSPACE_ID is configured."
    • Changeddelete_tag2 fields changed
      • changedInput schema / properties / tag / description
        Previous value: -"Tag id or name to delete"New value: +"Tag id or name to delete. Ambiguous tag names are rejected with candidate ids."
      • addedInput schema / properties / workspaceId / description
        Added value: +"AFFiNE workspace id. Omit only when AFFINE_WORKSPACE_ID is configured."
    • Changedexport_doc_markdown2 fields changed
      • addedInput schema / properties / docId / description
        Added value: +"AFFiNE document id."
      • addedInput schema / properties / workspaceId / description
        Added value: +"AFFiNE workspace id. Omit only when AFFINE_WORKSPACE_ID is configured."
    • Changedexport_with_fidelity_report2 fields changed
      • addedInput schema / properties / docId / description
        Added value: +"AFFiNE document id."
      • addedInput schema / properties / workspaceId / description
        Added value: +"AFFiNE workspace id. Omit only when AFFINE_WORKSPACE_ID is configured."
    • Changedgenerate_access_token2 fields changed
      • addedInput schema / properties / expiresAt / description
        Added value: +"Optional expiration timestamp accepted by AFFiNE, typically an ISO 8601 string."
      • addedInput schema / properties / name / description
        Added value: +"Human-readable token name shown in AFFiNE token settings."
    • Changedget_collection2 fields changed
      • addedInput schema / properties / collectionId / description
        Added value: +"AFFiNE collection id from list_collections or create_collection."
      • addedInput schema / properties / workspaceId / description
        Added value: +"AFFiNE workspace id. Omit only when AFFINE_WORKSPACE_ID is configured."
    • Changedget_doc3 fields changed
      • addedInput schema / properties / docId / description
        Added value: +"AFFiNE document id."
      • addedInput schema / properties / workspaceId / description
        Added value: +"AFFiNE workspace id. Omit only when AFFINE_WORKSPACE_ID is configured."
      • addedInput schema / properties / workspaceId / minLength
        Added value: +1
    • Changedinspect_template_structure1 field changed
      • addedInput schema / properties / workspaceId / description
        Added value: +"AFFiNE workspace id. Omit only when AFFINE_WORKSPACE_ID is configured."
    • Changedinstantiate_template_native1 field changed
      • addedInput schema / properties / workspaceId / description
        Added value: +"AFFiNE workspace id. Omit only when AFFINE_WORKSPACE_ID is configured."
    • Changedlist_collections1 field changed
      • addedInput schema / properties / workspaceId / description
        Added value: +"AFFiNE workspace id. Omit only when AFFINE_WORKSPACE_ID is configured."
    • Changedlist_comments9 fields changed
      • addedInput schema / properties / after / description
        Added value: +"Cursor from pageInfo.endCursor for fetching the next page."
      • addedInput schema / properties / docId / description
        Added value: +"Document id whose comments should be listed."
      • addedInput schema / properties / first / description
        Added value: +"Maximum number of comments to return from the AFFiNE pagination connection."
      • addedInput schema / properties / first / exclusiveMinimum
        Added value: +0
      • changedInput schema / properties / first / type
        Previous value: -"number"New value: +"integer"
      • addedInput schema / properties / offset / description
        Added value: +"Zero-based offset used by AFFiNE pagination. Do not combine with after unless the AFFiNE API requires it."
      • addedInput schema / properties / offset / minimum
        Added value: +0
      • changedInput schema / properties / offset / type
        Previous value: -"number"New value: +"integer"
      • addedInput schema / properties / workspaceId / description
        Added value: +"AFFiNE workspace id. Omit only when AFFINE_WORKSPACE_ID is configured."
    • Changedlist_docs9 fields changed
      • addedInput schema / properties / after / description
        Added value: +"Cursor from pageInfo.endCursor for fetching the next page."
      • addedInput schema / properties / first / description
        Added value: +"Maximum number of items to return from the AFFiNE pagination connection."
      • addedInput schema / properties / first / exclusiveMinimum
        Added value: +0
      • changedInput schema / properties / first / type
        Previous value: -"number"New value: +"integer"
      • addedInput schema / properties / offset / description
        Added value: +"Zero-based offset used by AFFiNE pagination. Do not combine with after unless the AFFiNE API requires it."
      • addedInput schema / properties / offset / minimum
        Added value: +0
      • changedInput schema / properties / offset / type
        Previous value: -"number"New value: +"integer"
      • changedInput schema / properties / workspaceId / description
        Previous value: -"Workspace ID (optional if default set)."New value: +"AFFiNE workspace id. Omit only when AFFINE_WORKSPACE_ID is configured."
      • addedInput schema / properties / workspaceId / minLength
        Added value: +1
    • Changedlist_docs_by_tag2 fields changed
      • changedInput schema / properties / tag / description
        Previous value: -"Tag name"New value: +"Tag name to match against workspace tag labels."
      • addedInput schema / properties / workspaceId / description
        Added value: +"AFFiNE workspace id. Omit only when AFFINE_WORKSPACE_ID is configured."
    • Changedlist_organize_nodes1 field changed
      • addedInput schema / properties / workspaceId / description
        Added value: +"AFFiNE workspace id. Omit only when AFFINE_WORKSPACE_ID is configured."
    • Changedlist_tags1 field changed
      • addedInput schema / properties / workspaceId / description
        Added value: +"AFFiNE workspace id. Omit only when AFFINE_WORKSPACE_ID is configured."
    • Changedmove_organize_node3 fields changed
      • addedInput schema / properties / nodeId / description
        Added value: +"AFFiNE organize node id from list_organize_nodes."
      • changedInput schema / properties / parentId / anyOf
        Previous value: -[
        -  {
        -    "minLength": 1,
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "description": "AFFiNE organize folder node id.",
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / workspaceId / description
        Added value: +"AFFiNE workspace id. Omit only when AFFINE_WORKSPACE_ID is configured."
    • Changedpublish_doc5 fields changed
      • addedInput schema / properties / docId / description
        Added value: +"AFFiNE document id."
      • addedInput schema / properties / docId / minLength
        Added value: +1
      • addedInput schema / properties / mode / description
        Added value: +"Public document mode to publish. Omit to let AFFiNE use its default."
      • addedInput schema / properties / workspaceId / description
        Added value: +"AFFiNE workspace id. Omit only when AFFINE_WORKSPACE_ID is configured."
      • addedInput schema / properties / workspaceId / minLength
        Added value: +1
    • Changedread_doc2 fields changed
      • addedInput schema / properties / docId / description
        Added value: +"AFFiNE document id."
      • addedInput schema / properties / workspaceId / description
        Added value: +"AFFiNE workspace id. Omit only when AFFINE_WORKSPACE_ID is configured."
    • Changedremove_doc_from_collection3 fields changed
      • addedInput schema / properties / collectionId / description
        Added value: +"AFFiNE collection id from list_collections or create_collection."
      • addedInput schema / properties / docId / description
        Added value: +"AFFiNE document id."
      • addedInput schema / properties / workspaceId / description
        Added value: +"AFFiNE workspace id. Omit only when AFFINE_WORKSPACE_ID is configured."
    • Changedremove_tag_from_doc3 fields changed
      • addedInput schema / properties / docId / description
        Added value: +"AFFiNE document id."
      • changedInput schema / properties / tag / description
        Previous value: -"Tag name"New value: +"Tag name to detach from the document."
      • addedInput schema / properties / workspaceId / description
        Added value: +"AFFiNE workspace id. Omit only when AFFINE_WORKSPACE_ID is configured."
    • Changedrename_folder3 fields changed
      • addedInput schema / properties / folderId / description
        Added value: +"AFFiNE organize folder node id."
      • addedInput schema / properties / name / description
        Added value: +"Non-empty sidebar folder or collection name."
      • addedInput schema / properties / workspaceId / description
        Added value: +"AFFiNE workspace id. Omit only when AFFINE_WORKSPACE_ID is configured."
    • Changedreplace_doc_with_markdown2 fields changed
      • addedInput schema / properties / docId / description
        Added value: +"AFFiNE document id."
      • addedInput schema / properties / workspaceId / description
        Added value: +"AFFiNE workspace id. Omit only when AFFINE_WORKSPACE_ID is configured."
    • Changedresolve_comment2 fields changed
      • addedInput schema / properties / id / description
        Added value: +"Comment id returned by list_comments or create_comment."
      • addedInput schema / properties / resolved / description
        Added value: +"true marks the comment resolved; false reopens it."
    • Changedrevoke_access_token1 field changed
      • addedInput schema / properties / id / description
        Added value: +"Access token id returned by list_access_tokens or generate_access_token."
    • Changedrevoke_doc4 fields changed
      • addedInput schema / properties / docId / description
        Added value: +"AFFiNE document id."
      • addedInput schema / properties / docId / minLength
        Added value: +1
      • addedInput schema / properties / workspaceId / description
        Added value: +"AFFiNE workspace id. Omit only when AFFINE_WORKSPACE_ID is configured."
      • addedInput schema / properties / workspaceId / minLength
        Added value: +1
    • Changedsign_in2 fields changed
      • addedInput schema / properties / email / description
        Added value: +"AFFiNE account email address."
      • addedInput schema / properties / password / description
        Added value: +"AFFiNE account password. Prefer API tokens for production deployments."
    • Changedupdate_collection2 fields changed
      • addedInput schema / properties / collectionId / description
        Added value: +"AFFiNE collection id from list_collections or create_collection."
      • addedInput schema / properties / workspaceId / description
        Added value: +"AFFiNE workspace id. Omit only when AFFINE_WORKSPACE_ID is configured."
    • Changedupdate_collection_rules8 fields changed
      • addedInput schema / properties / collectionId / description
        Added value: +"AFFiNE collection id from list_collections or create_collection."
      • addedInput schema / properties / rules / properties / filters / description
        Added value: +"Collection filter rules used to build the allow-list."
      • addedInput schema / properties / rules / properties / filters / items / description
        Added value: +"Single AFFiNE collection filter rule."
      • addedInput schema / properties / rules / properties / filters / items / properties / field / description
        Added value: +"Document field evaluated by the collection rule."
      • addedInput schema / properties / rules / properties / filters / items / properties / operator / description
        Added value: +"Comparison operator for the collection rule."
      • addedInput schema / properties / rules / properties / filters / items / properties / value / description
        Added value: +"String value or list of values used by the selected operator."
      • addedInput schema / properties / rules / properties / match / description
        Added value: +"Whether all filters or any filter must match. Defaults to all."
      • addedInput schema / properties / workspaceId / description
        Added value: +"AFFiNE workspace id. Omit only when AFFINE_WORKSPACE_ID is configured."
    • Changedupdate_comment4 fields changed
      • addedInput schema / properties / content / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "additionalProperties": {},
        +    "type": "object"
        +  },
        +  {
        +    "items": {},
        +    "type": "array"
        +  }
        +]
      • addedInput schema / properties / content / description
        Added value: +"Replacement comment content accepted by AFFiNE."
      • addedInput schema / properties / id / description
        Added value: +"Comment id returned by list_comments or create_comment."
      • changedInput schema / required
        Previous value: -[
        -  "id"
        -]New value: +[
        +  "id",
        +  "content"
        +]
    • Changedupload_blob4 fields changed
      • changedInput schema / properties / content / description
        Previous value: -"Base64 encoded content or text"New value: +"Base64-encoded file content or plain UTF-8 text to upload."
      • changedInput schema / properties / contentType / description
        Previous value: -"MIME type"New value: +"Optional MIME type. Defaults to application/octet-stream."
      • changedInput schema / properties / filename / description
        Previous value: -"Filename"New value: +"Optional filename stored with the upload. Defaults to a generated .bin name."
      • changedInput schema / properties / workspaceId / description
        Previous value: -"Workspace ID"New value: +"AFFiNE workspace id that owns the blob."
  2. 12 tool updatesv2.4.0
    • Addedclear_doc_property
    • Addedcreate_custom_property
    • Changedcreate_doc1 field changed
      • addedInput schema / properties / folderId
        Added value: +{
        +  "description": "Optional folder ID to place the doc in. Use list_organize_nodes to find folder IDs.",
        +  "type": "string"
        +}
    • Addeddelete_custom_property
    • Addeddelete_tag
    • Addedfind_doc_by_title
    • Addedget_doc_icon
    • Addedget_folder_icon
    • Addedlist_doc_properties
    • Addedset_doc_property
    • Addedupdate_doc_icon
    • Addedupdate_folder_icon
  3. 20 tool updatesv2.0.0
    • Addedadd_surface_element
    • Changedappend_block10 fields changed
      • changedInput schema / properties / background / description
        Previous value: -"Background for frame/note"New value: +"Background for frame/note. Frame default 'transparent'. For notes, prefer AFFiNE's adaptive `--affine-note-background-<color>` family — `blue` / `purple` / `yellow` / `green` / `teal` / `red` / `orange` / `magenta` / `grey` / `white` / `black`. For specific per-theme colors, pass a `{light, dark}` hex object like `{light:'#fff', dark:'#252525'}`."
      • removedInput schema / properties / background / type
        Removed value: -"string"
      • addedInput schema / properties / childElementIds
        Added value: +{
        +  "description": "For type='frame' only. The frame's contents. Accepts ids of surface elements (shapes/connectors/groups) AND edgeless blocks (notes/frames/edgeless-text) — BlockSuite's prop:childElementIds holds both, matching what the editor writes when you drag a note into a frame. Dragging the frame drags every owned member. Ids that don't resolve come back under 'missing'. When width/height are omitted the frame is sized to the union of resolvable child bounds + padding + a 30px title band.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • changedInput schema / properties / height / description
        Previous value: -"Height for frame/edgeless_text/note"New value: +"Height for frame/edgeless_text/note. When `markdown` is set and height is omitted, an over-estimate is computed from the content — AFFiNE's render-time ResizeObserver corrects `prop:xywh` to the true DOM-measured height on first browser open."
      • addedInput schema / properties / markdown
        Added value: +{
        +  "description": "When type='note', parse this markdown into heading/paragraph/list/code child blocks inside the note (BlockSuite-native: mirrors what happens when you paste markdown into an edgeless note). Takes precedence over 'text' for note children. Ignored for other block types.",
        +  "type": "string"
        +}
      • addedInput schema / properties / padding
        Added value: +{
        +  "description": "Default padding (px) for `childElementIds` auto-sizing on frames (each side, plus +30px title band) and fallback gap for `stackAfter` (default 40).",
        +  "type": "integer"
        +}
      • addedInput schema / properties / stackAfter
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Layout helper — position this block relative to one or more existing edgeless blocks. Picks the furthest anchor in `direction` for the stack axis, and centers the new block on the anchor group's union on the orthogonal axis (matches how BlockSuite aligns selection-derived blocks; reduces to inherit-anchor-x when widths match). Caller-provided x/y on the orthogonal axis still wins. Works for frame/note/edgeless_text. Example: `stackAfter: { blockId: [f1, f2, f3], gap: 80 }` stacks below whichever column frame ends lowest, centered across all three. Note heights shift at first render (page-root grows with the title, content notes shrink/grow with their children); give extra gap and fix up with `update_edgeless_block` if the down/right chain drifts.",
        +  "properties": {
        +    "blockId": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        }
        +      ],
        +      "description": "Block(s) to stack relative to. String = a single anchor; array = pick whichever is furthest in the stack direction (bottommost for 'down', rightmost for 'right', etc.)."
        +    },
        +    "direction": {
        +      "description": "Direction (default 'down')",
        +      "enum": [
        +        "down",
        +        "up",
        +        "right",
        +        "left"
        +      ],
        +      "type": "string"
        +    },
        +    "gap": {
        +      "description": "Gap in px between the anchor and the new block. Default is direction-aware: 80 for left/right, 40 for down/up — mirrors native-flowchart spacing where the flow axis gets more breathing room than the cross axis. Explicit `padding` on the block overrides this default; explicit `gap` wins over both.",
        +      "type": "integer"
        +    }
        +  },
        +  "required": [
        +    "blockId"
        +  ],
        +  "type": "object"
        +}
      • changedInput schema / properties / width / description
        Previous value: -"Width for frame/edgeless_text/note"New value: +"Width for frame/edgeless_text/note."
      • addedInput schema / properties / x
        Added value: +{
        +  "description": "X position on the edgeless canvas for frame/edgeless_text/note (default 0). Prefer ≥40px between sibling bounds; BlockSuite does not auto-arrange.",
        +  "type": "integer"
        +}
      • addedInput schema / properties / y
        Added value: +{
        +  "description": "Y position on the edgeless canvas for frame/edgeless_text/note (default 0).",
        +  "type": "integer"
        +}
    • Removedappend_paragraph
    • Removedbatch_create_docs
    • Removedcleanup_orphan_embeds
    • Removedcreate_doc_from_template
    • Addeddelete_block
    • Addeddelete_surface_element
    • Removedduplicate_doc
    • Removedfind_and_replace
    • Removedget_doc_by_title
    • Removedget_docs_by_tag
    • Addedget_edgeless_canvas
    • Removedlist_backlinks
    • Addedlist_surface_elements
    • Removedlist_unresolved_threads
    • Removedupdate_database_cell
    • Addedupdate_edgeless_block
    • Addedupdate_frame_children
    • Addedupdate_surface_element
  4. 87 tool updatesv1.12.0
    • Addedadd_database_column
    • Addedadd_database_row
    • Addedadd_doc_to_collection
    • Addedadd_organize_link
    • Addedadd_tag_to_doc
    • Addedanalyze_doc_fidelity
    • Addedappend_block
    • Addedappend_markdown
    • Addedappend_paragraph
    • Addedappend_semantic_section
    • Addedbatch_create_docs
    • Addedcleanup_blobs
    • Addedcleanup_orphan_embeds
    • Addedcompose_database_from_intent
    • Addedcreate_collection
    • Addedcreate_comment
    • Addedcreate_doc
    • Addedcreate_doc_from_markdown
    • Addedcreate_doc_from_template
    • Addedcreate_folder
    • Addedcreate_semantic_page
    • Addedcreate_tag
    • Addedcreate_workspace
    • Addedcreate_workspace_blueprint
    • Addedcurrent_user
    • Addeddelete_blob
    • Addeddelete_collection
    • Addeddelete_comment
    • Addeddelete_database_row
    • Addeddelete_doc
    • Addeddelete_folder
    • Addeddelete_organize_link
    • Addeddelete_workspace
    • Addedduplicate_doc
    • Addedexport_doc_markdown
    • Addedexport_with_fidelity_report
    • Addedfind_and_replace
    • Addedgenerate_access_token
    • Addedget_capabilities
    • Addedget_collection
    • Addedget_doc
    • Addedget_doc_by_title
    • Addedget_docs_by_tag
    • Addedget_orphan_docs
    • Addedget_workspace
    • Addedinspect_template_structure
    • Addedinstantiate_template_native
    • Addedlist_access_tokens
    • Addedlist_backlinks
    • Addedlist_children
    • Addedlist_collections
    • Addedlist_comments
    • Addedlist_docs
    • Addedlist_docs_by_tag
    • Addedlist_histories
    • Addedlist_notifications
    • Addedlist_organize_nodes
    • Addedlist_tags
    • Addedlist_unresolved_threads
    • Addedlist_workspace_tree
    • Addedlist_workspaces
    • Addedmove_doc
    • Addedmove_organize_node
    • Addedpublish_doc
    • Addedread_all_notifications
    • Addedread_database_cells
    • Addedread_database_columns
    • Addedread_doc
    • Addedremove_doc_from_collection
    • Addedremove_tag_from_doc
    • Addedrename_folder
    • Addedreplace_doc_with_markdown
    • Addedresolve_comment
    • Addedrevoke_access_token
    • Addedrevoke_doc
    • Addedsearch_docs
    • Addedsign_in
    • Addedupdate_collection
    • Addedupdate_collection_rules
    • Addedupdate_comment
    • Addedupdate_database_cell
    • Addedupdate_database_row
    • Addedupdate_doc_title
    • Addedupdate_profile
    • Addedupdate_settings
    • Addedupdate_workspace
    • Addedupload_blob
  5. 36 tool updatesv1.0.0
    • Removedaffine_apply_doc_updates
    • Removedaffine_change_password
    • Removedaffine_cleanup_blobs
    • Removedaffine_create_comment
    • Removedaffine_current_user
    • Removedaffine_delete_account
    • Removedaffine_delete_blob
    • Removedaffine_delete_comment
    • Removedaffine_generate_access_token
    • Removedaffine_list_access_tokens
    • Removedaffine_list_comments
    • Removedaffine_list_histories
    • Removedaffine_list_notifications
    • Removedaffine_read_all_notifications
    • Removedaffine_read_notification
    • Removedaffine_recover_doc
    • Removedaffine_resolve_comment
    • Removedaffine_revoke_access_token
    • Removedaffine_send_password_reset
    • Removedaffine_send_verify_email
    • Removedaffine_sign_in
    • Removedaffine_update_comment
    • Removedaffine_update_profile
    • Removedaffine_update_settings
    • Removedaffine_upload_blob
    • Removedcreate_workspace
    • Removeddelete_workspace
    • Removedget_doc
    • Removedget_workspace
    • Removedlist_docs
    • Removedlist_workspaces
    • Removedpublish_doc
    • Removedrecent_docs
    • Removedrevoke_doc
    • Removedsearch_docs
    • Removedupdate_workspace
  6. 36 tool updates
    • First observedaffine_apply_doc_updates
    • First observedaffine_change_password
    • First observedaffine_cleanup_blobs
    • First observedaffine_create_comment
    • First observedaffine_current_user
    • First observedaffine_delete_account
    • First observedaffine_delete_blob
    • First observedaffine_delete_comment
    • First observedaffine_generate_access_token
    • First observedaffine_list_access_tokens
    • First observedaffine_list_comments
    • First observedaffine_list_histories
    • First observedaffine_list_notifications
    • First observedaffine_read_all_notifications
    • First observedaffine_read_notification
    • First observedaffine_recover_doc
    • First observedaffine_resolve_comment
    • First observedaffine_revoke_access_token
    • First observedaffine_send_password_reset
    • First observedaffine_send_verify_email
    • First observedaffine_sign_in
    • First observedaffine_update_comment
    • First observedaffine_update_profile
    • First observedaffine_update_settings
    • First observedaffine_upload_blob
    • First observedcreate_workspace
    • First observeddelete_workspace
    • First observedget_doc
    • First observedget_workspace
    • First observedlist_docs
    • First observedlist_workspaces
    • First observedpublish_doc
    • First observedrecent_docs
    • First observedrevoke_doc
    • First observedsearch_docs
    • First observedupdate_workspace

TDQS

A3.7/5.0
Disambiguation5/5

Each tool targets a specific resource and action, with clear differentiation (e.g., add_database_column vs add_database_row, read_doc vs get_doc). Overlapping operations like create_comment vs update_comment vs delete_comment are distinctly named.

Naming Consistency4/5

Tools follow a mostly consistent verb_noun pattern (e.g., create_doc, list_tags). A few outliers like current_user and sign_in break the pattern, but overall the naming is predictable and readable.

Tool Count2/5

95 tools is excessive for any server, even one covering broad functionality. Many specialized tools could be consolidated (e.g., multiple creation variants). The large count likely overwhelms agents.

Completeness5/5

The tool set covers all major workflows: CRUD for docs, databases, comments, tags, collections, surface elements, workspaces, auth, and blobs. Edge cases like orphan docs, fidelity reports, and template instantiation are included. No obvious gaps.

Maintenance

ActivityActive
ResponsivenessResponsive

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/DAWNCR0W/affine-mcp-server'

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