Skip to main content
Glama

Nextcloud MCP Server

Lint Unit Tests Integration Tests codecov

NextcloudVersion PythonVersion Python PyPI License: MIT

Experimental — This repository is fully maintained by AI (Claude). It serves as an experiment in autonomous AI-driven open-source development.

An MCP (Model Context Protocol) server that exposes Nextcloud APIs as tools for AI assistants. Connect any MCP-compatible client (Claude Desktop, Claude Code, etc.) to your Nextcloud instance and let AI manage your files, calendar, contacts, conversations, and more.

Quick Start

pip install nc-mcp-server

Set environment variables and connect:

export NEXTCLOUD_URL=https://your-nextcloud.example.com
export NEXTCLOUD_USER=your-username
export NEXTCLOUD_PASSWORD=your-app-password
nc-mcp-server

Related MCP server: nextcloud-mcp

222 Tools Across 24 Nextcloud Apps

A 223rd tool, upload_file_from_path, is registered only when the operator sets NEXTCLOUD_MCP_UPLOAD_ROOT. See Files for details.

Category

Tools

Protocol

Files

list, read, search, upload (text / binary / from path), copy, move, delete

WebDAV

File Sharing

list, get, create, update, delete shares; accept, decline and leave shares from others

OCS

Trashbin

list, restore, delete item, empty trash

WebDAV

File Versions

list, restore versions

WebDAV

File Comments

list, add, edit, delete comments

WebDAV

File Reminders

get, set, remove per-file reminders

OCS

System Tags

list, create, assign, unassign, delete tags

WebDAV

Users

get current, list, get, create, update, enable/disable, delete users

OCS

Groups

list groups and members, create, delete groups

OCS

User Status

get, set, clear status

OCS

Notifications

list, dismiss one, dismiss all

OCS

Activity

activity feed with filters, search by file, time and user, daily counts

OCS

Talk

conversations, messages, threads, participants, edits, reactions, read state, shared items, pins, reminders, personal settings and tags, participant and conversation management

OCS

Talk Polls

get, create, vote, close polls

OCS

Announcements

list, create, delete announcements

OCS

Calendar

list calendars, CRUD events

CalDAV

Contacts

list address books, CRUD contacts

CardDAV

Tasks

list lists, CRUD tasks, complete

CalDAV

Mail

accounts, mailboxes, messages, send, move, flags, tags

OCS + REST

Collectives

list, pages, create, edit, move and copy, search, tags, attachments, public links, trash, restore

OCS

Forms

CRUD forms, questions, options, shares, submissions + export

OCS

Circles (Teams)

list, CRUD, members (add/remove/promote), join/leave, search

OCS

Cospend

shared expense tracking — projects, members, bills

OCS

Unified Search

list providers, search across apps

OCS

App Management

list, info, enable, disable apps

OCS

Flow

list, create, update, delete automation rules; list what they can be built from

OCS

Security: Permission Model

Every tool has a required permission level. You control what the AI is allowed to do:

Level

What it can do

Environment variable

read (default)

List files, read files, get users, view notifications

NEXTCLOUD_MCP_PERMISSIONS=read

write

Everything in read + upload files, send messages, create events

NEXTCLOUD_MCP_PERMISSIONS=write

destructive

Everything in write + delete files, remove shares, empty trash

NEXTCLOUD_MCP_PERMISSIONS=destructive

If a tool is called without sufficient permission, it returns a clear error explaining what permission is needed — no silent failures, no accidental deletions.

Installation

pip install nc-mcp-server

Or with pipx / uvx for isolated installation:

pipx install nc-mcp-server
# or
uvx nc-mcp-server

Or from source:

git clone https://github.com/cloud-py-api/nc_mcp_server.git
cd nc_mcp_server
pip install -e .

Configuration

Set these environment variables:

# Required
export NEXTCLOUD_URL=https://your-nextcloud.example.com
export NEXTCLOUD_USER=your-username
export NEXTCLOUD_PASSWORD=your-app-password  # Use an app password, not your main password!

# Optional
export NEXTCLOUD_MCP_PERMISSIONS=read  # read (default), write, or destructive
export NEXTCLOUD_MCP_RETRY_MAX=3       # max retries on 429/503 (default: 3, 0 to disable)
export NEXTCLOUD_MCP_UPLOAD_ROOT=      # unset (default). If set to an absolute directory,
                                       # enables upload_file_from_path, restricted to files
                                       # inside that directory (symlinks resolved).

Getting an App Password

  1. Log into your Nextcloud instance

  2. Go to Settings > Security

  3. Under "Devices & sessions", create a new app password

  4. Use this password for NEXTCLOUD_PASSWORD

Since Nextcloud 34.0.1 an app-password session never counts as password-confirmed, so with an app password the admin tools Nextcloud guards with password confirmation (create_user, update_user, set_user_enabled, delete_user, create_group, delete_group, enable_app, disable_app) fail with "Password confirmation is required". To use them, allow the MCP server's IP address in config.php (Nextcloud 34.0.3 and newer), e.g. 'allowed_no_password_confirmation_ranges' => ['192.0.2.10/32']. With the account's login password they work without that: when Nextcloud asks for a confirmation, the server repeats the request as a fresh login. Accounts with two-factor authentication cannot log in with their password here, so they need an app password and the exemption.

Usage

With Claude Desktop

Add to your claude_desktop_config.json:

{
  "mcpServers": {
    "nextcloud": {
      "command": "nc-mcp-server",
      "env": {
        "NEXTCLOUD_URL": "https://your-nextcloud.example.com",
        "NEXTCLOUD_USER": "your-username",
        "NEXTCLOUD_PASSWORD": "your-app-password",
        "NEXTCLOUD_MCP_PERMISSIONS": "read"
      }
    }
  }
}

With Claude Code

claude mcp add nextcloud \
  -e NEXTCLOUD_URL=https://your-nextcloud.example.com \
  -e NEXTCLOUD_USER=your-username \
  -e NEXTCLOUD_PASSWORD=your-app-password \
  -e NEXTCLOUD_MCP_PERMISSIONS=read \
  -- nc-mcp-server

As HTTP Server (for containers/remote)

nc-mcp-server --transport http
# Listens on http://0.0.0.0:8100 by default

Stdio Mode (default)

nc-mcp-server
# Communicates via stdin/stdout — used by MCP clients like Claude Desktop

Available Tools

Files

Tool

Permission

Description

list_directory

read

List files and folders in a directory

get_file

read

Read a file's content (returns images as MCP ImageContent)

search_files

read

Search files by name, MIME type, or path pattern

upload_file

write

Upload or overwrite a text file

upload_file_binary

write

Upload or overwrite a binary file (images, PDFs, archives) from base64-encoded content

upload_file_from_path

write

Stream a local file from the server's filesystem — only registered when NEXTCLOUD_MCP_UPLOAD_ROOT is set

create_directory

write

Create a new directory

copy_file

write

Copy a file or directory

move_file

destructive

Move or rename a file

delete_file

destructive

Delete a file or directory (moves to trash)

upload_file_from_path is off by default because it gives the AI read access to the local filesystem. To enable it, set NEXTCLOUD_MCP_UPLOAD_ROOT to an absolute directory — only files resolving inside that directory (after symlink resolution) can be uploaded. This is the right choice when you need to upload multi-GB files that would blow past the size limit of an inline base64 tool call; the body is streamed in chunks rather than loaded into memory.

File Sharing

Tool

Permission

Description

list_shares

read

List shares for a file/folder, all your shares, or the shares others gave you (federated included)

get_share

read

Get details of a specific share

list_pending_shares

read

List shares offered to you that wait to be accepted, from this server and federated

create_share

write

Share a file/folder (user, group, public link, email)

update_share

write

Update share permissions, expiration, password, etc.

accept_share

write

Accept a pending share

delete_share

destructive

Remove a share, or leave one you received

decline_share

destructive

Decline a pending share

Trashbin

Tool

Permission

Description

list_trash

read

List deleted files in the trash bin

restore_trash_item

write

Restore a file from trash to its original location

delete_trash_item

destructive

Permanently delete a single item from trash

empty_trash

destructive

Permanently delete all items in trash

File Versions

Tool

Permission

Description

list_versions

read

List version history of a file

restore_version

write

Restore a previous version of a file

File Comments

Tool

Permission

Description

list_comments

read

List comments on a file

add_comment

write

Add a comment to a file

edit_comment

write

Edit an existing comment

delete_comment

destructive

Delete a comment

File Reminders

Tool

Permission

Description

get_file_reminder

read

Get the reminder set on a file (null if none)

set_file_reminder

write

Set or replace a reminder due date (ISO 8601, must be in the future)

remove_file_reminder

destructive

Remove the reminder from a file

System Tags

Tool

Permission

Description

list_tags

read

List all available tags

get_file_tags

read

Get tags assigned to a file

create_tag

write

Create a new tag

assign_tag

write

Assign a tag to a file

unassign_tag

destructive

Remove a tag from a file

delete_tag

destructive

Delete a tag

Users

Tool

Permission

Description

get_current_user

read

Get current authenticated user info

list_users

read

List or search users

get_user

read

Get specific user details

create_user

write

Create a new user (admin only)

update_user

write

Change display name, email, password, quota, language, manager, groups and sub-admin groups in one call (Nextcloud 34+)

set_user_enabled

write

Enable or disable a user account (admin or sub-admin); disabling needs destructive

delete_user

destructive

Delete a user (admin only)

update_user has Nextcloud validate every field before applying any of them. Users can change their own display name, email, language and password with it; Nextcloud 34 and 35 only accept the underlying call from admins and sub-admins, so for a regular user's own account the tool sets those fields one at a time instead, without that all-or-nothing check. Passing password, groups or subadmin_groups needs the destructive level, as does disabling an account with set_user_enabled.

Groups

Tool

Permission

Description

list_groups

read

List or search groups with member counts (admin)

list_group_members

read

List the users in a group (admins, the group's sub-admins and members)

create_group

write

Create a group (admin only)

delete_group

destructive

Delete a group (admin only)

User Status

Tool

Permission

Description

get_user_status

read

Get a user's status (online, away, dnd, etc.)

set_user_status

write

Set your status and custom message

clear_user_status

destructive

Clear your status

Notifications

Tool

Permission

Description

list_notifications

read

List all notifications

dismiss_notification

write

Dismiss a single notification

dismiss_all_notifications

write

Dismiss all notifications

Activity

Tool

Permission

Description

get_activity

read

View recent activity with filtering, sorting, and pagination; search by file path, time range and user (Nextcloud 35)

list_activity_filters

read

List the activity filters this server offers

get_activity_counts

read

Count activities per day over the last days (Nextcloud 35)

Talk

Tool

Permission

Description

list_conversations

read

List all Talk conversations

get_conversation

read

Get conversation details

get_messages

read

Get messages from a conversation, or from one thread

get_participants

read

List participants in a conversation

list_threads

read

List the most recently active threads in a conversation

get_thread

read

Get a thread's title, reply count and first/last message

list_subscribed_threads

read

List the threads you follow across all conversations

get_message_context

read

Get the messages before and after one message

get_reactions

read

List who reacted to a message, and with what

list_shared_items

read

List files, media, polls, locations and more shared in a conversation

search_mentions

read

Find who can be mentioned, with the text to put in a message

list_message_reminders

read

List your upcoming message reminders

list_conversation_tags

read

List your personal conversation tags

list_conversation_presets

read

List the presets create_conversation can start from

send_message

write

Send a message; can start a thread or post into one

create_conversation

write

Create a one-to-one, group or public conversation, optionally from a preset

update_conversation

write

Rename, describe, lock (read-only) or open (public) a conversation (moderators); making it private needs destructive; owners can preserve it (Talk 25+)

add_participant

write

Add a user, group, team, email guest or federated user (moderators)

set_participant_role

write

Make a participant owner (Talk 25+), moderator or user

rename_thread

write

Rename a thread

set_thread_notification_level

write

Set your notification level for a thread

edit_message

write

Edit a message (own ones, or any as a moderator of a group conversation; within 24 hours)

add_reaction

write

React to a message with an emoji

mark_conversation_read

write

Mark a conversation read, fully or up to a message

mark_conversation_unread

write

Mark the last message unread again

set_conversation_preferences

write

Your own settings: favorite, archived, important, sensitive, message and call notifications

pin_message

write

Pin a message for everyone, optionally until a time (moderators)

set_message_reminder

write

Get a notification about a message later

create_conversation_tag

write

Create a personal conversation tag

rename_conversation_tag

write

Rename a conversation tag

set_conversation_tags

write

Set which of your tags a conversation has

delete_message

destructive

Delete a message

leave_conversation

destructive

Leave a conversation

remove_participant

destructive

Remove someone from a conversation (moderators)

delete_conversation

destructive

Delete a conversation for everyone (moderators; one-to-one ones can only be left)

remove_reaction

destructive

Take back your reaction to a message

unpin_message

destructive

Unpin a message for everyone, or hide it only for you

remove_message_reminder

destructive

Cancel a message reminder

delete_conversation_tag

destructive

Delete a conversation tag

The thread tools need a Talk version that advertises the threads capability (Talk 22, which ships with Nextcloud 32, and newer), so every Nextcloud release supported here has them. A thread ID is the message ID of the thread's first message.

Messages read back with their mentions and shared objects filled in ("@Jane Doe", "report.pdf") instead of the placeholders Talk stores ({mention-user1}, {file}).

Talk Polls

Tool

Permission

Description

get_poll

read

Get poll details and results

create_poll

write

Create a poll in a conversation

vote_poll

write

Vote on a poll

close_poll

write

Close a poll

Announcements

Tool

Permission

Description

list_announcements

read

List announcements

create_announcement

write

Create an announcement

delete_announcement

destructive

Delete an announcement

Calendar

Tool

Permission

Description

list_calendars

read

List user's calendars

get_events

read

Get events from a calendar (with date filtering)

get_event

read

Get a single event by UID

create_event

write

Create a calendar event

update_event

write

Update an event (partial updates supported)

delete_event

destructive

Delete a calendar event

Contacts

Tool

Permission

Description

list_addressbooks

read

List user's address books

get_contacts

read

Get contacts with pagination

get_contact

read

Get a single contact by UID

create_contact

write

Create a contact (multi-value email/phone supported)

update_contact

write

Update a contact (ETag concurrency control)

delete_contact

destructive

Delete a contact

Tasks

Tool

Permission

Description

list_task_lists

read

List task lists (CalDAV VTODO collections)

get_tasks

read

List tasks in a list (with status/completed filters)

get_task

read

Get a single task by UID

create_task

write

Create a task (due date, priority, categories, etc.)

update_task

write

Update a task (partial updates supported)

complete_task

write

Mark a task as completed

delete_task

destructive

Delete a task

Mail

Tool

Permission

Description

list_mail_accounts

read

List mail accounts

list_mailboxes

read

List mailboxes (folders) for an account

list_mail_messages

read

List messages in a mailbox

get_mail_message

read

Get full message content

send_mail

write

Send an email

move_mail_message

write

Move a message to another mailbox of the same account (its ID changes)

set_mail_message_flags

write

Mark as read/unread, starred, answered

create_mail_tag

write

Create a tag, or get the existing one with the same label

add_mail_message_tag

write

Tag a message

remove_mail_message_tag

write

Remove a tag from a message

Collectives

Tool

Permission

Description

list_collectives

read

List all collectives

get_collective_pages

read

List pages in a collective

get_collective_page

read

Get a page's content

search_collective_pages

read

Search the text of a collective's pages

list_recent_collective_pages

read

List the most recently changed pages across collectives

list_collective_tags

read

List a collective's page tags

list_collective_page_attachments

read

List the files attached to a page

list_collective_shares

read

List your public links to a collective and its pages

create_collective

write

Create a new collective

create_collective_page

write

Create a page in a collective, optionally with its text

update_collective_page

write

Change a page's text, title or emoji

move_collective_page

write

Move or copy a page under another page, also into another collective

create_collective_tag

write

Create a page tag

update_collective_tag

write

Rename a tag or change its color

set_collective_page_tags

write

Set which tags a page has

share_collective

write

Create a public link to a collective or one page, optionally editable and with a password

update_collective_share

write

Change a public link's editing and password

trash_collective

destructive

Move a collective to trash

delete_collective

destructive

Permanently delete a trashed collective, optionally with its team (and, when told, the team's folder)

trash_collective_page

destructive

Move a page to trash

delete_collective_page

destructive

Permanently delete a trashed page

delete_collective_tag

destructive

Delete a tag, taking it off its pages

delete_collective_share

destructive

Remove a public link

restore_collective

write

Restore a collective from trash

restore_collective_page

write

Restore a page from trash

Forms

Tool

Permission

Description

list_forms

read

List forms (filter by ownership: "owned" or "shared"; omit to merge both)

get_form

read

Get a form with questions, options, shares

list_questions

read

List questions on a form

get_question

read

Get a single question

list_submissions

read

List submissions (owner only), with pagination and text filter

get_submission

read

Get a single submission with answers

create_form

write

Create an empty form or clone from an existing form

update_form

write

Update form properties (title, access, state, maxSubmissions, etc.)

create_question

write

Add a question (short, long, multiple, dropdown, date, file, grid, …)

update_question

write

Update question properties

reorder_questions

write

Reorder all questions on a form

create_options

write

Add answer options to a choice question

update_option

write

Update option text

reorder_options

write

Reorder options within a question

create_form_share

write

Share a form with user, group, circle, or link

update_form_share

write

Update share permissions

submit_form

write

Submit answers to a form

update_submission

write

Edit an existing submission (requires allowEditSubmissions)

export_submissions

write

Export submissions as a spreadsheet to a Nextcloud folder

delete_form

destructive

Delete a form and all its content

delete_question

destructive

Delete a question

delete_option

destructive

Delete an option

delete_form_share

destructive

Revoke a share

delete_submission

destructive

Delete one submission

delete_all_submissions

destructive

Delete every submission on a form

Circles (Teams)

Tool

Permission

Description

list_circles

read

List circles the current user can see

get_circle

read

Get a single circle including the current user's membership

list_circle_members

read

List members of a circle

search_circles

read

Search circles and candidate members (users/groups/mail) by term

create_circle

write

Create a circle; caller becomes owner. Optionally with a team folder (Nextcloud 35 + Team folders app)

update_circle_name

write

Rename a circle

update_circle_description

write

Update description

update_circle_config

write

Update config bitmask (VISIBLE, OPEN, INVITE, HIDDEN, etc.)

add_circle_member

write

Add a user, group, email, or nested circle as a member

update_circle_member_level

write

Promote/demote a member (member/moderator/admin/owner)

join_circle

write

Join an open circle

leave_circle

destructive

Leave a circle. The owner's leave passes ownership to any other member (pending invitations count), or destroys the circle when no one else is left; refuses to lose a team folder unless told

delete_circle

destructive

Delete a circle; refuses to delete its team folder and files unless told

remove_circle_member

destructive

Kick a member

Cospend

Shared expense tracking ("who paid for what"). Requires the Cospend app to be installed and enabled. All routes are OCS at /ocs/v2.php/apps/cospend/api/v1/.

Tool

Permission

Description

list_cospend_projects

read

List projects the user can access

get_cospend_project

read

Get full project info (members, balance, shares, settings)

get_cospend_project_statistics

read

Per-member spending stats (paid/spent/balance) with filters

get_cospend_project_settlement

read

Suggested reimbursement transactions to settle a project

list_cospend_members

read

List members of a project

list_cospend_bills

read

List bills with filters (payer, category, search, pagination)

get_cospend_bill

read

Get a single bill

create_cospend_project

write

Create a project (caller becomes ADMIN)

update_cospend_project

write

Update project name, currency, sort, archive, etc.

create_cospend_member

write

Add a member (free-form name or linked to a Nextcloud user)

update_cospend_member

write

Update name/weight/color/activated/userid

create_cospend_bill

write

Create a bill (defaults date to today if neither date nor timestamp set)

update_cospend_bill

write

Update any bill field

delete_cospend_project

destructive

Delete a project and all its data

delete_cospend_member

destructive

Delete (or soft-disable if member has bills)

delete_cospend_bill

destructive

Delete a bill (default: trash; pass move_to_trash=False to purge)

Tool

Permission

Description

list_search_providers

read

List available search providers (files, mail, talk, etc.)

unified_search

read

Search across one or more providers with pagination

App Management

Tool

Permission

Description

list_apps

read

List installed apps

get_app_info

read

Get detailed app information

enable_app

write

Enable an app (admin only)

disable_app

destructive

Disable an app (admin only)

Flow

Tool

Permission

Description

list_flows

read

List Flow rules of the user or (admin) global scope

get_flow_options

read

List the operations, entities, events and checks a rule can use, with operators and value formats for the built-in checks

create_flow

write

Create a rule; global rules need destructive

update_flow

write

Change a rule's name, checks, settings or events; global rules need destructive

delete_flow

destructive

Delete a rule

The available operations depend on the installed apps (Talk adds "Write to conversation", for example), and Nextcloud has no API that lists them, so get_flow_options reads them from the Flow settings page. Global rules act on every user's files, which is why they need the destructive level. Rules that would run a command or command-line arguments of the agent's choosing on the server (the workflow_script app's operation, or workflow_ocr with custom ocrmypdf arguments) are refused at any level.

Development

# Clone and install
git clone https://github.com/cloud-py-api/nc_mcp_server.git
cd nc_mcp_server
python3 -m venv venv && source venv/bin/activate
pip install -e ".[dev]"

# Run tests
pytest                              # Unit tests
pytest tests/integration/ -v        # Integration tests (needs running Nextcloud)

# Lint & type check
ruff check . && ruff format --check .
pyright

Integration Tests

Integration tests run against a real Nextcloud instance. Set the environment variables and run:

export NEXTCLOUD_URL=http://localhost:8080
export NEXTCLOUD_USER=admin
export NEXTCLOUD_PASSWORD=admin
pytest tests/integration/ -v

CI runs the integration tests against Nextcloud 34 and 35 using the official Docker images.

About This Project

This project is an experiment in AI-autonomous open-source development. The entire codebase — including this README — is written and maintained by Claude (Anthropic's AI assistant). Human oversight is limited to:

  • High-level design decisions

  • Code review of pull requests

  • Resolving architectural questions

The goal is to explore how far autonomous AI development can go in building production-quality, well-tested software.

Available Tools

222 tools
accept_shareA
Idempotent

Accept a share offered to the current user, adding it to their files.

Accepting a share that was already accepted changes nothing. A group share the user declined or left earlier is restored first, since Nextcloud refuses to accept it otherwise.

Args: share_id: The pending share's id from list_pending_shares, as a string (federated share ids can be too long for a JSON number). federated: True for a federated share from another server (federated: true in list_pending_shares). Shares from this server and federated shares are numbered separately.

Returns: Confirmation message.

ParametersJSON Schema
NameRequiredDescriptionDefault
share_idYes
federatedNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, idempotentHint=true and destructiveHint=false; the description reinforces and enriches this by explaining the idempotency in concrete terms and disclosing a real side effect — a previously declined/left group share is restored before acceptance because Nextcloud otherwise refuses. It does not cover authorization/permission requirements, so not a 5.

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

Conciseness4/5

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

Purpose and idempotency behavior are front-loaded in the first two paragraphs, with Args/Returns kept tight. The docstring-style formatting adds a little overhead but every sentence contributes information; nothing is padding.

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 two-parameter mutation with an output schema and full annotation coverage, the description supplies everything an agent needs: what it does, how it differs from decline_share, where the id comes from, the federated distinction, and the idempotency guarantee. Returns are correctly left to the output schema.

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

Parameters5/5

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

Schema description coverage is 0%, so the description carries the full burden, and it does: share_id is defined as the pending share's id from list_pending_shares along with the reason it may be a string (long federated ids exceed JSON number range), and federated is defined with its true/false condition and the separate numbering caveat.

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 first sentence gives a specific verb and resource ('Accept a share ... adding it to their files') and immediately scopes it to the current user. It is clearly distinguishable from sibling tools like decline_share, list_pending_shares, and create_share without opening any schema.

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

Usage Guidelines4/5

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

It names the upstream tool (list_pending_shares) as the source of the share_id and explains when to set federated=true, including the non-obvious fact that local and federated shares are numbered separately. It stops short of stating explicit exclusions or prerequisites (e.g. permission needed to accept), so it falls just short of a 5.

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

add_circle_memberA

Add a user, group, email, or nested circle as a member. Requires moderator+.

Args: circle_id: String circle id. user_id: The identifier of the principal being added. For user: the uid. For group: the group id. For mail: the email address. For circle: the string circle id (singleId). member_type: One of "user" (default), "group", "mail", "contact", "circle". Determines how user_id is interpreted.

Returns: JSON of the new member (id, singleId, userId, level, status). Status is "Member" for direct add and "Invited" when the circle has the INVITE config flag set.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_idYes
circle_idYes
member_typeNouser

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior5/5

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

Beyond the annotations, the description discloses the permission requirement, the side effect of adding a member, the return value shape, and the conditional behavior where status becomes 'Invited' when the circle has the INVITE config flag. This gives the agent important behavioral expectations that annotations alone do not 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 front-loaded with the core purpose and then organized into concise Args and Returns sections. Every sentence adds necessary information; there is no filler or redundant expansion beyond the schema.

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

Completeness4/5

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

The description covers the operation, permission, parameters, and return behavior comprehensively. The only notable gap is that member_type includes 'contact' but the user_id interpretation for that type is not explained, unlike user, group, mail, and circle.

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?

The input schema provides no parameter descriptions (0% coverage), so the description carries full responsibility. It explains circle_id, how user_id is interpreted for each member_type value, the default of 'user', and the full enum of member_type options. This is exemplary parameter 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 action: adding a user, group, email, or nested circle as a member, which is distinct from sibling operations like remove_circle_member, list_circle_members, and update_circle_member_level. It also names the permission requirement, making the tool's role 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 gives a useful prerequisite ('Requires moderator+') but does not explicitly explain when to choose this tool over alternatives such as join_circle (self-joining) or update_circle_member_level (changing an existing member's role). The usage context is implied rather than stated.

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

add_commentA

Add a comment to a file.

Use @username in the message to mention other users. Maximum message length is 1000 characters.

Args: file_id: The numeric file ID to comment on. message: The comment text (max 1000 characters). Use @username to mention users.

Returns: Confirmation with the new comment ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_idYes
messageYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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

Description discloses that a new comment is created, that @username mentions are supported, that the message is length-capped at 1000 characters, and that a confirmation with the new comment ID is returned. Annotations only indicate it is not read-only, idempotent, or destructive, so this adds genuinely useful 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.

Conciseness4/5

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

Tightly structured with intro, constraint notes, Args, and Returns. The only minor redundancy is restating @username and max length in both the intro and the message arg, but it is small and keeps each section self-contained.

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 two-parameter mutation with an output schema, the description covers both parameters, the mention feature, the length limit, and the return value. No critical information appears missing for an agent to invoke the tool correctly.

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

Parameters5/5

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

Schema description coverage is 0%, so the description is the only source of parameter meaning. It defines file_id as the numeric file ID to comment on and message as the comment text with max length and @username syntax, fully compensating for the schema's lack of 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?

States the exact action and object: 'Add a comment to a file.' This clearly distinguishes it from sibling comment tools like list_comments, edit_comment, and delete_comment by naming the creation action and the target 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?

Provides actionable constraints: use @username to mention users and maximum message length of 1000 characters. However, it does not explicitly say when to choose this tool over edit_comment, delete_comment, or list_comments; usage context is implied rather than directly stated.

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

add_mail_message_tagA
Idempotent

Tag a message. Tagging a message that already has the tag changes nothing.

Args: message_id: The message database ID. Use list_mail_messages to find it. imap_label: The tag's IMAP label (for example "$needs_reply"), as returned by create_mail_tag or shown in the tags of list_mail_messages. Mail's built-in tags use $label1 (Important), $label2 (Work), $label3 (Personal), $label4 (To Do) and $label5 (Later).

Returns: JSON object with message_id and the tag (id, display_name, imap_label, color).

ParametersJSON Schema
NameRequiredDescriptionDefault
imap_labelYes
message_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare idempotentHint=true, and the description reinforces this by stating 'Tagging a message that already has the tag changes nothing.' This adds behavioral context beyond the annotation. It also clarifies the operation is non-destructive (destructiveHint=false) and readOnlyHint=false, which is consistent. The description could mention side effects like notification triggers, but the idempotency disclosure is valuable.

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

Conciseness5/5

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

The description is compact and front-loaded with the core action and idempotency note. The Args section is structured and each parameter gets a clear explanation. The Returns section is brief. 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 two-parameter mutation tool with an output schema and annotations covering idempotency and safety, the description covers the essential context: how to find both parameters, what the operation does, and what it returns. It doesn't mention error cases or permission requirements, but those are not critical for this simple tool.

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

Parameters4/5

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

Schema description coverage is 0%, so the description carries the full burden. It explains message_id as 'The message database ID' and how to find it, and imap_label as 'The tag's IMAP label' with concrete examples of built-in tags. This adds significant meaning beyond the bare schema properties. It doesn't explain the return value in detail, but the output schema exists.

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

Purpose4/5

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

The description states a specific verb and resource: 'Tag a message' with an IMAP label. It clearly distinguishes from siblings like remove_mail_message_tag and create_mail_tag. However, it doesn't explicitly name the sibling alternatives, so it doesn't fully earn a 5.

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

Usage Guidelines4/5

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

The description explains how to find message_id via list_mail_messages and how to obtain imap_label via create_mail_tag or list_mail_messages, including built-in tag examples. It doesn't explicitly state when not to use it or contrast with remove_mail_message_tag, but the context is clear enough for an agent to select it correctly.

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

add_participantA
Idempotent

Add someone to a conversation. Needs moderator rights; adding someone twice changes nothing.

Args: token: The conversation token. participant: Who to add: a user ID, group ID, team (circle) ID, email address or federated cloud ID, matching source. source: "users" (default), "groups" (adds every member), "circles" (a team), "emails" (invites a guest by email) or "federated_users" (someone on another server, when federation is enabled). One-to-one and note-to-self conversations take nobody.

Returns: Confirmation message; get_participants lists attendee IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
tokenYes
sourceNousers
participantYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare idempotentHint=true and destructiveHint=false; the description reinforces idempotency and adds genuinely new behavioral context: the moderator-rights requirement and the constraint that one-to-one and note-to-self conversations take no participants. This is useful auth and edge-case disclosure beyond the structured hints.

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

Conciseness5/5

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

Front-loaded one-line summary, then structured Args/Returns blocks. Given three undocumented parameters and five source modes, every sentence earns its place; there is no filler.

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

Completeness5/5

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

Covers prerequisites, idempotency, per-source semantics, and conversation-type exclusions; output schema exists but the description still points to get_participants for attendee IDs. Nothing needed to invoke this mutation correctly is missing.

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

Parameters5/5

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

Schema description coverage is 0%, so the description carries the full burden and does it well: it explains token, enumerates every participant format, and documents all five source values including default and side effects ('groups' adds every member, 'emails' invites a guest). This substantially exceeds what the bare schema provides.

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

Purpose5/5

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

States a specific verb and resource ('Add someone to a conversation') that is clearly distinct from neighboring tools like add_circle_member, remove_participant, and set_participant_role. An agent can identify the target operation without opening the schema.

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

Usage Guidelines4/5

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

Gives real preconditions ('Needs moderator rights') and an operational caveat ('adding someone twice changes nothing'), plus per-source guidance on which source value to pick. It stops short of naming alternatives or when-not-to-use cases (only the one-to-one/note-to-self limitation is stated).

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

add_reactionB
Idempotent

React to a chat message with an emoji. Reacting twice with the same one changes nothing.

Args: token: The conversation token. message_id: The message to react to. reaction: One emoji, e.g. "👍".

Returns: JSON object mapping each reaction on the message to who used it.

ParametersJSON Schema
NameRequiredDescriptionDefault
tokenYes
reactionYes
message_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare idempotentHint=true, so the line about reacting twice changing nothing largely restates structured data. The description does add value by describing the payload shape ("mapping each reaction on the message to who used it") and implying mutation via "React," but adds no auth requirements, error behavior, or rate-limit context.

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?

One-sentence purpose plus tightly scoped Args and Returns blocks, front-loaded and free of filler. The Args entries are slightly terse but each 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 single-mutation tool with an output schema present, the definition covers purpose, all parameters, and idempotent behavior. Auth/permission requirements and failure modes are the only meaningful omissions.

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

Parameters4/5

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

Schema description coverage is 0%, so the description carries the full burden and does so: it documents all three parameters, clarifies token is a conversation token and message_id the target, and gives a concrete example ("👍") for the reaction format. Only the integer type/range of message_id and token sourcing remain unstated.

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

Purpose4/5

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

States a specific verb + resource ("React to a chat message with an emoji"), which is unambiguous and easily separable from siblings like get_reactions or remove_reaction. It stops short of explicitly naming the inverse/related tools, so it is clear but not sibling-differentiating at the top level.

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

Usage Guidelines2/5

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

There is no guidance on when to use this versus get_reactions (read) or remove_reaction (undo), nor any prerequisite/auth context. The only usage-adjacent statement, "Reacting twice with the same one changes nothing," is a behavioral note rather than a when-to-use rule.

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

assign_tagA
Idempotent

Assign a system tag to a file.

Use list_tags to find available tag IDs and list_directory to find file IDs. Assigning an already-assigned tag has no effect.

Args: file_id: The numeric file ID. tag_id: The tag ID to assign.

Returns: Confirmation message.

ParametersJSON Schema
NameRequiredDescriptionDefault
tag_idYes
file_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already signal a non-readonly, idempotent, non-destructive operation, and the description aligns with them. It adds a concrete behavioral detail: 'Assigning an already-assigned tag has no effect,' which prevents agents from treating duplicate assignments as errors.

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 about six short lines, front-loads the core purpose, and includes only high-value additions: ID lookup, idempotency, args, and return. There is no filler or redundant restatement of the schema.

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 two-integer-parameter mutation with an output schema, the description covers purpose, argument resolution, idempotency, and return value. Nothing material is missing for an agent to call this tool correctly.

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

Parameters4/5

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

The input schema has 0% description coverage, so the Args section carries the burden, and it defines both parameters. More valuably, it tells the agent how to obtain valid values via list_tags and list_directory; the individual definitions are terse but sufficient.

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

Purpose5/5

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

The description opens with 'Assign a system tag to a file,' a specific verb and resource statement. It clearly distinguishes assign_tag from siblings like unassign_tag and 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 Guidelines4/5

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

The description explicitly directs the agent to use list_tags and list_directory to resolve valid IDs, which is practical usage context. It does not explicitly name the inverse alternative unassign_tag or state when not to use it, but the context is clear.

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

clear_user_statusA
Idempotent

Clear the current user's status message and icon.

This removes the custom status message and icon but does NOT change the online status type (online, away, etc.).

Returns: Confirmation message.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

The description adds meaningful behavioral context beyond the annotations: it specifies the mutation scope (custom status message and icon), the non-effect on online status, and the confirmation return. Annotations already mark it as idempotent and non-destructive, and the description does not contradict them.

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

Conciseness5/5

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

The description is compact and front-loaded with the primary action, followed by a valuable clarification and a return note. Every sentence earns its place with no filler or repetition.

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?

This is a low-complexity, zero-parameter, idempotent operation with annotations and an output schema already present. The description fully covers the action, scope, key exclusion, and return value, so nothing an agent needs is missing.

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

Parameters4/5

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

There are zero parameters, so the baseline is 4 and there is no ambiguity to resolve. The description's inclusion of 'current user' clarifies the implicit scope of the operation, which is the only semantic context 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?

The description uses a specific verb and resource: it clears the current user's status message and icon. It also distinguishes itself from related status tools by clarifying that it does NOT change the online status type, so an agent can tell exactly what operation this performs.

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 gives clear context for when to use the tool: when you want to remove the custom status message and icon. It also provides a when-not signal by explicitly stating it does not affect online status type, although it does not name set_user_status or get_user_status as alternatives.

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

close_pollA
DestructiveIdempotent

Close a poll in a Talk conversation.

Once closed, no more votes can be cast and results become visible to all participants (regardless of result_mode). Only the poll creator or a conversation moderator can close a poll.

This action is irreversible — a closed poll cannot be reopened.

Args: token: The conversation token. poll_id: The poll ID to close.

Returns: JSON object with the final poll results including all votes and details.

ParametersJSON Schema
NameRequiredDescriptionDefault
tokenYes
poll_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the destructiveHint and idempotentHint annotations, the description explains irreversibility, that voting stops, that results become visible regardless of result_mode, and the required authorization. No contradiction with annotations exists.

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 tightly organized: one-sentence purpose, behavioral consequences, permission/irreversibility warning, then args and return. Every sentence adds relevant information with no filler.

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

Completeness5/5

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

For a two-parameter mutating tool, the description covers authorization, side effects, irreversibility, and return shape. The output schema signal reduces the need to document return values further, and nothing critical is missing.

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

Parameters4/5

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

Although schema description coverage is 0%, the Args section adds plain-language meaning: token is the conversation token and poll_id is the poll to close. It does not go into lookup/origin details, but it compensates for the bare schema titles.

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 a specific action ('Close a poll in a Talk conversation') and distinguishes this from sibling poll operations like create_poll and vote_poll. It also explains the consequences of closing, making the tool's role 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?

It clearly communicates when to use it (to end a poll and reveal results) and adds a permission constraint (creator/moderator only). It does not explicitly name alternatives or say 'use X instead', but the context is sufficiently clear.

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

complete_taskA
Idempotent

Mark a task as completed.

Sets the task's status to COMPLETED, percent-complete to 100, and records the completion timestamp. No-ops if already completed.

For optimistic locking, pass the etag from a previous get_task call.

Args: list_id: Task list identifier (e.g. "tasks"). task_uid: The task's UID to complete. Use get_tasks to find UIDs. etag: Optional ETag from a previous read for optimistic locking.

Returns: Confirmation message.

ParametersJSON Schema
NameRequiredDescriptionDefault
etagNo
list_idYes
task_uidYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

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

Annotations already indicate idempotentHint=true and destructiveHint=false, so the description's mention of no-op behavior aligns but doesn't add much beyond that. It does add the detail of specific field updates (percent-complete, timestamp), which is useful context. However, there is no note on permissions or side effects beyond what annotations imply.

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 with a clear first sentence stating the primary action, followed by specific behavioral details and parameter explanations. Each sentence serves a purpose 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?

For a tool with only 3 simple parameters and an output schema (though not detailed here), the description covers the core behavior, idempotency, and locking. It could benefit from noting required permissions or that the task must exist, but these are minor given the simple scope.

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 0%, but the description explicitly explains each parameter: list_id is the list identifier, task_uid is the task's UID (with a pointer to get_tasks), and etag is for optimistic locking. This adds meaning beyond parameter names, but it's basic and doesn't elaborate on syntax or edge cases.

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 marks a task as completed, with specific state changes (status to COMPLETED, percent-complete to 100, timestamp). It distinguishes itself from sibling tools like update_task or create_task by focusing solely on completion.

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 idempotent no-op behavior when already completed and mentions optimistic locking via etag. It does not explicitly contrast with update_task, but the completion-specific action is clear enough for an agent to select it appropriately.

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

copy_fileA
Idempotent

Copy a file or directory in Nextcloud.

Creates a copy at the destination path. The source remains unchanged. Fails if the destination already exists.

Args: source: Source path. Example: "Documents/report.md" destination: Destination path. Example: "Documents/report-backup.md"

Returns: Confirmation message.

ParametersJSON Schema
NameRequiredDescriptionDefault
sourceYes
destinationYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior1/5

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

The annotation idempotentHint is true, but the description says 'Fails if the destination already exists.' This contradicts idempotency: calling twice with the same arguments will fail the second time. Therefore the description contradicts the annotations, so the score is 1.

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, front-loaded, and efficiently structured. It covers behavior, failure condition, parameters with examples, and return type without any fluff.

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

Completeness5/5

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

For a simple 2-parameter tool, the description provides everything an agent needs: what it does, failure condition, parameter semantics with examples, and the return type. No additional information is needed to call it correctly.

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

Parameters4/5

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

The schema has no descriptions (0% coverage), so the description must compensate. It provides clear semantic meaning for both source and destination, including concrete examples. This adds value beyond the raw schema, though it does not specify path formats relative to a root.

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 (copy) and the resource (file or directory in Nextcloud). It distinguishes from siblings like move_file by explicitly saying 'source remains unchanged', making the semantic distinction obvious.

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 explains the copy operation but does not explicitly mention when to use this tool versus alternatives like move_file or delete_file. The purpose is clear from context, but no explicit guidance or exclusions are given.

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

create_announcementA

Create a new announcement in Nextcloud. Requires admin privileges.

Announcements are posted to the Announcement Center and optionally trigger activity entries, notifications, and/or emails for the targeted groups.

Args: subject: Announcement title (1-512 characters, required). message: Announcement body in Markdown format. plain_message: Plain text version of the body. If empty, the markdown message is used as fallback. groups: List of group IDs to target (e.g. ["admin", "staff"]). Default: ["everyone"] (visible to all users). activities: Post to the activity stream (default: true). notifications: Send in-app notifications (default: true). emails: Send email notifications (default: false). comments: Allow comments on this announcement (default: true).

Returns: JSON object with the created announcement details.

ParametersJSON Schema
NameRequiredDescriptionDefault
emailsNo
groupsNo
messageNo
subjectYes
commentsNo
activitiesNo
notificationsNo
plain_messageNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations only indicate readOnlyHint=false, idempotentHint=false, destructiveHint=false – they don't specify side effects. The description adds that it posts to the Announcement Center, optionally triggers activities, notifications, and emails, and requires admin privileges. This is valuable behavioral context 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 well-structured: a summary sentence, an effect explanation, an Args block, and a Returns line. It is slightly longer than necessary but every sentence adds value, and the core purpose is front-loaded. The parameter list is formatted for quick scanning.

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 an 8-parameter tool, the description covers every parameter with explanations, states the admin requirement, and outlines side effects. The output schema exists, so a high-level 'Returns: JSON object' is sufficient. Nothing essential is missing for an agent to call this tool correctly.

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

Parameters5/5

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

Schema description coverage is 0%, so the description carries full responsibility for parameter meaning. It explains all 8 parameters: subject, message, plain_message, groups, activities, notifications, emails, and comments – each with purpose, defaults, and in some cases formats (e.g., Markdown, group ID list). This far exceeds the schema's bare types and defaults.

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

Purpose5/5

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

States a specific verb and resource: 'Create a new announcement in Nextcloud.' This clearly distinguishes it from siblings like list_announcements and delete_announcement. The scope is 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 indicates when to use it (to create an announcement) and includes a prerequisite ('Requires admin privileges'). It does not explicitly mention alternatives or when not to use it, but the purpose is so clear that usage is effectively implied. A slightly stronger explicit contrast with list/delete would make it a 5.

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

create_circleA

Create a new circle (team).

Args: name: Display name of the new circle. Does not have to be unique. personal: If True, create a personal circle visible only to the owner (useful for private contact groups). local: If True, mark the circle as local (not federated to other instances) even when global scope is enabled. team_folder: If True, also create a team folder: a shared folder every member sees in Files, named after the team (with a number added when that name is taken; see its mountPoint). Needs Nextcloud 35 or later with the Team folders app. Deleting the team later deletes the folder and its files too.

Returns: JSON of the new circle including its generated id. The caller is automatically added as owner (level=9). With team_folder, it also has team_folder (id, mountPoint, quota) or null with team_folder_note saying why none was created.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
localNo
personalNo
team_folderNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior5/5

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

Annotations cover only the safety profile (readOnly=false, idempotent=false, destructive=false). The description adds substantial behavioral context beyond that: the caller is auto-added as owner at level=9, team_folder requires Nextcloud 35 with the Team folders app, the folder name gets a numeric suffix on collision, and deleting the team later deletes the folder and its files. That last point is exactly the kind of destructive side-effect an agent needs.

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

Conciseness4/5

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

The purpose is front-loaded in one line, then Args and Returns sections keep the detail scannable. It runs long, but nearly every sentence carries prerequisite or side-effect information that isn't repeated elsewhere; only minor trimming is possible.

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 4-parameter creation tool with prerequisites and cascading effects, the description covers ownership, version/app requirements, naming collisions, the returned shape, and the team_folder/team_folder_note result fields. Nothing an agent needs to call it correctly is missing, and the output schema handles the rest.

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

Parameters5/5

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

Schema description coverage is 0%, so the description carries the full burden and meets it: each of the four parameters gets meaning, defaults, and edge conditions (name need not be unique, personal limits visibility to the owner, local suppresses federation even when global scope is enabled, team_folder has a version/app prerequisite and a cascading delete).

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

Purpose5/5

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

The description opens with a specific verb+resource: 'Create a new circle (team).' The parenthetical disambiguates the Nextcloud notion of a circle/team, and the sibling set includes other creation tools (create_collective, create_group, create_conversation) that an agent can distinguish by the resource named here.

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

Usage Guidelines3/5

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

Usage is implied by the tool name and the per-parameter semantics (personal for private groups, local for non-federated), but there is no explicit 'use this when...' guidance or comparison against sibling creation tools like create_collective or create_group. An agent can infer the context but must supply the routing decision itself.

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

create_collectiveA

Create a new collective (shared knowledge base).

A collective is a wiki-like space where team members can create and edit pages together. It automatically creates a landing page, and a team (circle) of the same name for its members. On Nextcloud 35+ with the Team folders app, that team also gets a team folder.

Args: name: Name of the collective (required, must be unique). emoji: Optional emoji icon for the collective (e.g. "📚").

Returns: JSON object with the created collective details, and team_folder (the folder's name) when its team got one.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
emojiNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnlyHint=false, idempotentHint=false, destructiveHint=false), yet the description adds real side-effect disclosure beyond them: an automatic landing page, an auto-created team/circle of the same name, and a team folder on Nextcloud 35+ with the Team folders app. It omits permission requirements and what happens on name collision besides 'must be unique'.

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

Conciseness4/5

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

Front-loads the purpose, then the concept, then side effects, then args/returns. The prose paragraph is justified because the side effects are non-obvious, though the Returns block partly restates what an output schema already provides.

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 create tool with annotations and an output schema, the description covers purpose, side effects, and both parameters, which is enough to invoke it correctly. The main gap is the absence of permission/authorization context and duplicate-name behavior.

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

Parameters4/5

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

Schema description coverage is 0%, so the description carries the full parameter burden and does so: it marks name as required and unique, and explains emoji as an optional icon with a concrete example. It could still note name length limits or formatting 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?

States a specific verb and resource ('Create a new collective'), and immediately defines what a collective is (shared wiki-like knowledge base), which draws a clear line against siblings like list_collectives, trash_collective, delete_collective, and the page-level tools.

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

Usage Guidelines3/5

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

Usage is implied by the verb and by the 'must be unique' constraint, but the description never states when to create a collective versus other options (e.g. joining an existing one via join_circle, or whether trashing is recoverable later). No explicit when-not or alternative routing.

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

create_collective_pageA

Create a new page in a collective.

Pages are Markdown documents organized in a tree structure. Every page must have a parent — use the landing page ID as parent for top-level pages.

Args: collective_id: The numeric collective ID. parent_id: Parent page ID. Use the landing page ID from get_collective_pages for top-level pages. title: Title of the new page (required). content: Optional Markdown text for the page.

Returns: JSON object with the created page details.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYes
contentNo
parent_idYes
collective_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, idempotentHint=false, and destructiveHint=false, so the safety profile is known. The description adds the structural parent requirement and notes the return type, but does not mention auth/permission needs or side effects beyond what annotations convey.

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

Conciseness4/5

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

Front-loaded with the core action, then structured with Args and Returns sections. Efficient overall, though the 'Returns' line partly duplicates the output schema and could be trimmed.

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 4-param creation tool with an output schema present, the description covers the action, the structural constraint, and each parameter. It is largely self-sufficient, missing only permission/error expectations, which the output schema and annotations partially offset.

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 0% schema description coverage, the description carries the burden and does so: it documents collective_id (numeric collective ID), parent_id (with the non-obvious landing-page-ID rule), title (required), and content (optional Markdown). Only omission is that the underlying types/defaults are left to the schema.

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

Purpose4/5

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

States a specific verb+resource ('Create a new page in a collective') and adds a useful conceptual model (Markdown documents in a tree structure). It is clearly distinguishable from sibling read/mutation tools like update_collective_page and get_collective_pages, though it does not name them explicitly.

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

Usage Guidelines4/5

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

Gives a concrete usage rule: every page must have a parent, and top-level pages should use the landing page ID from get_collective_pages. This routes the agent usefully, but it offers no explicit when-not or alternative-tool guidance (e.g., vs update/move).

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

create_collective_tagB

Create a page tag in a collective.

Args: collective_id: The numeric collective ID. name: The tag's name. color: Six hex digits, with or without "#" (default "0082C9", Nextcloud blue).

Returns: JSON with the new tag (id, name, color).

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
colorNo0082C9
collective_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, and idempotentHint=false, covering the safety/idempotency profile. The description adds the return shape, but says nothing about required permissions, whether duplicate tag names are rejected, or side effects on existing pages. With annotations doing the heavy lifting, this is adequate 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.

Conciseness4/5

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

Purpose is front-loaded in the first sentence, followed by compact Args and Returns sections. No filler, though the structured boilerplate is slightly heavier than a single tight paragraph would be.

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 an output schema present, return values need not be explained, yet the description still summarizes them. Params are covered and annotations give the safety profile, leaving only usage routing and permission behavior as gaps. Complete enough for a straightforward create tool.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must carry the meaning, and it does: collective_id is 'numeric collective ID', name is the tag's name, and color is specified as six hex digits with or without '#' plus the default '0082C9'. The color format/default detail is genuinely additive and not present in the schema.

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

Purpose4/5

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

States a specific verb and resource ('Create a page tag') and scopes it to 'in a collective', which distinguishes it from siblings like create_conversation_tag, create_mail_tag, and create_tag. It does not explicitly name those siblings, so it stops short of a 5.

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

Usage Guidelines2/5

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

No guidance on when to use this versus the many other tag-creation tools (create_tag, create_conversation_tag, create_mail_tag) or when a tag is warranted. The scope is implied by the name only; an agent gets no explicit when-to-use or exclusion criteria.

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

create_contactA

Create a new contact in an address book.

Provide at least full_name, or given_name/family_name.

For a single email/phone, use the email/phone params. For multiple, use emails/phones with an array of {"value","type"} objects: emails=[{"value":"a@b.com","type":"WORK"},{"value":"a@home.com","type":"HOME"}] Do not provide both email and emails (or phone and phones).

Args: full_name: Full display name (e.g. "John Doe"). given_name: First name (e.g. "John"). family_name: Last name (e.g. "Doe"). email: Single email address (convenience, adds as TYPE=WORK). phone: Single phone number (convenience, adds as TYPE=CELL). emails: Array of {"value","type"} for multiple emails. Overrides email. phones: Array of {"value","type"} for multiple phones. Overrides phone. organization: Company/organization name. title: Job title. note: Free-text note. book_id: Address book ID (default "contacts").

Returns: JSON contact object with uid, full_name, and all set fields.

ParametersJSON Schema
NameRequiredDescriptionDefault
noteNo
emailNo
phoneNo
titleNo
emailsNo
phonesNo
book_idNocontacts
full_nameNo
given_nameNo
family_nameNo
organizationNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A5/5.0
Behavior5/5

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

The description discloses key behaviors beyond the annotations: single email/phone is added with TYPE=WORK/CELL, multiple emails/phones override the single parameters, and the return format is a JSON contact object. These details help the agent predict outcomes, especially since annotations only say readOnlyHint=false and idempotentHint=false.

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 well-structured: a one-line summary, then requirements, parameter details, and return info. It is front-loaded with the core purpose, and each sentence adds necessary information—no fluff. The length is justified given the 11 parameters and their interactions.

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 complexity (many optional parameters, mutually exclusive sets, nested objects), the description covers all required information: field requirements, parameter semantics, examples, and return value. An agent has everything needed to call it correctly without consulting the output schema or further documentation.

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?

With 0% schema description coverage, the description fully compensates by explaining every parameter, including the nested structure for emails/phones with an example. It also clarifies the precedence (emails overrides email) and the default for book_id. This adds substantial meaning beyond the bare 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 states a clear verb and resource: 'Create a new contact in an address book.' It also specifies the minimum required fields (full_name or given_name/family_name), which distinguishes it from sibling tools like update_contact and delete_contact. The purpose is unambiguous.

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

Usage Guidelines5/5

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

It provides explicit usage instructions: the minimum required fields, how to specify single vs. multiple emails/phones, and a warning not to provide both forms. It also clarifies the default for book_id. These guidelines tell an agent exactly when and how to use the tool, including constraints that prevent errors.

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

create_conversationA

Create a new Talk conversation.

Args: room_type: 1 for a one-to-one conversation, 2 for a group conversation, 3 for a public one. Group conversations are invite-only; public ones can be joined via link. A one-to-one conversation with someone you already have one with returns the existing one. name: Display name for the conversation (ignored for one-to-one). invite: User ID to invite; required for one-to-one, optional for group. description: Optional description for group and public conversations. preset: Optional preset identifier from list_conversation_presets; its settings (permissions, lobby, read-only, ...) are applied to the new conversation. An explicit room_type still wins over the preset's.

Returns: JSON object with the created conversation details, including its token.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
inviteNo
presetNo
room_typeYes
descriptionNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already establish the write/non-idempotent/non-destructive profile. Beyond that, the description adds genuinely useful behavior: the 1:1 dedup-and-return-existing rule, the fact that preset settings are applied and that an explicit room_type overrides the preset, and that the response carries a token. This is meaningful context that the annotations cannot express.

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

Conciseness4/5

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

The purpose leads and the Args/Returns structure is easy to scan; each clause carries information. It is somewhat long, but the length is justified by five undocumented parameters and non-obvious behaviors, so nothing is wasted.

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

Completeness5/5

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

With an output schema present, the description need not detail return fields, yet it still notes the response includes the conversation token. Combined with full parameter documentation and the preset/room_type precedence rule, an agent has everything needed to call it correctly.

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

Parameters5/5

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

Schema description coverage is 0%, so the description carries the full parameter burden and does it well: room_type is enumerated with meanings (1=one-to-one, 2=group, 3=public), invite is marked required for one-to-one and optional for group, name is noted as ignored for one-to-one, and description/preset scopes are stated.

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

Purpose4/5

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

States a specific verb and resource ('Create a new Talk conversation'), which is unambiguous. It does not, however, differentiate itself from the many other create_* siblings (create_group, create_circle, create_collective, create_flow), so an agent gets a clear purpose but no routing help.

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

Usage Guidelines4/5

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

Explains the conditional scenarios that matter: group conversations are invite-only, public ones are joinable via link, and a one-to-one with an existing partner returns the existing conversation. It gives clear context but never names an alternative tool or states explicit when-not-to-use conditions.

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

create_conversation_tagB

Create a personal conversation tag.

Up to 100 of your own tags, with distinct names of up to 250 characters.

Args: name: The tag's name.

Returns: JSON with the new tag (id, name, type, sort_order).

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior4/5

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

Annotations cover the safety profile (readOnlyHint=false, idempotentHint=false, destructiveHint=false), and the description adds concrete business constraints not in any structured field: a 100-tag personal limit and a 250-character distinct-name requirement. This is real behavioral 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.

Conciseness4/5

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

The purpose is front-loaded in the first sentence, and the constraint sentence is compact. The Args/Returns sections are slightly redundant given the output schema exists, but nothing is bloated.

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?

An output schema is present, so the Returns block is redundant rather than harmful. For a simple one-parameter creation tool the constraints and return shape are covered, but the absence of routing guidance against the many sibling tag tools leaves a practical gap.

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

Parameters3/5

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

Schema description coverage is 0% for the single parameter, and "name: The tag's name" is essentially a tautology. However, the description's "distinct names of up to 250 characters" does add a real constraint and format limit for the name parameter, partially compensating for the coverage gap.

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

Purpose4/5

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

States a specific verb+resource ("Create a personal conversation tag"), and the qualifier "personal conversation" distinguishes it from create_collective_tag, create_mail_tag, and create_tag. It does not explicitly name those siblings, so differentiation relies on the agent inferring scope from the qualifier.

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

Usage Guidelines2/5

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

There is no when-to-use guidance, no prerequisites, and no mention of alternatives. The agent must infer from the sibling list that other tag-creation tools (create_collective_tag, create_mail_tag, create_tag) exist, without the description telling it which to pick.

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

create_cospend_billA

Create a bill (expense) in a Cospend project. Requires PARTICIPANT access.

Args: project_id: String project id. what: Short description of the expense (e.g. "Pizza"). amount: Total amount paid. payer: Member id of the person who paid. payed_for: Non-empty list of member ids who share the cost. Cospend requires at least one ower per bill — passing [] raises ValueError (the server would reject it on create and silently no-op on update, so we reject it up front for both). date: Date string "YYYY-MM-DD". Defaults to today (UTC) if both date and timestamp are omitted; the underlying API requires one. timestamp: Alternative to date — Unix seconds. If both are set, the server uses timestamp. comment: Free-form longer note. category_id: Category id (see project's categories). Omit for uncategorized (id=0). payment_mode_id: Payment mode id (see project's paymentmodes). Omit for unset (id=0). repeat: Repetition mode: "n"=no repeat (default), "d"=daily, "w"=weekly, "b"=biweekly, "s"=semi-monthly, "m"=monthly, "y"=yearly. repeat_freq: Every N units (default 1). E.g. repeat="m", repeat_freq=3 means quarterly. repeat_until: Stop repeating after this date "YYYY-MM-DD". repeat_all_active: 0 (default) = repeat with the same owers, 1 = on each repetition use whoever is currently active.

Returns: JSON {"bill_id": } — the integer id of the new bill.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNo
whatYes
payerYes
amountYes
repeatNon
commentNo
payed_forYes
timestampNo
project_idYes
category_idNo
repeat_freqNo
repeat_untilNo
payment_mode_idNo
repeat_all_activeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only provide negative hints (not read-only, not idempotent, not destructive), so the description carries the behavioral burden. It discloses that an empty payed_for list raises ValueError and explains server-side behavior on create vs update, documents date/timestamp defaulting and precedence, and specifies the return value as JSON {"bill_id": <int>}. No contradiction with annotations.

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

Conciseness5/5

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

The purpose and permission are front-loaded, and the Args section is dense but purposeful given the 14-parameter surface. Every parameter gets a meaningful explanation, default, or constraint, with no filler or redundant prose.

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 write operation with 14 parameters, no schema descriptions, and sparse annotations, the description is complete. It covers prerequisites, edge cases, defaults, output shape, and client/server behavior, leaving no critical information missing 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 description coverage is 0%, and the description compensates fully by documenting all 14 parameters. It provides formats for date and timestamp, enumerates repeat values, explains defaults, and clarifies cross-parameter constraints such as date/timestamp precedence and payed_for non-emptiness.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Create a bill (expense) in a Cospend project.' It also states the required access level, which immediately distinguishes this from sibling tools like get_cospend_bill, update_cospend_bill, and delete_cospend_bill.

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 establishes clear context by stating the create action and the PARTICIPANT access requirement. It does not explicitly name alternatives or exclusions, but the purpose is unambiguous enough that an agent can identify when to use this tool versus update or delete siblings.

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

create_cospend_memberA

Add a member to a Cospend project. Requires MAINTAINER access.

Args: project_id: String project id. name: Display name of the new member. user_id: Link this member to a Nextcloud user id (optional). If set, the member can see the project in their Cospend UI. weight: Share weight (default 1.0). A weight-2 member counts double in even splits. active: If False, the member is created soft-disabled (rare — usually create active and disable later via update_cospend_member). color: Hex color like "#aabbcc". Omit to let the server pick.

Returns: JSON of the new member: id (use as memberId in other tools), name, weight, activated, userid, color (RGB dict), lastchanged.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
colorNo
activeNo
weightNo
user_idNo
project_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

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

Annotations only carry basic mutation flags (readOnlyHint=false, idempotentHint=false, destructiveHint=false). The description adds substantial behavioral context: the MAINTAINER permission requirement, the soft-disabled creation mode and why it's rare, the side effect of linking a user_id (member sees the project in their UI), and the exact return shape. This goes well beyond what annotations reveal.

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 organized with clear sections (access, Args, Returns) and each parameter line earns its place by adding semantic meaning absent from the schema. It is longer than needed because defaults are restated from the schema, but that duplication is forgivable given the schema's zero descriptions.

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

Completeness5/5

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

The description covers permissions, all six parameters with defaults and edge cases, the return-value semantics, and cross-references to other tools (update_cospend_member, memberId for other tools). An agent has everything needed to invoke this correctly.

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

Parameters5/5

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

Schema description coverage is 0%, so the description carries the full burden — and it delivers. Every parameter is explained: project_id and name, the optional user_id with its visibility effect, weight with the concrete 'counts double in even splits' example, active with the soft-disable caveat, and color with hex format guidance and server-pick fallback.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Add a member to a Cospend project.' This clearly distinguishes it from siblings like update_cospend_member or list_cospend_members, and the scope (create, not modify) is 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 states the required access level ('Requires MAINTAINER access') and gives an explicit alternative routing for a specific case: 'usually create active and disable later via update_cospend_member.' It doesn't broadly contrast with all siblings, but the key decision points are covered.

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

create_cospend_projectA

Create a new Cospend project. The caller becomes ADMIN of it.

Args: project_id: Desired string id (slug). If the id is already taken, the server appends a digit to make it unique — check the id field of the returned project for the actual id assigned. name: Display name (does not have to be unique).

Returns: JSON of the new project (full info — same shape as get_cospend_project), including the resolved id and the default categories and payment modes that the server seeds.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
project_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already indicate this is a write operation (readOnlyHint=false) and not idempotent or destructive. The description adds valuable context: the caller becomes ADMIN, the server may modify the provided project_id for uniqueness, and the return payload includes default categories/payment modes. These details go beyond the structured 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.

Conciseness4/5

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

The description is compact and well-structured, with an intro line, an Args block, and a Returns block. Every sentence contributes value, and the key behavior (id uniqueness) is highlighted. It is slightly longer than the absolute minimum but remains 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?

Given the 0% schema coverage and the presence of an output schema, the description covers the essential behavior: what the tool does, how the id resolves, and what the return contains (including reference to get_cospend_project). It does not cover edge cases like error handling, but for a create operation with clear return semantics, this is sufficient.

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 0%, so the description must carry the full weight for parameters. It does: it explains that project_id is a desired slug that may be altered with a digit, and that name is a non-unique display name. This is meaningful semantic information not present in 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 states a specific action ('Create a new Cospend project') and a clear resource, distinguishing it from siblings like update_cospend_project and delete_cospend_project. It also adds the role implication (caller becomes ADMIN), which further clarifies scope.

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 evident, but there is no explicit guidance on when to use this tool versus alternatives (e.g., checking for existing projects with list_cospend_projects). The context implies use for new projects, but it does not state exclusions or prerequisites, so an agent must infer the appropriate scenario.

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

create_directoryB
Idempotent

Create a new directory in Nextcloud.

Args: path: Directory path to create. Example: "Documents/Projects/NewProject"

Returns: Confirmation message.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already indicate idempotency and non-destructiveness. The description adds only the operation and a confirmation-message return, but does not disclose behavior if the directory already exists, whether nested parents are created, or required permissions.

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

Conciseness5/5

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

The description is compact and well-structured: a one-line purpose, an Args section with an example, and a Returns section. There is no unnecessary filler 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 one-parameter tool with an output schema and safety annotations, this is minimally adequate. However, it omits important operational details such as existing-directory behavior, nested path creation, and whether the path is relative to a specific root.

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 provides only the parameter name 'path' with 0% description coverage, so the description carries the burden. It clarifies the parameter as 'Directory path to create' and gives a concrete example, which is meaningful. It stops short of explaining path rooting or parent-directory behavior.

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

Purpose4/5

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

The description states a specific action and target: 'Create a new directory in Nextcloud.' This is clear and distinct from sibling file-related tools, though it does not explicitly call out an alternative.

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

Usage Guidelines2/5

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

The description gives no guidance on when to use this tool versus related operations like list_directory, move_file, or upload_file. There are no conditions, exclusions, or alternative tool mentions.

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

create_eventA

Create a new calendar event.

Args: calendar_id: Calendar identifier (e.g. "personal"). summary: Event title/summary. start: Start date or datetime in ISO 8601 format. For timed events: "2026-04-01T10:00:00Z" or "2026-04-01T10:00:00". For all-day events: "2026-04-01". end: End date or datetime. Optional — defaults to 1 hour after start for timed events, or next day for all-day events. all_day: Set to true for an all-day event. When true, start/end are dates only. description: Optional event description/notes. location: Optional event location. status: Event status: "CONFIRMED" (default), "TENTATIVE", or "CANCELLED". categories: Optional comma-separated category names (e.g. "Work,Meeting"). rrule: Optional recurrence rule in iCalendar RRULE format. Examples: "FREQ=DAILY;COUNT=5", "FREQ=WEEKLY;BYDAY=MO,WE,FR", "FREQ=MONTHLY;BYMONTHDAY=15;UNTIL=20261231T235959Z".

Returns: JSON object with the created event's uid and summary.

ParametersJSON Schema
NameRequiredDescriptionDefault
endNo
rruleNo
startYes
statusNoCONFIRMED
all_dayNo
summaryYes
locationNo
categoriesNo
calendar_idYes
descriptionNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

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

Annotations are minimal (all false), so the description carries most of the behavioral burden. It goes beyond the schema by explaining default end time behavior, all-day date handling, status default, and RRULE examples. It does not explicitly warn about non-idempotency, but creation side effects are strongly implied by 'Create'.

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 uses a clean, front-loaded summary followed by a structured Args/Returns layout. Each parameter entry adds necessary detail without fluff, making the longer length justified by the tool's 10-parameter complexity.

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

Completeness5/5

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

Given the high parameter count and missing schema descriptions, the description covers every parameter, their defaults, and the return shape. An agent can invoke the tool correctly with only the information provided here, and the output schema makes the return details even clearer.

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

Parameters5/5

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

Schema description coverage is 0%, and the description fully compensates. Every parameter is explained with format expectations, defaults, and concrete examples (e.g., ISO 8601 formats, RRULE examples, all-day restrictions). This is far more useful than the bare input schema.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Create a new calendar event.' It clearly identifies the tool's function and is easily distinguished from siblings like get_event, update_event, and delete_event.

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 phrase 'Create a new calendar event' clearly establishes the intended use case of creating rather than reading, updating, or deleting an event. However, it does not explicitly name alternative tools or state when-not-to-use this tool, so it falls short of the highest bar.

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

create_flowA
Destructive

Create a Nextcloud Flow rule: when an event happens and all checks match, run an operation.

Use get_flow_options for the operation, entity, event and check class names of the scope; an unknown class name makes Nextcloud fail with a server error. User flows act on the current user's files only. Global flows act on everyone's and need the destructive permission level: a global access control rule whose checks match too much locks every user, this server included, out of their files. Operations that would run a command, or command-line arguments, of the agent's choosing on the server are refused.

Args: operation_class: Class of the operation to run, from get_flow_options. Example: "OCA\Talk\Flow\Operation" checks: Conditions that must all match, at least one. Each is an object with "class", "operator" and "value", e.g. {"class": "OCA\WorkflowEngine\Check\FileName", "operator": "matches", "value": "/.pdf$/i"}. get_flow_options lists operators and value formats for the built-in checks. scope: "user" (default) or "global" (admin only). name: Optional name for the rule. operation_config: The operation's own settings; the format depends on the operation. Talk's "Write to conversation" takes {"m": 1, "t": ""} (m: 1 no mention, 2 mention yourself, 3 mention everyone in the room, moderators only), as an object or a JSON string. Empty for operations without settings. entity: What the rule acts on. Defaults to files ("OCA\WorkflowEngine\Entity\File"), the only entity Nextcloud ships. events: Entity events that trigger the rule, e.g. ["\OCP\Files::postCreate"]. Required unless the operation has events_fixed in get_flow_options, in which case leave it empty.

Returns: JSON with the created flow, as list_flows shows it.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
scopeNouser
checksYes
entityNoOCA\WorkflowEngine\Entity\File
eventsNo
operation_classYes
operation_configNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already flag destructiveHint=true and idempotentHint=false, but the description goes well beyond them: it warns that a global access-control rule with over-broad checks can lock every user (including the server) out of their files, notes the destructive permission requirement, and documents the command-execution refusal policy. This is substantive operational and safety context not available in structured fields.

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

Conciseness4/5

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

Front-loaded with purpose and safety warnings, then an Args block and a short Returns line; the ordering is logical and each section maps to a real agent need. It is long, but the length is largely justified by 0% schema coverage, with only minor repetition around get_flow_options.

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?

An output schema exists and the description briefly notes what is returned ('JSON with the created flow, as list_flows shows it'), so it does not need to enumerate the response. Combined with full parameter documentation and destructive-behavior warnings, an agent has everything required to invoke it correctly.

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

Parameters5/5

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

Schema description coverage is 0%, so the description must carry the whole load, and it does: every one of the seven parameters is documented with type, default behavior (scope 'user' default, entity default class, events required-unless-fixed), plus concrete examples for operation_config and the check object shape. The nested format of checks is spelled out with a realistic value.

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 opening sentence gives a precise verb+resource ('Create a Nextcloud Flow rule') plus the trigger/action model ('when an event happens and all checks match, run an operation'). It cleanly distinguishes this from the sibling read/update/delete flow tools (list_flows, update_flow, delete_flow, get_flow_options).

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

Usage Guidelines5/5

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

Explicitly routes the agent to get_flow_options for class names, states that an unknown class name causes a server error, distinguishes user vs global scope ('global (admin only)'), and names the permission level global flows require. It also states what is refused (operations that run a command or command-line arguments), so the agent knows the boundaries before calling.

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

create_formA

Create a new form. Returns the form with a generated id and default empty title.

Args: from_id: Optional id of an existing form to clone (copies questions and options; does not copy submissions or shares).

Returns: JSON of the new form. Use update_form to set title/description, then create_question to add questions.

ParametersJSON Schema
NameRequiredDescriptionDefault
from_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

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

Annotations only provide readOnly/idempotent/destructive hints, so the description carries the behavioral burden. It discloses return behavior, the default empty title, and the important clone boundary that submissions and shares are not copied. It does not mention permissions or error behavior, but the core side effects are transparent.

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

Conciseness5/5

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

The description is compact and well-structured: a one-sentence summary, an Args section, a Returns section, and a brief workflow. No fluff, and every sentence adds either behavior or routing 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 one-parameter create tool with an output schema, the description covers what the tool does, what it returns, how the optional parameter behaves, and what to do next. Nothing essential is missing 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 description coverage is 0%, so the description must fully document from_id. It does: optional id of an existing form to clone, copying questions and options, but not submissions or shares. This adds meaningful semantic detail far beyond the bare integer-or-null 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 uses a specific verb and resource ('Create a new form') and adds concrete details about the generated id and default empty title. It also clearly differentiates this tool from nearby siblings by explicitly pointing to update_form and create_question as follow-up steps.

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 gives an explicit workflow: use update_form to set title/description, then create_question to add questions. It also explains the cloning use case via from_id. It does not give formal 'when not to use' guidance, but the context is clear enough for an agent to select this tool correctly.

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

create_form_shareA

Share a form with a user, group, circle, or via public link.

Args: form_id: Numeric form id. share_type: 0=user, 1=group, 3=link (public), 7=circle. share_with: User/group/circle id to share with. Omit for link shares. permissions: Array of strings from: "submit" (fill out), "edit" (modify form definition), "results" (view submissions), "results_delete" (delete submissions), "embed" (render in other pages). Defaults to ["submit"].

Returns: JSON of the new share with its id.

ParametersJSON Schema
NameRequiredDescriptionDefault
form_idYes
share_typeYes
share_withNo
permissionsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations indicate this is a mutating, non-idempotent, non-destructive operation. The description adds meaningful behavioral context by specifying the default permissions (['submit']) and the return value (JSON of the new share with its id). It does not fully disclose side effects like whether existing shares are replaced or whether link shares require special handling, but it goes 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 compact and well-structured: a one-sentence summary followed by a concise Args list. Every line adds necessary information, and the most important usage detail (share_type codes) is front-loaded. No filler or repetition.

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

Completeness4/5

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

The description covers the essential parameters, defaults, and return value, which is sufficient for an agent to invoke the tool correctly. It does not mention edge cases like whether permissions are validated against the form's existing settings or whether public link shares require a different permission set, but the output schema and annotations cover the rest. A small gap remains around error conditions or prerequisites.

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

Parameters5/5

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

Schema description coverage is 0%, so the description carries the full burden of explaining parameters. It explains form_id, share_type (with numeric codes), share_with (with the omit-for-link rule), and permissions (with the allowed string values and default). This fully compensates for the schema's lack of 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 opens with a specific verb and resource: 'Share a form with a user, group, circle, or via public link.' It clearly enumerates the share types and distinguishes this from sibling tools like update_form_share and delete_form_share. The purpose is unambiguous.

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

Usage Guidelines4/5

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

The description explains the share_type values and when to omit share_with (for link shares), which gives clear context for using the tool. It does not explicitly name alternatives or state when not to use this tool, but the sibling list and the detailed share_type semantics make the intended usage clear.

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

create_groupA

Create a new group. Requires admin rights (or delegated user administration).

Add users to it with update_user (its "groups" field).

Args: group_id: The group ID, used by the other tools to refer to it. Cannot be changed later. display_name: Name shown in the web interface. Defaults to the ID.

Returns: Confirmation message.

ParametersJSON Schema
NameRequiredDescriptionDefault
group_idYes
display_nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations confirm a non-read-only, non-idempotent, non-destructive write. The description adds valuable traits beyond them: the admin-permission requirement, the immutability of group_id, and the display_name default. It does not discuss idempotency behavior or error modes, but the added context 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?

Front-loaded purpose, then permissions, then workflow, then structured Args. Dense with no filler sentences, and each line 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?

An output schema already exists, so the brief 'Returns: Confirmation message' is sufficient. Combined with permissions, parameter semantics, and the follow-up path, an agent has everything needed to call this correctly.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must carry the load, and it does: group_id is explained as the persistent reference key that cannot change, and display_name as the UI name defaulting to the ID. Both parameters receive semantics beyond the bare schema types.

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

Purpose5/5

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

States a specific verb and resource ('Create a new group') and distinguishes itself from siblings like list_groups, delete_group, and list_group_members without ambiguity. The follow-up note pointing to update_user adds scope context.

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

Usage Guidelines4/5

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

Gives a clear precondition ('Requires admin rights (or delegated user administration)') and a concrete follow-up workflow (add users via update_user's groups field). It does not explicitly contrast against alternative creation paths, but the when-to-use context is solid.

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

create_mail_tagA
Idempotent

Create a mail tag, or get the existing tag with the same IMAP label.

Tags belong to the current user and are stored on messages as IMAP keywords. Mail derives the IMAP label from the display name (for example "Needs Reply" becomes "$needs_reply"). If a tag with that label already exists, it is returned unchanged, including its color. Mail's built-in tags Important, Work, Personal, To Do and Later have the labels $label1 to $label5; tag messages with those labels rather than creating tags with the same names.

Args: display_name: Tag name shown in the Mail app (at most 128 characters, none of ( ) { ] " \ % * /). color: Hex color such as "#0082c9".

Returns: JSON object with id, display_name, imap_label and color. Pass imap_label to add_mail_message_tag and remove_mail_message_tag.

ParametersJSON Schema
NameRequiredDescriptionDefault
colorYes
display_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

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

The description goes well beyond the idempotentHint annotation by detailing that an existing tag is 'returned unchanged, including its color,' and explains how IMAP labels are derived from display names. It also warns about built-in labels $label1 to $label5. These specifics enrich the agent's understanding of side effects and return behavior.

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

Conciseness5/5

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

The description is front-loaded with the core purpose, then provides necessary behavioral context, parameter details, and return usage. Every sentence adds value, and the Args/Returns structure makes it easy to scan. Nothing is redundant.

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 moderate complexity and the presence of output schema and annotations, the description is complete: it covers behavior, parameter constraints, built-in label handling, return fields, and downstream usage with sibling tools. An agent has everything needed to invoke it correctly.

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

Parameters5/5

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

Schema description coverage is 0%, so the description carries full responsibility for parameter documentation. It explains display_name with a 128-character limit and forbidden characters, and color with a concrete hex format example. This fully compensates for the bare 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 first sentence states a specific verb and resource: 'Create a mail tag, or get the existing tag with the same IMAP label.' It clearly distinguishes this from generic tag tools by focusing on mail tags and IMAP labels, and explains the get-or-create behavior. The built-in tag warning further clarifies the tool's specific role.

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: tags belong to the current user, labels are derived from display names, and built-in tags should be referenced by their standard labels instead of creating duplicates. It also tells the caller to pass the returned imap_label to add_mail_message_tag and remove_mail_message_tag. It does not explicitly contrast this tool with create_tag, but the mail-specific scope is evident.

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

create_optionsA

Add one or more answer options to a choice question (dropdown/multiple/etc.).

Args: form_id: Numeric form id. question_id: Numeric question id. Intended for choice-type questions (dropdown, multiple, multiple_unique, linearscale, grid); options on other types are accepted by the server but have no effect. option_texts: Array of option labels to create. Each creates a separate option in order.

Returns: JSON array of created options with their assigned ids and order.

ParametersJSON Schema
NameRequiredDescriptionDefault
form_idYes
question_idYes
option_textsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already indicate this is a write operation (readOnlyHint=false, idempotentHint=false, destructiveHint=false). The description adds valuable behavioral context: options on non-choice questions are accepted but have no effect, and options are created in order. It also discloses the return value (JSON array of created options with ids and order), which goes 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 compact and well-structured, with a clear summary line followed by parameter explanations and return value. Every sentence earns its place, and the key behavioral caveat (options on other types have no effect) is included without bloat.

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 required params, no nested objects) and the presence of an output schema, the description is largely complete. It covers the purpose, parameter semantics, and return value. The only minor gap is that it doesn't explicitly state error conditions or prerequisites (e.g., whether the question must exist), but this is not critical for an agent to invoke the tool correctly.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must compensate. It explains each parameter: form_id is a numeric form id, question_id is a numeric question id intended for choice-type questions, and option_texts is an array of labels creating separate options in order. This adds meaning beyond the bare schema types, though it could be more explicit about the format of option_texts (e.g., strings).

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 one or more answer options') and the resource ('choice question'), and distinguishes it from sibling tools like update_option and reorder_options by focusing on creation. It also specifies the intended question types, which helps an agent understand the tool's scope.

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

Usage Guidelines4/5

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

The description provides clear context for when to use this tool: when adding options to choice-type questions. It also notes that options on other question types are accepted but have no effect, which is an implicit exclusion. However, it doesn't explicitly name alternatives like update_option or reorder_options for modifying existing options, so it falls short of full when/when-not guidance.

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

create_pollA

Create a poll in a Talk conversation.

Polls can only be created in group or public conversations (not one-to-one). A chat message is automatically posted announcing the poll.

Args: token: The conversation token. Use list_conversations to find tokens. question: The poll question (max 32,000 characters). options: List of voting options (minimum 2 options required). Example: ["Yes", "No", "Maybe"] result_mode: 0 for public results (voters see results immediately after voting), 1 for hidden results (results shown only after poll is closed). Default: 0 (public). max_votes: Maximum number of options a user can vote for. 0 means unlimited (user can select all options). Default: 0.

Returns: JSON object with poll details: id, question, options, status, result_mode, max_votes.

ParametersJSON Schema
NameRequiredDescriptionDefault
tokenYes
optionsYes
questionYes
max_votesNo
result_modeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

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

The description discloses the automatic chat message, the conversation-type restriction, and result visibility behavior for result_mode. These go well beyond the minimal annotations, covering side effects and 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?

Structured with Args and Returns sections, every sentence adds essential detail. The front-loaded purpose and constraints precede parameter details, keeping it both complete and readable.

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 creation tool with 5 params, an output schema claim, and no annotation coverage, the description covers purpose, constraints, side effects, parameter semantics, and return shape. There are no obvious gaps an agent needs to call it correctly.

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?

With 0% schema description coverage, the description fully documents all five parameters: token (how to find), question (max length), options (min 2 + example), result_mode (values and meaning), max_votes (0 = unlimited). It also includes defaults.

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

Purpose5/5

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

The description opens with 'Create a poll in a Talk conversation' – a specific verb and resource. It adds constraints (group/public only) and a side effect (auto chat message), making it distinct from siblings like vote_poll/close_poll.

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

Usage Guidelines4/5

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

It provides clear context: polls can only be created in group/public conversations, not one-to-one, and it points to list_conversations for finding tokens. It doesn't explicitly reference alternative creation tools, but the context is sufficient for selection.

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

create_questionA

Add a question to a form.

Args: form_id: Numeric form id. question_type: One of: "short" (single-line text), "long" (multi-line text), "multiple" (checkbox), "multiple_unique" (radio), "dropdown", "date", "time", "file", "grid", "color", "linearscale". "datetime" is rejected by Nextcloud — use separate "date" and "time" questions. text: Question text. Defaults to empty; update_question can set it later. subtype: For question_type="grid" only, the cell type: "radio", "checkbox", or "number". from_id: Optional id of an existing question to clone.

Returns: JSON of the new question including its assigned id and order. For choice types (dropdown/multiple/multiple_unique), use create_options to add the answer choices.

ParametersJSON Schema
NameRequiredDescriptionDefault
textNo
form_idYes
from_idNo
subtypeNo
question_typeYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

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

Annotations mark the operation as non-readonly and non-idempotent, so mutation is expected. The description adds useful behavioral context: creating a question returns a JSON object with assigned id and order, clone behavior via from_id, default-empty text, the grid-only subtype requirement, and the Nextcloud-specific datetime rejection. This goes well beyond what the annotations and schema alone communicate.

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 well-organized into Args and Returns sections. Every sentence adds substantive information: parameter semantics, constraints, edge cases, and follow-up actions. There is no fluff or repetition despite the length, and the most important usage caveat (datetime rejection) is clearly highlighted.

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 creation tool with a non-trivial parameter set and no schema descriptions, the description is complete. It covers all parameters, required context for question types, the clone option, return behavior, and related downstream tooling (create_options). The output schema exists, so the description wisely summarizes the result without over-explaining the response structure.

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

Parameters5/5

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

Schema description coverage is 0%, so the description carries the full burden—and it delivers. It explains every parameter: form_id as numeric, question_type with all valid values and human-readable meanings, the datetime exception, text default and later update path, subtype scoped to grid with its valid cell types, and from_id as an optional clone source. This is far richer than the bare 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 opens with a specific verb and resource: 'Add a question to a form.' It goes beyond a simple label by clarifying the return value ('JSON of the new question'), the clone behavior via from_id, and explicitly distinguishes the tool from create_options by directing choice-type setup to that sibling.

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 contextual guidance: it notes that text defaults to empty and can be set later via update_question, tells users to use create_options for choice types, and warns that datetime is rejected in favor of separate date/time questions. It lacks an explicit general 'use this instead of X' statement for update_question/reorder_questions, but the key alternatives are named.

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

create_shareA

Create a new share for a file or folder.

Args: path: Path to the file or folder to share (e.g. "/Documents/report.pdf"). share_type: Type of share: 0=user, 1=group, 3=public link, 4=email, 6=federated, 10=talk room. share_with: Recipient — required for all types except link (3). User share (0): username. Group share (1): group name. Email share (4): email address. Federated (6): user@remote.server. Talk room (10): room token. permissions: Bitwise permission flags. 1=read, 2=update, 4=create, 8=delete, 16=share. Common values: 1 (read-only), 15 (full, no reshare), 31 (all). Default: all permissions (31) for user/group, read-only (1) for links. Note: file shares automatically strip create (4) and delete (8) flags. password: Optional password for link (3) or email (4) shares. expire_date: Optional expiration date in "YYYY-MM-DD" format. note: Optional note/message for the share recipient. label: Optional display label for link shares (max 255 chars). public_upload: Enable public upload on shared folders (link shares only).

Returns: JSON object with the created share details including id, url (for links), token, etc.

ParametersJSON Schema
NameRequiredDescriptionDefault
noteNo
pathYes
labelNo
passwordNo
share_typeYes
share_withNo
expire_dateNo
permissionsNo
public_uploadNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already indicate this is a write operation (readOnlyHint=false, destructiveHint=false, idempotentHint=false). The description adds valuable behavioral context: default permissions vary by share type, file shares automatically strip create/delete flags, and the return value includes id, url, and token. This goes beyond what annotations provide, though it doesn't cover every edge case like error conditions 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?

The description is well-structured with clear sections for each parameter and a returns section. It's longer than average, but the density of useful information justifies the length. The front-loaded purpose statement and organized parameter list make it scannable. Minor deduction for the length, but 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 9-parameter tool with 0% schema coverage, this description is remarkably complete. It explains all parameters, provides examples, documents defaults, notes behavioral nuances (file shares stripping flags), and describes the return value. The output schema exists, so return details are supplementary. Nothing critical is missing for an agent to invoke this correctly.

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

Parameters5/5

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

Schema description coverage is 0%, so the description carries the full burden of explaining parameters. It does this excellently: each parameter gets a clear explanation, with examples for path, enumerated values for share_type, recipient format per share type, bitwise permission flags with common values, and defaults. This is far beyond what the bare 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 opens with a clear verb+resource statement: 'Create a new share for a file or folder.' It distinguishes itself from siblings like update_share, delete_share, and list_shares by focusing on creation. The detailed parameter breakdown further clarifies the exact scope of the operation.

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 on when to use this tool: when creating a new share for a file or folder. It implicitly distinguishes from update_share (modifying existing shares) and delete_share (removing shares). However, it doesn't explicitly state 'use this instead of X when...' or mention alternatives, so it falls just short of a 5.

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

create_tagB

Create a new system tag. Requires admin privileges for non-visible/non-assignable tags.

Args: name: Tag display name. user_visible: Whether regular users can see this tag (default: true). user_assignable: Whether regular users can assign this tag to files (default: true).

Returns: JSON with the created tag ID and name.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
user_visibleNo
user_assignableNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, idempotentHint=false, and destructiveHint=false, so the description doesn't need to restate those. The description adds the admin privilege requirement and notes that user_visible and user_assignable default to true, which is useful behavioral context. However, it doesn't disclose what happens if a non-admin tries to create a non-visible tag, or whether the operation is reversible.

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 compact and front-loaded with the core action. The parameter explanations are brief and useful. The Returns line is a minor addition but not wasteful. It earns a 4 because it's efficient without being terse.

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 an output schema, so return values are covered. The description covers the main parameters and the admin privilege caveat. However, it doesn't mention potential errors, idempotency implications, or how this tag creation relates to the broader tag lifecycle (e.g., assign_tag). For a simple create operation, this 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?

Schema description coverage is 0%, so the description must compensate. It does explain each parameter: name, user_visible, and user_assignable, including defaults. This adds meaning beyond the raw schema, which only lists types and defaults. However, it doesn't elaborate on edge cases or format constraints for the name 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 verb and resource: 'Create a new system tag.' It also distinguishes the tool from siblings like list_tags, assign_tag, unassign_tag, and delete_tag by specifying creation. However, it doesn't explicitly differentiate from create_mail_tag, which is a sibling that also creates a tag, though the 'system tag' wording helps.

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 a prerequisite: 'Requires admin privileges for non-visible/non-assignable tags.' This gives some context on when the tool is appropriate. However, it doesn't explicitly state when to use this tool versus alternatives like create_mail_tag or assign_tag, nor does it provide exclusions or alternative routing.

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

create_taskA

Create a new task in a task list.

Args: list_id: Task list identifier (e.g. "tasks"). summary: Task title/summary. description: Optional task description/notes. due: Optional due date/time in ISO 8601 format (e.g. "2026-04-10T18:00:00Z"). start: Optional start date/time in ISO 8601 format. status: Task status: "NEEDS-ACTION" (default), "IN-PROCESS", "COMPLETED", or "CANCELLED". priority: Priority 0-9 (0=undefined, 1=highest, 5=medium, 9=lowest). Default 0. percent_complete: Completion percentage 0-100. Default 0. categories: Optional comma-separated category names (e.g. "Work,Urgent").

Returns: JSON object with the created task's uid and summary.

ParametersJSON Schema
NameRequiredDescriptionDefault
dueNo
startNo
statusNoNEEDS-ACTION
list_idYes
summaryYes
priorityNo
categoriesNo
descriptionNo
percent_completeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior3/5

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

Annotations already indicate this is a mutating, non-idempotent operation, and the description does not contradict that. It adds useful output context (the created task's uid and summary) and default behavior, but it does not disclose permissions, duplicate-creation consequences, or failure modes.

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

Conciseness5/5

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

The description is front-loaded with the core purpose, then uses a clean Args/Returns structure with one line per parameter. It contains no filler or redundant prose, and its length is appropriate for nine parameters.

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

Completeness5/5

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

Despite having nine parameters and no schema-level descriptions, the description tells the agent exactly what to provide, what each value means, and what the response will contain. Minor omissions like authentication or error handling do not prevent correct invocation for a straightforward create operation.

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

Parameters5/5

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

Schema description coverage is 0%, and the description fully compensates by documenting every parameter with meaning, examples, ISO 8601 formats, allowed status values, priority scale, and defaults. This is exactly the level of detail an agent needs to construct valid arguments.

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 opening sentence names a specific verb and resource ('Create a new task in a task list') and the qualifier 'new task' clearly separates it from sibling tools like update_task, complete_task, and delete_task. There is no ambiguity about what this tool does.

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

Usage Guidelines4/5

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

The description clearly frames this as the creation path for tasks, which gives an agent enough context to choose it over task-mutating or task-removing siblings. It does not explicitly name alternatives or when-not-to-use scenarios, but the intended use is unmistakable.

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

create_userA

Create a new Nextcloud user. Requires admin privileges.

Args: user_id: Login name for the new user. password: Password for the new user. display_name: Display name. Defaults to user_id if empty. email: Email address for the new user.

Returns: JSON with the created user ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
emailNo
user_idYes
passwordYes
display_nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

The annotations already signal this is a write operation (readOnly=false, idempotent=false, destructive=false), so the description does not need to restate that. It adds valuable context beyond the annotations: admin privileges are required, and the call returns JSON containing the created user ID. It does not mention duplicate-user errors or password constraints, but those are minor for a create operation at this level.

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 well-structured: a one-sentence purpose, a compact and readable Args block, and a Returns line. The admin-privilege warning is front-loaded. Every sentence earns its place, and there is no filler or repetition of schema 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 create operation, the description covers prerequisites, all four parameters, the display_name default behavior, and the return value. Minor gaps exist, such as not explicitly marking email as optional or stating password format constraints, but the schema already marks required fields and defaults, so an agent has enough to invoke the tool correctly.

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

Parameters5/5

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

Schema description coverage is 0%, so the description carries the full burden of explaining the parameters. It does so thoroughly: user_id is the login name, password is the new user's password, display_name has a documented default to user_id, and email is the user's email address. This adds real semantic meaning the schema alone does not provide.

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

Purpose5/5

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

The description opens with 'Create a new Nextcloud user,' a specific verb and resource that makes the tool's purpose unmistakable. It clearly distinguishes this tool from siblings like list_users, get_user, and delete_user by focusing on creation. The word 'new' also signals non-idempotent creation without relying on the annotation.

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 the tool creates a new user and explicitly adds the admin-privilege prerequisite. It does not name alternatives or exclusion conditions, but the use case is unambiguous against the sibling list. This is clear context without explicit when-not guidance.

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

decline_shareA
DestructiveIdempotent

Decline a share offered to the current user that is waiting to be accepted.

Declining a share made directly to the user deletes it, so the owner has to share again to offer it again. A declined group share is only hidden from this user: Nextcloud keeps it in list_pending_shares (marked declined) and accept_share can still take it. A declined federated share is removed and the other server is told, except for a federated group share, which Nextcloud keeps offering (under a new id once the user had accepted it before).

Args: share_id: The pending share's id from list_pending_shares, as a string (federated share ids can be too long for a JSON number). federated: True for a federated share from another server (federated: true in list_pending_shares).

Returns: Confirmation message.

ParametersJSON Schema
NameRequiredDescriptionDefault
share_idYes
federatedNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

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

Annotations only declare destructive/idempotent/not-read-only; the description goes well beyond by explaining per-type consequences: direct shares are deleted and must be re-offered, group shares are only hidden and still viewable/acceptable, federated shares are removed and the remote server notified. This is exactly the contextual detail annotations cannot convey.

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

Conciseness4/5

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

Front-loaded with the core action, then the branches. The federated-group-share parenthetical is dense but informative rather than redundant, though it is the longest sentence and slightly testing readability.

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 the action, the source of its input, all three behavioral branches, and the two parameters, and an output schema exists so the terse 'Confirmation message' return note suffices. Nothing an agent needs to call it correctly is missing.

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?

With 0% schema coverage for two parameters, the description fully compensates: share_id is the id from list_pending_shares and must be passed as a string because federated ids can overflow a JSON number, and federated flags a share from another server as reported in list_pending_shares. Both parameters are meaningful and unambiguous.

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

Purpose5/5

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

Specific verb+resource with scope: 'Decline a share offered to the current user that is waiting to be accepted.' The agent can distinguish this from accept_share and delete_share without opening any schema.

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

Usage Guidelines4/5

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

It situates the tool in the pending-share workflow (share_id comes from list_pending_shares) and names accept_share as the surviving alternative for declined group shares, but never states an explicit 'use this instead of delete_share when...' rule. Clear context, no explicit exclusions.

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

delete_all_submissionsA
DestructiveIdempotent

Delete every submission on a form. Does not delete the form itself.

Args: form_id: Numeric form id.

Returns: Confirmation.

ParametersJSON Schema
NameRequiredDescriptionDefault
form_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already set destructiveHint=true Footnote and idempotentHint=true, so the destructive nature is covered. The description adds useful behavioral context by explicitly stating that the form itself is not deleted, which clarifies the scope of the destructive operation beyond what annotations alone provide.

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

Conciseness5/5

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

The description is very short, front-loads the primary purpose, and contains only necessary information: the action, the scope boundary, the argument, and the return type. Every sentence earns its place.

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

Completeness4/5

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

For a one-parameter destructive tool, the description adequately covers the action, the unaffected resource (form), the required argument, and the return value. An output schema exists, so return details need not be expanded. Minor gaps such as irreversibility warnings are already implied by destructiveHint=true.

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?

There is one parameter, form_id, and schema description coverage is 0%. The description says 'Numeric form id,' but this largely repeats what the input schema already provides via type=integer and title='Form Id.' It identifies the parameter's purpose but adds little new semantic meaning.

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

Purpose5/5

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

The description states a specific action ('Delete every submission') on a specific resource ('a form'), which distinguishes it from the sibling 'delete_submission' (single submission) and 'delete_form' (the form itself). It also clarifies a key boundary: 'Does not delete the form itself.'

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

Usage Guidelines4/5

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

The phrase 'every submission' makes the primary use case unambiguous. However, the description does not explicitly mention the alternative 'delete_submission' for deleting a single submission, so there is clear context but no explicit exclusions or routing to alternatives.

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

delete_announcementA
DestructiveIdempotent

Delete an announcement from Nextcloud. Requires admin privileges.

This permanently removes the announcement and all associated comments and notifications. This action is irreversible.

Args: announcement_id: The numeric announcement ID. Use list_announcements to find IDs.

Returns: Confirmation message.

ParametersJSON Schema
NameRequiredDescriptionDefault
announcement_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

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

Beyond the annotations (destructiveHint=true, readOnlyHint=false), the description discloses what specifically gets destroyed ('all associated comments and notifications'), that the action is irreversible, and that admin privileges are required. These are meaningful behavioral facts the annotations do not convey. No contradiction with annotations exists.

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

Conciseness5/5

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

The description is front-loaded with the core action, followed by prerequisites, consequences, then a clean Args/Returns docstring structure. Every sentence earns its place; there is no filler or repetition of schema content.

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 one-parameter destructive tool with annotations and an output schema, this description covers everything an agent needs: the action, the admin prerequisite, the exact scope of destruction, irreversibility, how to find the input, and the return value. Nothing material is missing.

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

Parameters5/5

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

Schema description coverage is 0%, so the description must compensate for the single parameter, and it does thoroughly: it specifies the announcement_id as numeric and instructs how to source valid values via list_announcements. This adds real guidance beyond the bare integer type in 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 opening sentence 'Delete an announcement from Nextcloud' uses a specific verb and resource, and the scope is unambiguous. It clearly distinguishes from sibling tools like delete_form, delete_comment, and delete_question, which operate on different entities. The title is null, so the description carries the full burden and succeeds.

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 states a clear prerequisite ('Requires admin privileges') and gives a concrete usage pointer ('Use list_announcements to find IDs'). This provides clear context for when the tool is callable and how to obtain a valid input. It does not explicitly name alternatives or when-not-to-use conditions, so it stops short of a 5.

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

delete_circleA
DestructiveIdempotent

Delete a circle. Requires owner level. Removes all memberships.

Args: circle_id: String circle id. delete_team_folder: Deleting a circle also deletes its team folder (Nextcloud 35+ with the Team folders app) and every file in it, for all members, also when it is an older group folder an admin linked to the team. If the circle has one, the tool refuses unless this is true.

Returns: Confirmation with the deleted id, and deleted_team_folder (the folder's name) when a team folder goes with it. Circles finishes the deletion in the background within seconds.

ParametersJSON Schema
NameRequiredDescriptionDefault
circle_idYes
delete_team_folderNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already mark it destructive and idempotent, and the description adds substantial context beyond that: owner-level auth requirement, removal of all memberships, cascading team-folder file deletion across all members, refusal semantics, and that deletion completes in the background within seconds. This is rich behavioral disclosure.

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

Conciseness4/5

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

Front-loaded with the core action and preconditions, and the Args/Returns structure is easy to scan. The team-folder paragraph is long and version-specific, but each detail is operationally relevant to avoiding accidental data loss.

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 destructive mutation with an output schema, the description covers auth requirements, cascade behavior, refusal conditions, and background timing. Nothing an agent needs to call it safely is missing.

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

Parameters4/5

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

Schema coverage is 0%, so the description carries the burden. It fully explains delete_team_folder including the Nextcloud 35+/Team folders variant and the refusal when omitted, but circle_id is described only as 'String circle id,' which adds little over the schema title.

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 opening 'Delete a circle' states a specific verb and resource, then immediately qualifies scope with 'Requires owner level' and 'Removes all memberships.' An agent can distinguish this from siblings like leave_circle, delete_collective, or remove_circle_member without opening any schema.

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

Usage Guidelines4/5

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

It states the precondition ('Requires owner level') and a hard refusal condition when a team folder exists and delete_team_folder is not true, which is real when-to-use guidance. It does not explicitly contrast with leave_circle or remove_circle_member, so it stops short of full alternative routing.

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

delete_collectiveA
DestructiveIdempotent

Permanently delete a collective from the trash.

The collective must be in the trash first (use trash_collective). This action is irreversible: all pages are permanently removed.

Args: collective_id: The numeric collective ID. delete_team: Also delete the team (circle) behind the collective, with every membership and anything shared with the team. Needs you to own the team; otherwise nothing is deleted. The team goes even if it existed before the collective. With false (default) it stays as an ordinary team. delete_team_folder: Deleting the team also deletes its team folder (Nextcloud 35+ with the Team folders app, which gives new collectives' teams one) and every file in it. With delete_team, the tool refuses if the team has a team folder unless this is true.

Returns: Confirmation message.

ParametersJSON Schema
NameRequiredDescriptionDefault
delete_teamNo
collective_idYes
delete_team_folderNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already declare destructiveHint=true and idempotentHint=true, but the description goes well beyond them: it specifies irreversibility, that all pages are removed, that the team and its folder contents are destroyed, that ownership is required or 'nothing is deleted', and that the tool refuses when a team folder exists unless delete_team_folder is set.

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

Conciseness4/5

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

Front-loaded with the core action and precondition before the Args section. The nested explanations of delete_team are dense but each clause conveys a genuinely distinct constraint; only mild trimming would be possible.

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?

An output schema exists, so the brief 'Returns: Confirmation message' is sufficient. For a destructive, multi-flag mutation with zero schema coverage, the description covers preconditions, side effects, failure modes, and ownership requirements.

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

Parameters5/5

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

Schema description coverage is 0%, so the description carries the full burden and does: collective_id is a numeric ID, delete_team is explained with its side effects and ownership precondition, and delete_team_folder is tied back to delete_team with a version/refusal condition. This is meaning no schema alone could convey.

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

Purpose5/5

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

States a specific verb and resource ('Permanently delete a collective from the trash') and immediately scopes it against the sibling operations trash_collective and restore_collective. An agent can distinguish this from any other delete_* tool without opening a schema.

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

Usage Guidelines5/5

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

Gives an explicit precondition ('must be in the trash first (use trash_collective)'), names the setup tool, and warns the action is irreversible. It further explains when the optional flags apply and the ownership condition that governs them.

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

delete_collective_pageA
DestructiveIdempotent

Permanently delete a page from the collective's trash.

The page must be in the trash first (use trash_collective_page). This action is irreversible.

Args: collective_id: The numeric collective ID. page_id: The numeric page ID.

Returns: Confirmation message.

ParametersJSON Schema
NameRequiredDescriptionDefault
page_idYes
collective_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and idempotentHint=true, but the description adds critical context: the operation is permanent and requires the page to be in trash. This goes beyond the annotations by clarifying the precondition and the finality. It doesn't discuss error behavior or permissions, but for a delete-from-trash operation the added context is valuable.

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 and well-structured: a clear purpose statement, a prerequisite and warning, then an Args section with each parameter explained, and a Returns line. It front-loads the key information and contains no fluff. 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 two-parameter delete operation with an output schema (confirmation message), the description covers all essential aspects: what it does, the prerequisite, the irreversible nature, parameter definitions, and the return type. It does not need to explain error cases or side effects beyond irreversibility, as the tool is straightforward and the sibling context is clear.

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 has 0% description coverage, so the description must compensate. It provides a one-line explanation for each parameter: 'collective_id: The numeric collective ID' and 'page_id: The numeric page ID.' This adds minimal meaning beyond the integer type, clarifying the roles but not offering constraints or additional context. It is adequate but not rich.

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: permanently delete a page from the collective's trash. It specifies the resource (page) and the location (trash) and distinguishes it from sibling tools like trash_collective_page (which moves to trash) and restore_collective_page (which restores). The verb 'delete' is specific and the scope is 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 explicitly states the prerequisite: the page must be in the trash first, and names the exact tool to use (trash_collective_page). It also warns that the action is irreversible, guiding the agent to avoid this tool if the page might be needed again. It does not explicitly mention restore_collective_page as an alternative for non-permanent removal, but the irreversibility warning is clear enough.

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

delete_collective_shareA
DestructiveIdempotent

Remove a public link; it stops working at once.

Args: collective_id: The numeric collective ID. token: The share token, from list_collective_shares. page_id: The page the link is for, 0 for the whole collective (default: looked up from the token).

Returns: Confirmation message.

ParametersJSON Schema
NameRequiredDescriptionDefault
tokenYes
page_idNo
collective_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false, so the safety profile is partly covered. The description adds useful behavioral context: the link stops working immediately, and page_id defaults to being looked up from the token. It does not contradict annotations, but it also does not expand on permanence, permissions, or idempotency 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 front-loaded with the core action and immediate effect, then cleanly lists arguments and return value. Every sentence and field earns its place, with no redundant restatement of the tool name. The structure is appropriately sized for a three-parameter delete operation.

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 a destructive delete with annotations and an output schema present, the description is largely complete: it explains all parameters, the immediate effect, and the return confirmation. It could still mention permission requirements or whether the removal is permanent/recoverable, but the essential information for correct invocation is present.

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

Parameters5/5

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

Schema description coverage is 0%, so the description carries the full burden and does so well. It documents all three parameters: collective_id as numeric, token as sourced from list_collective_shares, and page_id as the page the link is for with 0 meaning the whole collective and a default lookup from the token. This adds substantial meaning beyond the bare schema.

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

Purpose4/5

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

The description states a specific verb and resource: 'Remove a public link.' It also explains the immediate outcome ('it stops working at once'), so an agent knows exactly what operation is performed. It does not explicitly distinguish this tool from siblings like update_collective_share or share_collective, which keeps it from being a 5.

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

Usage Guidelines2/5

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

The description gives no explicit guidance on when to use this tool versus alternatives such as update_collective_share or share_collective. It mentions that the token comes from list_collective_shares, which helps with prerequisites, but that is not a usage guideline. There are no exclusions or when-not-to-use statements.

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

delete_collective_tagB
DestructiveIdempotent

Delete a collective's page tag; pages lose it.

Args: collective_id: The numeric collective ID. tag_id: The tag's ID, from list_collective_tags.

Returns: Confirmation message.

ParametersJSON Schema
NameRequiredDescriptionDefault
tag_idYes
collective_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true and idempotentHint=true, covering the safety profile. The description adds the notable behavioral detail that pages lose the tag, which tells the agent the effect extends beyond the tag entity. It does not mention irreversibility or auth requirements, but with annotations present this is acceptable.

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?

One-sentence core action with a brief consequence, followed by a compact Args block and a trivial Returns line. It is front-loaded and efficient, though the Returns line ('Confirmation message') is filler given an output schema exists.

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?

An output schema exists, so the Returns note is redundant. For a destructive 2-param deletion tool, the description covers the resource, the effect on pages, and where to get tag_id. It is adequate but does not address reversibility or how this relates to sibling deletion tools.

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 0%, so the description must compensate. It does explain both parameters: collective_id is numeric and tag_id comes from list_collective_tags. This is helpful but minimal and lacks format or scoping detail beyond that. Baseline 3 for partial compensation under low schema coverage.

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

Purpose4/5

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

States a specific verb (delete) and resource (collective's page tag) and adds the consequence 'pages lose it', which clarifies scope. It does not differentiate itself from sibling tags like delete_tag or delete_conversation_tag, though the naming makes the resource distinct.

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 when-to-use guidance, prerequisites, or mention of alternatives. It references list_collective_tags for the tag ID, but that is parameter sourcing, not usage guidance. An agent must infer that this differs from delete_tag on its own.

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

delete_commentA
DestructiveIdempotent

Delete a comment from a file.

Only the comment author can delete their own comment. This action is irreversible.

Args: file_id: The numeric file ID. comment_id: The comment ID to delete.

Returns: Confirmation message.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_idYes
comment_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, idempotentHint=true, and destructiveHint=true, and the description adds valuable context beyond these: the author-only restriction and irreversibility. This enriches the agent's understanding of consequences and authorization without contradicting 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 structured with a one-line purpose, two key constraints, then a clean Args section and a Returns line. Every sentence earns its place, and the most important information is front-loaded before the parameter 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 two-parameter delete tool with an output schema and safety hints already supplied by annotations, the description is complete. It covers the operation, authorization, irreversibility, parameter meanings, and the return type, leaving no critical gap for an agent to call it correctly.

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

Parameters5/5

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

Schema description coverage is 0%, but the description fully compensates by defining both parameters: 'file_id: The numeric file ID' and 'comment_id: The comment ID to delete.' This adds meaning beyond the bare schema types and clearly explains what each argument refers to.

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 a specific verb and resource: 'Delete a comment from a file.' The scope is unambiguous and naturally contrasts with sibling tools like add_comment, edit_comment, and list_comments, making it easy for an agent to differentiate the operation.

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

Usage Guidelines4/5

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

The description provides clear context for use by stating 'Only the comment author can delete their own comment' and that the action is irreversible, which tells the agent when it is appropriate to call this tool. It does not explicitly name alternatives or exclusions, but the usage context is sufficient for a straightforward delete operation.

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

delete_contactA
DestructiveIdempotent

Permanently delete a contact from an address book.

Args: uid: The contact UID to delete. book_id: Address book ID (default "contacts").

Returns: Confirmation message.

ParametersJSON Schema
NameRequiredDescriptionDefault
uidYes
book_idNocontacts

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already flag destructiveHint=true, and the description reinforces this by saying 'permanently delete', which adds meaningful context about irreversibility. It also discloses the return as a 'Confirmation message', providing useful behavioral detail without contradicting 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 compact and well-structured: a one-sentence purpose, followed by terse Args and Returns sections. Every line contributes necessary information with no filler or repetition.

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 two-parameter destructive delete with annotations and an output schema, the description covers everything essential: what is deleted, whether deletion is permanent, which parameters are involved, and what the response will be. Nothing critical is missing for an agent to invoke it correctly.

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

Parameters4/5

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

The input schema has 0% description coverage, so the description carries the full burden. It clearly explains uid as 'The contact UID to delete' and book_id as 'Address book ID (default "contacts")', which sufficiently compensates for the uninformed 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 states a specific action ('Permanently delete') and a specific resource ('a contact from an address book'), making the tool's purpose immediately clear. It is easily distinguished from sibling tools like create_contact, get_contact, and update_contact because it uniquely conveys permanent deletion.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus alternatives, nor any mention of prerequisites or cautionary context. The intended usage is only implied by the verb 'delete' and the resource, which is not enough to help an agent decide between this and other contact-related tools.

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

delete_conversationA
DestructiveIdempotent

Delete a conversation with all its messages for everyone. Needs moderator rights.

One-to-one conversations cannot be deleted; leave them with leave_conversation.

Args: token: The conversation token.

Returns: Confirmation message.

ParametersJSON Schema
NameRequiredDescriptionDefault
tokenYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and idempotentHint=true, so safety is partly covered. The description adds meaningful context beyond them: the deletion cascades to all messages and is visible to everyone, and it requires moderator rights. It stops short of saying whether the delete is permanent or recoverable (e.g. via trash), which is the one behavioral detail left open.

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 critical constraints are front-loaded in the first three sentences with zero filler. The 'Args:' and 'Returns:' block is mild boilerplate, especially since an output schema exists, but it is short and not harmful.

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 single-parameter destructive mutation, the description covers purpose, authorization, cascade scope, the key exclusion, and the fallback tool. An output schema exists, so the brief 'Confirmation message' note is sufficient and nothing an agent needs is missing.

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

Parameters4/5

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

Schema description coverage is 0% and the single parameter is a bare string named 'Token'. The description compensates by identifying it as 'The conversation token', disambiguating it from other token-bearing siblings. It adds no format or source detail beyond that, but for one parameter this is adequate.

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

Purpose5/5

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

States a precise verb and resource ('Delete a conversation with all its messages') plus the blast radius ('for everyone'). It also distinguishes itself from the nearest sibling by naming leave_conversation as the path for one-to-one conversations.

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 gives the prerequisite ('Needs moderator rights'), the exclusion ('One-to-one conversations cannot be deleted'), and the alternative to use instead ('leave them with leave_conversation'). This is exactly the when/when-not/alternative structure that fully routes an agent.

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

delete_conversation_tagA
DestructiveIdempotent

Delete one of your conversation tags; its conversations lose it.

Args: tag_id: The tag's ID, from list_conversation_tags.

Returns: Confirmation message.

ParametersJSON Schema
NameRequiredDescriptionDefault
tag_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false, so the safety profile is covered. The description adds genuine value beyond that by clarifying the destruction scope: conversations are not deleted, they simply lose the tag association, and a confirmation is returned.

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

Conciseness4/5

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

Front-loaded single sentence describing the action and effect, followed by a short Args/Returns block. No filler, though the 'Args:'/'Returns:' scaffolding is slightly heavier than needed for a one-parameter tool.

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

Completeness4/5

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

An output schema exists, so the description needn't explain the return value, and it correctly just says 'Confirmation message.' For a single-parameter destructive tool whose annotations already flag destructiveness, this is nearly complete; the only gap is that sibling delete tools are never contrasted.

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

Parameters4/5

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

Schema description coverage is 0%, so the description carries the burden and does add meaning: it specifies the provenance of tag_id ('from list_conversation_tags'). It does not state the expected string format or give an example, so it is good but not complete compensation.

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

Purpose4/5

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

States a specific verb ('Delete') and resource ('one of your conversation tags'), and even explains the effect ('its conversations lose it'). The name plus the phrase 'conversation tags' implicitly separates it from delete_tag and delete_collective_tag, though the text never names those siblings explicitly.

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

Usage Guidelines3/5

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

The reference to list_conversation_tags tells the agent where to obtain tag_id, which is a real usage hint. But there is no stated when-to-use or when-not-to-use against the many sibling delete tools (delete_tag, delete_collective_tag, unassign_tag), leaving the choice implied by the name.

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

delete_cospend_billA
DestructiveIdempotent

Delete a Cospend bill. Requires PARTICIPANT access.

Returns HTTP 403 ("project deletion is disabled") if the project has deletionDisabled set. Use update_cospend_project to clear that flag first if you need to delete bills.

Args: project_id: String project id. bill_id: Integer bill id. move_to_trash: If True (default), move to the project trash bin — the bill can be restored later by setting deleted=0 via update_cospend_bill. If False, hard-delete (irreversible).

Returns: JSON {"project_id": ..., "bill_id": ..., "moved_to_trash": }.

ParametersJSON Schema
NameRequiredDescriptionDefault
bill_idYes
project_idYes
move_to_trashNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A5/5.0
Behavior5/5

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

Although annotations already mark this as destructive, the description adds important behavioral detail: the 403 response with the exact message, the move_to_trash default with reversible behavior, the irreversible hard-delete path, and the restoration method. This goes well beyond the structured 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?

Every sentence contributes useful information: purpose, permission, error handling, parameter semantics, and return value. The Args/Returns structure makes it easy to scan, and there is no filler or repetition of schema-only data.

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 destructive operation with three parameters, the description fully covers prerequisites, failure modes, recovery options, parameter meanings, and the response format. An agent has everything it needs to decide whether to call this tool and how to invoke it correctly.

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?

The schema provides no descriptions for any parameters (0% coverage), so the description carries the full burden. It explains project_id as a string id, bill_id as an integer id, and move_to_trash with its default value plus the semantic difference between moving to trash and hard-deleting. It also documents the return JSON shape.

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 and resource: "Delete a Cospend bill." It is clearly distinguishable from sibling tools such as delete_cospend_project and delete_cospend_member, and the scope is unambiguous.

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

Usage Guidelines5/5

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

It states the required permission level (PARTICIPANT access), the failure condition (deletionDisabled) and what HTTP error to expect, and explicitly routes the agent to update_cospend_project to clear the flag first. It also distinguishes soft-delete versus hard-delete behavior and tells the agent how to restore a soft-deleted bill via update_cospend_bill.

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

delete_cospend_memberA
DestructiveIdempotent

Delete (or disable) a Cospend project member. Requires MAINTAINER access.

Members with bills cannot be hard-deleted — they are soft-disabled instead (activated=false) so existing bill history stays valid. Members without any bill are permanently removed.

Args: project_id: String project id. member_id: Integer member id.

Returns: JSON {"project_id": ..., "member_id": ..., "deleted": true}.

ParametersJSON Schema
NameRequiredDescriptionDefault
member_idYes
project_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior5/5

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

Beyond the annotations, the description discloses the conditional destructive behavior, the soft-disable fallback that preserves bill history, the permanent removal condition, and the permission requirement. This is exactly the behavioral context an agent needs for a destructive operation. No contradiction with annotations exists.

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

Conciseness5/5

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

The description is compact and well-structured: a clear opening, behavioral rules, then Args and Returns sections. Every sentence earns its place, and the most important operational nuance is front-loaded.

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

Completeness5/5

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

The description covers the permission requirement, the conditional outcome, both parameters, and the return shape. Given the tool's moderate complexity and the presence of an output schema, nothing essential is missing for an agent to call it correctly.

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

Parameters3/5

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

The Args section restates the parameter names and types ('String project id', 'Integer member id'), which is minimal compensation given 0% schema description coverage. It does not add deeper meaning beyond what the input schema already conveys through names and types.

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 uses a specific verb and resource: 'Delete (or disable) a Cospend project member.' It adds meaningful nuance by distinguishing hard deletion from soft-disabling based on bills. It does not explicitly name sibling alternatives, so it stops short of full sibling differentiation.

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

Usage Guidelines4/5

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

The description clearly states the required MAINTAINER access and explains when each behavior occurs: members with bills are soft-disabled, members without bills are permanently removed. It gives practical context for invoking the tool but does not explicitly contrast it with alternative tools like update_cospend_member.

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

delete_cospend_projectA
DestructiveIdempotent

Delete a Cospend project and all its members, bills, and shares.

Requires ADMIN access on the project. The project-delete endpoint does NOT honor deletionDisabled (only delete_cospend_bill is gated by that flag), so this irrevocably removes everything regardless.

Args: project_id: String project id.

Returns: JSON {"project_id": ..., "message": "DELETED"}.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior5/5

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

Even though destructiveHint already marks the tool as destructive, the description adds significant value: it reveals that the endpoint ignores deletionDisabled, that deletion is irrevocable, that it cascades to members/bills/shares, and that admin rights are required. 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 compact and well-organized: purpose, access requirement, important caveat, args, and returns. Every sentence contributes useful information, and the critical behavioral warning is front-loaded.

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, existing annotations, and output schema, the description covers all necessary operational details: what is deleted, auth required, the deletionDisabled caveat, parameter definition, and return shape. Nothing needed for correct invocation is missing.

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%, so the description must compensate, but it only restates 'String project id' which mirrors the schema title. It provides no guidance on where the id comes from (e.g., list_cospend_projects) or any format expectations, making this a weak compensation for the missing 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 opens with a specific verb and resource, 'Delete a Cospend project', and clearly scopes the action to all members, bills, and shares. This distinguishes it from sibling tools like delete_cospend_bill and delete_cospend_member.

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

Usage Guidelines4/5

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

The description gives a concrete precondition ('Requires ADMIN access') and a behavioral caveat that differentiates this endpoint from delete_cospend_bill regarding the deletionDisabled flag. It does not explicitly say 'use this when you want to remove an entire project,' but that is strongly implied by the stated scope.

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

delete_eventA
DestructiveIdempotent

Delete a calendar event by its UID.

The event is moved to the calendar trashbin and can be restored from the Nextcloud web interface within the retention period.

Args: calendar_id: Calendar identifier (e.g. "personal"). event_uid: The event's UID to delete. Use get_events to find UIDs.

Returns: Confirmation message.

ParametersJSON Schema
NameRequiredDescriptionDefault
event_uidYes
calendar_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

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

Beyond the annotations (destructiveHint, idempotentHint, readOnlyHint=false), the description adds valuable behavioral context: the event is moved to the calendar trashbin and can be restored within the retention period. It does not explain the idempotent behavior hinted by idempotentHint, such as what happens when the same UID is deleted twice, but the annotations already partially cover this and there is 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?

The description is compact and front-loaded with the most important fact, followed by a useful trash/restore caveat and clearly separated Args and Returns sections. Every sentence adds necessary information without fluff.

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

Completeness5/5

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

For a destructive two-parameter tool, the description is complete: it states what the action does, what happens to the event, how to find parameters, and what to expect in response. The presence of an output schema covers return details, so nothing critical is missing.

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

Parameters5/5

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

Schema description coverage is 0%, so the description fully carries the parameter documentation burden. It defines both parameters, gives a concrete calendar_id example ("personal"), and explains how to obtain event_uid via get_events, which compensates well for the empty schema.

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

Purpose5/5

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

The description opens with a specific verb and resource: "Delete a calendar event by its UID." It clearly distinguishes itself from siblings like create_event, update_event, and get_event, and further clarifies that deletion moves the event to a trashbin rather than making it disappear instantly.

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

Usage Guidelines4/5

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

It provides clear workflow guidance by saying "Use get_events to find UIDs," which tells the agent how to obtain required input. It also mentions restoration via the Nextcloud web interface, implicitly signaling when the tool is not appropriate for recovery. However, it does not explicitly discuss alternatives such as update_event for modifying an event without deleting it.

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

delete_fileA
DestructiveIdempotent

Delete a file or directory from Nextcloud.

WARNING: This permanently deletes the file/directory (moves to trash if enabled).

Args: path: Path to delete. Example: "Documents/old-file.txt"

Returns: Confirmation message.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and idempotentHint=true. The description adds valuable context: the permanent deletion warning and the 'moves to trash if enabled' caveat, which goes beyond the annotations. It also notes the return is a confirmation message. This is good behavioral disclosure beyond structured data.

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

Conciseness5/5

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

The description is compact and front-loaded: the action and resource are in the first sentence, the warning is prominent, and the parameter/return details are clearly separated. Every sentence earns its place.

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

Completeness4/5

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

For a single-parameter destructive tool with annotations covering safety and idempotency, the description is nearly complete. It includes the warning, parameter example, and return type. The only minor gap is not specifying whether the path is relative to the user's root or absolute, but the example mitigates this.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must compensate. It explains the 'path' parameter with an example ('Documents/old-file.txt'), which adds meaning beyond the bare schema property. However, it doesn't clarify path format nuances (e.g., leading slash, root-relative vs absolute), but the example helps.

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 a specific verb ('Delete') and resource ('a file or directory from Nextcloud'), which clearly distinguishes it from siblings like move_file, copy_file, and delete_trash_item. The scope is 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 implies when to use it (when you want to delete a file/directory) but does not explicitly state when not to use it or mention alternatives like delete_trash_item for trash-specific operations. It provides a clear context but no exclusions.

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

delete_flowA
DestructiveIdempotent

Delete a Nextcloud Flow rule.

Args: flow_id: The flow's ID, from list_flows. scope: The scope the flow is in: "user" (default) or "global".

Returns: Confirmation message.

ParametersJSON Schema
NameRequiredDescriptionDefault
scopeNouser
flow_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false, so the safety profile is covered. The description adds the return value ('Confirmation message') and the source of flow_id, but does not elaborate on irreversibility, authorization requirements, or side effects beyond what annotations state.

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 short, front-loaded with the action, and organized into Args/Returns. The 'Returns: Confirmation message' line is mildly redundant since an output schema exists, but overall there is little 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?

With annotations covering destructiveness/idempotency and an output schema covering the return value, the remaining burden is parameter meaning, which is addressed for both parameters. Only edge-case guidance (permissions, global-scope restrictions) is missing.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must compensate and largely does: it documents flow_id's origin (list_flows) and enumerates scope values ('user' default, or 'global'), which the schema does not specify. It stops short of explaining consequences of each scope choice.

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

Purpose5/5

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

States a specific verb (delete) and resource (Nextcloud Flow rule), which cleanly separates it from siblings like create_flow, update_flow, and list_flows. An agent can identify the operation without opening the schema.

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

Usage Guidelines3/5

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

Usage is implied by the verb and the note that flow_id comes from list_flows, and the scope parameter hints at user vs global contexts. However, there is no explicit when-to-use guidance, no exclusions (e.g., permissions needed for global flows), and no named alternatives.

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

delete_formA
DestructiveIdempotent

Delete a form, including all questions, options, shares, and submissions.

Args: form_id: Numeric form id.

Returns: Confirmation with the deleted id.

ParametersJSON Schema
NameRequiredDescriptionDefault
form_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and idempotentHint=true, so the safety profile is covered. The description adds critical context by specifying the full scope of destruction (all questions, options, shares, submissions), which is not in the annotations. This warns the agent of the broad impact beyond just deleting a single entity. It doesn't mention irreversibility, but that is implied by destructiveHint.

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: one sentence for the main action, followed by a simple Args/Returns format. All information is front-loaded, with no filler or redundancy. Every sentence earns its place.

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

Completeness4/5

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

For a single-parameter delete tool, the description covers the destructive scope, the parameter, and the return value. The annotations provide the safety profile. The only missing context is a note on irreversibility or permission requirements, but those are likely implied by the destructive annotation. Overall, it is complete enough for an agent to call 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 0%, so the description must compensate for the parameter. However, it merely restates the schema type ('Numeric form id') without adding semantics like what the ID refers to or any validation. The description adds no meaningful guidance beyond what the integer type already conveys. It could clarify that form_id is the unique identifier of the form to delete, 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 uses a clear verb ('Delete') and resource ('form'), and explicitly lists the cascading scope (questions, options, shares, submissions). This distinguishes it from sibling tools like delete_question or delete_option, leaving no ambiguity about what is removed.

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 self-evident, but the description does not mention when to prefer this over alternatives or when not to use it. It implicitly assumes the agent knows to use it for deleting a form, but lacks explicit exclusion or alternative guidance. The cascade warning partially serves as a caution, but not as usage direction.

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

delete_form_shareB
DestructiveIdempotent

Revoke a share on a form.

Args: form_id: Numeric form id. share_id: Numeric share id.

Returns: Confirmation with the deleted id.

ParametersJSON Schema
NameRequiredDescriptionDefault
form_idYes
share_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true and idempotentHint=true, so the safety profile is covered. The description adds that the tool returns a confirmation with the deleted id, which is a small behavioral detail beyond annotations. It does not disclose permissions, irreversibility details, or side effects beyond the annotation hints, but since annotations carry the main burden, a score of 3 is appropriate.

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

Conciseness4/5

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

The description is concise, with a clear purpose statement and a structured Args/Returns format. It front-loads the core action and includes no fluff. It could have provided more context, but it is efficient and well-organized, earning a 4 rather than a 3.

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 two required parameters and an output schema, the description is sufficient. It states the return value ('Confirmation with the deleted id'), which is covered by the output schema but adds clarity. It does not mention error handling, prerequisites, or edge cases, but given the simplicity and annotation coverage, this is adequate for an agent to call it 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 description coverage is 0%, so the description must compensate for missing parameter documentation. However, it only restates the parameter names and adds 'Numeric', which is redundant with the integer type. It does not explain where to find form_id or share_id, what formats are valid, or any constraints. The description fails to add meaningful semantics beyond the schema.

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 'Revoke a share on a form' with a specific verb and resource. It does not explicitly differentiate from the sibling delete_share, but the name and scope are specific enough that an agent can identify its purpose. This is clear but lacks explicit sibling differentiation.

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

Usage 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 delete_share, update_form_share, or create_form_share. There is no mention of conditions, exclusions, or scenarios that would select this tool over others. The agent is left to infer usage from the name alone.

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

delete_groupA
DestructiveIdempotent

Delete a group. Requires admin rights (or delegated user administration).

The members keep their accounts, but lose the group's memberships and anything shared with the group. The "admin" group cannot be deleted.

Args: group_id: The group ID to delete.

Returns: Confirmation message.

ParametersJSON Schema
NameRequiredDescriptionDefault
group_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior5/5

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

Adds substantial context beyond the annotations: members retain accounts but lose memberships and anything shared with the group, admin-group protection, and the authorization requirement. This tells the agent exactly what collateral damage to expect from a destructiveHint=true operation.

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

Conciseness4/5

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

Front-loaded with the core action, then behavioral notes, then an Args/Returns block. Efficient, though the 'Returns: Confirmation message.' line is partly redundant given an output schema exists.

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 authorization, protected targets, and member/shared-item side effects for a destructive single-param operation, and an output schema handles return values. Nothing an agent needs to invoke it safely is missing.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must carry the parameter meaning, and it only offers 'The group ID to delete' for group_id. That confirms intent but adds little beyond the self-evident name; the description compensates minimally for the coverage 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?

Opens with a specific verb+resource ('Delete a group') and immediately differentiates from siblings like list_groups, create_group, and delete_user by scoping the action to a group. An agent knows exactly what this operates on without reading the schema.

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

Usage Guidelines4/5

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

States prerequisites (admin rights or delegated user administration) and an explicit exclusion ('admin' group cannot be deleted), which is strong when-to-use/when-not guidance. It stops short of naming alternatives (e.g., leave_circle, remove_circle_member, remove_participant) for related removal semantics.

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

delete_messageA
DestructiveIdempotent

Delete a chat message from a Talk conversation.

Only the message author or a moderator can delete a message. The message is replaced with "Message deleted" in the conversation.

Args: token: The conversation token. message_id: The ID of the message to delete.

Returns: Confirmation message.

ParametersJSON Schema
NameRequiredDescriptionDefault
tokenYes
message_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the annotations (destructiveHint=true, idempotentHint=true), the description discloses two important behavioral details: the permission requirement and the fact that the message is replaced with 'Message deleted' rather than fully removed. This adds real context about side effects that annotations alone don't 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?

The description is tight and front-loaded: one-sentence purpose, two behavioral notes, then a labeled Args/Returns section. Every sentence earns its place, and no filler is present.

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 two-parameter delete tool, this is complete: it covers purpose, permissions, behavior, parameters, and return. The presence of an output schema means the return value doesn't need detailed documentation, and nothing necessary for an agent to call it correctly is missing.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must explain the parameters, and it does: token is the conversation token and message_id is the ID of the message to delete. This is sufficient for correct invocation, though it could add more context on how to obtain the token.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Delete a chat message from a Talk conversation.' This clearly distinguishes it from sibling delete tools such as delete_comment, delete_task, and delete_file, so an agent can tell them apart without inspecting schemas.

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

Usage Guidelines4/5

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

It provides clear contextual guidance: only the message author or a moderator can delete, and the message is replaced with a placeholder. It doesn't explicitly name alternative tools or say when not to use it, but the scope 'chat message from a Talk conversation' plus the permission precondition gives enough direction for correct selection.

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

delete_optionA
DestructiveIdempotent

Delete an answer option from a question.

Args: form_id: Numeric form id. question_id: Numeric question id. option_id: Numeric option id.

Returns: Confirmation with the deleted id.

ParametersJSON Schema
NameRequiredDescriptionDefault
form_idYes
option_idYes
question_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already carry destructiveHint and idempotentHint, so the description need not restate that. It adds the return contract ('Confirmation with the deleted id') and scopes deletion to an option within a question, but it does not mention irreversibility or cascading effects on submissions.

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?

One-sentence purpose plus compact Args and Returns blocks. No fluff or repetition; every line 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?

Covers purpose, all three required parameters, and the return value. With annotations handling destructive/idempotent flags, the main gap is a note on side effects on existing submissions or prerequisites, but it is otherwise adequate for a simple scoped delete.

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 0%, so the Args section is the only prose for parameters. It labels each as numeric and clarifies the form→question→option hierarchy, but much of this mirrors the schema property titles and the integer type.

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

Purpose5/5

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

States a specific verb ('Delete') and resource ('answer option from a question'), and the 'from a question' scoping distinguishes it from delete_question and delete_form siblings. An agent can tell exactly what this tool acts on without opening the schema.

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

Usage Guidelines3/5

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

No explicit when-to-use or alternatives are provided. The name and first sentence imply the deletion use case, and no sibling directly competes, but there is no explicit context, prerequisites, or exclusion guidance.

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

delete_questionA
DestructiveIdempotent

Delete a question and its options from a form.

Args: form_id: Numeric form id. question_id: Numeric question id.

Returns: Confirmation with the deleted id.

ParametersJSON Schema
NameRequiredDescriptionDefault
form_idYes
question_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, so the destructive nature is known. The description adds the important detail that options are deleted alongside the question, which is beyond the annotations. However, it does not mention irreversibility, impact on existing submissions, or any prerequisites. The return confirmation is mentioned but not the exact format.

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

Conciseness5/5

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

The description is extremely concise and well-structured: it states the purpose in one line, lists arguments with brief types, and notes the return value. Every sentence earns its place without fluff. It is front-loaded with the primary action.

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 core action, parameters, and return value, and an output schema exists to define the confirmation shape. It does not address edge cases like what happens if the question does not exist, or whether the operation is reversible, but for a simple delete tool with clear annotations this is acceptable. It could benefit from a note about cascade effects, but it already states that options are deleted.

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 0% because the description merely repeats the parameter names and adds 'numeric', which duplicates the integer type already in the schema. No additional meaning is provided about what the ids refer to, constraints, or relationships. For a two-parameter tool, the description should offer at least some context, but it adds almost nothing 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 ('Delete a question and its options from a form') with a specific resource (question) and scope (including options). It distinguishes from siblings like delete_option (which deletes only an option) and delete_form (which deletes the form itself). The verb+resource is 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 implies the tool should be used when you want to delete a question along with its associated options, but it does not explicitly state when to use it versus alternatives. It lacks exclusions or prerequisites, such as whether the question must exist or be part of a draft form. No direct comparison to sibling delete tools is given, only an implicit cascade.

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

delete_shareA
DestructiveIdempotent

Delete (unshare) a share by its ID.

This revokes access for the share recipient. The file/folder itself is not deleted. Called by the recipient on a share they received (list_shares with shared_with_me), it removes the share from their files instead: a share made directly to them is deleted for the owner too, a group share only stops showing up for them. Leaving a federated share tells the other server, except for a federated group share, which goes back to list_pending_shares instead, under the id it had in list_shares.

Args: share_id: The share ID to delete. Use list_shares to find share IDs. Pass federated share IDs as strings: they can be too long for a JSON number. federated: True to leave a federated share received from another server (federated: true in list_shares with shared_with_me). Those are numbered separately from this server's shares.

Returns: Confirmation message.

ParametersJSON Schema
NameRequiredDescriptionDefault
share_idYes
federatedNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, readOnlyHint=false, idempotentHint=true, so safety is covered. The description adds high-value context beyond that: the target file/folder survives, direct shares are removed for the owner too, group shares only disappear for the recipient, and federated shares notify the remote server. It does not note permission requirements, but the mutation semantics are well disclosed.

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

Conciseness4/5

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

Front-loaded with purpose and scope, then the edge cases in order of importance. The federated group-share caveat is dense and slightly over-explained, but every clause conveys a distinct behavioral rule rather than filler, so it largely earns its length.

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 destructive tool with an output schema present, the description covers the full decision space: owner vs recipient semantics, direct vs group share outcomes, and local vs federated handling. Combined with annotations and the output schema, nothing an agent needs to call it correctly is missing.

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

Parameters5/5

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

Schema description coverage is 0%, so the description carries the full burden and does. It tells the agent share_id comes from list_shares and that federated IDs must be passed as strings because they may exceed JSON number limits (matching the anyOf integer|string schema), and explains that federated=True targets received federated shares numbered separately.

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

Purpose5/5

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

States a specific verb and resource ('Delete (unshare) a share by its ID') and immediately disambiguates from delete_file by clarifying the file/folder itself is not deleted. An agent can distinguish this from sibling tools like delete_file, delete_collective_share, and delete_form_share.

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 describes two distinct caller contexts (owner deleting vs recipient unsharing via list_shares with shared_with_me) and the differing outcomes for direct vs group shares. Names the alternatives (list_shares, list_pending_shares) and the exact condition (federated: true) that routes to the federated path.

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

delete_submissionB
DestructiveIdempotent

Delete a single submission.

Args: form_id: Numeric form id. submission_id: Numeric submission id.

Returns: Confirmation with the deleted id.

ParametersJSON Schema
NameRequiredDescriptionDefault
form_idYes
submission_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true and idempotentHint=true, so the description doesn't need to repeat those. The description adds a return value note ('Confirmation with the deleted id'), which is useful. However, it doesn't disclose whether deletion is permanent, cascades, or requires special permissions. With annotations covering the destructive/idempotent profile, a 3 is appropriate.

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

Conciseness4/5

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

The description is compact and front-loaded with the core action. The Args/Returns structure is scannable and every sentence earns its place. Minor formatting overhead from the docstring style, but no fluff.

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 two-parameter delete with an output schema and annotations covering destructive/idempotent behavior, the description is mostly complete. It lacks guidance on prerequisites (e.g., form ownership) and doesn't clarify the difference from delete_all_submissions, but the operation is simple enough that an agent can likely invoke it correctly.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate. It does add minimal semantics by labeling form_id as 'Numeric form id' and submission_id as 'Numeric submission id', but this mostly restates the schema's integer type. It doesn't explain how to obtain these IDs or any constraints beyond being numeric.

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 'Delete a single submission' with a specific verb and resource, and the parameters form_id and submission_id identify the target. It distinguishes from siblings like delete_all_submissions and update_submission by specifying 'single submission'.

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 by naming the required parameters, but it does not explicitly state when to use this tool versus alternatives like delete_all_submissions or update_submission. The context is clear enough for a straightforward delete operation, but no explicit when/when-not guidance is provided.

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

delete_tagA
DestructiveIdempotent

Permanently delete a system tag.

This removes the tag from all files it was assigned to. This action is irreversible.

Args: tag_id: The tag ID to delete.

Returns: Confirmation message.

ParametersJSON Schema
NameRequiredDescriptionDefault
tag_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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

The description explicitly discloses that the action is irreversible and that it removes the tag from all files it was assigned to. This adds meaningful behavioral context beyond the annotations (destructiveHint=true, idempotentHint=true). It doesn't mention permissions or side effects on audit logs, but the core destructive behavior is well covered.

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

Conciseness5/5

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

The description is compact and front-loaded with the key fact ('Permanently delete a system tag'), followed by the critical side effect and irreversibility warning. The Args/Returns section is minimal and useful. Every sentence earns its place.

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

Completeness4/5

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

For a single-parameter destructive tool with an output schema, the description is nearly complete. It covers the action, the side effect, and irreversibility. It could mention that the tag_id must reference an existing system tag, but the output schema and annotations cover the rest. The description is sufficient for an agent to invoke it correctly.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate. It does explain that tag_id is 'The tag ID to delete,' which adds minimal meaning beyond the schema's type and title. However, it doesn't clarify how to obtain the tag_id (e.g., via list_tags) or whether it's a numeric ID. The description adds some value but not substantial parameter guidance.

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 a specific verb ('Permanently delete') and resource ('a system tag'), and clearly distinguishes it from other tag operations like assign_tag/unassign_tag or create_tag. It also explains the scope: removes the tag from all files it was assigned to.

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 clearly implies when to use this tool: when a system tag should be permanently removed. It doesn't explicitly name alternatives or exclusions, but the context of 'system tag' and the irreversible nature provide clear usage context. Sibling tools like unassign_tag exist for removing a tag from a file without deleting it, which is implied but not explicitly stated.

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

delete_taskA
DestructiveIdempotent

Delete a task by its UID.

The task is moved to the calendar trashbin and can be restored from the Nextcloud web interface within the retention period.

Args: list_id: Task list identifier (e.g. "tasks"). task_uid: The task's UID to delete. Use get_tasks to find UIDs.

Returns: Confirmation message.

ParametersJSON Schema
NameRequiredDescriptionDefault
list_idYes
task_uidYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

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

The description clearly discloses that deletion is not immediate or permanent: the task is moved to the trashbin and recoverable within the retention period. This adds significant behavioral context beyond annotations, which only indicate destructiveHint. It also states the return is a confirmation message, and there is no contradiction with the annotations.

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

Conciseness5/5

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

The description is compact and front-loaded with the action, followed by a brief behavioral note and a neatly structured Args/Returns section. Every sentence earns its place; there is no filler or repetition of schema 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 two-parameter tool with a simple return value and an output schema present, the description is complete. It covers what happens on deletion, how to restore, how to find UIDs, and what the response will be. An agent has enough information to invoke the tool correctly without needing additional context.

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?

The schema has 0% description coverage, so the description must carry the parameter meaning. It explains list_id as a task list identifier with an example ('tasks'), and task_uid as the UID to delete while pointing to get_tasks for discovery. Both parameters receive clear semantic guidance beyond the bare string type in the schema.

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

Purpose5/5

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

The description opens with 'Delete a task by its UID', a specific verb and resource. It further clarifies the deletion is a soft delete into the trashbin, distinguishing it from permanent deletion tools like delete_trash_item. This is a clear, unambiguous statement of purpose.

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 useful context: the task goes to the calendar trashbin and can be restored from the Nextcloud web interface, implying when soft-delete is appropriate. It also instructs to 'Use get_tasks to find UIDs,' which helps the agent acquire required input. However, it does not explicitly name alternative tools or state when not to use this one.

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

delete_trash_itemA
DestructiveIdempotent

Permanently delete a single item from the trash bin.

This action is irreversible. The file or folder will be permanently destroyed and cannot be recovered.

Args: trash_path: The trash path identifier from list_trash (e.g. "document.txt.d1711000000").

Returns: Confirmation message.

ParametersJSON Schema
NameRequiredDescriptionDefault
trash_pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and idempotentHint=true; the description adds the practical consequence that the item is permanently destroyed and cannot be recovered, and clarifies that only a single item is affected. This enriches the safety profile without contradicting 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.

Conciseness4/5

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

The core purpose and irreversibility warning are front-loaded, and the Args/Returns structure is easy to scan. There is minor redundancy between 'permanently delete,' 'irreversible,' and 'cannot be recovered,' but it does not detract from 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?

For a one-parameter destructive operation, the description covers the parameter's source, the effect of the action, and the expected return. Combined with the annotations and the presence of an output schema, nothing essential is missing for an agent to invoke it correctly.

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?

The schema only defines trash_path as a string with no description, while the tool description explains that it is the identifier returned by list_trash and provides a concrete example format. This fully compensates for the 0% schema description 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 states a specific verb ('delete'), a specific resource ('single item from the trash bin'), and the permanence of the action. It is clearly distinguished from siblings like empty_trash and restore_trash_item by the 'single item' and 'from the trash bin' scope.

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 name alternatives or state when to use restore_trash_item vs. empty_trash. It implies selection through 'from the trash bin' and 'irreversible,' but leaves the routing decision to the agent.

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

delete_userA
DestructiveIdempotent

Permanently delete a Nextcloud user. Requires admin privileges.

This cannot be undone. The user's data and files will be removed. The user also leaves every team, which deletes the teams they own that have no other member (a pending invitation counts as one), with those teams' team folders and their files (Nextcloud 35+ with the Team folders app). To only block access, disable the account with set_user_enabled instead.

Args: user_id: The user ID to delete.

Returns: Confirmation message.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already flag this as destructive and idempotent, but the description adds substantial context beyond them: the action cannot be undone, data and files are removed, team memberships are affected, owned teams with no remaining members are deleted along with team folders/files, and version/app dependencies are noted.

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 critical warning and admin requirement are front-loaded, and the alternative tool is placed before the docstring-style Args/Returns section. The Returns line is redundant because an output schema exists, and the team-deletion detail is necessarily long but 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 destructive admin mutation, the description covers prerequisites, irreversibility, cascading effects, and the main safe alternative. Combined with annotations and the existing output schema, it gives the agent enough information to invoke the tool and understand its impact.

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 0%, and the description only restates 'user_id: The user ID to delete.' It does not clarify how to obtain the ID or whether a username/email is acceptable. For a single simple required parameter this is minimally usable, but it does not compensate for the 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 states a specific verb and resource: permanently delete a Nextcloud user. It also directly contrasts this with set_user_enabled, so an agent can distinguish destructive account deletion from access blocking without opening either schema.

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

Usage Guidelines5/5

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

It explicitly states the required admin privilege and names the alternative for the common alternative intent: use set_user_enabled to only block access. This gives clear when-to-use and 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.

disable_appA
DestructiveIdempotent

Disable a Nextcloud app. Requires admin privileges.

Deactivates the app, making its features unavailable. The app data is preserved and can be re-enabled later.

Be careful: disabling core apps (like files, dav) can break Nextcloud functionality.

Args: app_id: The app identifier to disable (e.g. "weather_status").

Returns: Confirmation message.

ParametersJSON Schema
NameRequiredDescriptionDefault
app_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already mark destructive and idempotent hints, but the description adds valuable behavioral details: admin requirement, data preservation, re-enable ability, and the risk of breaking core apps. This goes beyond the annotations and gives the agent crucial safety 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 tightly written: main action first, then prerequisite, effect, preservation, and a caution. Every sentence adds value, and the Args/Returns sections are clearly formatted. No fluff.

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

Completeness5/5

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

For a single-parameter tool with an output schema, the description covers everything an agent needs: purpose, prerequisite, effect, data preservation, risk, parameter semantics, and return type. Nothing critical is missing.

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 0%, but the description fully compensates by explaining app_id as 'The app identifier to disable' and providing a concrete example ('weather_status'). This adds meaning beyond the schema's bare 'App Id' label.

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 a specific verb and resource: 'Disable a Nextcloud app.' It clearly differentiates from enable_app by explicitly saying it deactivates the app. The purpose is unambiguous and immediately understood.

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?

It notes the admin privilege requirement and warns against disabling core apps, which are useful usage conditions. However, it doesn't explicitly reference the sibling enable_app or provide when-not-to-use guidance beyond the core-app caution. The context is clear but excludes explicit alternatives.

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

dismiss_all_notificationsA
DestructiveIdempotent

Dismiss (permanently delete) ALL notifications for the current user.

This cannot be undone. Use list_notifications first to review what will be dismissed.

Returns: Confirmation message.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already mark the tool destructive, but the description adds important behavior: notifications are permanently deleted, cannot be undone, and all notifications for the current user are affected. This goes beyond the annotation and helps agents warn users.

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 short, front-loaded with the main action and scope, and contains only necessary warnings and return information. 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 zero-parameter destructive tool with an output schema, the description provides all essential context: scope, irreversibility, a pre-check recommendation, and expected return. Nothing important is missing.

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

Parameters4/5

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

There are no parameters, so the description does not need to explain parameter semantics. The baseline for a zero-parameter tool is 4, and the description is complete in that regard.

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

Purpose5/5

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

The description names a specific verb ('Dismiss'), clarifies it as permanent deletion of ALL notifications, and scopes it to the current user. This clearly distinguishes it from the sibling dismiss_notification tool.

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

Usage Guidelines4/5

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

It gives clear guidance to use list_notifications first to review what will be dismissed. It does not explicitly mention using dismiss_notification for individual notifications, but the 'ALL' scope and zero parameters make the appropriate use case clear.

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

dismiss_notificationA
DestructiveIdempotent

Dismiss (permanently delete) a single notification by its ID.

Use list_notifications first to find the notification_id to dismiss.

Args: notification_id: The numeric ID of the notification to dismiss.

Returns: Confirmation message.

ParametersJSON Schema
NameRequiredDescriptionDefault
notification_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

While annotations already declare destructiveHint=true, the description adds the term 'permanently delete,' making irreversibility explicit. It also names the confirmation-message return behavior, and 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 compact and front-loaded, with the core behavior stated first and then neatly separated Args and Returns sections. Every sentence serves a purpose, and there is no redundant filler.

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

Completeness5/5

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

For a one-parameter, single-action tool with annotations and an output schema, this description is complete. It explains what the tool does, what input is needed, how to obtain that input, and what result to expect.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must compensate. The Args section fully identifies notification_id as 'The numeric ID of the notification to dismiss,' which is sufficient for the single parameter even though 'numeric' mostly restates the integer type.

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 a specific verb ('Dismiss'), resource ('notification'), and scope ('single... by its ID'). The word 'single' differentiates it from the sibling dismiss_all_notifications without requiring the agent to inspect that tool.

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

Usage Guidelines4/5

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

It gives an explicit precondition: 'Use list_notifications first to find the notification_id to dismiss.' This provides clear context for when the tool should be invoked, though it does not explicitly state when to favor it over dismiss_all_notifications.

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

edit_commentA
Idempotent

Edit a comment on a file.

Only the comment author can edit their own comment.

Args: file_id: The numeric file ID. comment_id: The comment ID to edit. message: The new comment text (max 1000 characters).

Returns: Confirmation message.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_idYes
messageYes
comment_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, idempotentHint=true, and destructiveHint=false, so the description doesn't need to restate those. The description adds the author-only restriction, which is a meaningful behavioral constraint not in the annotations. It doesn't mention potential side effects (e.g., notifications to other users) or whether the edit is a full replacement, but the idempotentHint covers repeatability. 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 compact and front-loaded with the action, followed by a key constraint and parameter explanations. The Args/Returns structure is clear and scannable. It could be slightly more concise by omitting the Returns line, but it's well-organized and every sentence earns its place.

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

Completeness4/5

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

For a simple 3-parameter edit operation with an output schema, the description covers the essential context: what the tool does, the author-only restriction, and parameter semantics. It doesn't explain the return value in detail, but the output schema exists. It also doesn't mention error conditions (e.g., what happens if the comment doesn't exist), but that's a minor gap for this complexity level.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must compensate. It explains each parameter: file_id is the numeric file ID, comment_id is the comment ID to edit, and message is the new comment text with a max length of 1000 characters. This adds meaning beyond the bare schema types, especially the max length constraint and the role of each ID.

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 ('Edit a comment on a file') and identifies the resource (a comment on a file). It distinguishes itself from sibling tools like add_comment and delete_comment by focusing on editing an existing comment. However, it doesn't explicitly differentiate from other edit-type tools, but the resource is specific 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?

The description provides a clear context: editing a comment on a file, and notes the author-only restriction. It doesn't explicitly state when to use this tool versus alternatives like add_comment or delete_comment, but the action is self-evident. The author-only note is a useful usage constraint, but no explicit when/when-not guidance is given.

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

edit_messageA
Idempotent

Replace the text of a chat message. Talk marks it as edited and tells the conversation.

Only your own messages (or, for a moderator, any in a group conversation), only within 24 hours, and not system messages or shared polls and locations; for a shared file the new text becomes its caption. Mentions read back from get_messages show names; to keep a mention when editing, write it as search_mentions gives it (@"user-id").

Args: token: The conversation token. message_id: The message to edit. message: The new text. Mentions work as in send_message.

Returns: JSON with the edited message.

ParametersJSON Schema
NameRequiredDescriptionDefault
tokenYes
messageYes
message_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations cover safety (readOnlyHint=false, idempotentHint=true, destructiveHint=false); the description adds non-obvious behavior beyond them — the message is marked as edited, the conversation is notified, and edits are subject to a 24-hour window and permission constraints. It does not describe failure modes or what happens to mentions that no longer resolve.

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 front-loaded: the core action comes first, then constraints, then the mention caveat, then Args/Returns. Every sentence carries information, though the Args and Returns blocks partly restate what the schema and output schema already provide.

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?

An output schema exists, so the Returns line is a mild redundancy, but the description covers permissions, time limits, excluded message types, and mention semantics. It stops short of describing error behavior or concurrency/conflict outcomes for an idempotent edit.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must compensate, and it does document all three parameters plus mentions handling ('Mentions work as in send_message', pointing at search_mentions format). 'token' and 'message_id' remain thinly described (no format/validity ranges), preventing a 5.

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

Purpose5/5

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

States a specific verb and resource ('Replace the text of a chat message'), immediately distinguishing it from sibling mutations like edit_comment, delete_message, or send_message. The scope and effect (marks as edited, tells the conversation) are front-loaded.

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 enumerates when the tool may be used: only your own messages (moderators may edit any in a group conversation), only within 24 hours, and never for system messages or shared polls/locations. It also notes the shared-file caption special case, leaving little to inference.

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

empty_trashA
DestructiveIdempotent

Permanently delete ALL items in the trash bin.

This action is irreversible. All trashed files and folders will be permanently destroyed and cannot be recovered.

Returns: Confirmation message.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already cover destructiveHint and idempotentHint. The description explicitly states irreversibility and permanent destruction, adding clear emphasis on a critical behavioral trait. However, it does not detail what exactly gets destroyed (e.g., nested folders, files) or any permissions required, which could be useful. It 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.

Conciseness4/5

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

The description is concise and front-loaded with the main action and scope, followed by a clear warning about irreversibility and a return value summary. The 'Returns' section is slightly unnecessary as an output schema exists, but it adds minimal value without clutter.

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 no-parameter, destructive operation, the description is largely complete: it covers the scope, irreversibility, and confirms a confirmation response. It could mention what happens to child items or if the operation is recursive, but these are minor given the simple nature and existing 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?

Since the tool has no parameters (0 params), the description doesn't need to explain parameters. The baseline of 4 is appropriate because the description is complete regarding parameters – there is nothing missing.

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 a specific verb ('Permanently delete') and resource ('ALL items in the trash bin'), distinguishing it from sibling tools like 'delete_trash_item' and 'restore_trash_item'. It unambiguously defines the scope and action.

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 use case (emptying the entire trash) but does not explicitly state when to use it versus alternatives like 'delete_trash_item' or when not to use it. However, the clear scope and irreversibility inherently guide a cautious agent.

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

enable_appA
Idempotent

Enable a Nextcloud app. Requires admin privileges.

Activates a previously disabled or newly installed app. This makes the app's features available to users.

Args: app_id: The app identifier to enable (e.g. "spreed", "mail").

Returns: Confirmation message.

ParametersJSON Schema
NameRequiredDescriptionDefault
app_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already communicate readOnly=false, idempotentHint=true, and destructive=false. The description adds meaningful context beyond those annotations by disclosing the admin privilege requirement and the user-visible effect of activating the app's features.

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 well-structured: a brief purpose sentence, a privilege note, a short behavioral explanation, and an organized Args/Returns section. It is slightly more verbose than strictly necessary for a one-parameter tool, but every section 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?

For a simple, single-parameter administrative action, the description covers what the tool does, prerequisites, parameter semantics, and return behavior. The presence of an output schema means return details need not be extensive, and nothing critical is missing.

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 0%, but the description compensates fully for the single parameter: it defines app_id as 'the app identifier' and provides concrete examples like 'spreed' and 'mail.' This is exactly the semantic detail the schema lacks.

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 a specific verb and resource, 'Enable a Nextcloud app,' and clarifies the effect by saying it activates a previously disabled or newly installed app. This clearly distinguishes it from sibling tools like disable_app and list_apps.

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 gives useful context: 'Requires admin privileges' and identifies the target state as 'a previously disabled or newly installed app.' However, it does not explicitly contrast this tool with alternatives such as disable_app or get_app_info, so usage guidance is more implied than explicit.

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

export_submissionsA

Export submissions to a spreadsheet file in the user's Nextcloud storage.

Args: form_id: Numeric form id. path: Destination folder path inside the user's files (no trailing slash). The generated file is created inside this folder. file_format: Optional format override: "csv", "xlsx", "ods". Defaults to the form's configured fileFormat.

Returns: JSON with the created file's name.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
form_idYes
file_formatNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations only say the tool is not read-only, not idempotent, and not destructive. The description adds useful behavioral detail: it creates a generated file inside the given folder, defaults to the form's configured fileFormat, and returns JSON containing the created file's name. It stops short of covering overwrite behavior or naming conventions, but the main side effect is disclosed.

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 summary sentence is front-loaded and the Args/Returns sections are compact and purposeful. Every line earns its place: no repetition of schema fields, no filler, and the format options are listed efficiently.

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 three-parameter file-generating tool, the description covers the purpose, all parameters, defaults, allowed formats, and return shape. The output schema also exists to document the return value. Minor omissions like overwrite behavior and permissions are not critical for the core export scenario.

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

Parameters5/5

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

Schema description coverage is 0%, so the description must fully compensate, and it does. It explains form_id as a numeric ID, path as the destination folder inside the user's files with no trailing slash, and file_format as an optional override with explicit values 'csv', 'xlsx', 'ods' and the default behavior tied to the form's configuration.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Export submissions to a spreadsheet file in the user's Nextcloud storage.' It clearly identifies the action, the data being exported, and the destination, and it differentiates the tool from read-oriented siblings like list_submissions and get_submission.

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 establishes a clear use context: exporting submissions into a folder in the user's storage, with optional format override. It does not explicitly name alternatives or say when not to use it, but the intended task is unambiguous and the parameter constraints (e.g., no trailing slash in path) guide correct invocation.

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

get_activityA
Read-onlyIdempotent

Get the recent activity feed for the current Nextcloud user.

Activities track what happened across Nextcloud: file changes, shares, calendar events, comments, and more.

Filters include "all", "self" (your actions), "by" (others' actions), "files", "files_sharing", "files_favorites", "calendar", "comments" and more, depending on the installed apps; list_activity_filters lists them.

To get activities for a specific file or object, provide both object_type and object_id (e.g., object_type="files", object_id=742), and leave activity_filter at "all". This also clears the returned activities' notifications, as the web interface does when it shows a file's activity.

Args: activity_filter: Activity filter id (default: "all"). limit: Maximum number of activities to return (1-200, default: 30). since: Activity ID to paginate from. Use the "since" value from the previous call's pagination to fetch the next page. Default 0 = newest. object_type: Filter by object type (e.g., "files"). Must be used together with object_id. object_id: Filter by object ID. Must be used together with object_type. sort: Sort order: "desc" (newest first, default) or "asc" (oldest first). search: Only activities whose file path contains this text (2-255 characters after trimming, case-insensitive), which leaves out activities without a file. start: Only activities at or after this time: an ISO 8601 date (from its start, UTC) or a time with a time zone. end: Only activities at or before this time: an ISO 8601 date (to its end, UTC) or a time with a time zone. actor: Only activities done by this user ID. search, start, end and actor need Nextcloud 35 (Activity 8); on older servers they are refused rather than ignored.

Returns: JSON object with "data" (list of activities) and "pagination" (count, has_more, since). Use since value for the next page.

ParametersJSON Schema
NameRequiredDescriptionDefault
endNo
sortNodesc
actorNo
limitNo
sinceNo
startNo
searchNo
object_idNo
object_typeNo
activity_filterNoall

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

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

Reveals a non-obvious side effect (returning file activities clears their notifications, as the web UI does) and version-gating behavior ('search, start, end and actor need Nextcloud 35; on older servers they are refused rather than ignored'), which goes well beyond the readOnly/idempotent 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?

Front-loaded summary followed by filters, object targeting, args, and returns; every section adds information. The Args block is long but each entry is needed given 10 undocumented parameters.

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

Completeness5/5

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

For a 10-parameter list tool with no schema descriptions, the definition covers filtering, pagination, sorting, version constraints, side effects, and return shape, leaving no ambiguity 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?

With 0% schema description coverage, the description carries the full burden and does: it documents ranges (limit 1-200), the pagination 'since' round-trip, sort values, ISO 8601 semantics for start/end, case-insensitive path search length, and the interdependency of object_type/object_id.

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

Purpose5/5

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

States a specific verb and resource ('Get the recent activity feed for the current Nextcloud user') and immediately scopes what activities are, distinguishing it from list_activity_filters and get_activity_counts which appear as siblings.

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

Usage Guidelines4/5

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

Explicitly explains when to use the object_type/object_id pair, the required companion argument, and that activity_filter should be 'all' in that case, plus points to list_activity_filters for enumerating filter ids. It does not explicitly contrast with get_activity_counts, but the contextual routing is otherwise strong.

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

get_activity_countsA
Read-onlyIdempotent

Count the current user's activities per day over the last days, e.g. to see when something happened.

Needs Nextcloud 35 (Activity 8). Days are the user's days in their Nextcloud time zone, ending today, while a date passed to get_activity's start and end is a UTC day; to list one of these days, pass start and end as times with the user's UTC offset (e.g. 2026-09-20T00:00:00+02:00 and 2026-09-20T23:59:59+02:00).

Args: activity_filter: Activity filter id (default: "all"); see list_activity_filters. days: Number of days ending today (1-366, default 30). search: Only count activities whose file path contains this text (2-255 characters). actor: Only count activities done by this user ID. object_type: Only count activities about this object; must be used together with object_id, and with activity_filter left at "all". object_id: The object's ID, e.g. a file ID for object_type "files".

Returns: JSON object with "from" and "to" (dates), "counts" (date to count, only days with activity), "total" and "max". "partial_before" is set when Nextcloud stopped counting at its row limit: counts for that date and earlier are missing, so a shorter window gives complete numbers.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNo
actorNo
searchNo
object_idNo
object_typeNo
activity_filterNoall

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare read-only/idempotent/non-destructive, and the description adds substantial context beyond them: a Nextcloud 35 (Activity 8) version requirement, the user-timezone vs UTC-day distinction, and the 'partial_before' row-limit truncation semantics that affect result completeness. It also documents the return shape and how to get complete numbers.

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

Conciseness4/5

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

Front-loaded with purpose, then constraints, then Args, then Returns – a logical structure. The Args block is verbose but justified by the 0% schema coverage; a little tightening is possible but nothing is wasted.

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 six-parameter read tool with truncation risk, it covers purpose, when to use it, version requirements, timezone/precision pitfalls, every parameter's semantics, and the meaning of the returned fields including the partial-result caveat. Nothing an agent needs to call it correctly is missing.

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 0%, so the description carries the full burden and does: it documents all six params including defaults and ranges (days 1-366 default 30, search 2-255 chars), the cross-parameter constraint that object_type requires object_id and activity_filter='all', and the meaning of activity_filter with a pointer to list_activity_filters.

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

Purpose5/5

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

States a specific verb+resource+scope: 'Count the current user's activities per day over the last days'. It also implicitly distinguishes itself from get_activity by noting that get_activity lists one of these days rather than counting them, so an agent can tell the two apart.

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

Usage Guidelines4/5

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

Gives a clear use case ('e.g. to see when something happened'), points to list_activity_filters for valid filter ids, and explains the hand-off to get_activity with concrete start/end values. It stops short of an explicit when-not-to-use rule, so 4 rather than 5.

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

get_app_infoA
Read-onlyIdempotent

Get detailed information about an installed Nextcloud app. Requires admin privileges.

Returns app metadata including name, version, description, and author.

Args: app_id: The app identifier (e.g. "spreed", "mail", "collectives"). Use list_apps to find available app IDs.

Returns: JSON object with app details: id, name, summary, version, author.

ParametersJSON Schema
NameRequiredDescriptionDefault
app_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already mark the operation read-only, idempotent, and non-destructive. The description adds the admin-privilege requirement and specifies the returned metadata fields. 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 front-loaded and well structured with Args/Returns sections. However, the return information is stated twice with slightly different field lists, adding minor redundancy.

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

Completeness4/5

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

For a low-complexity, single-parameter read tool with annotations and an output schema, the description covers permissions, parameter resolution, and return shape. Error behavior for missing or unauthorized apps is not described, but this is a minor gap.

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?

The schema gives app_id no description (0% coverage), but the description compensates by identifying it as an app identifier, providing concrete examples ('spreed', 'mail', 'collectives'), and directing to list_apps for ID resolution. This fully covers the single 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?

States a specific verb and resource ('Get detailed information about an installed Nextcloud app'), names the output domain (app metadata), and notes admin privileges. It also points to list_apps for finding app IDs, which helps distinguish this single-app lookup from sibling app-management 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 states the prerequisite (admin privileges) and directs the agent to use list_apps to discover valid app_id values. It does not enumerate exclusions or alternatives, but the context for when to call this tool is clear.

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

get_circleA
Read-onlyIdempotent

Get full details of a circle including the current user's membership info.

Args: circle_id: String circle id (the hash from list_circles, e.g. "cUXI7OgXkF6u5jWUoE73AtmyjVE2ZRl").

Returns: JSON object with the circle's name, description, config, settings, source, population, creation timestamp, and initiator object describing the current user's membership (id, singleId, level, status, userId).

ParametersJSON Schema
NameRequiredDescriptionDefault
circle_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context by specifying the return shape and the inclusion of an initiator object, but does not go beyond that. No contradictions exist.

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 main purpose is front-loaded in the first sentence, followed by compact Args and Returns sections. The description is appropriately sized for a simple read operation and avoids filler, though the return field list is somewhat detailed.

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 single-parameter, read-only tool, the description is complete: it explains where the ID comes from holistically and what the response contains. With annotations and an output schema also available, nothing critical is missing for an agent to invoke this tool correctly.

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

Parameters5/5

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

Schema description coverage is 0%, so the description carries the full burden for parameter explanation. It does this well by explaining what circle_id is, where to get it, and providing a concrete example. This adds substantial meaning beyond the schema's bare 'Circle Id' title.

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 a specific verb and resource: 'Get full details of a circle.' It also narrows the behavior by including the current user's membership info, which differentiates it from list-only or search circle tools. The purpose is immediately clear and distinct from 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?

The description gives clear context by identifying the exact source of the required parameter: 'the hash from list_circles.' It implies this tool is for retrieving a single circle's full details by ID, though it does not explicitly contrast it with alternatives like search_circles or list_circles.

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

get_collective_pageA
Read-onlyIdempotent

Get a single page from a collective, including its content.

Collectives serves page metadata and page text from two different places, so this reads the page's Markdown file after the metadata call.

Args: collective_id: The numeric collective ID. page_id: The numeric page ID. Use get_collective_pages to find IDs.

Returns: JSON object with page details and "content", the page's Markdown text. An empty page has an empty string. When the file cannot be read, "content" is null and "content_error" says why.

ParametersJSON Schema
NameRequiredDescriptionDefault
page_idYes
collective_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already cover readOnly/idempotent/no-destructive, yet the description adds non-obvious behavior: the two-source architecture, the empty-string vs null content distinction, and the content_error field on read failure. That is genuine failure-mode disclosure beyond structured data.

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

Conciseness4/5

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

Front-loaded with the core action, then supporting architecture note and Args/Returns sections. Every sentence carries information, though the structured sections add slight length for only two parameters.

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

Completeness5/5

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

Despite an output schema existing, the description usefully characterizes content/content_error semantics, and it fully covers the two required params and the read-only nature. Nothing needed to invoke it correctly is missing.

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

Parameters4/5

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

With 0% schema description coverage, the description must compensate: it documents both params as numeric IDs and explains how to obtain page_id. It is only slightly under-specified on collective_id sourcing.

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

Purpose5/5

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

States a specific verb (get) and resource (a single collective page) plus scope ('including its content'), which distinguishes it from list-oriented siblings like get_collective_pages and search_collective_pages. The added note that it reads the Markdown file after metadata makes the operation precise.

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

Usage Guidelines4/5

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

Explicitly routes the agent to get_collective_pages to find page_id, which is real when-to-use guidance tied to a sibling. It does not state exclusions (e.g., when to prefer search_collective_pages), so it falls short of a full when-not treatment.

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

get_collective_pagesA
Read-onlyIdempotent

List pages in a collective.

Returns the page tree including the landing page and all subpages.

Args: collective_id: The numeric collective ID. Use list_collectives to find IDs. limit: Maximum number of pages to return (1-200, default 50). offset: Number of pages to skip for pagination (default 0).

Returns: JSON with "data" (list of pages with id, title, emoji, timestamp, size) and "pagination" (count, offset, limit, has_more). Page text is not included here; read one page with get_collective_page to get it.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo
collective_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, but the description adds important behavioral context: it returns a page tree with landing page and subpages, reports pagination metadata, and explicitly excludes page text. This goes well beyond the annotation data and helps the agent call and interpret the result correctly.

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

Conciseness5/5

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

The description is front-loaded and structured into purpose, Args, and Returns sections. Every sentence adds useful information without repetition or filler.

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

Completeness5/5

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

Given that an output schema exists, the description need not explain return values, yet it helpfully summarizes the return shape, pagination, and the absence of page text. It provides everything needed to call the tool correctly and route to get_collective_page for page content.

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

Parameters5/5

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

Schema description coverage is 0%, so the description fully carries parameter meaning. It explains collective_id as the numeric ID and points to list_collectives, specifies limit as 1-200 with default 50, and describes offset as pages to skip for pagination with default 0.

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 a specific verb+resource: "List pages in a collective." It further clarifies scope by saying it returns the page tree including landing page and all subpages, and it differentiates from get_collective_page by pointing there for page text. This is more precise than a generic list tool.

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

Usage Guidelines4/5

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

It gives clear usage context by naming list_collectives for finding IDs and get_collective_page for reading page text. However, it does not explicitly compare against sibling listing/search tools like search_collective_pages or list_recent_collective_pages, so the when-not guidance is incomplete.

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

get_contactA
Read-onlyIdempotent

Get a single contact by UID.

Args: uid: The contact UID. Use get_contacts to find UIDs. book_id: Address book ID (default "contacts").

Returns: JSON contact object with uid, full_name, name, emails, phones, addresses, organization, title, note, etag.

ParametersJSON Schema
NameRequiredDescriptionDefault
uidYes
book_idNocontacts

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is known. The description adds behavioral value by specifying the return format (JSON contact object) and the fields included (uid, full_name, name, etc.), which the annotations do not cover. This extra context enriches the agent's understanding beyond the structured metadata.

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 concise with a clear structure: a one-sentence summary, then Args and Returns sections. It is front-loaded with the purpose. The only minor inefficiency is repeating the schema's parameter defaults, but overall it 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 low complexity (2 params, 1 required), annotations cover safety, and there is an output schema, the description is largely complete. It explains the key parameter semantics and return shape. The only minor gap is not specifying error behavior (e.g., what happens if UID is invalid), but this is not critical for basic usage.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must compensate for undefined parameters. It does: it explains 'uid' is the contact UID and directs to get_contacts for discovery, and states 'book_id' is the address book ID with a default. This adds crucial meaning that the schema lacks, effectively compensating for the coverage 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 states a specific verb and resource ('Get a single contact by UID') and clarifies the scope (single contact, not a list), distinguishing it from the sibling 'get_contacts'. It also lists the fields returned, leaving no ambiguity about what the tool does.

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

Usage Guidelines4/5

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

It explains when to use this tool (to get a single contact) and explicitly mentions how to find UIDs via 'get_contacts', effectively routing to the correct sibling. However, it does not explicitly state when NOT to use it, but the contrast with get_contacts is clear enough.

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

get_contactsA
Read-onlyIdempotent

Get contacts from an address book.

Args: book_id: Address book ID (default "contacts"). Use list_addressbooks to find IDs. limit: Maximum number of contacts to return (1-500, default 50). offset: Number of contacts to skip for pagination (default 0).

Returns: JSON with "data" (list of contact objects with uid, full_name, name, emails, phones, addresses, organization, title, note) and "pagination" (count, offset, limit, has_more).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo
book_idNocontacts

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

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

Annotations already cover the read-only, idempotent, non-destructive profile. The description adds useful behavioral detail on top: pagination semantics (offset, limit, has_more) and the exact shape of returned contact objects. This exceeds annotation coverage without contradicting it.

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

Conciseness5/5

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

The description is structured as a docstring with a one-line summary followed by Args and Returns sections. There is no filler, every clause carries information, and the purpose is front-loaded in the first sentence.

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 read-only list operation with an output schema present, the description is complete: it explains all three parameters with defaults, describes the return payload in detail, and notes how to discover valid book IDs. No critical information is missing for an agent to call it successfully.

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

Parameters5/5

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

Schema description coverage is 0%, but the description fully compensates. Each parameter is explained with defaults and constraints: book_id (with pointer to list_addressbooks), limit (1-500, default 50), offset (pagination behavior, default 0). This is exactly what the schema lacks.

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

Purpose4/5

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

The description states a clear verb+resource combination: 'Get contacts from an address book.' The return shape and pagination fields make it unambiguous that this is a list operation. However, it doesn't explicitly differentiate from the sibling get_contact (singular), relying on the tool name to signal the distinction.

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

Usage Guidelines2/5

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

There is no guidance on when to choose this tool over alternatives. The only sibling reference is 'Use list_addressbooks to find IDs,' which is a prerequisite for a parameter, not a tool-selection rule. No mention of get_contact for single-contact lookups or other alternative approaches.

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

get_conversationA
Read-onlyIdempotent

Get details about a specific Talk conversation.

Args: token: The conversation token (short alphanumeric ID, e.g. "abc12xyz"). Use list_conversations to find tokens.

Returns: JSON object with conversation details.

ParametersJSON Schema
NameRequiredDescriptionDefault
tokenYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds only that a JSON object is returned and the token format; it does not describe additional behavioral details such as invalid-token handling or relationship to message data, but nothing contradicts 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 opening sentence states the purpose, then Args and Returns sections are minimal and well organized. Every sentence earns its place; there is no redundant or missing structural 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 single-parameter read-only lookup with an output schema and strong annotations, the description is complete: it explains the parameter format, how to obtain it, and what the call returns. No additional context is necessary for an agent to invoke this tool correctly.

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?

The schema provides only the type 'string', but the description defines token as a conversation token, notes the short alphanumeric format with an example, and explains how to discover valid tokens via list_conversations. This fully compensates for the 0% schema description 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?

States a specific verb ('Get') and resource ('a specific Talk conversation'), making the target clear. It also references the sibling list_conversations for finding tokens, helping distinguish this lookup tool from list-style and message-level siblings.

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

Usage Guidelines4/5

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

Gives clear usage context: call this with a conversation token to retrieve details about one conversation. It explicitly directs users to list_conversations to obtain tokens, though it does not contrast itself with get_messages or get_participants.

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

get_cospend_billA
Read-onlyIdempotent

Get a single Cospend bill (expense) by id. Requires VIEWER access.

Args: project_id: String project id. bill_id: Integer bill id.

Returns: JSON bill object: id, what (description), amount, payer_id, owers (list of member dicts who share the cost), owerIds (id list), date (YYYY-MM-DD), timestamp (Unix seconds), comment, categoryid, paymentmodeid, repeat ("n"=none, "d"=daily, "w"=weekly, "b"=biweekly, "s"=semi-monthly, "m"=monthly, "y"=yearly), repeatfreq, repeatallactive, repeatuntil, deleted (0=live, 1=in trash), lastchanged.

ParametersJSON Schema
NameRequiredDescriptionDefault
bill_idYes
project_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already state readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the description doesn't need to repeat that. But it adds value by specifying the VIEWER access requirement, which is a behavioral nuance not in annotations. It also explains the 'deleted' field and return format, which is 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 structured with clear Args and Returns sections, but is somewhat verbose in listing all return fields. The core purpose is front-loaded, and the parameter details are concise. The return field enumeration is necessary given no output schema, but could be more compact.

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 it's a simple read tool with only 2 parameters and no output schema, the description provides full context: what it returns (and meaning of each field), required access, and parameter semantics. Nothing needed for correct invocation is missing.

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

Parameters4/5

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

Schema coverage is 0%, so the description must fully explain both parameters. It does: project_id as String project id, bill_id as Integer bill id. This is sufficient for the agent to use them correctly, though it lacks further detail like format or constraints, but for a read operation it's adequate.

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 retrieves a single Cospend bill by ID, distinguishing it from list_cospend_bills and other bill operations like delete_cospend_bill. It even notes the required VIEWER access, adding precision.

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

Usage Guidelines4/5

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

It clearly indicates when to use: to fetch a single bill by IDs. It doesn't explicitly mention alternatives, but the sibling context makes it obvious that for listing many bills, one would use list_cospend_bills. The note about VIEWER access is useful.

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

get_cospend_projectA
Read-onlyIdempotent

Get full info for a single Cospend project (members, balance, shares, …).

Requires VIEWER access on the project.

Args: project_id: String project id (slug).

Returns: JSON object with the same shape as one entry from list_cospend_projects. Use members for member ids/names and balance for the per-member balance map.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already carry readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the safety profile is covered. The description adds genuine context beyond those annotations: the VIEWER access/permission requirement and the fact that the response mirrors a list entry plus the member/balance field semantics. This is meaningful additive behavior disclosure with no contradiction.

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

Conciseness5/5

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

Four tight blocks with no filler: purpose, access precondition, parameter definition, and return guidance. The most important information (what it does) is front-loaded, and the Args/Returns layout is scannable. Every sentence earns its place.

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

Completeness4/5

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

For a single-parameter read-only tool with an output schema and full safety annotations, the description covers the essentials: purpose, permission requirement, parameter format, and how to interpret key return fields. Minor gaps are unaddressed error cases (e.g., behavior when the project id is invalid or access is denied), but nothing an agent needs to invoke it correctly is missing.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must compensate. It does: 'project_id: String project id (slug)' clarifies the expected format beyond the bare schema title 'Project Id'. The Returns section also adds semantic guidance on consuming the output ('Use members for member ids/names and balance for the per-member balance map'), which teaches correct parameter/output usage.

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

Purpose5/5

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

States a specific verb+resource: 'Get full info for a single Cospend project (members, balance, shares, …)'. The parenthetical enumerates the concrete payload, and the 'single' qualifier plus the phrase 'same shape as one entry from list_cospend_projects' clearly separates it from the sibling listing tool and from the statistics/settlement variants.

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?

Provides a useful precondition ('Requires VIEWER access on the project') and implies it is the single-item counterpart to list_cospend_projects via the return-shape note. However, it never explicitly states when to prefer this over get_cospend_project_statistics or get_cospend_project_settlement, nor gives any 'when not to use' guidance. Usage is implied, not spelled out.

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

get_cospend_project_settlementA
Read-onlyIdempotent

Suggested reimbursement transactions to settle a Cospend project.

Requires VIEWER access.

Args: project_id: String project id. centered_on: Member id to center the plan on. All suggested transactions will involve this member (e.g. "everyone pays Alice"). max_timestamp: Settle up to this date (Unix seconds). Member balances will be zero at this date and bills after it are ignored.

Returns: JSON object with transactions (list of {from, to, amount} — from/to are member ids) and balances (map of member-id → current balance).

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idYes
centered_onNo
max_timestampNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

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

Beyond the readOnly/idempotent/destructiveFalse annotations, the description discloses meaningful behavior: centered_on restricts all suggested transactions to involve that member, and max_timestamp causes member balances to be zero at that date while ignoring later bills. This gives the agent a realistic model of the computation's semantics.

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

Conciseness5/5

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

The description is compact and well-structured with an Args/Returns layout. The first sentence states the core purpose, and every subsequent sentence adds parameter or return-value detail without fluff. It is appropriately sized for a three-parameter read-only tool.

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

Completeness5/5

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

The description covers access requirements, all parameters, and the return shape including the structure of transactions and balances. Since an output schema is present and the return format is also explained, an agent has everything needed to select and invoke this tool correctly.

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

Parameters5/5

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

Schema description coverage is 0%, so the description carries the full burden of parameter documentation. It explains all three parameters: project_id as the project identifier, centered_on as the focal member whose involvement is guaranteed, and max_timestamp with its Unix-seconds format and cutoff behavior.

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

Purpose5/5

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

The description opens with a specific verb-plus-resource statement: 'Suggested reimbursement transactions to settle a Cospend project.' This clearly conveys what the tool computes and distinguishes it from sibling tools like get_cospend_project_statistics or list_cospend_bills, which serve different purposes.

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 clearly frames when to use the tool: when settlement suggestions are needed for a Cospend project, and it explicitly states the required access level ('Requires VIEWER access'). It does not enumerate alternatives or exclusions, but no sibling tool covers settlement, so the context is clear enough.

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

get_cospend_project_statisticsA
Read-onlyIdempotent

Per-member spending statistics for a Cospend project.

Requires VIEWER access. All filters are optional and AND-combined.

Args: project_id: String project id. ts_min: Only include bills with timestamp >= ts_min (Unix seconds). ts_max: Only include bills with timestamp <= ts_max. payment_mode_id: Filter by payment mode. category_id: Filter by category. amount_min: Only include bills with amount >= amount_min. amount_max: Only include bills with amount <= amount_max. currency_id: Convert/filter by currency id. payer_id: Only include bills paid by this member. show_disabled: Include disabled members in the output.

Returns: JSON object with stats (list of {member, balance, paid, spent, filtered_balance}), plus aggregates such as memberMonthlyStats / categoryStats depending on filters.

ParametersJSON Schema
NameRequiredDescriptionDefault
ts_maxNo
ts_minNo
payer_idNo
amount_maxNo
amount_minNo
project_idYes
category_idNo
currency_idNo
show_disabledNo
payment_mode_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

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

The description clarifies that disabled members are excluded by default (show_disabled parameter) and that results vary by filters ('depending on filters'), which adds context beyond the annotations. However, the annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is already carried by structured data. The description moderately supplements it but does not go deep into optional aggregation behavior or performance implications.

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

Conciseness5/5

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

The description is compact and front-loaded: the core purpose and permission requirement come first, followed by parameter definitions in a list, then the return shape. Every sentence earns its place; no filler exists.

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

Completeness4/5

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

The tool is complex (10 parameters), but the description covers purpose, permission, all parameter semantics, and the return shape. It relies on the output schema for full return description, which is appropriate. The minor ambiguity about currency_id behavior and some deep aggregation details are the only gaps preventing a 5.

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 10 parameters with 0% description coverage, so the description must compensate. It defines each parameter's meaning and filtering semantics clearly: for example, ts_min means 'Only include bills with timestamp >= ts_min (Unix seconds)', amount_max means 'Only include bills with amount <= amount_max', and currency_id means 'Convert/filter by currency id'. It falls slightly short on explaining the exact effect of currency conversion versus filtering (the wording is ambiguous) and doesn't describe the semantics of stats fields in the description, hence a 4 rather than 5.

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 a specific verb and resource: it computes per-member spending statistics for a Cospend project. The phrase 'Per-member spending statistics' clearly differentiates it from sibling tools like list_cospend_bills, get_cospend_project, and get_cospend_project_settlement, so an agent can select it without opening other schemas.

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

Usage Guidelines4/5

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

The description states the access requirement (VIEWER access) and that all filters are optional and AND-combined, which tells the agent when it is safe to call. It does not explicitly name alternative tools for cases where the agent wants raw bills or a settlement summary, so it is not quite a 5.

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

get_current_userA
Read-onlyIdempotent

Get information about the currently authenticated Nextcloud user.

Returns: JSON with user details: id, displayname, email, quota, groups, etc.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

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, so the safety profile is covered. The description adds value by specifying that the operation returns user details like id, displayname, email, quota, and groups, which is useful context beyond the annotations. No contradiction exists.

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 short sentences with no wasted words. The core purpose is front-loaded, and the return-value summary is compact and useful.

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 no-parameter, read-only tool with an output schema present, the description provides exactly the necessary information: what it operates on, what it returns, and no side effects. Nothing essential is missing.

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

Parameters4/5

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

The tool has zero parameters, so the baseline is 4. The description appropriately mentions nothing about parameters since there are none. Schema coverage is trivially 100%, and no parameter clarification is 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?

The description clearly states a specific verb ('Get information') and resource ('currently authenticated Nextcloud user'), and the phrase 'currently authenticated' distinguishes it from sibling tools like get_user and list_users. The intent is unambiguous and an agent can select it correctly without inspecting the schema.

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

Usage Guidelines4/5

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

The description clearly implies the tool is for retrieving details about the caller's own account, which is sufficient given zero parameters. It does not explicitly mention alternatives or exclusions, but for such a self-contained tool the context is clear enough to avoid misuse.

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

get_eventA
Read-onlyIdempotent

Get full details of a specific calendar event by its UID.

Args: calendar_id: Calendar identifier (e.g. "personal"). event_uid: The event's UID. Use get_events to find UIDs.

Returns: JSON object with full event details: uid, summary, dtstart, dtend, description, location, status, all_day, etag, and optionally rrule, categories.

ParametersJSON Schema
NameRequiredDescriptionDefault
event_uidYes
calendar_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is fully covered. The description adds the output field list and the fact that details are returned as JSON, which is useful but does not disclose edge-case behavior such as not-found handling.

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 one-line purpose statement is followed by compact Args and Returns sections with no redundant prose. Every line earns its place and the key lookup-by-UID behavior is front-loaded.

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

Completeness5/5

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

The tool is simple, has only two required parameters, an output schema, and safety annotations. The description covers prerequisites, parameter semantics, and the expected return structure, leaving no essential gap for an agent to call it correctly.

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

Parameters5/5

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

Schema description coverage is 0%, but the description fully compensates by defining calendar_id with an example and event_uid with guidance on how to obtain UIDs via get_events. Both parameters are given meaning beyond their raw types.

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 a clear verb and resource ('Get full details of a specific calendar event by its UID'). It distinguishes itself from the sibling list tool get_events by specifying a single event looked up by UID.

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 tells the agent to use get_events to find UIDs, establishing the prerequisite workflow. It does not formally list when not to use it, but for a simple retrieval-by-ID tool the context is clear and no misleading alternatives are suggested.

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

get_eventsA
Read-onlyIdempotent

Get events from a calendar, optionally filtered by time range.

Without start/end, returns all events in the calendar. With start and end, returns only events overlapping that range (including recurring event instances).

Args: calendar_id: Calendar identifier (default "personal"). Use list_calendars to find IDs. start: Optional range start in ISO 8601 UTC format: "2026-04-01T00:00:00Z". Required if end is provided. end: Optional range end in ISO 8601 UTC format: "2026-04-30T23:59:59Z". Required if start is provided. limit: Maximum number of events to return (1-500, default 50). offset: Number of events to skip for pagination (default 0).

Returns: JSON with "data" (list of event objects) and "pagination" (count, offset, limit, has_more).

ParametersJSON Schema
NameRequiredDescriptionDefault
endNo
limitNo
startNo
offsetNo
calendar_idNopersonal

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and idempotentHint, so the safety profile is covered. The description adds meaningful context: the overlapping time-range semantics, inclusion of recurring event instances, and the pagination response structure, which go beyond the annotation hints.

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 well-structured with a one-sentence purpose, clear behavior notes, bullet-style args, and a return format section. Every sentence adds value with no redundancy or filler.

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

Completeness5/5

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

Given the five parameters Thorough documentation, an output schema existence, and the read-only nature already flagged by annotations, the description is sufficient for an agent to invoke the tool correctly. It covers parameter formats, defaults, requiredness dependencies, and response structure.

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

Parameters5/5

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

Schema description coverage is 0%, so the description must fully explain parameters, and it does. It specifies ISO 8601 format for start/end, the dependency between them, valid limit range (1-500), default values, and how to discover calendar_id via list_calendars.

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 retrieves events from a calendar with optional time filtering. It uses a specific verb and resource, and the plural 'events' distinguishes it from the sibling get_event tool, though it does not explicitly call out that sibling.

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 explains the behavior with and without start/end parameters, giving implicit usage context. It mentions using list_calendars to find calendar IDs, but it does not explicitly say when to prefer this tool over alternatives such as get_event or list_calendars.

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

get_fileA
Read-onlyIdempotent

Read a file's content from Nextcloud.

Text files are returned as text. Image files (PNG, JPEG, GIF, WebP) are returned as viewable images. Other binary files return metadata.

Args: path: File path relative to user's root. Example: "Documents/notes.md"

Returns: File content as text, an image, or metadata for unsupported binary files.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, and the description adds concrete behavior beyond that: text files are returned as text, image files as viewable images, and other binary files as metadata. It also clarifies the path convention, giving the agent the operational detail it needs to use the tool correctly.

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

Conciseness5/5

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

The description is front-loaded with the purpose, then uses compact Args/Returns sections to add necessary detail. No sentence is redundant, and the file-type behavior is useful rather than padding.

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 single-parameter read tool with safety annotations and an output schema, the description is complete: it explains path semantics, return types per category, and the unsupported-binary fallback. Minor omissions like error cases or permission requirements are acceptable here because this is a simple read-only operation and the annotations already convey the safety profile.

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 0%, so the description must carry parameter meaning, and it does: 'path: File path relative to user's root. Example: "Documents/notes.md"'. This fully explains the single required parameter, including path convention and a concrete example.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Read a file's content from Nextcloud.' It further clarifies behavior by file type (text, image, binary metadata), which distinguishes it from sibling tools like list_directory, search_files, upload_file, and copy_file. This is enough for an agent to know exactly what get_file retrieves.

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

Usage Guidelines4/5

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

It clearly establishes the use case — reading a file's content by path relative to the user's root — but it does not explicitly name alternatives or list exclusions such as 'use list_directory to browse files.' The context is clear, but the when-not-to-use guidance is implied rather than explicit.

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

get_file_reminderA
Read-onlyIdempotent

Get the reminder set on a specific file.

Returns the due date as an ISO 8601 timestamp, or null if no reminder is set for the file. Also returns null when the file does not exist — the Nextcloud API does not distinguish the two cases, so this tool cannot be used to check file existence.

Args: file_id: Numeric Nextcloud file id. Get this from list_directory, search_files, or any tool that returns file metadata.

Returns: JSON object with file_id and due_date. due_date is null when no reminder is set.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already mark the tool read-only/idempotent, and the description adds crucial ambiguity disclosure: null means either no reminder or nonexistent file, so the tool cannot serve as an existence check. It also specifies the exact return shape (file_id and due_date) and null behavior for due_date.

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 tightly organized with a one-line summary, Args section, and Returns section, and every sentence adds information. The critical ambiguous-null caveat is front-loaded after the summary rather than buried.

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 single-parameter read tool, the description covers purpose, parameter provenance, return semantics, and edge-case behavior. The output schema and annotations cover safety, and nothing an agent needs to invoke it correctly is missing.

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

Parameters5/5

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

The schema only declares file_id as an integer with no description (0% coverage), so the description carries the burden. It explains that file_id is a numeric Nextcloud file id and tells the agent exactly where to source it—list_directory, search_files, or file metadata. This fully compensates for the bare 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 opens with 'Get the reminder set on a specific file,' naming a specific verb and resource. It clearly distinguishes itself from sibling mutators set_file_reminder and remove_file_reminder by focusing on retrieval.

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 states when to use it: to retrieve a file's reminder due date, and gives an explicit exclusion—it cannot be used to check file existence because nonexistent files also return null. It also directs the agent to obtain file_id from list_directory or search_files. It does not explicitly contrast with set_file_reminder/remove_file_reminder, but the retrieval-vs-mutation distinction is clear.

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

get_file_tagsA
Read-onlyIdempotent

Get all system tags assigned to a file.

Use list_directory to find a file's numeric ID (file_id field).

Args: file_id: The numeric file ID.

Returns: JSON list of tags assigned to this file.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds useful behavioral context by specifying that it returns all system tags and that the return value is a JSON list, clarifying scope and expected output.

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

Conciseness5/5

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

The description is compact and well-organized: a one-sentence purpose, a usage hint, an Args section, and a Returns section. Every sentence serves a clear purpose and there is no redundant filler.

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

Completeness5/5

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

For a single-parameter read-only tool with an output schema, the description provides everything needed to call it: the purpose, how to obtain the required ID, and what the response will be. Missing details like error behavior or empty-list handling are not essential given the tool's simplicity.

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?

The schema provides only the parameter name and type (integer), with 0% description coverage. The description compensates fully by explaining that file_id is the numeric file ID and telling the caller how to find it ('Use list_directory to find a file's numeric ID (file_id field)').

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 ('Get all system tags assigned to a file') with a specific verb and resource. It is distinguishable from sibling tag tools like list_tags, assign_tag, and unassign_tag because it focuses on retrieving already-assigned system tags for a specific file.

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 gives explicit practical guidance on how to obtain the required file_id by using list_directory and checking the file_id field. It does not explicitly discuss alternatives or when not to use the tool, but for a simple getter this prerequisite guidance is sufficient context.

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

get_flow_optionsA
Read-onlyIdempotent

List what a Flow rule can be built from in a scope: operations, entities, events and checks.

Read this before create_flow: the available operations depend on the installed apps (Talk's "Write to conversation", for one, or core's "Block file versioning" for global flows), and some only exist in one scope.

Args: scope: "user" or "global" (admin only).

Returns: JSON with "operations" (class, name, description, entity: the entity the operation is bound to or null, events_fixed: true when the operation decides its own events and create_flow takes none, trigger), "entities" (class, name, events with event and name) and "checks" (class, entities it applies to, empty meaning any; for the checks Nextcloud ships also operators and a value description).

ParametersJSON Schema
NameRequiredDescriptionDefault
scopeNouser

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already cover the safety profile (read-only, idempotent, non-destructive), yet the description adds real behavioural context: the operation catalogue depends on installed apps, some operations exist in only one scope, and 'global' requires admin. It does not discuss pagination or caching, but with annotations present that is not required.

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

Conciseness4/5

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

Front-loaded purpose sentence, then rationale, then structured Args/Returns blocks. The Returns block is lengthy and partly overlaps the output schema, but the field-level semantics it supplies (e.g. events_fixed meaning create_flow takes no events, checks with empty entities meaning 'any') are not derivable from the schema alone.

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 complex discovery tool that gates create_flow, the description covers scope semantics, admin restriction, app-dependency variability, and the shape of each returned category. Combined with the existing output schema, an agent has everything needed to call it and interpret results.

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

Parameters4/5

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

Schema description coverage is 0% and the only parameter has no description in the schema, so the description must compensate — and it does, defining scope as 'user' or 'global' plus the admin-only constraint. It omits the default value ('user' appears only in the schema), keeping it just short of 5.

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

Purpose5/5

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

States a specific verb (List) plus the exact resource (what a Flow rule can be built from) and enumerates the four categories returned: operations, entities, events and checks. This clearly separates it from list_flows and create_flow / update_flow in the sibling set.

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 the agent to read it before calling create_flow, and explains why the result varies (installed apps, scope). It does not name when NOT to use it or explicitly relate it to list_flows, so it stops short of a full routing statement.

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

get_formA
Read-onlyIdempotent

Get a form's full definition including questions, options, and shares.

Args: form_id: Numeric form id from list_forms.

Returns: JSON object with the full form: title, description, access, expires, isAnonymous, submitMultiple, state, maxSubmissions, questions (each with options, type, isRequired, etc.), shares, and submissionCount. Does NOT include submission answers — use list_submissions for those.

ParametersJSON Schema
NameRequiredDescriptionDefault
form_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

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 easons. The description adds meaningful behavioral detail by listing the exact return fields and explicitly warning that submission answers are excluded. This goes beyond the annotations while remaining consistent with 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?

The description is front-loaded with the core action and purpose, then provides compact Args and Returns sections. Every sentence earns its place, including the useful 'Does NOT include submission answers' exclusion. There is no fluff or repetition.

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 read-only, single-parameter tool with output schema presentaine, this is complete: it specifies the parameter source, the return shape, and the key negative case. The agent has enough information to select and invoke this tool correctly without consulting siblings or guessing.

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

Parameters4/5

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

The input schema has 0% description coverage on form_id, so the description must compensate. It does: 'form_id: Numeric form id from list_forms' adds the critical provenance detail that the ID should come from list_forms fruition. It also confirms the numeric type, which aligns with the schema's integer type. This is sufficient for a single required 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 uses a specific verb and resource: 'Get a form's full definition including questions, options, and shares.' It also differentiates itself from related tools by explicitly stating it does NOT include submission answers and pointing to list_submissions. This makes the tool's scope and unique purpose clear.

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 gives clear context: use this when you need the full form definition, including questions, options, shares, and submission count. It explicitly excludes submission answers and routes the agent to list_submissions for those. It does not distinguish from list_forms or get_question, but the 'full definition' scope and the form_id source from list_forms provide adequate guidance.

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

get_mail_messageA
Read-onlyIdempotent

Get a full email message including its body.

Retrieves the complete message with body text, message ID, tags, and attachment metadata.

Args: message_id: The message database ID. Use list_mail_messages to find it.

Returns: JSON object with: id, subject, date, from, to, cc, bcc, message_id, body, flags, tags (display_name and imap_label, if any), and attachments list (if any).

ParametersJSON Schema
NameRequiredDescriptionDefault
message_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

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

The annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds context about what the complete message includes, but it does not disclose potential failure modes, permission requirements, or body-size limitations, which would add meaningful behavioral transparency 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.

Conciseness3/5

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

The description is organized clearly into summary, Args, and Returns sectionsaisfront-loaded with the core action and avoids bloat. Some redundancy exists between the opening sentence and the second paragraph, both stating that the complete message is retrieved, which costs a point.

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

Completeness4/5

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

Given the single required integer parameter, the presence of an output schema, and strong safety annotations, the description provides enough information for an agent to invoke the tool correctly. It specifies how to find the ID and what the response includes; missing error-handling details are a minor gap for a simple read operation.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must compensate for the undocumented message_id parameter. It does so effectively by clarifying that the parameter is the message database ID, not the email Message-ID header, and by specifying exactly how to obtain it via list_mail_messages.

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 a specific action ('Get a full email message including its body') and enumerates the returned components: body text, ID, tags, and attachment metadata. It does not explicitly distinguish itself from the closely named sibling get_messages beyond the singular focus and the reference to list_mail_messages, so it stops just short of a 5.

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

Usage Guidelines3/5

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

The description gives practical context by directing the agent to use list_mail_messages to find message_id, which is useful routing guidance for parameter acquisition. However, it does not state when to choose this tool over alternatives like get_messages, send_mail, or move_mail_message, nor does it mention any exclusions.

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

get_message_contextA
Read-onlyIdempotent

Get the messages around one message, e.g. to read the discussion a search result or mention is in.

Reading context leaves the read marker and notifications as they are.

Args: token: The conversation token. message_id: The message to center on. limit: How many messages to fetch before and after it (1-100, default 20). thread_id: Only messages of this thread (default 0 = the whole conversation). include_system: Also show system messages such as joins and edits (default false).

Returns: One line per message, oldest first, in the same "[id] author: text" form as get_messages; the requested message's line is marked with ">>".

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
tokenYes
thread_idNo
message_idYes
include_systemNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

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

Adds genuinely useful behavior beyond the annotations: reading context leaves the read marker and notifications unchanged. This is impactful for an agent deciding whether calling it has side effects. It aligns with readOnlyHint/idempotentHint rather than 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?

Front-loaded purpose sentence, then a short behavioral note, then Args and Returns blocks. Given 0% schema coverage the parameter list is necessary, and every line earns its place with no redundant prose.

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 an output schema existing, the description usefully previews the return shape (one line per message, oldest first, '[id] author: text' format, '>>' marking the target). Combined with the 5-parameter documentation, an agent has everything needed to call and interpret it.

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

Parameters5/5

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

Schema description coverage is 0%, so the description carries the full load, and it does: it explains limit's 1-100 range and default 20, thread_id's default 0 meaning the whole conversation, and include_system's default false with example system events. This fully compensates for the empty schema.

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

Purpose5/5

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

States a specific verb ('Get') and resource ('the messages around one message') with a concrete scenario ('read the discussion a search result or mention is in'). This windowed-context scope is clearly distinguishable from the sibling get_messages, which lists messages wholesale.

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

Usage Guidelines4/5

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

Gives a clear triggering scenario (reading the discussion around a search result or mention) that tells the agent when this tool is appropriate. It does not explicitly name get_messages as the alternative or state when not to use it, so it stops short of full routing guidance.

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

get_messagesA
Read-onlyIdempotent

Get chat messages from a Talk conversation.

Returns messages in reverse chronological order (newest first). Uses a compact format: "[id] author: message text" - one line per message. Messages inside a thread are marked after the author: the thread's first message as '[id] author [thread ""]: text', the rest of the thread as "[id] author [thread ]: text".

IMPORTANT: Start with a small limit (20-50). If you need more context, use before_message_id with the oldest message ID from the previous call to paginate backwards through the history.

Args: token: The conversation token. Use list_conversations to find tokens. limit: Maximum number of messages to return (1-200, default: 50). Start small to avoid exceeding response size limits. before_message_id: Fetch messages older than this message ID (for pagination). Use the smallest message ID from a previous call. Default 0 means start from the newest message. include_system: Include system messages like "User joined", "Conversation created" (default: false - only chat messages). thread_id: Only return messages of this thread (default 0 = all messages, including thread messages). Use list_threads to find thread IDs.

Returns: Compact text with one message per line: "[id] author: message". The last line shows pagination info if more messages may exist. Empty when nothing matches, for example when there is nothing older than before_message_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
tokenYes
thread_idNo
include_systemNo
before_message_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false. The description adds substantial behavioral context beyond that: newest-first ordering, thread marking syntax, compact one-line-per-message formatting, pagination info on the last line, and empty results when nothing matches before_message_id.

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

Conciseness5/5

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

The description is long but every section earns its place: purpose and ordering up front, an important pagination warning, parameter details, and return format. The structure with Args and Returns makes it scannable despite the detail.

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 read-only message retrieval tool with rich annotations and an output schema, the description covers ordering, formatting, pagination, system messages, thread filtering, and empty-result behavior. Nothing critical is missing for an agent to invoke it correctly.

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

Parameters5/5

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

Schema description coverage is 0%, but the description fully compensates by explaining every parameter: token requires list_conversations to discover, limit has range and usage strategy, before_message_id defines 'smallest message ID' pagination, include_system gives examples, and thread_id clarifies default 0 means all messages including thread messages.

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 a specific verb and resource: 'Get chat messages from a Talk conversation.' It goes beyond a vague label by describing the compact output format and reverse chronological order, making it clearly distinct from siblings like get_conversation, list_conversations, and get_thread.

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 gives clear operational guidance: start with a small limit, paginate with before_message_id, use list_conversations to find tokens, and use list_threads for thread IDs. It does not explicitly contrast with alternative message-related tools like get_conversation or send_message, but the context for reading messages is strong.

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

get_participantsA
Read-onlyIdempotent

List participants in a Talk conversation.

Args: token: The conversation token. Use list_conversations to find tokens. limit: Maximum number of participants to return (1-200, default 50). offset: Number of participants to skip for pagination (default 0).

Returns: JSON with "data" (list of participant objects with attendee_id, actor_id, display_name, participant_type, in_call) and "pagination" (count, offset, limit, has_more).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
tokenYes
offsetNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the agent knows this is a safe read operation. The description adds value by detailing the exact response shape, including the data fields (attendee_id, actor_id, display_name, participant_type, in_call) and pagination object, which goes beyond what the 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?

The description is well-structured with clear Args and Returns sections, and every line provides necessary information. There is no redundant prose or filler; the parameter docs and return contract are compact and immediately useful.

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-only paginated list endpoint with one required parameter, the description is complete. It covers token acquisition, pagination parameters, and the response structure, so the agent can invoke the tool correctly without additional inference. The annotations cover the safety profile, and the output schema covers detailed return validation.

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

Parameters5/5

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

Schema description coverage is 0%, so the description carries full responsibility for parameter meaning. It explains token (with guidance to use list_conversations), limit (with range 1-200 and default 50), and offset (with pagination purpose and default 0). This fully compensates for the bare input schema and gives an agent everything needed to use parameters correctly.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'List participants in a Talk conversation.' This clearly distinguishes it from sibling tools like get_conversation, get_messages, and list_conversations, which operate on different resources or actions. An agent can confidently select this tool for retrieving participant 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?

The description gives useful context by telling the agent to use list_conversations to find tokens, which addresses a common prerequisite. However, it does not explicitly state when to prefer this tool over alternatives or when not to use it. Usage is implied by the purpose rather than explicitly contrasted with sibling tools.

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

get_pollA
Read-onlyIdempotent

Get a poll from a Talk conversation.

Returns poll details including question, options, current votes (if visible), and which options the current user voted for.

Vote visibility depends on the poll's result_mode:

  • "public": votes are visible after you vote.

  • "hidden": votes are only visible after the poll is closed.

Args: token: The conversation token. Use list_conversations to find tokens. poll_id: The poll ID. Poll IDs appear in chat messages when a poll is created.

Returns: JSON object with poll details: id, question, options, status, result_mode, max_votes, votes, num_voters, voted_self.

ParametersJSON Schema
NameRequiredDescriptionDefault
tokenYes
poll_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

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

The annotations already establish readOnly, idempotent, and non-destructive behavior. The description adds non-obvious behavioral context beyond those annotations by explaining how vote visibility depends on result_mode, distinguishing public and hidden modes.

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 well-structured with Args and Returns sections, front-loads the purpose, and avoids fluff. The opening return summary and the detailed return list are slightly redundant, but both serve to orient and specify precisely.

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 two-parameter read-only getter, the description is complete: it explains both parameters, describes the response fields, and covers the result_mode visibility behavior. The output schema further covers the return shape, so nothing essential is missing.

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?

The input schema provides no descriptions, but the description fully compensates by explaining both parameters: token is the conversation token obtainable via list_conversations, and poll_id is found in chat messages when the poll is created. This adds meaning the schema alone lacks.

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

Purpose5/5

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

The description opens with a specific verb-resource pair ('Get a poll from a Talk conversation') and then details what the returned poll details include. This clearly differentiates it from sibling poll operations like create_poll, vote_poll, and close_poll.

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

Usage Guidelines4/5

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

It gives concrete guidance for both parameters: use list_conversations to find the token, and poll IDs appear in chat messages. It lacks an explicit when-not-to-use statement or named alternative, but the read-only context and provenance guidance are sufficient for an agent to know when to call it.

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

get_questionA
Read-onlyIdempotent

Get a single question including its options.

Args: form_id: Numeric form id. question_id: Numeric question id.

Returns: JSON object with the question's full definition.

ParametersJSON Schema
NameRequiredDescriptionDefault
form_idYes
question_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnly and idempotent. The description adds that the response includes options and the full definition, providing useful 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?

Concise and well-structured with a clear header, args, and returns sections. No superfluous text.

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 a simple get operation with two parameters and an output schema, the description is complete. It states the return type and scope.

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 0%, so the description's parameter explanations are essential. It clarifies that form_id and question_id are numeric identifiers, giving semantic meaning beyond the integer type.

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

Purpose5/5

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

States a specific verb (get) and resource (single question) and notes that options are included. Clearly distinct from list_questions which lists multiple questions.

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?

Does not explicitly state when to use this vs alternatives like list_questions. It implies usage when a single question is needed, but 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.

get_reactionsA
Read-onlyIdempotent

List who reacted to a message, and with what.

Args: token: The conversation token. message_id: The message ID. reaction: Only this reaction, e.g. "👍" (default: all).

Returns: JSON object mapping each reaction to the display names of who used it.

ParametersJSON Schema
NameRequiredDescriptionDefault
tokenYes
reactionNo
message_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so the safety profile is fully covered. The description adds that the return is a JSON map of reaction to display names and gives an example reaction, but does not disclose pagination, result limits, or auth requirements beyond the token. Moderate added value against an already-strong annotation set.

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

Conciseness4/5

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

Front-loaded purpose sentence followed by clearly sectioned Args and Returns blocks. Sized appropriately with no filler. The Args/Returns blocks partly duplicate the input and output schemas, a minor redundancy.

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

Completeness4/5

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

For a simple read tool with annotations covering safety and an output schema covering return values, the description supplies the missing parameter semantics and a return summary. It is complete enough to invoke correctly, with only pagination/scope edge cases left unaddressed.

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

Parameters4/5

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

Schema description coverage is 0%, so the description carries the full burden. It documents all three parameters and adds genuine meaning for 'reaction' via an example emoji and the default-all behavior. The token and message_id entries are thinner, largely restating names, keeping it from a 5.

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

Purpose4/5

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

The description states a specific verb and resource: 'List who reacted to a message, and with what.' An agent can immediately tell this is a read operation over a message's reactions. It does not explicitly differentiate itself from siblings like add_reaction or remove_reaction, so it earns a 4 rather than a 5.

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

Usage Guidelines3/5

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

Usage is implied by the purpose and the read-only nature of the operation, but there is no explicit guidance about when to reach for this tool versus add_reaction/remove_reaction or other message-context tools. The 'default: all' note for the reaction filter is the only usage-adjacent hint, leaving real routing to inference.

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

get_shareA
Read-onlyIdempotent

Get details of a specific share by its ID.

Args: share_id: The numeric share ID.

Returns: JSON object with share details: id, share_type, path, permissions, share_with, url (for link shares), expiration, note, label, etc.

ParametersJSON Schema
NameRequiredDescriptionDefault
share_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already convey read-only, idempotent, non-destructive behavior. The description adds value by disclosing the response shape, including the conditional note that 'url' applies to link shares specifically. This is useful behavioral context beyond the annotation flags.

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 purpose sentence is front-loaded, followed by compact Args and Returns sections. Every line earns its place, with no filler or repetition.

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

Completeness4/5

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

For a single-parameter read-only tool with safety annotations and an output schema, the description is nearly complete. It identifies the required input and summarizes the return fields, though it does not address invalid-ID behavior or permissions, which are minor gaps for this low-complexity operation.

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

Parameters3/5

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

The schema only defines share_id as an integer with no description. The description calls it 'the numeric share ID,' which is minimally helpful but largely redundant with the schema type. It adds no information about where the ID comes from or how it relates to other share operations.

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 a specific action ('Get details'), a precise resource ('specific share'), and the selection criterion ('by its ID'). It is immediately distinguishable from sibling tools like list_shares, create_share, update_share, and delete_share.

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 gives clear context: use this tool when you have a share_id and want a single share's details. It does not explicitly name alternatives or exclusions, so it falls short of a 5, but the 'specific share by its ID' phrasing makes the precondition and scope clear.

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

get_submissionA
Read-onlyIdempotent

Get a single submission by id, including all answers.

Args: form_id: Numeric form id. submission_id: Numeric submission id.

Returns: JSON object with the submission's userId, timestamp, and answers array.

ParametersJSON Schema
NameRequiredDescriptionDefault
form_idYes
submission_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, so the safety profile is clear. The description adds beyond annotations by stating the returned shape: userId, timestamp, and answers array, plus the promise that it includes all answers. It does not discuss not-found behavior or permissions, but that is minor for a read-only single-get tool.

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

Conciseness5/5

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

The description is tight and well-organized: a one-sentence purpose, a short Args block, and a Returns block. No filler or repetition; every line carries useful information. The main behavior is front-loaded.

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

Completeness4/5

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

For a simple two-parameter read tool, this is nearly complete: it identifies the parameters, the return format, and the full-answers guarantee. An output schema is marked as present, so return-value details are not strictly required. A small gap is the lack of error/not-found behavior, but that does not prevent correct invocation.

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%, so the description must clarify the parameters, but it only restates the schema: 'Numeric form id' and 'Numeric submission id' add no real meaning beyond the integer type and the parameter names. It does not explain the relationship between form_id and submission_id or how to obtain them.

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

Purpose5/5

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

The description uses a specific verb-resource pair: 'Get a single submission by id, including all answers.' It clearly distinguishes this from sibling list_submissions or export_submissions by emphasizing 'single' and by specifying it returns all answers. The purpose is immediately 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 gives clear usage context: use this when you have a form_id and submission_id and need one full submission. It does not explicitly mention alternatives or exclusion criteria, but the 'single submission by id' phrasing effectively disambiguates it from list-oriented siblings.

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

get_taskA
Read-onlyIdempotent

Get full details of a specific task by its UID.

Args: list_id: Task list identifier (e.g. "tasks"). task_uid: The task's UID. Use get_tasks to find UIDs.

Returns: JSON object with full task details: uid, summary, description, status, priority, percent_complete, dtstart, due, completed, etag, and optionally categories.

ParametersJSON Schema
NameRequiredDescriptionDefault
list_idYes
task_uidYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the description doesn't need to restate safety. It does not contradict the annotations; it adds a note about using get_tasks, but no additional behavioral disclosures like auth or rate limits are provided. With annotations carrying the safety profile, this is acceptable.

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 compact three-section structure: one purpose sentence, a short Args list with inline guidance, and a Returns list. No redundant or bloated content.

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 an output schema, the description covers the purpose, both parameters, and the expected return fields. The pointer to get_tasks fills the only likely gap (how to obtain the UID).

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

Parameters5/5

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

Schema description coverage is 0%, so the description carries the full burden. It explains list_id with an example ('tasks') and task_uid with a method to find it ('Use get_tasks to find UIDs'). This adds meaning beyond the bare 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 states a specific verb ('get') and resource ('task') scoped by UID, clearly distinguishing it from get_tasks (which presumably lists) and other task operations. It also mentions 'full details' to set expectations.

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 directs the agent to use get_tasks to find UIDs, which is a clear pointer to the prerequisite sibling. It doesn't explicitly exclude other alternatives, but for a read tool, this is adequate guidance.

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

get_tasksA
Read-onlyIdempotent

Get tasks from a task list.

Returns all tasks in the list, ordered as stored in CalDAV.

Args: list_id: Task list identifier (default "tasks"). Use list_task_lists to find IDs. limit: Maximum number of tasks to return (1-500, default 50). offset: Number of tasks to skip for pagination (default 0).

Returns: JSON with "data" (list of task objects) and "pagination" (count, offset, limit, has_more). Each task has: uid, summary, description, status, priority, percent_complete, dtstart, due, completed, etag, and optionally categories.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo
list_idNotasks

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

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, and destructiveHint=false, covering the safety profile. The description adds genuine behavioral value beyond those annotations: the CalDAV ordering guarantee, the pagination envelope shape (count, offset, limit, has_more), and the list of fields per task. This is useful behavioral disclosure that the annotations alone cannot 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 structure is clear and front-loaded: a one-line purpose, a scoping sentence, a compact Args block, and a Returns block. Every element earns its place. The only minor redundancy is the task-field enumeration in Returns, which overlaps with the existing output schema, but it is brief and aids understanding.

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 read-only paginated list tool with three optional parameters, the description is complete: it covers ordering, pagination semantics, parameter constraints, the response envelope, and how to discover list IDs. Annotations carry the safety profile and the output schema carries field shapes, so nothing an agent needs to invoke this correctly is missing.

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?

With 0% schema description coverage, the description carries the full burden for parameter documentation and fully delivers: list_id gets its default plus a pointer to list_task_lists for discovery, limit gets a range (1-500) and default, offset gets its pagination purpose and default. This adds meaning far beyond the bare schema properties, which only name types and defaults.

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 a specific verb and resource ('Get tasks from a task list') and adds a distinguishing scope note ('Returns all tasks in the list, ordered as stored in CalDAV'). This clearly separates it from siblings like get_task (single task) and list_task_lists (discovering list IDs), which the description explicitly references.

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 gives helpful context for one sibling ('Use list_task_lists to find IDs') and explains the pagination workflow. However, it never explicitly says when NOT to use this tool or when to prefer get_task instead — the read-all-vs-read-one decision is left implicit rather than stated as an exclusion.

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

get_threadA
Read-onlyIdempotent

Get details of one thread in a Talk conversation.

Returns the thread's summary, not its messages; use get_messages(token, thread_id=...) to read the messages.

Args: token: The conversation token. Use list_conversations to find tokens. thread_id: The thread ID, which is the ID of the thread's first message. Shown as "[thread ]" in get_messages output.

Returns: JSON object with thread_id, token, title, num_replies, last_activity, notification_level and first/last messages as compact lines.

ParametersJSON Schema
NameRequiredDescriptionDefault
tokenYes
thread_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

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, so the safety profile is fully covered. The description adds useful behavioral context by clarifying that this returns a summary (not messages) and lists the exact fields returned, including 'compact lines' for first/last messages. 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.

Conciseness4/5

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

The description is well-structured with clear sections for purpose, arguments, and returns. Every sentence serves a purpose, and the key scoping statement is front-loaded. It is slightly longer than strictly necessary but avoids redundancy.

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-only tool with two required parameters, the description is complete. It explains how to discover both parameters, what the tool does and does not return, and the returned fields. The presence of an output schema further reduces the need to detail return formats, but the description already covers them thoroughly.

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?

With 0% schema description coverage, the description fully compensates by explaining both parameters in practical terms. It tells the user that token is a conversation token found via list_conversations, and that thread_id is the ID of the thread's first message, as shown in get_messages output. This adds real meaning beyond the bare schema.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Get details of one thread in a Talk conversation.' It immediately clarifies the tool's scope and differentiates itself from get_messages by explicitly stating it returns the summary, not messages. This makes the purpose unmistakable and distinct from close siblings.

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

Usage Guidelines4/5

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

The description gives explicit guidance for a key alternative: 'use get_messages(token, thread_id=...) to read the messages.' It also tells the user how to obtain the token via list_conversations. However, it does not contrast with other thread-related siblings like list_threads or get_conversation, so some when-to-use context is missing.

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

get_userB
Read-onlyIdempotent

Get detailed information about a specific Nextcloud user.

Args: user_id: The user ID to look up. Example: "admin", "john.doe"

Returns: JSON with user details: id, displayname, email, quota, groups, language, etc.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false. The description adds the return format (JSON with fields like id, displayname, email, quota, groups, language) and explains the argument. It does not cover error behavior or permissions, but the annotations cover the safety profile. This is adequate 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.

Conciseness4/5

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

The description is brief and well-structured: a one-sentence purpose, an Args section, and a Returns section. It avoids fluff and presents the essential information efficiently.

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 get-by-id tool with one parameter, the description covers the argument and return format. However, it does not mention when to use it versus siblings, nor any potential failure modes (e.g., nonexistent user). Given the output schema exists and annotations cover safety, the remaining gaps are usage guidance and edge-case behavior.

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 zero description coverage, so the description must compensate. It does so by explaining user_id as 'The user ID to look up' and providing concrete examples (admin, john.doe). This adds meaning beyond the bare schema property.

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 retrieves detailed information about a specific Nextcloud user, specifying the resource (user) and verb (get). It provides an example argument. However, it does not explicitly differentiate from sibling tools like get_current_user or list_users, which is a minor gap.

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 given on when to use this tool versus alternatives such as get_current_user (for the current user) or list_users (for all users). Given the large sibling list, the absence of selection criteria is a significant deficiency.

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

get_user_statusA
Read-onlyIdempotent

Get the status of a Nextcloud user.

Returns the user's online status (online, away, dnd, invisible, offline), custom status message, status icon, and when the status will be cleared.

Args: user_id: User ID to look up. Leave empty to get your own status.

Returns: JSON object with user_id, status, message, icon, and clear_at.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is fully covered. The description adds useful detail about returned fields and the empty-user_id behavior, but does not disclose potential permission requirements or error behavior for nonexistent users.

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

Conciseness5/5

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

The description is compact, front-loaded with the core purpose, and structured with Args and Returns sections. Every sentence adds information, with no filler or redundancy.

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

Completeness4/5

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

For a simple read-only lookup with one optional parameter, the description covers the parameter behavior, return shape, and possible status values. It does not discuss permission requirements or error handling, but the output schema and annotations cover much of the remaining context.

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 schema description coverage at 0%, the description must compensate, and it does: it explains that user_id is the user to look up and that an empty value returns the caller's own status. This adds real meaning beyond the schema's bare string type and default.

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 a specific action ('Get the status of a Nextcloud user') and enumerates the exact returned fields: online status, custom status message, status icon, and clear time. This clearly distinguishes it from sibling tools like set_user_status, clear_user_status, and get_user.

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 usage context is implied by the verb and resource, and 'Leave empty to get your own status' gives one concrete usage rule. However, it does not explicitly name alternatives or state when to prefer this over get_user or get_current_user, so the routing guidance remains implicit rather than explicit.

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

join_circleA
Idempotent

Join an open circle on behalf of the current user.

The circle must have the OPEN config flag (16); otherwise the server returns an error. For invitation-only circles, the circle's admin or moderator must use add_circle_member instead.

Args: circle_id: String circle id.

Returns: JSON of the current user's new membership (id, level, status).

ParametersJSON Schema
NameRequiredDescriptionDefault
circle_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already cover mutation (readOnlyHint=false), idempotency, and non-destructiveness. The description adds meaningful behavioral context: the OPEN flag precondition, the failure mode, and the membership object returned. This goes beyond what the annotations alone provide.

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

Conciseness5/5

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

The description is compact and well-structured, with the key precondition stated up front and clear Args/Returns sections. Every sentence adds useful information; there is no filler.

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

Completeness5/5

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

For a single-parameter tool, this is complete: precondition, alternative usage, error behavior, actor, and return shape are all present. The output schema exists, and the description even summarizes the returned membership fields, so no critical calling context is missing.

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%, so the description needed to compensate for the undocumented parameter. It only restates what the schema already conveys (circle_id is a string id) and adds no guidance on format, source, or validation.

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

Purpose5/5

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

States a specific action (join), a specific resource (circle), and a clear actor (current user). It also distinguishes itself from add_circle_member, so an agent can tell which tool fits without opening schemas.

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

Usage Guidelines5/5

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

Explicitly says the circle must have the OPEN config flag (16) and warns that otherwise the server errors. It also names add_circle_member as the correct tool for invitation-only circles, giving clear when-to-use and 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.

leave_circleA
DestructiveIdempotent

Leave a circle the current user is a member of.

IMPORTANT: When the owner leaves, the server makes another member the owner (the highest level, then the longest-standing). Any entry of list_circle_members counts, even a group, a nested circle or a pending invitation or join request. When the owner is the last one, leaving destroys the entire circle, with no confirmation prompt. Because of this implicit destroy, this tool requires DESTRUCTIVE permission (matching leave_conversation in Talk).

Args: circle_id: String circle id. delete_team_folder: Destroying the circle also deletes its team folder (Nextcloud 35+ with the Team folders app) and every file in it. When that would happen, the tool refuses unless this is true.

Returns: JSON of the circle the user just left (circle fields: id, name, config, population, initiator, …). Empty when the caller loses visibility on the circle after leaving (e.g. when the circle is destroyed).

ParametersJSON Schema
NameRequiredDescriptionDefault
circle_idYes
delete_team_folderNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already flag destructiveHint=true, but the description goes well beyond them: it explains ownership succession rules (highest level, then longest-standing), that any membership entry including groups, nested circles, and pending invitations counts, that destruction happens with no confirmation prompt, and that DESTRUCTIVE permission is required. This is exactly the behavioral context an agent needs before an irreversible call.

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

Conciseness4/5

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

Purpose is front-loaded, and the Args/Returns structure makes the detail scannable, so length is largely earned. The ownership-succession explanation is slightly elaborate for a tool call, keeping it just under a 5.

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

Completeness5/5

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

An output schema exists, yet the description still usefully clarifies that the return may be empty when the caller loses visibility after leaving. Combined with the destructive-behavior and parameter caveats, nothing an agent needs to invoke this safely is missing.

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 0%, so the description must carry the full burden, and it does: circle_id is defined as the String circle id, and delete_team_folder is explained in terms of exact trigger conditions (Nextcloud 35+ with Team folders app) and consequences (deletes the folder and every file in it), plus the refusal semantics when it is false.

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 first sentence states a specific verb and resource: 'Leave a circle the current user is a member of.' This clearly distinguishes it from siblings like delete_circle, remove_circle_member, and join_circle. An agent can identify the operation without opening the schema.

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

Usage Guidelines4/5

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

It gives clear conditions: when the last owner leaves the circle is destroyed, and destructive permission is required (explicitly paralleled with leave_conversation). It also states the tool refuses unless delete_team_folder is true when a team folder would be destroyed. It lacks explicit 'use X instead' routing to delete_circle or remove_circle_member, so it falls short of a 5.

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

leave_conversationA
DestructiveIdempotent

Leave a Talk conversation.

After leaving, the user will no longer receive notifications or see the conversation in their list. For group conversations, the user can be re-invited. For one-to-one conversations, this removes the conversation permanently for the user.

Args: token: The conversation token of the conversation to leave.

Returns: Confirmation message.

ParametersJSON Schema
NameRequiredDescriptionDefault
tokenYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already flag destructiveHint=true, and the description enriches this by specifying the exact user-visible effects: no notifications, removal from the list, re-invitable for groups, and permanent for one-to-one conversations. There is no contradiction with the annotations, and the added context helps an agent assess risk.

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 well-structured with a lead behavior statement followed by Args and Returns sections. Every clause adds relevant consequence or parameter detail, though the Args section is somewhat redundant with the input schema.

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

Completeness4/5

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

For a single-parameter, side-effecting action, the description covers the action's effects, parameter meaning, and return value. It does not address error handling or edge cases like leaving an already-left conversation, but those are not essential given the low complexity and the annotations already providing the safety profile.

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 schema_description_coverage at 0%, the description's Args section is the only semantic explanation of the parameter. Saying 'token: The conversation token of the conversation to leave' identifies the parameter's role but does not explain how to obtain it or validate it, despite this being the only required 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 opens with a clear verb-resource pair ('Leave a Talk conversation') and then specifies the consequences, making the operation unambiguous. Among siblings like leave_circle and various delete_* tools, this is clearly the conversation-leaving action.

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

Usage Guidelines4/5

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

The description explains what happens after leaving (notifications stop, conversation disappears from list) and distinguishes group conversations (re-invitable) from one-to-one conversations (permanent). It does not explicitly name an alternative tool, but no close conversation-specific alternative appears among the siblings, so the guidance is sufficient.

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

list_activity_filtersA
Read-onlyIdempotent

List the activity filters get_activity accepts on this server.

Returns: JSON list of filters with "id" (the value for activity_filter) and "name".

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, covering the safety profile of this no-arg read. The description adds the return shape (id/name pair), but does not disclose anything further such as whether the list is server-wide, permission-dependent, or cached. With annotations carrying most of the burden, this is adequate 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?

Two short front-loaded sentences; the core purpose is stated first and the return detail second. Nothing is wasted or padded.

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

Completeness5/5

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

For a zero-parameter, read-only enumeration tool with an output schema, the description supplies everything an agent needs: what it lists, which sibling consumes the result, and the shape of the values returned. No material gap remains.

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 takes zero parameters, so per the rubric the baseline is 4. The description does clarify the semantics of a returned field ('id' is the value for activity_filter), which is helpful glue even though it isn't a declared input.

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

Purpose5/5

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

States a specific verb (List) and a precisely scoped resource (the activity filters get_activity accepts), and explicitly ties itself to the sibling tool get_activity. An agent can tell instantly that this is an enumeration helper for get_activity's activity_filter parameter, not a generic filter CRUD list.

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 its purpose as a prerequisite lookup: the returned 'id' is 'the value for activity_filter', which tells the agent this should be called to obtain valid values before invoking get_activity. It does not, however, explicitly say when to call it or name an alternative, so it falls short of a 5.

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

list_addressbooksA
Read-onlyIdempotent

List address books for the current user.

Returns user-owned address books (excludes system-generated books like Accounts and Recently Contacted).

Returns: JSON list of address books with id, name, description, ctag.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already establish the read-only, idempotent, non-destructive profile. The description adds meaningful behavioral context beyond that: it filters to user-owned books and excludes system books, and it specifies the exact fields returned (id, name, description, ctag). This helps an agent predict the response content without relying solely on the output 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?

The description is tight and front-loaded: a one-sentence definition, a clarifier about what is excluded, and a compact return format line. No filler or redundant explanation exists.

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 zero-parameter, read-only tool with annotations covering safety and an output schema available, the description covers everything needed to invoke it correctly: scope, filtering behavior, and return fields. There are no missing prerequisites, side effects, or edge-case instructions that an agent would need.

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 zero parameters, so no parameter documentation is needed; the baseline for 0-param tools is 4. The description appropriately uses its space to describe the return value instead of inventing parameter details.

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

Purpose5/5

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

The description states a specific verb ('List'), a resource ('address books'), and a clear scope ('for the current user'), making its intent unambiguous. The explicit exclusion of system-generated books like 'Accounts' and 'Recently Contacted' further distinguishes it from any generic address-book listing and from sibling list 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 gives clear context: it is scoped to user-owned address books and excludes system-generated ones, so an agent knows what kind of data to expect. It does not explicitly name alternative tools or state when not to use it, but for a simple zero-parameter listing tool this context is sufficient.

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

list_announcementsA
Read-onlyIdempotent

List announcements from the Nextcloud Announcement Center.

Returns announcements visible to the current user, sorted by newest first. The server returns up to 7 announcements per page.

Admins see all announcements. Regular users only see announcements targeted at their groups or at "everyone".

Args: offset: Announcement ID to paginate from. Pass the smallest ID from a previous call to fetch older announcements. Default 0 means start from the newest.

Returns: JSON object with "data" (list of announcements) and "pagination" (count, offset, has_more). Each announcement has: id, author_id, author, time (unix), subject, message (markdown), groups (admin only), comments (count or false if disabled).

ParametersJSON Schema
NameRequiredDescriptionDefault
offsetNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

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

Beyond the readOnly/idempotent annotations, the description explains visibility rules for admins vs regular users, the 7-per-page cap, offset pagination semantics, and the exact return structure. This gives the agent a full behavioral picture.

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

Conciseness5/5

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

The description is organized into concise sections (overview, visibility, args, returns) with no filler. Each sentence adds operational value, and the critical pagination detail is front-loaded.

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

Completeness5/5

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

With only one optional parameter and clear annotations, the description fully covers invocation, pagination, visibility, and return shape. There is no missing information an agent would need to call this correctly.

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?

The schema only says offset is an integer with default 0; the description adds crucial meaning: offset is an announcement ID, pass the smallest ID from a previous call to get older items, and default 0 starts from newest. This fully compensates for the 0% 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 action (list announcements), the resource (Nextcloud Announcement Center), and key behavioral details (visibility, sort order, pagination cap). It is easily distinguished from siblings like list_notifications or create_announcement.

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 gives clear context on what the tool returns and who sees what, but it does not explicitly name alternatives or state when not to use it. The usage is obvious from the resource and behavior, but exclusion guidance is absent.

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

list_appsA
Read-onlyIdempotent

List installed Nextcloud apps. Requires admin privileges.

Args: app_filter: Filter apps by status. Options: "enabled" (default) — only enabled apps "disabled" — only disabled apps "all" — all installed apps limit: Maximum number of apps to return (1-500, default 50). offset: Number of apps to skip for pagination (default 0).

Returns: JSON with "data" (list of app ID strings) and "pagination" (count, offset, limit, has_more).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo
app_filterNoenabled

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already establish readOnlyHint, idempotentHint, and destructiveHint. The description adds useful behavioral context beyond annotations: admin privileges are required, app_filter changes scope, and pagination behavior is described. It also details the exact return shape, which is not visible in the provided 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?

The description is compact and front-loaded with the core purpose, followed by clear parameter and return sections. Every sentence provides needed information, with no filler or repetition of schema defaults.

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 paginated list tool with annotations covering safety, this description is complete: it covers authorization, parameter semantics, defaults, pagination, and return structure. An agent has everything needed to call it correctly without inspecting sibling tools or output schemas.

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

Parameters5/5

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

Schema description coverage is 0%, so the description carries the full burden, and it fully compensates. Each parameter is explained with allowed values, defaults, and ranges (app_filter options, limit 1-500, offset). This adds meaning far beyond the bare schema property definitions.

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

Purpose5/5

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

States a specific verb and resource: 'List installed Nextcloud apps.' The admin-privileges note and the return description make the function's purpose unambiguous. It is clearly distinct from sibling tools like enable_app, disable_app, and get_app_info.

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 clearly indicates this is a read-only enumeration tool and notes the admin privilege prerequisite. It does not explicitly name when to avoid this tool in favor of siblings like get_app_info, but the context is sufficiently clear for an agent to choose it appropriately.

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

list_calendarsA
Read-onlyIdempotent

List all calendars for the current user.

Returns calendars with their properties including name, color, supported component types (VEVENT, VTODO), and write access status.

Returns: JSON list of calendar objects with: id, name, color, components, writable, ctag. Use the id value with other calendar tools (e.g. "personal").

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

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, so the safety profile is clear. The description adds useful behavioral context by specifying the return format (JSON list with id, name, color, components, writable, ctag) and that it returns all calendars for the current user. 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?

The description is concise and well-structured. It front-loads the core purpose, then provides return format details and a usage hint. Every sentence adds value, and there is no redundancy or filler.

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

Completeness5/5

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

For a zero-parameter list tool with a clear output schema and annotations covering safety, the description is complete. It explains what the tool returns, how to use the returned ids, and the annotations cover the read-only/idempotent behavior. Nothing an agent needs to call it correctly is missing.

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

Parameters4/5

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

The tool has zero parameters, so the description doesn't need to explain parameter semantics. The baseline for 0 params is 4, and the description appropriately focuses on the return value and usage context instead.

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 all calendars for the current user, with a specific verb and resource. It distinguishes itself from sibling tools by focusing on calendar listing, and the return format is explicitly described.

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

Usage Guidelines4/5

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

The description provides clear context for when to use this tool (to list calendars for the current user) and mentions using the returned id with other calendar tools. It doesn't explicitly state when not to use it or name alternatives, but the context is clear enough for an agent to select it appropriately.

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

list_circle_membersA
Read-onlyIdempotent

List all members of a circle.

Args: circle_id: String circle id. full_details: If True, include extended info such as circle memberships inherited through this one.

Returns: JSON array of members. Each entry has id (memberId — use with remove_circle_member and update_circle_member_level), singleId (the user's federated id), userId, userType (1=user, 2=group, 4=mail, 8=contact, 16=circle), level (0=none, 1=member, 4=moderator, 8=admin, 9=owner), status ("Member", "Invited", "Requesting"), displayName, instance.

ParametersJSON Schema
NameRequiredDescriptionDefault
circle_idYes
full_detailsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare the tool read-only, idempotent, and non-destructive, so the description does not need to re-state those. It adds meaningful behavior context by explaining that full_details includes inherited circle memberships and by defining the return fields and their enum meanings.

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

Conciseness5/5

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

The description is front-loaded with the core purpose, then provides compact Args and Returns sections. The enum lists are detailed but serve a clear purpose for understanding returned values; no sentence is wasted.

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 two-parameter read-only tool, the description fully covers the purpose, parameters, and return shape. The inclusion of exact field names, enum values, and the effect of full_details makes this complete enough for an agent to call confidently without needing additional context.

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

Parameters5/5

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

Schema description coverage is 0%, so the description must carry the parameter meaning. It explicitly explains circle_id as a string circle id and full_details as 'If True, include extended info such as circle memberships inherited through this one,' adding real semantics beyond the bare schema properties.

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

Purpose5/5

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

The description opens with 'List all members of a circle,' which names a specific verb and resource. This clearly distinguishes it from sibling tools like list_circles or get_circle, and the return-value details reinforce the purpose.

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 usage context is implied by 'List all members of a circle': an agent would call this when it needs the member list for a known circle. However, there is no explicit when-to-use guidance, no exclusion criteria, and no mention of alternatives such as search_circles or list_circles.

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

list_circlesA
Read-onlyIdempotent

List circles (teams) the current user can see.

Args: limit: Max circles to return. Omit for server default (all). offset: Starting offset for pagination.

Returns: JSON array of circles. Each entry includes id (the string singleId used for sharing), name, displayName, description, config (bitmask), source, population, creation, initiator (current-user membership info: level, status, userId).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

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

Annotations already mark this as read-only, idempotent, and non-destructive. The description adds meaningful behavioral detail: pagination semantics via limit/offset, the 'omit limit for all' default, and the return entry shape including the note that id is the singleId used for sharing. This goes 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 well-structured with Args and Returns sections and is front-loaded with the purpose. The return-field enumeration is somewhat redundant given an output schema exists, but it is compact and does not waste space.

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

Completeness4/5

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

For a simple read-only list with two optional parameters, the description covers scope, parameters, and return shape sufficiently. It is not complete in positioning this tool against related circle tools, but an agent can invoke it correctly without additional information.

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 0%, so the description carries the full burden for parameters. It clearly explains limit as 'max circles to return' and the server-default/all behavior, and offset as the pagination starting point. Both parameters are meaningfully documented.

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

Purpose4/5

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

The description opens with 'List circles (teams) the current user can see' – a specific verb, resource, and visibility scope. It clearly states what the tool does, but it does not explicitly differentiate itself from sibling tools like search_circles or list_circle_members.

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 provides useful context ('circles the current user can see') that implies when this tool should be used, but it gives no explicit guidance about when not to use it or which sibling tool to prefer. With search_circles, get_circle, and list_circle_members nearby, the selection guidance is only implied.

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

list_collective_page_attachmentsA
Read-onlyIdempotent

List the files attached to a page: those in its attachments folder (images and files embedded in or linked from it) and, for a folder page (one with subpages, a shared page or the landing page), other files next to it. Trashed ones are not listed.

Args: collective_id: The numeric collective ID. page_id: The numeric page ID.

Returns: JSON list of attachments with id, name, mimetype, size, timestamp, type ("text" for the attachments folder, "folder" for files next to the page) and path (usable with get_file).

ParametersJSON Schema
NameRequiredDescriptionDefault
page_idYes
collective_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), so the bar is lower. The description adds genuinely useful behavior: the folder-page case returns items typed 'folder' rather than 'text', and trashed attachments are omitted — details not derivable from 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?

Front-loaded summary sentence, then clearly delimited Args and Returns blocks. The folder-page clarification is slightly dense in one sentence but nothing is wasted padding.

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

Completeness4/5

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

An output schema exists, so the Returns block is technically redundant rather than required, but it is consistent and harmless. Combined with the two named params and the trash/folder-page behavior notes, an agent has enough to invoke the tool correctly; only cross-tool routing guidance is missing.

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

Parameters3/5

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

Schema coverage is 0% and both parameters are required, so the description must compensate. It names collective_id and page_id and labels both 'numeric', which is the minimum needed, but adds no constraints, formats, or ID-source guidance beyond the schema's integer typing.

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

Purpose5/5

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

States a specific verb and resource ('List the files attached to a page') and immediately scopes it: the page's attachments folder plus, for folder pages, sibling files. This is distinguishable from nearby siblings like search_files, list_directory, and get_file without opening a schema.

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

Usage Guidelines3/5

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

The description clarifies what is included and that trashed items are excluded, which is useful boundary guidance, but never states when to use this tool versus alternatives such as search_files or list_directory for finding files. Usage is only implied by the resource scope.

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

list_collectivesA
Read-onlyIdempotent

List collectives the current user has access to.

Collectives are shared knowledge bases with wiki-style pages.

Args: limit: Maximum number of collectives to return (1-200, default 50). offset: Number of collectives to skip for pagination (default 0).

Returns: JSON with "data" (list of collectives with id, name, emoji, permissions) and "pagination" (count, offset, limit, has_more).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already mark this as safe/read-only/idempotent. The description adds useful behavioral detail beyond that: it reveals the return shape (data list with id, name, emoji, permissions) and pagination fields, making the response predictable without contradicting 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 compact and front-loaded with the essential purpose, followed by a brief domain definition and clearly separated Args/Returns sections. Every sentence adds value; there is no filler.

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

Completeness5/5

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

For a simple paginated listing tool, the description covers the operation, param semantics, and return structure completely. The output schema exists, so the written return format is a bonus rather than a necessity.

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?

The schema provides only types and defaults, while the description fully explains both parameters: limit's range (1-200) and default, and offset's pagination purpose and default. This fully compensates for the 0% schema description 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?

States a specific verb ('list') and resource ('collectives'), scoped by accessibility ('current user has access to'). Defining collectives as 'shared knowledge bases with wiki-style pages' removes ambiguity and helps distinguish this from page-level operations like get_collective_pages.

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 gives clear context for when to call it: to retrieve a paginated list of collectives accessible to the current user. It doesn't explicitly name alternatives or exclusions, but it is the canonical listing operation among the sibling tools and its scoping is clear.

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

list_collective_sharesA
Read-onlyIdempotent

List your public links to a collective and to its single pages; other members' links are not shown.

Args: collective_id: The numeric collective ID.

Returns: JSON list of shares with token, page_id (null for a link to the whole collective; a link made from the landing page shows the landing page's ID), editable, has_password, owner and url.

ParametersJSON Schema
NameRequiredDescriptionDefault
collective_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered; the description adds genuinely useful behavior beyond that — the own-links-only visibility rule and the meaning of page_id (null for whole-collective links, landing-page ID for landing-page links).

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

Conciseness4/5

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

Front-loaded with the key scoping statement, then follows with the argument and return notes. The 'Args' block partly restates the single schema property, which is minor redundancy, but nothing is padded.

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 one-parameter read tool with full annotations and an output schema, this covers the essentials: purpose, scope, the parameter, and the notable return fields. Only the absence of any alternative-tool routing keeps it short of 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?

Schema description coverage is 0%, so the description must compensate, and it does by defining collective_id as 'The numeric collective ID' — a real clarification of type and meaning that the bare schema title lacks.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List your public links to a collective and to its single pages') and immediately narrows scope with 'other members' links are not shown', which cleanly separates it from siblings like list_shares, list_pending_shares, and get_share.

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 scope sentence implies when this is the right call (you want your own shares, not others'), but it never names an alternative tool or an explicit condition for choosing it over get_share/list_shares. Usage is inferable rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_collective_tagsB
Read-onlyIdempotent

List a collective's page tags. Each collective has its own set.

Args: collective_id: The numeric collective ID.

Returns: JSON list of tags with id, name and color. Pages list their tag IDs under "tags".

ParametersJSON Schema
NameRequiredDescriptionDefault
collective_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is fully covered without the description. The description adds useful domain context about the return shape (id, name, color) and the fact that pages reference tag IDs under 'tags', which goes slightly 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded purpose sentence followed by clearly labelled Args and Returns sections. Every sentence carries information; the 'Each collective has its own set' line is the only near-redundant addition, but it usefully scopes the resource.

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 single-parameter read tool with full annotation coverage and an existing output schema, the description supplies the remaining essentials: the meaning of the ID, the return fields, and the page-to-tag linkage. Only the absence of guidance on sibling alternatives keeps it from being fully 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 0%, but there is only one parameter and the description does explain it as 'The numeric collective ID', which matches the schema's integer type. This is only marginally more than the schema's title 'Collective Id' provides, so it neither compensates for the coverage gap nor is entirely absent.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (List), resource (page tags) and scope (a collective's own set), which distinguishes it in spirit from the generic list_tags sibling. However, it never names or contrasts the close siblings list_collective_page_attachments, list_tags, or get_file_tags explicitly, so an agent must infer the distinction from the scope phrase alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no prerequisites, and no mention of when a different tag-listing tool (list_tags, list_conversation_tags, get_file_tags) is the correct choice. The only hint is the scope phrase 'a collective's page tags', which is implied usage rather than explicit direction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_commentsA
Read-onlyIdempotent

List comments on a file.

Returns comments in chronological order (oldest first). Use list_directory to find a file's ID (file_id field).

Args: file_id: The numeric file ID. Get this from list_directory (file_id field). limit: Maximum number of comments to return (1-100, default: 20). offset: Number of comments to skip for pagination (default: 0).

Returns: JSON object with "data" (list of comments) and "pagination" (count, offset, limit, has_more).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo
file_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover readOnlyHint=true and idempotentHint=true, so the bar is lower. The description adds genuinely useful behavior beyond annotations: 'Returns comments in chronological order (oldest first)' and the pagination shape. Minor gap: no mention of error behavior for nonexistent file IDs, but this is acceptable for a safe read-only tool.

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 organized into clear sections with the one-line summary front-loaded. Each section earns its place. The Returns section is slightly redundant given that an output schema exists, but it is compact and clarifies pagination field names.

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 read-only, paginated list tool with annotations covering safety, this is complete: purpose, ordering behavior, prerequisite lookup, parameter constraints, and return format are all specified. Nothing an agent needs to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full load — and it succeeds. All three parameters get meaningful semantics: file_id gets provenance ('Get this from list_directory'), limit gets a range (1-100) plus default, and offset gets its pagination purpose. This fully compensates for the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with 'List comments on a file' — a specific verb + resource statement that fully conveys the operation. It is clearly differentiated from its comment-related siblings (add_comment, edit_comment, delete_comment), which are all mutations, so an agent can tell the read operation apart immediately.

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 instructs when to use the tool and the prerequisite step: 'Use list_directory to find a file's ID (file_id field).' This gives clear context without needing to enumerate exclusions, since the read-vs-write split among comment siblings makes the selection obvious.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_conversation_presetsA
Read-onlyIdempotent

List the presets create_conversation can start from.

Returns: JSON list of presets with identifier (what create_conversation takes), name, description and the settings create_conversation applies.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds genuinely useful behavioral context by enumerating what each preset carries (identifier, name, description, applied settings) and flagging that the identifier is the value create_conversation accepts.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences that are front-loaded with the purpose; the Returns block is terse and each line earns its place. Slightly structural overhead but no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a no-arg read tool with an output schema, the definition covers purpose, the create_conversation linkage, and return shape. Nothing material is missing, though it could have noted that it must be called before create_conversation to obtain a valid preset identifier.

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?

Zero parameters, so the baseline is 4. The description still adds value by explaining that the returned 'identifier' is the argument create_conversation takes, linking the output to a downstream call.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List the presets') and ties them to their consumer, create_conversation, so the agent understands what this resource is. It does not spell out the contrast against other listing tools like list_conversations, but the narrow 'presets' object makes it distinguishable 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?

Usage is implied rather than stated: presets are 'what create_conversation can start from', so an agent can infer this is a discovery step before creating a conversation. There is no explicit when-to-use/when-not phrasing, nor any prerequisite or exclusion.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_conversationsA
Read-onlyIdempotent

List Talk conversations the current user is part of.

Returns every conversation the user has joined, sorted by last activity (newest first). Muted and archived conversations are included; Talk has no filter for them.

Args: limit: Maximum number of conversations to return (1-200, default 50). offset: Number of conversations to skip for pagination (default 0). modified_since: Only conversations with activity since this ISO 8601 time with time zone, e.g. to check what changed since the last look. Your own changes to a conversation (read state, favorite, archive, notifications) count as activity, and ones with a call running are always included.

Returns: JSON with "data" (list of conversation objects) and "pagination" (count, offset, limit, has_more).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo
modified_sinceNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the safe read-only/idempotent profile, so the bar is lower; the description still adds genuinely non-obvious behavior: sort order by last activity, mute/archive inclusion, and the modified_since quirk that the user's own read-state/favorite/archive changes count as activity and in-call conversations are always returned. No auth or rate-limit context is offered, keeping it from a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded purpose, then Args, then Returns, with every line carrying information. The Returns block restates what the output schema already declares, which is mild redundancy, and the docstring-style layout is slightly heavier than necessary.

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?

An agent has everything it needs: what the list contains, ordering, the three parameters with formats and defaults, and the envelope of the response (even if redundant with the output schema). Nothing required to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden and does so: limit with range 1-200 and default 50, offset as a pagination skip with default 0, and modified_since with ISO 8601-with-timezone format plus the semantic rules for what counts as activity. This is meaning well beyond the bare typed properties.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('List Talk conversations') and narrows scope to conversations the current user is part of, which cleanly separates it from get_conversation, search_mentions, and the thread/subscription tools. The inclusion rule (joined conversations, newest-first) makes the result set 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?

Gives clear context for when this tool applies (enumerate joined conversations, check what changed via modified_since) and explicitly notes that muted/archived are included with no filter available, which preempts a wrong choice. It never names an alternative sibling (e.g. get_conversation for a single one), so it stops short of explicit when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_conversation_tagsA
Read-onlyIdempotent

List your conversation tags, the personal groups of your conversation list.

Tags are yours alone; nobody else sees them. The built-in "favorites" and "other" tags cannot be renamed or deleted, and the favorites group is built from set_conversation_preferences(favorite=...), not from tagging.

Returns: JSON list of tags with id, name, type ("favorites", "other" or "custom") and sort_order. get_conversation and list_conversations show each conversation's tag_ids.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover safety (readOnly, idempotent, non-destructive), but the description adds genuinely non-obvious behavior: tags are private to the user, and the built-in 'favorites' and 'other' tags cannot be renamed or deleted. That immutability and privacy context is exactly what an agent needs before attempting a rename/delete.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the action and a one-line definition, followed by structured notes and a Returns block. Slightly verbose in the first line's appositive, but every sentence carries usable information about tag types or ownership.

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 zero-parameter read with an output schema and full annotations, the description supplies the remaining semantic gaps: tag types (favorites/other/custom), ownership, immutability, and how favorites is populated. An agent has everything needed to call and interpret it.

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 takes zero parameters, so the baseline is 4 and there is nothing for the description to disambiguate. It correctly does not invent parameter detail.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List your conversation tags') and immediately defines the resource in domain terms ('the personal groups of your conversation list'). This clearly separates it from list_tags, list_collective_tags, and list_mail_tags-adjacent siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives the context that these are personal tags and explains that the favorites group comes from set_conversation_preferences(favorite=...), not from tagging, which steers the agent away from a wrong path. It also points to get_conversation and list_conversations for tag_ids. It stops short of an explicit 'use this instead of list_tags/list_collective_tags' routing statement.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_cospend_billsA
Read-onlyIdempotent

List bills (expenses) in a Cospend project.

Requires VIEWER access.

Args: project_id: String project id. offset: Skip the first N bills (server orders by date desc by default). limit: Max bills to return. Omit for no limit. reverse: If True, oldest-first instead of newest-first. last_changed: Only return bills modified after this Unix timestamp. payer_id: Filter to bills paid by this member. category_id: Filter by category. payment_mode_id: Filter by payment mode. include_bill_id: Force-include this bill id in the result even if it would be paginated out (used to keep a focused bill in view). search_term: Substring match (case-insensitive) on bill what, comment, or amount±1. REQUIRES limit to be set — Cospend silently ignores the search and returns unfiltered results when no limit is provided, so this tool raises ValueError if search_term is given without limit. Pass any limit (e.g. 1000) to apply the filter. deleted: 0 = live bills (default), 1 = trashed bills only.

Returns: JSON object with bills (list of bill dicts — see get_cospend_bill for fields), nb_bills (project-wide bill count under the payer/category/payment-mode/deleted filters; NOT affected by search_term even when search filters bills), allBillIds (full id list before pagination), timestamp (server response time).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo
deletedNo
reverseNo
payer_idNo
project_idYes
category_idNo
search_termNo
last_changedNo
include_bill_idNo
payment_mode_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark the operation as read-only, idempotent, and non-destructive. The description goes well beyond this by disclosing default server ordering, the search_term/limit interaction where Cospend silently ignores search without a limit and the tool raises ValueError, and the precise semantics of nb_bills versus bills regarding search_term. This gives an agent the behavioral quirks it needs to predict results.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long because 11 parameters and their subtleties demand it. It is structured into clear Args and Returns sections, with each line adding information (e.g., offset default ordering, search_term gotcha). No filler or repetition is present.

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 read-only list operation with an output schema present, the description covers the required access level, all parameters, and the shape and semantics of the return object. It even documents a tricky counterintuitive behavior in nb_bills. An agent has everything needed to call and interpret the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema provides zero descriptions for its 11 parameters, so the description carries the full burden. It explains every parameter, including defaults (deleted=0, reverse=false), types, and special constraints such as search_term requiring limit and the meaning of include_bill_id. This fully compensates for the schema 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 opens with a specific verb and resource: 'List bills (expenses) in a Cospend project.' This is unambiguous and separates it from sibling bill tools like get_cospend_bill, create_cospend_bill, and delete_cospend_bill. The phrase 'see get_cospend_bill for fields' further clarifies the tool's role as the list counterpart.

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 states a permission prerequisite (VIEWER access) and gives extensive context about filter behavior, but it does not explicitly state when to choose this over get_cospend_bill or when not to use it. However, the listing scope and the pointer to get_cospend_bill for individual bill fields imply the intended use case clearly. No misleading guidance is present.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_cospend_membersA
Read-onlyIdempotent

List members of a Cospend project.

Requires VIEWER access.

Args: project_id: String project id. last_changed: If provided, only return members modified after this Unix timestamp (used for incremental sync by clients).

Returns: JSON array of members. Each entry has id (integer member id, used as memberId in other tools), name, weight (share weight, default 1), activated (bool — false means soft-disabled but kept for bill history), userid (linked Nextcloud user id, or null for free-form members), color (RGB dict), lastchanged.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idYes
last_changedNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint/idempotentHint/destructiveHint annotations, the description adds meaningful behavior context: it requires VIEWER access, defines last_changed as an incremental-sync filter, and explains nuanced semantics like activated=false meaning soft-disabled but retained for bill history, userid=null meaning free-form member, and weight defaulting to 1. This is rich, non-redundant disclosure.

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 organized into clear sections: a one-sentence purpose, an access requirement, parameter definitions, and return-value details. Every sentence carries useful information, and the structure is easy to scan. Nothing feels redundant or padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list tool with two parameters, the description is complete: it covers access requirements, both parameters, return structure, field meanings, defaults, and cross-tool usage of the member id. An agent has everything needed to invoke it correctly and interpret the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description fully compensates. It documents both parameters: project_id as a string project id, and last_changed as an optional Unix timestamp filter with a clear behavioral meaning. It also clarifies the role of the id field as the memberId used in other tools, adding semantic value beyond the schema's bare type declarations.

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 starts with a specific verb and resource: 'List members of a Cospend project.' It clearly distinguishes itself from sibling tools like list_cospend_bills, list_cospend_projects, and member mutation tools by naming the exact object (members of a Cospend project). The return-field details further confirm the tool's scope.

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 clearly establishes the tool's context: it lists members, requires VIEWER access, and requires a project_id. It explains the optional last_changed parameter's incremental-sync use case. It does not explicitly enumerate alternatives or say 'use list_cospend_bills for bills,' but the resource naming makes the appropriate use case clear enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_cospend_projectsA
Read-onlyIdempotent

List Cospend (shared expense) projects the current user can access.

Returns: JSON array of full project objects. Each entry includes id (string slug, used as projectId in other tools), name, userid (owner), email, lastchanged, deletiondisabled, archived_ts, currencyname, categorysort/paymentmodesort, and myaccesslevel (1=VIEWER, 2=PARTICIPANT, 3=MAINTAINER, 4=ADMIN). Also embeds members, balance, shares, currencies, categories, paymentmodes for each project, and counters nb_bills / total_spent / nb_trashbin_bills.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and idempotentHint, so the description does not need to restate those. It adds substantial context: it explains the id slug is used as projectId elsewhere, defines the myaccesslevel numeric meanings, and details the embedded objects and counters returned, going 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 front-loaded with a clear purpose sentence and then provides a structured return-value breakdown. The field list is somewhat detailed but necessary for the agent to understand the tool's output; no sentence is wasted.

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 zero-parameter, read-only listing tool, the description is complete: it states what is returned, how to interpret key fields, and the access scope. Annotations cover safety, and the return description is rich enough that an agent can invoke the tool and understand its results without further information.

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 the schema fully covers parameter semantics and the description carries no burden here. Baseline 4 applies since there is nothing for the description to clarify.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description states a specific verb and resource: lists Cospend projects accessible to the current user. The first sentence clearly distinguishes it from siblings like get_cospend_project, create_cospend_project, or update_cospend_project, and includes the important scope qualifier 'current user can access'.

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: this is the enumeration tool for Cospend projects, with a defined access scope. It does not explicitly name alternatives or exclusion conditions, but the context and sibling list make the intended usage obvious enough for an agent to select it correctly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_directoryA
Read-onlyIdempotent

List files and folders in a Nextcloud directory.

Args: path: Directory path relative to user's root (default: "/" for root). Example: "Documents", "Photos/Vacation" limit: Maximum number of entries to return (1-500, default 50). offset: Number of entries to skip for pagination (default 0).

Returns: JSON with "data" (list of entries with path, is_directory, size, etc.) and "pagination" (count, offset, limit, has_more).

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNo/
limitNo
offsetNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

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, and destructiveHint, so the safety profile is covered. The description adds useful behavioral context beyond annotations: path is relative to the user's root, pagination uses offset/limit with has_more, and the output structure is described.

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 well-structured with a clear purpose line followed by concise Args and Returns sections. Every line adds necessary information, and the most important behavioral details are front-loaded.

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-only directory listing tool, the description covers all parameters, defaults, pagination behavior, and the return shape. Since annotations and an output schema also exist, nothing essential is missing for an agent to call it correctly.

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?

The input schema has zero property descriptions, so the description carries the full burden. It fully compensates by explaining path semantics with examples, the valid range for limit (1-500), and the purpose of offset for pagination.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'List files and folders in a Nextcloud directory.' This clearly identifies the operation and distinguishes it from sibling file tools such as search_files, get_file, and upload_file.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage context is implied by the first sentence and the parameter explanations, but there is no explicit guidance about when to choose this tool over alternatives like search_files or list_trash. A clear 'use this for directory browsing, not search' statement would strengthen it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_flowsA
Read-onlyIdempotent

List Nextcloud Flow rules (workflows that act on files automatically).

Args: scope: "user" for the current user's own flows, or "global" for the admin flows that apply to everyone (admin only). limit: Maximum number of flows to return (1-200, default 50). offset: Number of flows to skip for pagination (default 0).

Returns: JSON with "data" (flows with id, name, operation_class, operation_config, entity, events and checks, each check having class, operator and value) and "pagination" (count, offset, limit, has_more).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
scopeNouser
offsetNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish the safe read-only, idempotent profile, so the description only needs to add context — and it does: admin-only access for scope='global' and the presence of a has_more pagination flag. It does not discuss rate limits or ordering, which is a minor residual gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the one-line purpose, then uses labeled Args/Returns blocks so an agent can scan directly to the needed detail. Every sentence carries information; nothing is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a three-parameter, zero-required listing tool with annotations covering the safety profile, the description supplies purpose, per-parameter semantics, authorization caveats, and pagination behavior. Nothing needed to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden and does: scope's enum-like values with their authorization difference, limit's range (1-200) and default (50), and offset's pagination meaning with default (0). This is far richer than the bare typed properties in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List Nextcloud Flow rules') and even glosses what a Flow is ('workflows that act on files automatically'). It does not differentiate itself from siblings like create_flow, update_flow, delete_flow, or get_flow_options, but the read-only listing intent is unmistakable.

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 scope argument documentation gives real selection guidance: 'user' for one's own flows vs 'global' for admin flows applying to everyone, with an explicit admin-only restriction. It does not route to sibling tools, but the when-to-use context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_formsA
Read-onlyIdempotent

List forms visible to the current user.

Args: ownership: Filter. One of: "owned" (forms I created), "shared" (forms shared with me). Omit to get both — the Nextcloud endpoint takes one filter at a time, so this tool calls it twice and merges the results when omitted.

Returns: JSON array of form summaries. Each entry includes id, hash, title, state (0=active, 1=closed, 2=archived), permissions, and metadata. Call get_form(id) for full details including questions.

ParametersJSON Schema
NameRequiredDescriptionDefault
ownershipNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, and non-destructive, but the description adds genuine behavioral insight: the underlying endpoint takes one filter at a time, so omitting ownership triggers two API calls and a merge. It also documents the state enum values (0=active, 1=closed, 2=archived), going 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?

The description is compact and front-loaded: purpose first, then parameter explanation, then return shape, then a pointer to the sibling tool. Every sentence carries useful information with no filler or repetition of the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple (one optional parameter, read-only) and the description covers the parameter behavior, the return summary fields, and the alternative for full details. Since an output schema exists, the return-format summary is enough; the only minor omission is ordering/pagination, but nothing suggests those apply to this endpoint.

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 0% and the schema only declares the ownership property as string/null. The description fully compensates by listing the exact allowed values ('owned' and 'shared') and explaining the default/omission behavior, which is critical for correct invocation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'List forms visible to the current user', a specific verb + resource with a scope qualifier. It then distinguishes itself from get_form by noting this returns summaries and pointing to get_form for full details including questions, so an agent can tell it apart from 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?

It explains the ownership filter's two values and what happens when omitted (two-call merge), and explicitly routes to get_form when full details are needed. It doesn't spell out 'when not to use' but the alternative is named with the condition, which is sufficient guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_group_membersA
Read-onlyIdempotent

List the users in a group.

Admins, sub-admins of the group and the group's own members may do this.

Args: group_id: The group ID. Use list_groups to find it. limit: Maximum number of user IDs to return (1-500, default 100). offset: Number of user IDs to skip for pagination (default 0).

Returns: JSON with "data" (list of user IDs) and "pagination" (count, offset, limit, has_more). Use get_user for details on a member.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo
group_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the read-only, idempotent, non-destructive profile. The description adds genuinely useful context beyond that: the permission requirements for calling it, the pagination envelope, and the limit range. It stops short of describing performance or error behavior, but the annotations carry the safety burden.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action, then cleanly partitioned into Args and Returns. Every line carries signal, though the Returns section partially restates what the output schema already provides.

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 an output schema exists, the description needn't explain returns, yet it still summarizes the data/pagination shape. Combined with permissions, param docs, and sibling routing, an agent has everything needed to invoke this correctly.

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?

With 0% schema description coverage, the description fully compensates by documenting all three parameters: group_id (and how to find it via list_groups), limit (range 1-500, default 100), and offset (pagination semantics, default 0). No parameter is left 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?

States a specific verb and resource: 'List the users in a group.' This immediately distinguishes it from list_groups (lists the groups themselves) and list_circle_members (a different membership domain). An agent can tell what it returns without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides the authorization context ('Admins, sub-admins of the group and the group's own members may do this') and routes the agent to list_groups to obtain group_id, then to get_user for member details. It does not compare against list_circle_members or other membership listings, so no explicit when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_groupsA
Read-onlyIdempotent

List Nextcloud groups. Requires admin rights (or delegated user administration).

Nextcloud applies limit and offset to each group backend separately, so with more than one (LDAP and local groups, for example) a page can hold more than limit groups, and paging by offset can repeat or skip some.

Args: search: Optional text to filter groups by ID or display name. limit: Maximum number of groups to take from each group backend (1-200, default 50). offset: Number of groups to skip in each group backend (default 0).

Returns: JSON with "data" (list of groups with id, display_name, user_count, disabled_user_count) and "pagination" (count, offset, limit, has_more). The "id" is what update_user and the other group tools expect.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo
searchNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

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, so safety is covered. The description adds genuinely non-obvious behavior: admin/delegated-admin requirement and the per-backend pagination quirk where offset paging can repeat or skip groups.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded purpose followed by the caveat, then Args and Returns sections. The pagination paragraph is longer than strictly necessary but each sentence conveys a real constraint, so little is wasted.

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?

An output schema exists, yet the description still summarizes the return shape (per-group id, display_name, counts; pagination has_more) which is a bonus, not a redundancy. Auth, paging behavior, params, and return contract are all present for a read-only tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the load, and it does: search filters by ID or display name, limit is capped at 1-200 with default 50 per backend, offset default 0. Range, default, and semantics are all supplied.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb and resource ('List Nextcloud groups'), immediately distinguishing it from siblings like list_group_members, create_group, and delete_group. The added note that returned ids feed 'update_user and the other group tools' further clarifies scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

States the access prerequisite ('Requires admin rights (or delegated user administration)') and documents the limit/offset contract, but does not explicitly contrast this tool with alternatives such as list_users or list_group_members. Clear context, weaker on exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_mail_accountsA
Read-onlyIdempotent

List all email accounts configured in Nextcloud Mail.

Returns the accounts and their aliases for the current user. Use the account ID to list mailboxes and send emails.

Returns: JSON list of accounts, each with: id, email, aliases.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

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, and destructiveHint, covering the safety profile. The description adds useful behavioral context beyond annotations: results are scoped to the current user and include aliases, clarifying what 'all accounts' means.

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 concise and front-loaded with the core action. The only minor redundancy is that the return format is stated twice: once as 'returns the accounts and their aliases' and again in the structured 'Returns' block. This is not harmful but slightly repetitive.

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 zero-parameter read-only tool, the description covers scope, output structure, and downstream usage. With annotations and an output schema already present, nothing material is missing for an agent to select and invoke this tool 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 tool has no parameters, so parameter semantics are trivially satisfied. The description reinforces the output's purpose by explaining how the account ID will be consumed by downstream operations, which is helpful even without 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 verb and resource: 'List all email accounts configured in Nextcloud Mail.' It also scopes the operation to the current user and distinguishes it from account-specific operations like list_mailboxes and send_mail.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides practical context by telling the agent that the returned account ID should be used to list mailboxes and send emails. It does not explicitly name alternatives or exclusions, but for a zero-parameter listing tool the guidance is sufficient.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_mailboxesA
Read-onlyIdempotent

List mailboxes (folders) for a mail account.

Returns all mailboxes like INBOX, Sent, Drafts, Trash, etc. Use the mailbox ID to list messages in that mailbox.

Args: account_id: The mail account ID. Use list_mail_accounts to find it.

Returns: JSON list of mailboxes, each with: id, name, display_name, unread count, special_role.

ParametersJSON Schema
NameRequiredDescriptionDefault
account_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the description doesn't need to restate safety. It adds value by noting the return includes unread count and special_role, which is useful context 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured, with a clear summary, usage note for the parameter, and return description. It could be slightly trimmed, but the information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list tool with one parameter, the description covers the purpose, parameter semantics, and return fields. It doesn't need to explain pagination or filtering since the output schema presumably covers the response structure.

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 0%, so the description must explain the parameter. It explains that account_id is the mail account ID and how to find it, adding meaning beyond the bare schema definition.

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 mailboxes for a mail account, naming example folders (INBOX, Sent, etc.) and the return fields. It distinguishes from siblings like list_mail_messages and get_mail_message by focusing on the mailbox level.

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 explains when to use it (to get a mailbox ID for listing messages) and how to find the account_id via list_mail_accounts. However, it doesn't explicitly state when NOT to use it or mention alternative tools for filtering messages.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_mail_messagesA
Read-onlyIdempotent

List messages in a mailbox, newest first.

Returns message summaries (subject, sender, date, flags, tags) without the full body. Use get_mail_message with a message ID to read the full content.

Args: mailbox_id: The mailbox database ID. Use list_mailboxes to find it. limit: Maximum number of messages to return (1-100, default 20). cursor: Pagination cursor. Pass the smallest message ID from a previous response to fetch older messages.

Returns: JSON object with "data" (list of message summaries) and "pagination" metadata. Each message has: id, subject, date (unix timestamp), from, to, flags, preview, and tags (display_name and imap_label) when it has any.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
cursorNo
mailbox_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark the tool as read-only, idempotent, and non-destructive. The description goes further by disclosing ordering behavior ('newest first'), that full bodies are omitted, and how pagination works ('Pass the smallest message ID from a previous response to fetch older messages'). These are useful behavioral details beyond the structured annotation hints.

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 tightly organized: a one-line summary, a short clarification of return scope, clear Arg sections, and a Returns section. Every sentence adds value and there is no redundant or filler content.

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 list operation with three parameters stubby, the description covers identification of the mailbox, limits, pagination, output shape, and the relationship to sibling tools. Combined with the read-only annotations and output schema, an agent has everything needed to invoke and interpret the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries full responsibility for parameter semantics. It explains mailbox_id as the mailbox database ID obtainable via list_mailboxes, limit as maximum count with a range and default, and cursor with a concrete usage pattern for fetching older messages. No parameter is left unexplained.

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 begins with a specific verb and resource: 'List messages in a mailbox, newest first.' It clearly distinguishes this tool from its sibling get_mail_message by noting it returns summaries without full bodies, and from list_mailboxes by specifying the mailbox_id source. The purpose is immediately actionable.

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 instructs when to use get_mail_message instead ('Use get_mail_message with a message ID to read the full content') and tells the agent to use list_mailboxes to obtain the required mailbox_id. It also explains pagination usage with cursor, giving clear operational guidance for calling this tool correctly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_message_remindersA
Read-onlyIdempotent

List your upcoming message reminders, soonest first.

Talk returns at most the next 10, including ones already due but not yet sent, and leaves out federated conversations. In conversations you marked sensitive the message text is left empty.

Returns: JSON list of reminders with token, message_id, remind_at (UTC) and the message as a compact line ("[id] author: text").

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover the safety profile (readOnly, idempotent, non-destructive), and the description layers on genuinely useful behavior: a hard cap of 10, inclusion of already-due-but-unsent reminders, exclusion of federated conversations, and blanked message text in sensitive conversations. That is real disclosure an agent could not infer from 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose, followed by behavior and a compact return summary. Slightly over-documented in the 'Returns' block given an output schema exists, but nothing is wasted.

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 zero-parameter, read-only listing tool with an output schema, the description supplies everything an agent needs: scope, cap, ordering, and the two edge cases (federated conversations, sensitive conversations) that would otherwise cause misreading of results.

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 takes zero parameters, so the schema has nothing to document and the baseline is 4. No parameter information is needed or expected.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('List'), resource ('your upcoming message reminders') and ordering ('soonest first'), immediately distinguishing it from the sibling mutators set_message_reminder, remove_message_reminder and get_file_reminder.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the read-only listing framing, but the description never says when to reach for this versus alternatives, nor any prerequisite. The stated constraints (10-item cap, federation exclusion) are scoping behavior, not selection guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_notificationsA
Read-onlyIdempotent

List notifications for the current Nextcloud user.

Returns notifications sorted by newest first. Note: the Nextcloud server returns at most 25 notifications and does not support server-side pagination, so the total available is capped by the server regardless of the limit value.

Args: limit: Maximum number of notifications to return (1-25, default 25). offset: Number of notifications to skip for pagination (default 0).

Returns: JSON with "data" (list of notification objects with notification_id, app, user, datetime, subject, message, and optionally link and actions) and "pagination" (count, offset, limit, has_more).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark it as read-only, idempotent, and non-destructive, so the description builds on those rather than repeating them. It adds meaningful behavioral detail: the server caps results at 25, no server-side pagination is supported, ordering is newest first, and the response shape includes data and pagination.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose, followed by a necessary behavioral caveat and clearly structured Args and Returns sections. Every sentence adds useful information; there is no redundant or filler content.

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 two-parameter read-only tool, this description is complete: it covers purpose, parameter semantics, server limits, sorting, and return structure. The annotations plus output schema cover the remaining safety and response-format concerns, so nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries full responsibility for explaining the parameters. It clearly documents limit (range 1-25, default 25) and offset (number to skip, default 0), and explains the practical effect of the server cap on limit.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb ('List'), a specific resource ('notifications'), and a clear scope ('for the current Nextcloud user'). It also adds the sorting behavior ('newest first'), which further distinguishes this from any activity or announcement listing sibling.

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 clearly frames when to use the tool (listing the current user's notifications) and provides important context about the 25-notification server cap. It does not explicitly name alternatives or exclusions, but the resource and scope are specific enough that an agent will not confuse it with action-oriented siblings like dismiss_notification.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_pending_sharesA
Read-onlyIdempotent

List shares other users offered the current user that are waiting to be accepted.

Shares from users on this server wait here when the user turned off accepting shares automatically (a personal sharing setting) or the admin made accepting them necessary; federated shares from other servers wait here unless they come from a trusted server, whose shares are accepted automatically by default. Accept one with accept_share or decline it with decline_share, passing its id and "federated".

Returns: JSON list of pending shares: id, federated, share_type, path (the item's name), item_type, mimetype (both unknown for federated shares until accepted), uid_owner (the sharer; for federated shares a user on the "remote" server), plus for shares from this server displayname_owner, share_with (a group for group shares), expiration, note, label and declined. Nextcloud keeps offering a group share the user declined, so it stays on this list with declined: true; accept_share still accepts it. A declined federated group share also stays here.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, non-destructive behavior, but the description adds substantial domain behavior: why shares wait, federated trusted-server behavior, and that declined group shares remain listed and can still be accepted.

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 front-loaded and well structured, with purpose first and details afterward. The Returns section is somewhat lengthy given that an output schema exists, but the domain nuances it adds justify most of the length.

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 read-only listing tool with complex sharing and federation semantics, the description covers the relevant waiting conditions, return fields, and declined-share edge case. It is complete enough for correct invocation.

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 takes no input parameters, so there are no parameter semantics to document. Per the rubric, zero parameters establish a baseline 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 states a specific verb and resource: list shares offered to the current user that are waiting to be accepted. It clearly distinguishes the tool from siblings such as accept_share and decline_share, and implicitly from broader share-listing 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?

It explains when pending shares appear in this list, and explicitly routes the agent to accept_share or decline_share with the share id and federated flag. This provides clear alternatives and usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_questionsA
Read-onlyIdempotent

List all questions on a form (same data as get_form.questions).

Args: form_id: Numeric form id.

Returns: JSON array of questions, each with id, type, text, description, isRequired, order, options (for choice questions), and extraSettings.

ParametersJSON Schema
NameRequiredDescriptionDefault
form_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds useful return-shape context and the equivalence to get_form.questions, but it does not disclose auth requirements, error behavior, or ordering 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 summary line is front-loaded and the Args/Returns sections are compact. The Args line is somewhat redundant with the input schema, but the overall structure is clear and free of fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple single-parameter read-only tool with annotations covering safety, the description adequately states the operation, return fields, and relationship to get_form. It does not cover error cases or order guarantees, but these are minor for this endpoint.

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%, so the description should compensate, but 'Numeric form id' merely restates the integer type from the schema. It provides no guidance on how to obtain the id, accepted ranges, or behavior for invalid 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 uses a specific verb ('List') and resource ('all questions on a form'), and explicitly equates it with get_form.questions. This clearly distinguishes it from singular get_question and the broader get_form tool.

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 phrase 'same data as get_form.questions' implies this can be used as a questions-only alternative to get_form, but it never explicitly states when to prefer this tool over get_form or get_question. Usage guidance is implied rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_recent_collective_pagesA
Read-onlyIdempotent

List the most recently changed pages across all your collectives, newest first.

Changes by anyone count; visits do not.

Args: query: Only pages whose title contains this (default: all). limit: Maximum pages (1-100, default 10).

Returns: JSON list of pages with id, title, collective (its name) and collective_id (null for a collective whose name has no letters or digits), plus the usual page fields.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so safety is covered. The description adds genuinely new behavioral context by defining what counts as a change ('Changes by anyone count; visits do not'), which directly determines the result ordering.

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?

Purpose is front-loaded, followed by tightly written Args and Returns sections with no filler. The Returns block partially overlaps the existing output schema, but it still earns its place by documenting the collective_id null edge case.

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 an output schema present and annotations covering the safety profile, the description supplies what is missing: both parameter semantics and the sort/change semantics. It omits any note on pagination or required permissions, but for a read-only list tool nothing critical is absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the full burden, and it does: 'query' is defined as a title-contains filter with a default of all, and 'limit' is bounded (1-100) with a default of 10. Both parameters gain meaning that the bare schema (only titles and defaults) does not provide.

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 uses a specific verb and resource ('List the most recently changed pages') and adds scope and ordering ('across all your collectives, newest first'), which implicitly separates it from siblings like get_collective_pages or search_collective_pages. It never names an alternative sibling explicitly, so it stops short of the top tier.

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?

'Changes by anyone count; visits do not' clarifies the meaning of 'recently changed', which is useful selection context. However, there is no explicit when-to-use-this-vs-another-tool guidance (e.g., versus search_collective_pages or get_collective_pages), leaving usage only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_search_providersA
Read-onlyIdempotent

List available Unified Search providers.

Each Nextcloud app can register search providers. Use the provider id with unified_search to search that provider. The filters field shows what extra filters each provider supports beyond the search term.

Common filter types:

  • since/until: ISO 8601 datetime to bound results by date

  • person: user ID to filter by author/participant

  • title-only: boolean, search titles only

Returns: JSON list of providers with: id, name, app, and optionally filters.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint, idempotentHint, and non-destructive, so the safety profile is covered. The description goes beyond this by explaining that providers are registered per app, that a filters field indicates supported extra filters, and by enumerating common filter types such as since/until, person, and title-only. It also documents the JSON return format.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well structured: a one-line purpose, a short contextual note, a compact bullet list of filter types, and a clear Returns section. Every sentence earns its place, and the most important usage guidance is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no parameters, read-only annotations, and an output schema available, the description covers everything an agent needs to select and invoke this tool correctly. It even adds the cross-tool guidance for using provider IDs with unified_search, which is valuable contextual 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?

The tool has zero parameters, so there is no input semantics to clarify beyond the empty schema. The description adds useful meaning around the returned fields and filter types, even though those are outputs rather than inputs. This matches the baseline expected for a no-parameter tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'List available Unified Search providers.' It clearly differentiates this tool from the sibling unified_search by explaining that provider IDs from this listing are used with unified_search. The return shape is also stated, so an agent knows exactly what this operation produces.

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: this tool discovers what search providers are available, and the returned provider id is then used with unified_search. It does not explicitly list when not to use it, but the relationship to the unified_search sibling is stated directly, making the intended workflow evident.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_shared_itemsA
Read-onlyIdempotent

List what was shared in a conversation: files, media, polls, locations, pinned messages and more.

Args: token: The conversation token. item_type: One type to list: audio, deckcard, file, location, media, other, pinned, poll, recording or voice. Empty (default) gives the latest few of every type. limit: Maximum items (per type without item_type: 1-20, default 20; with item_type: 1-200).

Returns: JSON object mapping each type to its items, each the chat message that shared it ("[id] author: text"), in Talk's order (newest first; pinned messages by when they were pinned).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
tokenYes
item_typeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds real context beyond that: the newest-first ordering and the special pinned-message ordering (by pin time), plus the JSON shape keyed by type. It omits any auth/permission notes, keeping it just short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded purpose sentence, then organized Args and Returns blocks with zero filler. The item_type enumeration is long but necessary given the schema has no enums. Slightly list-heavy, but every line 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?

All three parameters are documented and the return format is described despite an output schema existing, so an agent has everything needed to call it correctly. Ordering semantics and defaults round it out; only cross-tool selection guidance is missing.

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 0%, so the description must carry the parameters, and it does so completely: token, the full enum for item_type, and the differing limit ranges (1-20 across all types, 1-200 for a single type) with the 20 default. This is exactly the compensation a 0%-coverage schema requires.

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 ('List') plus the exact resource ('what was shared in a conversation') and enumerates the item types, making it clearly distinguishable from siblings like get_messages or search_files. An agent can tell what this returns without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explains the parameter-triggered behaviors ('Empty (default) gives the latest few of every type') which is useful usage guidance. However, it never states when to prefer this tool over alternatives such as get_messages or search_files, and offers no explicit exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_sharesA
Read-onlyIdempotent

List file/folder shares from Nextcloud.

Without arguments, returns all shares owned by the current user. With a path, returns shares for that specific file or folder. With shared_with_me, returns the shares other users gave the current user instead.

Args: path: Optional file/folder path to filter shares (e.g. "/Documents/report.pdf"). reshares: If true, include shares by other users on the same files. subfiles: If true and path is a folder, list shares of files inside it (not the folder itself). shared_with_me: If true, list the shares the current user received from others (directly, through a group, a team or a Talk conversation, or from another server). "path" is then where the item shows up in the current user's files and uid_owner/displayname_owner say who shared it; federated shares have federated: true and the other server in "remote". Shares still waiting to be accepted are not included (see list_pending_shares). Cannot be combined with reshares or subfiles. limit: Maximum number of shares to return (1-200, default 50). offset: Number of shares to skip for pagination (default 0).

Returns: JSON with "data" (list of share objects) and "pagination" (count, offset, limit, has_more). share_type values: 0=user, 1=group, 3=public link, 4=email, 6=federated, 7=team, 9=federated group, 10=talk room, 12=deck card.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNo
limitNo
offsetNo
resharesNo
subfilesNo
shared_with_meNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish the safe read-only, idempotent profile, and the description goes further by disclosing the return shape, the full share_type enumeration, that pending shares are excluded, and federated-share fields. That is genuine added 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose, then organized into Args and Returns blocks. It is long, but given 0% schema coverage the per-parameter detail earns its place; only the cross-reference parentheticals verge on extra.

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?

Even though an output schema exists, the description fully covers the modes, constraints, parameter behavior, pagination, and result interpretation. Nothing an agent needs to call this correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden and does so: every one of the six parameters gets a plain-language meaning, defaults (limit 1-200/default 50, offset default 0), example path syntax, mode-dependent semantics for path/subfiles, and a stated mutual exclusion.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List file/folder shares from Nextcloud') and immediately differentiates its three operating modes (no args, path, shared_with_me), which is enough to distinguish it from get_share, create_share, and list_shared_items without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly explains when each mode applies and names an alternative for the excluded case ('Shares still waiting to be accepted are not included (see list_pending_shares)'), plus states a hard constraint ('Cannot be combined with reshares or subfiles'). It doesn't contrast against list_shared_items or get_share, so it stops just short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_submissionsA
Read-onlyIdempotent

List submissions (responses) to a form. Only the form owner can view submissions.

Args: form_id: Numeric form id. query: Optional full-text filter across answer text. limit: Max submissions to return (for pagination). offset: Starting offset (for pagination).

Returns: JSON object with fields: submissions (array of submission objects, each with id, userId, timestamp, answers), questions (the form's questions at submission time), filteredSubmissionsCount.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryNo
offsetNo
form_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish the operation is readonly, idempotent, and non-destructive. The description adds the owner-only access requirement and explains the return behavior with fields such as submissions, questions at submission time, and filteredSubmissionsCount. This goes beyond annotation coverage and gives practical 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 well-structured with a one-sentence purpose, a clearly labeled Args section, and a Returns section. Every line adds useful information and there is no filler or repetition of schema 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 readonly list operation, the description covers the required parameter, optional filters, pagination, and the exact shape of the returned data. Combined with annotations declaring safety, an agent has everything it needs to invoke the tool correctly without guessing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description fully compensates. It names all four parameters: form_id, query, limit, and offset, and gives meaningful semantics such as full-text filter across answer text, pagination behavior, and the numeric nature of form_id. This is exactly what an agent needs beyond the bare schema titles.

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 a specific verb and resource: 'List submissions (responses) to a form.' It clearly communicates a read-only listing operation. The scope is obvious and distinct from sibling tools like get_submission, even though alternatives are not explicitly named.

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 states a clear precondition: 'Only the form owner can view submissions.' This tells the agent when the tool is applicable. It does not explicitly compare with alternative tools like export_submissions or get_submission, but the core usage context is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_subscribed_threadsA
Read-onlyIdempotent

List the threads the current user follows, across all conversations.

A user follows the threads they start or post in, and the ones whose notification level they set; threads set to "never" are left out. Sorted by last activity (newest first).

Args: limit: Maximum number of threads to return (1-100, default 100). offset: Number of threads to skip for pagination (default 0).

Returns: JSON with "data" (list of threads, same shape as list_threads; use the token field to know the conversation) and "pagination" (count, offset, limit, has_more).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the read-only/idempotent annotations, it explains the inclusion criteria, sorting order, pagination behavior, and result shape. It also discloses the exclusion of 'never' notification threads, which an agent could not infer from annotations alone. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with purpose, then behavior, then args, then return format. No filler or duplicated annotation; the Args/Returns sections are compact and useful.

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 read-only, paginated list tool, it covers selection criteria, sort order, pagination parameters, and response structure (including how to identify the conversation via token). There is no critical gap for an agent to invoke it correctly.

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 0%, but the description fully compensates: limit is documented as a max count with a 1-100 range and default, offset is described as a pagination skip with default. The descriptions add meaning beyond the bare schema fields.

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 first line names a specific verb and resource: 'List the threads the current user follows, across all conversations.' It then defines what 'follows' means, which distinguishes it from related thread tools like list_threads and get_thread. This is specific enough to route an agent.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear context about scope (current user, all conversations) and filtering rules (threads with notification level 'never' are left out). However, it does not explicitly name alternatives or state when to prefer this over list_threads or get_thread, stopping one step short of full when/when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_tagsA
Read-onlyIdempotent

List system tags available in this Nextcloud instance.

System tags are shared labels that can be assigned to files for organization and filtering.

Args: limit: Maximum number of tags to return (1-500, default 50). offset: Number of tags to skip for pagination (default 0).

Returns: JSON with "data" (list of tags with id, name, user_visible, user_assignable) and "pagination" (count, offset, limit, has_more).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds valuable behavioral context: it operates at instance scope, supports pagination via limit/offset, and returns a structured response with data and pagination fields 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?

The description is well-structured and front-loaded with the core purpose. The system-tag explanation, Args, and Returns sections are each purposeful and free of filler, with parameter and return details clearly organized.

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-only listing tool with two optional parameters and an output schema, the description is complete. It covers scope, pagination behavior, parameter constraints/defaults, and return shape, leaving nothing essential for correct invocation unexplained.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description fully compensates by explaining both parameters: 'limit' is the maximum number of tags (1-500, default 50), and 'offset' is the number to skip for pagination (default 0). This adds meaning the raw schema lacks.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'List system tags available in this Nextcloud instance,' providing a specific verb, resource, and scope. It defines system tags as shared labels for files, distinguishing this global listing from per-file tag operations like get_file_tags and from mutations like create_tag/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 Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains that system tags are shared labels for organizing/filtering files, giving clear context for when to use the tool. However, it does not explicitly state when not to use it or name alternative siblings such as get_file_tags, 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.

list_task_listsA
Read-onlyIdempotent

List all task lists (CalDAV calendars with VTODO support) for the current user.

Returns task lists with their properties including name, color, supported component types, and write access status.

Returns: JSON list of task list objects with: id, name, color, components, writable, ctag. Use the id value with other task tools (e.g. "tasks").

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds meaningful behavior beyond that: it returns all task lists for the current user, includes write access status, and documents the exact fields in the result. No behavioral contradictions or hidden side effects are present.

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 front-loaded with the core purpose and stays compact overall. There is minor redundancy between 'including name, color, supported component types, and write access status' and the later explicit field list, but the duplication is harmless and the structure remains scannable.

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 that the tool has no parameters and an output schema exists, the description is complete enough for correct invocation. It states what the tool lists, the fields returned, and how to use the id downstream. No missing prerequisites, side effects, or special cases are necessary for this read-only enumeration tool.

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 the baseline is 4 because there is no parameter semantics for the description to clarify. The description focuses instead on the output structure and usage of the returned id, which is the only semantically relevant information an agent needs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'List all task lists (CalDAV calendars with VTODO support) for the current user.' It clearly defines scope by naming VTODO support, distinguishing task lists from plain calendars. It also states the return object's purpose, so an agent knows exactly what this tool produces.

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 gives clear context: use it to enumerate the current user's task lists, and then pass the returned id to other task tools such as 'tasks'. It does not explicitly name alternatives like list_calendars or say when not to use it, but the VTODO-specific definition makes the intended scenario unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_threadsA
Read-onlyIdempotent

List the most recently active threads in a Talk conversation.

A thread is started by sending a message with a thread_title (see send_message); its ID is the ID of that first message. Read a thread's messages with get_messages(token, thread_id=...).

Args: token: The conversation token. Use list_conversations to find tokens. limit: Maximum number of threads to return (1-50, default 50). Talk only returns the most recently active threads and has no offset.

Returns: JSON with "data" (list of threads, newest activity first) and "pagination" (count, limit, has_more). Each thread has thread_id, token, title, num_replies, last_activity (Unix timestamp), notification_level (default/always/mention/never) and first/last messages as compact lines "[id] author [thread ]: text" (last is null when there are no replies).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
tokenYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark it read-only, idempotent, and non-destructive, and the description adds meaningful behavior: Talk 'returns the most recently active threads and has no offset,' results are ordered newest-first, and edge cases like 'last is null when there are no replies' are disclosed. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose, then uses short labeled sections for background, args, and return shape. Despite its length, each sentence carries functional information and there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is complete for a list tool: it explains how to obtain the required token, constrains limit, notes lack of offset and ordering, and describes the response structure. Even with an output schema present, the additional return-field detail is valuable rather than missing.

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 descriptions are absent, but the description compensates fully: token is defined as the conversation token found via list_conversations, and limit gets explicit range (1-50) plus default of 50. Both parameters receive meaning beyond their raw JSON schema types.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'List the most recently active threads in a Talk conversation.' It further clarifies thread identity ('ID is the ID of that first message') and distinguishes itself from related tools like get_thread and list_subscribed_threads by emphasizing recency and conversation scope.

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 gives clear context and routes to related tools: use list_conversations to find tokens, send_message to start a thread, and get_messages to read a thread's contents. It does not explicitly state when to prefer this over list_subscribed_threads or when not to use it, so it stops short of full exclusionary guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_trashA
Read-onlyIdempotent

List items in the Nextcloud trash bin.

Returns files and folders that were deleted and can be restored.

Args: limit: Maximum number of items to return (1-200, default 50). offset: Number of items to skip for pagination (default 0).

Returns: JSON with "data" (list of trashed items with trash_path, original_name, original_location, deletion_time, is_directory, size, file_id) and "pagination" (count, offset, limit, has_more).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only and idempotent behavior, so the description adds value by disclosing the return structure (data and pagination) and the nature of the returned items. It does not contradict annotations and provides useful context about pagination that an agent needs to know.

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 well-structured with Args and Returns sections, making it easy to scan and parse. It is slightly longer than the bare minimum, but every section earns its place given the lack of schema descriptions. 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 absence of schema descriptions and formal output schema, the description provides complete parameter documentation and a full return field list, sufficient for correct invocation. It omits permission or rate-limit details, but for a non-destructive list operation with readOnlyHint, these are less critical. Overall complete for its complexity.

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 0%, but the description fully compensates by documenting both parameters with explicit ranges, defaults, and purposes. It states limit max 200 (default 50) and offset default 0, which is exactly what an agent needs to invoke the tool correctly.

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 ('List') and the resource ('items in the Nextcloud trash bin'), and immediately clarifies that these are deleted files/folders that can be restored. This distinguishes it from sibling tools like delete_trash_item, restore_trash_item, and list_directory without ambiguity.

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 establishes a clear context for use: when an agent needs to enumerate trash bin contents. The phrase 'files and folders that were deleted and can be restored' implicitly tells the agent when to use this tool over others, but it doesn't explicitly name alternatives or state when not to use it, so it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_usersA
Read-onlyIdempotent

List Nextcloud users. Uses server-side pagination.

Args: search: Optional search string to filter users by name/email. limit: Maximum number of users to return (1-200, default 25). offset: Number of users to skip for pagination (default 0).

Returns: JSON with "data" (list of user ID strings) and "pagination" (count, offset, limit, has_more).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo
searchNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover readOnly/idempotent/non-destructive behavior. The description adds valuable context about server-side pagination, parameter constraints (limit 1-200), and the exact response shape (data list and pagination object). This goes beyond the annotations by explaining how results are returned and paginated.

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 tightly written with a clear front-loaded purpose, then a structured Args section, then a Returns section. No redundant sentences or fluff – every line serves a purpose.

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 list operation, the description covers everything an agent needs: purpose, pagination behavior, all parameters, and the return format. With an output schema present, the agent can rely on the structure, but the description already explains it. No gaps are apparent.

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 0%, so the description fully compensates by explaining each parameter: search filters by name/email, limit caps the count with range and default, offset controls pagination with default. This adds meaning far beyond the raw schema which only lists types and defaults.

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 'List Nextcloud users' – a specific verb and resource – and distinguishes itself from sibling tools like get_user (single user) and create_user (creation). The mention of server-side pagination further clarifies its scope as a bulk listing operation.

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's evident this tool is for listing multiple users, and the pagination parameters imply it's for iterating over large sets. While it doesn't explicitly exclude alternatives, the tool name and description make its purpose unambiguous, and no similar listing tool exists in the sibling set.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_versionsA
Read-onlyIdempotent

List versions of a file by its file ID.

Returns the version history. Use the file_id from list_directory or search_files results.

Args: file_id: The numeric Nextcloud file ID. limit: Maximum number of versions to return (1-200, default 50). offset: Number of versions to skip for pagination (default 0).

Returns: JSON with "data" (list of versions with version_id, last_modified, size, content_type, author, label) and "pagination" (count, offset, limit, has_more).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo
file_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already carry readOnlyHint=true, idempotentHint=true, and destructiveHint=false, lowering the bar. The description adds genuine value beyond those by disclosing the pagination behavior (limit/offset, has_more) and the exact return structure (version fields and pagination object). This is meaningful context on top of the safety profile.

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?

Purpose is front-loaded in the first line, followed by an efficient Args/Returns structure. Every sentence earns its place — parameter documentation, pagination semantics, and return format. No fluff or repetition of schema data.

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 3-parameter, 1-required tool with 0% schema coverage and no shown output schema, this description is complete: purpose, how to source the key input, full parameter semantics, and a detailed return/pagination contract. Nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden — and it delivers. All three parameters are documented with semantics: file_id as the numeric Nextcloud file ID, limit with its 1-200 range and default 50, and offset as pagination skip with default 0. This fully compensates for the empty 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?

States a specific verb and resource: 'List versions of a file by its file ID.' This is distinct from siblings like restore_version (which restores a version) and get_file (which fetches content). The purpose is unambiguous and separates cleanly from related tools.

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?

Provides clear context on how to obtain the required parameter ('Use the file_id from list_directory or search_files results'), but never names the natural alternative sibling restore_version or states when to pick this over it. There is no explicit when-to-use versus when-not-to guidance, just a hint for sourcing the input.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

mark_conversation_readA
Idempotent

Mark a conversation as read, up to a message or completely.

Marking it completely read also dismisses your Talk notifications for it.

Args: token: The conversation token. message_id: The last message to count as read (default 0 = everything).

Returns: JSON with last_read_message, unread_messages and unread_mention afterwards.

ParametersJSON Schema
NameRequiredDescriptionDefault
tokenYes
message_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds a genuinely non-obvious side effect – that a complete read also dismisses Talk notifications – plus the return shape, which goes beyond the structured data.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The side-effect sentence is front-loaded and the Args/Returns blocks are compact. Slightly more structure than strictly needed for two parameters, but nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter mutation with annotations covering safety and an output schema covering return values, the description supplies the missing pieces: the partial-vs-complete semantics and the notification side effect. Adequate and nearly 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?

Schema description coverage is 0%, so the description must carry the load, and its Args section documents both parameters, notably explaining that message_id default 0 means 'everything'. The token entry is thin ('The conversation token'), but the effective meaning of the optional parameter is clearly conveyed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Mark a conversation as read') and immediately clarifies the two modes (up to a message vs. completely). An agent can distinguish this from the sibling mark_conversation_unread without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'up to a message or completely' clause implies how to use the message_id parameter, but there is no explicit when-to-use guidance, no prerequisite statement, and no routing to the obvious alternative (mark_conversation_unread). Usage is implied rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

mark_conversation_unreadA
Idempotent

Mark the last message of a conversation as unread again, as the "Mark as unread" menu entry does.

Args: token: The conversation token.

Returns: JSON with last_read_message, unread_messages and unread_mention afterwards.

ParametersJSON Schema
NameRequiredDescriptionDefault
tokenYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare write (readOnlyHint=false), non-destructive, and idempotent behavior. The description adds useful scope: only the last message is affected, and it returns specific fields. However, the return details are redundant with the output schema, and no auth or rate-limit context is given.

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 first sentence front-loads the purpose clearly. The Args/Returns sections add structure, but the Returns line repeats information already available in the output schema, slightly reducing efficiency.

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 annotations and an output schema, the description covers purpose, parameter meaning, and effect. The main gap is explicit usage guidance, but otherwise it is complete enough to 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?

With one parameter and 0% schema description coverage, the description must compensate. It says 'token: The conversation token,' which gives minimal meaning (conversation-specific) but no format or source details. Adequate for a simple string token, but not rich.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: marking the last message of a conversation as unread. It also references the 'Mark as unread' menu entry for behavioral analogy. No explicit sibling differentiation, but the name and description make it clear versus mark_conversation_read.

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 through the menu-entry analogy, but there is no explicit when-to-use guidance or mention of alternatives. Adequate minimum but leaves the agent to infer context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

move_collective_pageA

Move or copy a page, with its subpages, under another page, in this or another collective.

The page lands first among its new siblings. Needs edit rights in both collectives; a page cannot go under itself or its own subpages.

Args: collective_id: The collective the page is in now. page_id: The page to move or copy. parent_id: The page to put it under, in the target collective; 0 or the landing page ID for the top level. to_collective_id: Another collective to move or copy it to (default 0 = stay in this one). copy: True to copy and leave the original where it is. Every call makes another copy.

Returns: JSON with the page afterwards (the copy, when copying).

ParametersJSON Schema
NameRequiredDescriptionDefault
copyNo
page_idYes
parent_idYes
collective_idYes
to_collective_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare the safety profile (not read-only, not idempotent, non-destructive), and the description meaningfully extends it: 'Every call makes another copy' explains the non-idempotent semantics, the landing position ('first among its new siblings') is disclosed, and permission requirements are stated. This is real context beyond the structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded summary sentence, then compact Args and Returns sections. Every line adds a distinct constraint or parameter meaning with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 5-param mutation tool, the description covers purpose, permissions, edge cases (self/subpage), parameter meaning including defaults, and the return shape. An output schema exists and the description correctly defers detail to it while noting the copy-vs-move return difference.

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 0%, so the description must carry the parameters, and it does: each of the five params is explained, including defaults for to_collective_id (0 = stay in this one) and the special parent_id value 0 for top level. No gap remains.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb pair (move or copy) plus the resource (page with its subpages) and the target scope (under another page, in this or another collective). This clearly distinguishes it from siblings like update_collective_page, trash_collective_page, and delete_collective_page.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides concrete when/when-not constraints: needs edit rights in both collectives, and a page cannot go under itself or its own subpages. It does not name alternative sibling tools to redirect to, so it stays short of the full 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

move_fileA
Destructive

Move or rename a file/directory in Nextcloud.

Args: source: Current path. Example: "Documents/old-name.txt" destination: New path. Example: "Documents/new-name.txt"

Returns: Confirmation message.

ParametersJSON Schema
NameRequiredDescriptionDefault
sourceYes
destinationYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and readOnlyHint=false, so the agent knows it is a destructive operation. The description adds the return type (confirmation message) but does not disclose potential side effects like overwriting or handling of existing destinations. It does not contradict annotations, but adds minimal behavioral context beyond the purpose.

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 well-structured: a one-sentence purpose, then formatted parameter explanations, then a return statement. It is front-loaded with the action and avoids filler. Every part contributes 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 tool is simple, and the description covers the parameters and return value. It does not mention error cases or behavior when the destination exists, but given the availability of an output schema and the straightforward nature of move/rename, the description is nearly complete.

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 provides no descriptions (coverage 0%), so the description fully carries the burden. It explains 'source' as the current path and 'destination' as the new path, with concrete examples. This clearly maps to the two required parameters and exceeds what the schema alone offers.

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 moves or renames a file/directory in Nextcloud. The verb 'move' or 'rename' and resource are specific, distinguishing it from siblings like copy_file and delete_file. The examples reinforce the action without ambiguity.

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 by stating the action, but it does not explicitly compare to alternatives such as copy_file or delete_file. No when-not-to-use guidance is given, so an agent must infer the distinction from the verb alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

move_mail_messageA

Move a message to another mailbox (folder) of the same mail account.

Mail cannot move messages between accounts; such a move fails with "It is not possible to move across accounts yet".

The moved message gets a new ID, so message_id is no longer valid afterwards and must not be reused. IMAP UIDs are per mailbox, and Nextcloud assigns the new ID when it syncs the destination mailbox. The inbox and mailboxes with background sync enabled are synced automatically; other folders are synced when opened in the Mail app. A message that is already in the destination mailbox is left alone and keeps its ID.

Args: message_id: The message database ID. Use list_mail_messages to find it. destination_mailbox_id: The target mailbox ID, in the message's own account. Use list_mailboxes to find it.

Returns: Confirmation message on success.

ParametersJSON Schema
NameRequiredDescriptionDefault
message_idYes
destination_mailbox_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (readOnlyHint=false, idempotentHint=false, destructiveHint=false), the description discloses crucial behavioral details: the moved message gets a new ID and the old message_id becomes invalid, IMAP UIDs are per-mailbox, sync behavior depends on folder settings, and moving to the same mailbox is a no-op. This goes far 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?

The description is well-structured: main purpose first, then critical caveats, parameter explanations, and return behavior. Every sentence adds value—no filler, and important details like the cross-account failure message and ID invalidation are included without bloat.

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 moving operation's subtle side effects (new ID, sync behavior, same-mailbox no-op), the description covers all necessary guidance. It names both parameters, explains the failure mode, and states the successful return. No additional information is needed 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 0%, so the description carries full responsibility. It explains message_id as 'The message database ID' with guidance to use list_mail_messages, and destination_mailbox_id as 'target mailbox ID, in the message's own account' with list_mailboxes guidance. This adds real semantic meaning beyond the bare integer types.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a precise verb+resource+target: 'Move a message to another mailbox (folder) of the same mail account.' This clearly distinguishes it from sibling tools like copy_file or move_file, and no other mail-specific move tool exists among siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly states the same-account constraint and warns that cross-account moves fail, which tells the agent when not to use this tool. It also gives concrete instructions to find message_id via list_mail_messages and destination_mailbox_id via list_mailboxes, plus behavior for already-located messages.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pin_messageA
Idempotent

Pin a message to the top of the conversation for everyone. Needs moderator rights.

Pinned messages are listed by list_shared_items with item_type "pinned".

Args: token: The conversation token. message_id: The message to pin. until: When the pin should expire, as an ISO 8601 time with time zone (default: until someone unpins it). Talk removes expired pins on its next background job run.

Returns: JSON with the pinned message, or a note that it was already pinned.

ParametersJSON Schema
NameRequiredDescriptionDefault
tokenYes
untilNo
message_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds real context beyond the annotations: moderator-permission requirement, the default lifetime (until unpinned), that expired pins are cleared on the next background job run, and that an already-pinned message returns a note rather than an error. This aligns with idempotentHint=true. Missing rate-limit or failure-mode detail keeps it from a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads purpose and precondition, then uses clean Args/Returns sections. Every sentence adds information; nothing is redundant with the schema or annotations.

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 3-param mutation with a sparse schema, the description covers purpose, authorization, parameter formats, expiration behavior, and return shape. An output schema exists, so the return note is a bonus rather than a necessity.

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 0%, so the description carries the full burden and does so: it documents all three params, explains `until` as ISO 8601 with time zone, states its default semantics, and clarifies that `message_id` is the message to pin.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (pin) and resource (message) with scope ('to the top of the conversation for everyone'), which cleanly separates it from sibling unpin_message and from list_shared_items. An agent can identify the action without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear precondition ('Needs moderator rights') and points to where the result surfaces (list_shared_items with item_type "pinned"). It does not explicitly name unpin_message as the inverse operation or state when not to pin, so it falls short of a full 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

remove_circle_memberA
DestructiveIdempotent

Kick a member out of a circle. Requires moderator+. Cannot remove the owner.

Args: circle_id: String circle id. member_id: The id from list_circle_members (not the userId).

Returns: Confirmation with the removed member id.

ParametersJSON Schema
NameRequiredDescriptionDefault
circle_idYes
member_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate destructive and non-read-only behavior, and the description adds meaningful behavioral context: moderator permission is required, the owner cannot be removed, and a confirmation with the removed member id is returned. This goes beyond the structured annotations, though it does not elaborate on idempotent behavior or error cases when the member is already absent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: the core action appears first, followed by permission and constraints, then parameter semantics and return value. Every sentence adds functional value, with no filler or repetition of schema structure.

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 simple two-parameter signature, the description covers all essential invocation details: required parameters, the correct source for member_id, permission level, the owner limitation, and the return confirmation. The presence of an output schema reduces the need to describe the return shape in more detail.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has no descriptions for either parameter, so the description carries a critical burden. It clarifies that member_id must be 'The id from list_circle_members (not the userId)', which is essential to avoid passing the wrong identifier. circle_id is only described as a string circle id, adding little beyond the schema, but the member_id clarification compensates for the main ambiguity.

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 a specific verb and resource: 'Kick a member out of a circle', which clearly identifies the operation and its object. It also distinguishes this from related siblings by clarifying it is a removal action with moderator requirements, and it explicitly contrasts with circle membership operations rather than circle deletion or leaving a circle.

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 gives clear context for when to use the tool: kicking a member out of a circle, with the prerequisite 'Requires moderator+'. It also provides an exclusion, 'Cannot remove the owner', and points to list_circle_members as the source for the correct member_id. It does not explicitly name alternative tools such as leave_circle, but the usage context is sufficiently clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

remove_file_reminderA
DestructiveIdempotent

Remove the reminder set on a file.

Fails with "No reminder is set" if the file has no active reminder.

Args: file_id: Numeric Nextcloud file id.

Returns: Confirmation message.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=true, so the description doesn't need to restate those. It adds value by disclosing the specific failure mode ('No reminder is set') and confirming the operation targets an active reminder. This is 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 compact and front-loaded: the core action is in the first sentence, followed by the key failure condition, then the parameter and return value. Every sentence earns its place with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter, idempotent destructive operation, the description covers the action, the failure mode, the parameter semantics, and the return type. It doesn't describe the exact confirmation message format, but the output schema exists and the operation is simple enough that this is a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It does: 'file_id: Numeric Nextcloud file id' adds the type (numeric) and the system context (Nextcloud) that the bare integer schema lacks. With only one parameter, this is sufficient.

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 ('Remove the reminder set on a file') with a specific verb and resource. It is distinct from sibling tools like set_file_reminder and get_file_reminder, and the error condition ('Fails with "No reminder is set"') further clarifies its exact scope.

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 when to use this tool: when a file has an active reminder that needs removal. It doesn't explicitly name alternatives or exclusions, but the sibling set (get_file_reminder, set_file_reminder) makes the context clear. The error message also tells the agent what happens if used inappropriately.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

remove_mail_message_tagA
Idempotent

Remove a tag from a message. The tag itself is kept and can still be used on other messages.

Args: message_id: The message database ID. Use list_mail_messages to find it. imap_label: The tag's IMAP label (for example "$needs_reply").

Returns: JSON object with message_id and the removed tag (id, display_name, imap_label, color).

ParametersJSON Schema
NameRequiredDescriptionDefault
imap_labelYes
message_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, idempotentHint=true, and destructiveHint=false. The description adds value beyond these by explicitly stating the tag is retained and reusable, and by documenting the return object (message_id and tag details). This is meaningful behavioral context that aids prediction of side effects and output.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and well-structured: a one-sentence summary, a clarifying retention note, and a clean Args/Returns breakdown. Every sentence adds value, and the core action is front-loaded. No fluff or unnecessary repetition.

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 two-parameter, idempotent, non-destructive mutation, the definition covers how to obtain the message ID, the meaning of the IMAP label, the non-destructive tag behavior, and the return shape. An output schema exists, and the description even mirrors the return structure, leaving no significant gaps for an agent to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden. It fully compensates by explaining message_id as the database ID and directing the agent to list_mail_messages, and by giving a concrete IMAP label example ('$needs_reply'). Both required parameters are well-documented beyond their names and types.

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: 'Remove a tag from a message.' It adds a critical distinction by noting the tag itself is kept and can still be used on other messages, separating this from deleting a tag altogether. This is a specific verb+resource pair that distinguishes it from siblings like delete_tag or create_mail_tag.

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: the operation is non-destructive to the tag, which tells the agent when to choose this over tag deletion. However, it does not explicitly name alternatives or say 'use add_mail_message_tag to add a tag,' so it lacks explicit when-not-to-use guidance. Still, the context is sufficient for most selection decisions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

remove_message_reminderB
DestructiveIdempotent

Cancel your reminder about a message.

Args: token: The conversation token. message_id: The message the reminder is for.

Returns: Confirmation message.

ParametersJSON Schema
NameRequiredDescriptionDefault
tokenYes
message_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false, so the safety profile is covered. The description adds that a confirmation is returned, but does not say what happens if no reminder exists or what permissions are needed, so it adds only modest context beyond the structured data.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The operation is stated in the first sentence and the parameter notes follow compactly. The 'Returns: Confirmation message' line is somewhat redundant given the output schema exists, but the overall text is short 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?

For a two-parameter mutation with annotations and an output schema, the description covers purpose and both parameters adequately, and the return value is already documented by the output schema. It omits failure modes (e.g., no existing reminder) and any mention of the counterpart tools, leaving minor 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 0%, so the description carries the burden, and it does roughly identify each parameter ('the conversation token', 'the message the reminder is for'). However, it adds no format, type, or scope detail beyond those bare identifiers, so it only partially compensates for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Cancel your reminder about a message'), which is unambiguous and clearly distinct in name from set_message_reminder and list_message_reminders. It stops short of explicitly naming the sibling that sets a reminder, so no sibling differentiation is spelled out.

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 says what the tool does but gives no guidance on when to reach for it versus set_message_reminder or list_message_reminders, and no prerequisites or conditions. An agent must infer the usage context from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

remove_participantA
DestructiveIdempotent

Remove someone from a conversation. Needs moderator rights; owners cannot be removed.

Demote an owner to moderator first (set_participant_role). Removing yourself is leaving: it deletes the conversation when you were the only one in it, and is refused when you are its last moderator.

Args: token: The conversation token. attendee_id: The participant's attendee ID, from get_participants.

Returns: Confirmation message.

ParametersJSON Schema
NameRequiredDescriptionDefault
tokenYes
attendee_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructiveHint=true and idempotentHint=true, but the description goes well beyond them: permission requirements, the owner-immutability rule, the self-removal side effect of deleting the conversation, and the refusal condition. These are the exact behavioral traits an agent must know before a destructive call.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the action, then constraints, all in tight sentences. The trailing 'Returns: Confirmation message.' is redundant given the output schema exists, a minor waste rather than a real problem.

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 destructive, permission-gated mutation with an output schema and two params, the description covers permissions, edge cases, and the sibling to use for role changes. Nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the load, and it does: token is identified as the conversation token and attendee_id as the participant's attendee ID sourced from get_participants. It adds provenance value beyond the bare schema, though it stops short of format/edge-case detail.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb+resource: 'Remove someone from a conversation.' It also implicitly distinguishes itself from add_participant and leave_conversation by clarifying the self-removal case as 'leaving'. An agent can identify the operation without 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?

Explicit preconditions and routing: 'Needs moderator rights; owners cannot be removed' and the directive to call set_participant_role first. It also states when self-removal is refused (last moderator) and what it does instead (deletes an otherwise-empty conversation).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

remove_reactionB
DestructiveIdempotent

Take back your reaction to a chat message.

Args: token: The conversation token. message_id: The message. reaction: The emoji to remove, e.g. "👍".

Returns: JSON object mapping each remaining reaction to who used it.

ParametersJSON Schema
NameRequiredDescriptionDefault
tokenYes
reactionYes
message_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=true, covering the safety profile. The description adds that the response maps remaining reactions to their users, which is useful behavior context, but says nothing about permissions or what happens if the reaction isn't present.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the action, then cleanly structured Args/Returns sections. The Returns section is somewhat redundant given an output schema exists, but nothing is wasteful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

A mutation tool with three documented parameters and an output schema; the description covers the action, the parameters, and the return shape. Only permissions/error behavior is unaddressed, which is a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden — and it does document all three parameters, including a concrete emoji example ("👍") for reaction. The token and message_id descriptions are terse ('The conversation token', 'The message') but sufficient to call the tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('take back your reaction to a chat message'), which cleanly distinguishes it from the sibling add_reaction and get_reactions. It does not explicitly name those siblings, so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance, prerequisites, or alternatives are stated. An agent can infer this is the undo of add_reaction, but nothing in the text says so explicitly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rename_conversation_tagA
Idempotent

Rename one of your conversation tags; its conversations keep it.

Args: tag_id: The tag's ID, from list_conversation_tags. name: The new name.

Returns: JSON with the tag afterwards.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
tag_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=false, idempotentHint=true, destructiveHint=false. The description adds meaningful context beyond this: 'its conversations keep it' clarifies that renaming is non-destructive to associations, and it explicitly states the return format. It doesn't mention auth requirements or pagination, but adds useful operational 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?

Extremely concise and front-loaded. The purpose statement is first, followed by an Args section for the two parameters and a brief Returns note. Every sentence earns its place with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (2 params), the annotations covering safety profile, and the presence of an output schema, the description is nearly complete. It addresses the resource, its non-destructive effect on linked conversations, parameter sources, and return 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 description coverage is 0%, so the description must compensate. It names both parameters directly (tag_id, name) and adds critical context for tag_id ('from list_conversation_tags') and name ('the new name'). This gives the agent everything needed to supply values, though it doesn't add format constraints.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (rename) and resource (conversation tag) with a clear scope constraint ('its conversations keep it'). Distinguishes from siblings like update_conversation, set_conversation_tags, and delete_conversation_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 mention of tag_id coming 'from list_conversation_tags' provides an implied workflow prerequisite, which is helpful. However, there is no explicit when-to-use versus alternatives such as set_conversation_tags or update_conversation, and no exclusions are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rename_threadA
Idempotent

Rename a thread in a Talk conversation.

Only the author of the thread's first message or a conversation moderator can rename a thread. Talk posts a "thread renamed" system message into the thread.

Args: token: The conversation token. Use list_conversations to find tokens. thread_id: The thread ID (the ID of the thread's first message). title: The new thread title (must not be blank). Talk shortens titles longer than 203 characters.

Returns: JSON object of the updated thread (same shape as get_thread).

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYes
tokenYes
thread_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate this is a non-read-only, idempotent, non-destructive operation. The description adds valuable side-effect context by noting that 'Talk posts a "thread renamed" system message into the thread' and states the authorization requirement. No contradiction with annotations exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose, then follows with permission, side effect, and a structured Args/Returns section. Every sentence adds necessary information with no filler, making it appropriately sized for a 3-parameter tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that an output schema exists, the description need not detail return values, yet it still notes the updated thread shape. It covers purpose, permissions, side effects, and all parameter semantics, leaving no critical gaps for an agent to invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description fully compensates for all three parameters. It explains token ('Use list_conversations to find tokens'), clarifies thread_id as 'the ID of the thread's first message', and enriches title with constraints ('must not be blank', 'Talk shortens titles longer than 203 characters').

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Rename a thread in a Talk conversation', a specific verb and resource that clearly differentiates this from siblings like get_thread, list_threads, and set_thread_notification_level. No other sibling tool performs a rename, so the purpose is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly states who is allowed to rename ('Only the author of the thread's first message or a conversation moderator'), giving a clear precondition for use. It does not explicitly name alternatives, but the operation is unique among siblings, so the context is clear and no exclusions are needed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

reorder_optionsA
Idempotent

Reorder the options within a question.

Args: form_id: Numeric form id. question_id: Numeric question id. new_order: Array of option ids in the desired order.

Returns: JSON with the updated order for each option id.

ParametersJSON Schema
NameRequiredDescriptionDefault
form_idYes
new_orderYes
question_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already state the tool is non-read-only, idempotent, and non-destructive, and the description does not contradict them. The description adds only a return-format note ('JSON with the updated order for each option id') and no deeper behavioral context such as validation rules or effects on existing submissions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact: one clear purpose sentence, terse parameter descriptions, and a return line. There is no redundant prose or filler, and the most important operation is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple three-parameter reordering operation, the description provides all essential inputs and the return shape. It does not spell out that new_order should be a permutation of current option ids or what happens with invalid ids, but the annotations and tool simplicity keep that gap small.

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 property descriptions are absent (0% coverage), but the description minimally annotates all three parameters: form_id and question_id are numeric ids, and new_order is 'array of option ids in the desired order,' which clarifies order-sensitivity. It stops short of stating constraints like uniqueness or the need for a full permutation of existing option 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 opens with 'Reorder the options within a question,' naming a specific verb and resource. The phrase 'within a question' clearly distinguishes it from sibling reorder_questions, which handles reordering questions instead.

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 summary implies the tool is for changing the order of options in a question, and the parameter names make the target clear. However, it gives no explicit guidance about when to prefer this over reorder_questions or update_option, nor does it provide exclusion criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

reorder_questionsA
Idempotent

Reorder the questions on a form. Must list every question id exactly once.

Args: form_id: Numeric form id. new_order: Array of question ids in the desired order.

Returns: JSON with the updated order for each question id.

ParametersJSON Schema
NameRequiredDescriptionDefault
form_idYes
new_orderYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds the critical behavioral rule that every question id must be listed exactly once, and states the return value. With annotations already providing idempotentHint=true and destructiveHint=false, this extra constraint is useful context and does not contradict them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short and front-loaded with the purpose and the key constraint, followed by a compact Args/Returns structure. Every sentence contributes actionable information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple reorder tool with output schema and annotations present, the description covers the operation, the parameters' semantics, and the critical permutation constraint. No essential information for correct invocation is missing.

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?

With 0% schema description coverage, the description takes on full parameter explanation. It clarifies form_id as numeric and, more importantly, defines new_order as 'Array of question ids in the desired order' and adds the essential 'exactly once' requirement.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action and resource: 'Reorder the questions on a form.' It is clear, but it does not explicitly differentiate from the closely named sibling reorder_options, relying on the tool name for that distinction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the verb 'Reorder' and the constraint 'Must list every question id exactly once' gives a practical requirement, but the description gives no when-to-use guidance or mention of alternatives such as reorder_options.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

restore_collectiveA

Restore a collective from the trash.

Args: collective_id: The numeric collective ID (from list_collectives or prior trash operation).

Returns: JSON object with the restored collective details.

ParametersJSON Schema
NameRequiredDescriptionDefault
collective_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already signal this is not read-only, not idempotent, and not destructive; the description corroborates that by framing the operation as an un-trash action. It adds the useful context that the operation returns restored details but doesn't address permissions, failure cases, or side effects beyond moving out of trash.

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?

First sentence states purpose; the Args and Returns sections are minimal and structured. No filler or redundant elaboration.

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 single-parameter tool with an output schema, the definition covers what the tool does, how to source the ID, and what to expect in return. It could add a cross-reference to trash_collective/delete_collective or restore_trash_item, but nothing essential is missing for a successful call.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema provides only type integer, while the description adds that it is a numeric collective ID and where to obtain it. This compensates for the 0% schema description 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?

States a specific action (restore) and exact resource (a collective from the trash), which sets it apart from sibling restore_collective_page and restore_trash_item. The phrase 'from the trash' scopes the operation precisely.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear context: use it to restore a previously trashed collective, and tells where to get collective_id (list_collectives or prior trash operation). It does not explicitly name alternatives or when not to use it, so it stops short of full routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

restore_collective_pageB

Restore a page from the collective's trash.

Args: collective_id: The numeric collective ID. page_id: The numeric page ID.

Returns: JSON object with the restored page details.

ParametersJSON Schema
NameRequiredDescriptionDefault
page_idYes
collective_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=false, idempotentHint=false, and destructiveHint=false, covering the mutation/non-destructive safety profile. The description adds no additional behavioral context: no mention of side effects, permissions required, reversibility, or error behavior (e.g., what happens if the page is not in trash). Since annotations already exist, the description's contribution is minimal.

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: one sentence for the action, then a clean args list. It is front-loaded with the primary purpose, and there is no fluff or redundant phrasing. Every element serves a 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?

The description provides the basic input parameters and mentions the return value ('JSON object with the restored page details'), which is helpful given an output schema exists. However, it lacks context on when to use the tool (usage guidelines) and does not describe behavioral details like error conditions or prerequisites. For a low-complexity tool with two integer params, this is adequate but not complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate. It lists the two parameters as 'The numeric collective ID' and 'The numeric page ID,' which adds only that they are numeric (already implied by integer type) but does not explain what a collective is or what a page represents in this context. No added meaning beyond the schema's basic type and name.

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: 'Restore a page from the collective's trash.' This specifies the verb (restore), the resource (a page within a collective), and the source (trash), which distinguishes it from sibling tools like restore_collective (restore entire collective) and trash_collective_page (move to trash). It is not a tautology and provides concrete purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no guidance on when to use this tool versus alternatives. It does not mention that it should be used when a page is in trash and needs to be brought back, nor does it contrast with restore_collective (which restores a whole collective) or delete_collective_page (which permanently deletes). The agent must infer usage from the name and sibling context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

restore_trash_itemA
Idempotent

Restore a file or folder from the trash bin to its original location.

The item is restored to its original path. If the original path no longer exists, it is restored to the user's root folder. If a file with the same name already exists, a numeric suffix is added.

Args: trash_path: The trash path identifier from list_trash (e.g. "document.txt.d1711000000").

Returns: Confirmation message.

ParametersJSON Schema
NameRequiredDescriptionDefault
trash_pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, idempotentHint=true, destructiveHint=false. The description adds valuable behavioral context: restoration to original path, fallback to root folder if path missing, and numeric suffix on name conflicts. This goes beyond annotations and helps the agent understand side effects. It doesn't mention permissions or reversibility, but the idempotentHint and non-destructive annotation cover the safety profile.

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 and well-structured. It front-loads the core action, then explains fallback behaviors, then documents the parameter and return value. Every sentence earns its place with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (1 parameter, no nested objects, output schema present), the description is complete. It covers the action, edge cases (missing original path, name conflicts), parameter semantics, and return value. It doesn't mention permissions or error cases, but for a straightforward restore operation this is 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?

Schema description coverage is 0%, so the description must compensate. It explains the parameter 'trash_path' as 'The trash path identifier from list_trash' with an example. This adds meaning beyond the schema's bare 'Trash Path' title. It doesn't detail format constraints beyond the example, but for a single simple parameter this is sufficient.

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 'Restore' and the resource 'a file or folder from the trash bin to its original location.' It distinguishes itself from siblings like delete_trash_item and empty_trash by specifying the restoration action and behavior.

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 on when to use this tool: to restore a trashed item. It doesn't explicitly name alternatives or exclusions, but the behavior of restoring to original path or root folder gives enough context. Sibling tools like delete_trash_item and empty_trash are implicitly alternatives, but no explicit when-not-to-use guidance is given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

restore_versionA
Idempotent

Restore a file to a previous version.

The file's current content is replaced with the content from the specified version. The pre-restore content is preserved as a new version in the history, so no data is lost.

Args: file_id: The numeric Nextcloud file ID. version_id: The version identifier from list_versions (a unix timestamp string, e.g. "1711000000").

Returns: Confirmation message.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_idYes
version_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, idempotentHint=true, and destructiveHint=false. The description adds the critical detail that pre-restore content is preserved as a new version, which explains why destructiveHint=false and reassures the agent about data safety. It also states the return value, aligning with the output 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?

The description is efficiently structured with a one-line purpose, a clear behavioral note, and a concise Args section. Every sentence adds value, and the key information is front-loaded. No redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema exists (confirmation message), the description appropriately mentions the return type. It covers purpose, behavior, and parameter semantics thoroughly. Minor gaps like error handling are not necessary given the output schema and annotations. It is complete for an agent to call correctly.

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 0%, so the description carries the full burden for parameter meaning. It provides detailed semantics for both parameters: file_id is a numeric Nextcloud file ID, and version_id is a unix timestamp from list_versions. This goes beyond the schema's simple type definitions and gives actionable guidance.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a clear verb+resource: 'Restore a file to a previous version.' It then explains the exact mechanism (current content replaced, pre-restore preserved) and distinguishes itself from file operations like restore_trash_item by focusing on version history. The purpose is unambiguous and differentiates from siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly references list_versions as the source for version_id, establishing a clear prerequisite and cross-tool workflow. It does not explicitly state when not to use the tool or name alternatives, but the context is clear enough for an agent to infer the correct usage pattern.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_circlesA
Read-onlyIdempotent

Search for circles and potential members (users, groups, emails) by term.

Args: term: Search phrase. Matches against names/ids.

Returns: JSON array of search results. Each entry includes id (the singleId for users/groups/circles), userId, displayName, instance, and userType (1=user, 2=group, 4=mail, 8=contact, 16=circle).

ParametersJSON Schema
NameRequiredDescriptionDefault
termYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark this as readOnly, idempotent, and non-destructive, so the description does not need to restate safety. It adds useful behavioral context beyond the annotations by specifying the exact return shape, including the userType mapping (1=user, 2=group, 4=mail, 8=contact, 16=circle). This helps an agent interpret results correctly.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and well-structured, with a one-sentence summary followed by clearly labeled Args and Returns sections. Every line earns its place: purpose, parameter meaning, and return semantics. There is no filler or repetition of the annotations.

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-only search tool with one required parameter and a clear return description, this is complete. The annotations cover the safety profile, the parameter is fully explained, and the return format is documented with sufficient detail. An agent has everything needed to invoke the tool correctly for a search query.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema only defines term as a required string with no description, and schema coverage is 0%. The description compensates by explaining that term is a 'Search phrase. Matches against names/ids.' This gives the parameter real semantic meaning, though it could go further by noting acceptable lengths, wildcard behavior, or case sensitivity.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Search for circles and potential members (users, groups, emails) by term.' This makes the tool's purpose immediately clear and distinguishes it from listing tools like list_circles or list_circle_members, since it searches across multiple entity types rather than enumerating a single collection.

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 'Search for circles and potential members by term' and states what the term matches ('names/ids'), but it never explicitly says when to choose this tool over alternatives such as unified_search, list_circles, or get_circle. There is no when-to-use or when-not-to-use guidance, so the selection context is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_collective_pagesA
Read-onlyIdempotent

Search the text of a collective's pages.

Uses Collectives' search index, which a background job keeps up to date, so pages written in the last few minutes may not be found yet. For titles, get_collective_pages lists every page.

Args: collective_id: The numeric collective ID. query: Words to look for.

Returns: JSON list of matching pages (id, title, parent_id, emoji, timestamp, ...).

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
collective_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover readOnly/idempotent/non-destructive, but the description adds a genuinely useful trait the annotations cannot convey: the search index is background-updated, so very recent pages may be missing. That is real behavioral context beyond the structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose, followed by the freshness caveat and the alternative tool, then compact Args/Returns blocks. Every sentence is useful; the Returns block is mild redundancy given an output schema exists.

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 purpose, both parameters, freshness behavior, and the title-lookup alternative. An output schema exists, so return-value explanation is not required, making the description sufficient for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the load, and it documents both parameters: collective_id as the numeric collective ID and query as the words to look for. It conveys intent beyond the bare types, though it adds no format or matching-syntax detail.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Search') and resource ('text of a collective's pages'), and explicitly contrasts with get_collective_pages, which lists titles instead. An agent can distinguish it from search_files and list_recent_collective_pages without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear use context (find pages by text content) and routes the title-lookup case to get_collective_pages. It does not state explicit exclusions or prerequisites, but the alternative is named, which is more than most siblings provide.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_filesA
Read-onlyIdempotent

Search for files in Nextcloud by name and/or MIME type.

Searches recursively through all subdirectories of the given path. Results are sorted by last modified date (newest first).

At least one of query or mimetype must be provided.

Args: query: Text to find anywhere in the file name, case-insensitive, taken literally (% and _ are not wildcards). Example: "report" matches "quarterly-report.pdf", "report-2026.docx". path: Directory to search in (default: "/" for entire user folder). Example: "Documents" to only search in Documents. mimetype: Filter by MIME type prefix. Example: "image" for all images, "application/pdf" for PDFs, "text" for all text files. limit: Maximum number of results (1-100, default: 20). offset: Number of results to skip for pagination (default: 0).

Returns: JSON object with "data" (list of matching files) and "pagination" (count, offset, limit, has_more).

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNo/
limitNo
queryNo
offsetNo
mimetypeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, so safety is covered. The description adds genuinely useful behavior beyond that: recursive subdirectory traversal, newest-first sorting, and the pagination envelope (count/offset/limit/has_more) with defaults for limit/offset.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose then the two key operating facts (recursion, sort) before an Args/Returns breakdown. Dense but disciplined; every line adds information, though the Args block repeats parameter names already visible in the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers purpose, precondition, recursion, sorting, per-parameter semantics, and the return shape even though an output schema exists. Complete for an agent to invoke correctly; only the lack of explicit sibling routing keeps it from being fully exhaustive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden and does so: it explains query is a literal, case-insensitive substring (with the important note that % and _ are NOT wildcards), path defaults to the user root, mimetype is a prefix match, and limit/offset define pagination. Concrete examples disambiguate the prefix and substring semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Search) and resource (files) plus scope (by name and/or MIME type), and the sibling set contains related-but-distinct tools like list_directory, get_file, and unified_search. An agent can immediately identify this as the name/MIME file finder.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear operating context: recursive traversal, sort order, and the hard precondition 'At least one of query or mimetype must be provided.' It does not, however, explicitly name alternatives such as unified_search or list_directory, leaving the agent to infer when this tool beats them.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_mentionsA
Read-onlyIdempotent

Find who can be mentioned in a conversation, for writing a message that mentions them.

Args: token: The conversation token. search: Part of a name or ID; an empty string lists the first matches. limit: Maximum results (1-50, default 20). Needs a conversation you can write in.

Returns: JSON list of matches with id, label (display name), source (users, groups, guests, calls for everyone in the room, ...) and "mention", the text to put in the message, e.g. @"john.doe".

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
tokenYes
searchYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint/idempotentHint/destructiveHint=false, so safety is covered. The description adds real behavioral context beyond that: the write-permission prerequisite and the shape of the response (id, label, source, and the ready-to-use 'mention' text). It does not mention rate limits or pagination, but it is genuinely additive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the purpose, then a structured Args/Returns block where every line adds semantics. The permission note is slightly awkwardly tucked into the limit line, but overall it is tight and well-organized for its information density.

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?

Even though an output schema exists, the description still explains the return contents usefully. Combined with full parameter coverage and the write-permission prerequisite, an agent has everything needed to call it correctly.

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 0%, so the description carries the full burden, and it fully compensates. It explains token, that search matches a name/ID with an empty string listing first matches, and that limit caps results at 1-50 with a default of 20 - semantics well beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Find who can be mentioned in a conversation') plus the motivating use case (writing a mentioning message). This is clearly distinct from list-style siblings like get_participants, though it does not explicitly name an alternative to route against. Strong but not maximally differentiated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear context for when to use it ('for writing a message that mentions them') and a prerequisite ('Needs a conversation you can write in'). It stops short of naming excluded cases or a competing tool, so it is clear context without explicit alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

send_mailA

Send an email through a Nextcloud Mail account.

The email is sent via the SMTP server configured for the account.

Args: account_id: The mail account ID to send from. Use list_mail_accounts to find it. to: List of recipient email addresses (at least one required). subject: Email subject line. body: Email body text (plain text or HTML depending on is_html). cc: Optional list of CC email addresses. bcc: Optional list of BCC email addresses. is_html: Set to true if the body contains HTML (default: false, plain text).

Returns: Confirmation message on success.

ParametersJSON Schema
NameRequiredDescriptionDefault
ccNo
toYes
bccNo
bodyYes
is_htmlNo
subjectYes
account_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=false and idempotentHint=false, so the side-effecting nature is covered. The description adds useful behavioral context beyond that: the email is sent via the account-specific SMTP server and the tool returns a confirmation message on success. It does not explicitly warn that sending is irreversible, but this is not a contradiction and the non-idempotent annotation already signals it.

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 well-structured: a one-sentence purpose statement, a clarifying mechanism sentence, a compact Args list that matches every parameter, and a Returns line. Every sentence contributes necessary information, and the content is front-loaded with the core purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a side-effecting tool with seven parameters and no schema-level descriptions, the description is complete enough for an agent to invoke it correctly. It covers all arguments, prerequisite account discovery, optional fields, default behavior, and the success return. An output schema exists, so the absence of detailed return-shape documentation is acceptable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden for all seven parameters. It explains account_id discovery, the required list of recipients, subject/body roles, CC/BCC as optional lists, and the is_html plain-text/HTML switch with its default. This is meaningful semantic guidance that the schema alone does not provide.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Send an email through a Nextcloud Mail account.' It further clarifies the mechanism ('via the SMTP server configured for the account'), which distinguishes it from siblings like send_message and mail-manipulation tools. The name and description align without tautology.

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 gives clear workflow guidance by telling agents to use list_mail_accounts to find the account_id. It also makes the required recipient condition explicit ('at least one required'). It does not explicitly state when not to use this tool versus send_message, but the Nextcloud Mail framing provides enough context to select it correctly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

send_messageA

Send a chat message to a Talk conversation.

Supports Markdown formatting. Messages can be up to 32000 characters. Use @mention syntax to mention users: @"user-id" or @"display name".

Threads: pass thread_title to start a new thread with this message as its first message; the thread ID is that message's ID and is returned as thread_id, so pass it as thread_id to keep posting into the thread. An existing message cannot be turned into a thread. thread_title cannot be combined with reply_to or thread_id, and thread_id cannot be combined with reply_to (replying to a message inside a thread posts into that thread anyway).

Args: token: The conversation token. Use list_conversations to find tokens. message: The message text to send (supports Markdown). reply_to: Optional message ID to reply to (default: 0 = not a reply). thread_id: Optional ID of an existing thread to post into without quoting a message (default: 0). Use list_threads to find thread IDs. thread_title: Optional title; when set, the message starts a new thread with this title (default: "" = no new thread). Talk shortens titles longer than 203 characters.

Returns: JSON object of the sent message with its assigned ID, its thread_id (0 when the message is not in a thread) and, for thread messages, thread_title.

ParametersJSON Schema
NameRequiredDescriptionDefault
tokenYes
messageYes
reply_toNo
thread_idNo
thread_titleNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the minimal annotations (all false), the description reveals important behavior: Markdown support, the 32000-character limit, @mention syntax, the rule that an existing message cannot be turned into a thread, the title-length truncation, and the exact JSON return structure. This gives an agent a realistic model of the tool's side effects and 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?

The description is well-structured: an opening purpose sentence, a concise feature paragraph, clear constraint lines, a bulleted Args section, and a Returns section. It is longer than average only because it carries substantial necessary context, with no filler or repeated boilerplate.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has complex thread semantics, five parameters, and no useful schema descriptions, yet the description defines all parameter semantics, inter-parameter constraints, default behaviors, and the return format. An agent has everything needed to call it correctly, including prerequisite lookup tools.

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?

With 0% schema description coverage, the description fully compensates: it explains how to obtain token via list_conversations, the meaning of message, the default-0 semantics of reply_to and thread_id, the distinction between starting and continuing a thread, and the >203-character title shortening. Each parameter's purpose and interaction is explicit.

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 first sentence 'Send a chat message to a Talk conversation' uses a specific verb and resource and clarifies the domain context, distinguishing it from mail-related and read-only siblings. The additional detail about threading and parameters reinforces a unique operational identity.

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 gives strong contextual guidance, pointing to list_conversations for tokens and list_threads for thread IDs, and clearly explains when thread_title vs thread_id vs reply_to should be used. It does not explicitly say 'use X instead for reading messages' or otherwise name non-thread alternatives, so it lacks the explicit when-not/alternative contrast that would earn a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_collective_page_tagsA
Idempotent

Set which of the collective's tags a page has; tags left out are taken off.

Args: collective_id: The numeric collective ID. page_id: The numeric page ID. tag_ids: The complete list of tag IDs, from list_collective_tags; [] removes all.

Returns: JSON with the page afterwards, its tag IDs under "tags".

ParametersJSON Schema
NameRequiredDescriptionDefault
page_idYes
tag_idsYes
collective_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover the mutation/idempotency/safety profile (readOnlyHint=false, idempotentHint=true, destructiveHint=false). The description adds real behavioral value beyond them: replacement semantics ('tags left out are taken off'), the special case that [] removes all tags, and the return shape. This exceeds what the 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?

Front-loaded with the core action and its key constraint, followed by a compact Args/Returns block with no filler. Slightly structure-heavy but every line 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 three required params, an output schema (so return values need not be fully spelled out), and mutation annotations, the description covers replacement semantics, parameter meaning, and the source of tag IDs. Complete enough for correct invocation.

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 0% schema description coverage, the description carries the full burden and largely discharges it: collective_id and page_id are identified as numeric IDs, and tag_ids is defined as the complete list sourced from list_collective_tags with [] meaning remove-all. This compensates well for the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Set which of the collective's tags a page has') and immediately clarifies the replace semantics with 'tags left out are taken off.' This is clear and unambiguous, though it never names the sibling replace-vs-assign alternatives (assign_tag/unassign_tag) to fully differentiate itself.

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?

It points the agent at 'list_collective_tags' as the source of valid tag IDs, which is genuine usage context, but it offers no explicit when-to-use vs when-not guidance relative to the tag-assignment siblings. Usage is only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_conversation_preferencesA
Idempotent

Change your own settings for a conversation; other participants are not affected.

Only the settings you pass change, one request each; if one fails, the error names it and the settings already changed before it.

Args: token: The conversation token. favorite: Pin it to the top of your conversation list. archived: Move it to (or out of) your archive; archived conversations stay listed with is_archived true. important: Notify you about it even when your status is Do not disturb. sensitive: Hide message previews for it in the conversation list and notifications. notification_level: When to notify you about messages: "always", "mention" (only when mentioned) or "never". Conversations you never changed report "default", which Talk does not accept as a setting. call_notifications: Whether to notify you when a call starts.

Returns: JSON with the conversation afterwards, as get_conversation shows it.

ParametersJSON Schema
NameRequiredDescriptionDefault
tokenYes
archivedNo
favoriteNo
importantNo
sensitiveNo
call_notificationsNo
notification_levelNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With annotations only covering readOnly/idempotent/destructive, the description adds substantive behavior beyond them: partial-update semantics ('only the settings you pass change'), one-request-per-setting, and non-atomic failure reporting where earlier settings persist and the error names the failing one. It also flags the 'default' notification-level restriction, which is real behavioral guidance not derivable from structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The behavioral summary is front-loaded and tight, and the per-argument list is justified given zero schema descriptions. It is slightly longer than strictly necessary (the Returns line duplicates the output schema), but no sentence is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter mutation tool with no schema descriptions and only terse annotations, the definition covers scope, partial-update behavior, failure semantics, and every parameter's meaning. The output schema exists, so the description need not explain return values, and its brief mention is harmless rather than a gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden, and it does: every one of the seven parameters is explained in plain language, including the accepted enum values for notification_level ('always'/'mention'/'never') and the archive/notification side effects of archived, important, sensitive, and call_notifications. This is a strong compensation for the empty schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (change) and resource (your own per-conversation settings) and immediately scopes it with 'other participants are not affected', which separates it from sibling mutations like update_conversation, set_participant_role, or set_thread_notification_level. An agent can identify the correct tool without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes clear this is a personal-preferences update rather than a conversation-wide change, and the per-parameter notes imply when each setting applies (e.g. notification_level 'default' is not accepted, so the agent must choose a value). It stops short of explicitly naming alternatives or stating when-not-to-use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_conversation_tagsA
Idempotent

Set which of your tags a conversation has; tags left out are taken off.

Talk silently drops IDs it does not know and keeps at most 20, so compare the returned tag_ids with what you asked for.

Args: token: The conversation token. tag_ids: The complete list of tag IDs, from list_conversation_tags; [] removes all.

Returns: JSON with the conversation afterwards, including tag_ids.

ParametersJSON Schema
NameRequiredDescriptionDefault
tokenYes
tag_idsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (readOnlyHint=false, idempotentHint=true, destructiveHint=false), the description discloses two non-obvious backend behaviors: silent dropping of unknown IDs and a hard cap of 20 tags, plus the recommendation to verify returned tag_ids against the request. This is exactly the kind of hidden-behavior disclosure annotations cannot convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core operation, then the important caveats, then Args/Returns. It is tight overall, though the Returns block is somewhat redundant given an output schema exists and the tag_ids verification point was already made.

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 two-param mutation with an output schema present, the description supplies everything an agent needs: replacement semantics, source of IDs, edge cases (empty list, unknown IDs, 20 cap), and verification guidance. Nothing material is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry parameter meaning, and it does: token is the conversation token, tag_ids is the complete list sourced from list_conversation_tags, with [] meaning remove all. Both required params are documented with semantics beyond their types.

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 first sentence states a specific verb and resource ('set which of your tags a conversation has') and immediately clarifies the replace semantics ('tags left out are taken off'), which cleanly distinguishes it from the additive assign_tag/unassign_tag style siblings. An agent can identify this as a full-replacement tag operation without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It tells the agent the source of valid IDs ('from list_conversation_tags') and the empty-list case ('[] removes all'), which is clear operational context. It stops short of explicitly naming when to use this vs. alternatives, but the replacement semantics imply the usage condition well.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_file_reminderA
Idempotent

Set or update the reminder on a file.

The due date must be an ISO 8601 timestamp including a timezone and must be in the future. Past timestamps are rejected. Setting a reminder on a file that already has one replaces the existing one.

Args: file_id: Numeric Nextcloud file id. due_date: ISO 8601 timestamp with timezone, e.g. "2026-05-01T10:00:00+00:00" or "2026-05-01T10:00:00Z".

Returns: JSON object with file_id and due_date confirming the value set.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_idYes
due_dateYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (readOnlyHint=false, idempotentHint=true, destructiveHint=false), the description adds critical behavioral details: due date must be ISO 8601 with timezone, must be in the future, past timestamps are rejected, and setting a new reminder replaces an existing one. It also states the return shape. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the purpose, then adds validation rules, parameter details, and return info in a clean, scannable format. Every sentence adds essential information; there is no filler or repetition of schema metadata.

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 two-parameter mutation tool, the description covers all necessary context: what the tool does, constraints on both parameters, replacement behavior, and the return confirmation. The presence of an output schema plus the explicit return description leaves no material gap for an agent to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden. It explains file_id as a numeric Nextcloud file id and due_date as an ISO 8601 timestamp with timezone, including concrete examples and the future-date constraint. This fully documents both required parameters beyond the bare schema titles.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Set or update the reminder on a file,' which names a specific verb, resource, and operation. It clearly distinguishes itself from sibling tools get_file_reminder and remove_file_reminder by defining exactly what action it performs.

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 clearly establishes the operation's context: it sets or updates a reminder, replaces any existing reminder, and rejects past timestamps. It doesn't explicitly say 'use get_file_reminder to read or remove_file_reminder to delete,' but the set vs. get vs. remove distinction is evident from the tool names and the described behavior.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_mail_message_flagsA
Idempotent

Set or clear flags on a message: read/unread, starred, answered.

Only the flags you pass change; the others keep their current value.

Args: message_id: The message database ID. Use list_mail_messages to find it. seen: True marks the message as read, false as unread. flagged: True stars (flags) the message, false removes the star. answered: True marks the message as answered, false clears that mark.

Returns: JSON object with message_id and the flags that were set.

ParametersJSON Schema
NameRequiredDescriptionDefault
seenNo
flaggedNo
answeredNo
message_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (readOnlyHint=false, idempotentHint=true, destructiveHint=false), the description adds the key partial-update behavior: "Only the flags you pass change; the others keep their current value." It also explains the True/False semantics for each boolean flag, which is genuinely useful behavioral detail not present in 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?

The description is compact and well-organized: a clear one-line purpose, one key behavioral rule, a structured Args list, and a returns statement. Every sentence adds valuable information with no filler or repetition.

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 4-parameter flag mutation, the description covers all parameters, the partial-update behavior, how to obtain the required message_id, and what the return value will be. Combined with the annotations and output schema, no essential information is missing 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 description coverage is 0%, so the description carries the full burden, and it succeeds. It explains message_id with a lookup instruction, and precisely defines seen, flagged, and answered with their True/False meanings, fully compensating for the schema's lack of 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 first line states a specific action on a specific resource: "Set or clear flags on a message: read/unread, starred, answered." This clearly distinguishes it from mail siblings like get_mail_message, send_mail, and move_mail_message, which perform different operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The purpose statement makes the intended use clear, and the Args section gives a useful prerequisite: use list_mail_messages to find the message_id. It doesn't explicitly list excluded alternatives, but no sibling tool plausibly overlaps with setting mail flags, so the context is sufficient.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_message_reminderA
Idempotent

Have Talk remind you about a message later with a notification. Replaces an earlier reminder.

Args: token: The conversation token. message_id: The message to be reminded about. remind_at: When, as an ISO 8601 time with time zone, e.g. "2026-10-01T09:00:00+02:00". Must be in the future.

Returns: JSON with token, message_id and remind_at (UTC).

ParametersJSON Schema
NameRequiredDescriptionDefault
tokenYes
remind_atYes
message_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false (mutating), idempotentHint=true, and destructiveHint=false. The description adds genuinely useful context beyond these: 'Replaces an earlier reminder' explains the idempotent overwrite semantics, and 'Must be in the future' is a hard validation constraint not encoded anywhere else.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded purpose sentence, then tight Args and Returns sections with no filler. Every sentence contributes information an agent needs to call the tool correctly.

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?

All three required parameters are documented, the future-time validation and format are stated, and overwrite semantics are disclosed. An output schema exists, so the additional Returns block is a minor bonus rather than a necessity, and nothing needed to invoke the tool correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden and does so well: it defines token as 'The conversation token,' message_id as 'The message to be reminded about,' and remind_at with an explicit ISO 8601 format and timezone example plus a future-time constraint.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Have Talk remind you about a message later with a notification') and distinguishes scope ('a message') from the similarly-named set_file_reminder sibling. Also surfaces the replacement semantics, so an agent can identify it without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the purpose ('remind you about a message later'), and it notes it 'Replaces an earlier reminder,' which clarifies it is an upsert rather than an additive create. However, it names no alternative or when-not-to-use condition, and does not point to remove_message_reminder or list_message_reminders for the related lifecycle operations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_participant_roleA
Idempotent

Make a participant owner, moderator or plain user. Needs moderator rights (owner rights for owners).

Moderators manage the conversation and its participants. Owners are moderators nobody can remove; only owners can make someone owner or demote an owner, and an owner can step down to moderator. Owners need Talk 25 (Nextcloud 35) and exist only in group and public conversations. Guests can only be moderator or user, groups and teams have no role, and the last moderator cannot be demoted.

Args: token: The conversation token. attendee_id: The participant's attendee ID, from get_participants. role: "owner", "moderator" or "user".

Returns: JSON with the participant afterwards.

ParametersJSON Schema
NameRequiredDescriptionDefault
roleYes
tokenYes
attendee_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With annotations covering safety (readOnly=false, idempotent=true, destructive=false), the description still adds substantial operational context: permission requirements, the owner-vs-moderator power asymmetry, the irreversibility of removing an owner, and Talk 25 availability constraints. Nothing contradicts 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the action and then the permission semantics; the owner paragraph is dense but each rule is actionable. Slightly verbose relative to a three-parameter setter, but nothing reads as filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need only a one-line pointer ('JSON with the participant afterwards'), which is present. Combined with the permission rules and role semantics, an agent has everything needed to call this correctly.

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 0% and the schema carries no descriptions or enums, yet the description documents all three parameters, including the allowed role values and the provenance of attendee_id ('from get_participants'). It fully compensates for the schema 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?

States a specific verb+resource ('Make a participant owner, moderator or plain user') and enumerates the exact role values being set. It is clearly distinguishable from siblings like add_participant, remove_participant, and get_participants.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives rich when-it-works conditions: requires moderator rights, owner rights to create/demote owners, guest/group/team restrictions, and the last-moderator rule. It does not explicitly name an alternative tool or a 'use X instead' path, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_thread_notification_levelA
Idempotent

Set the current user's notification level for a thread.

Setting any level other than "never" also makes the user follow the thread, so it shows up in list_subscribed_threads; "never" removes it from that list.

Args: token: The conversation token. Use list_conversations to find tokens. thread_id: The thread ID (the ID of the thread's first message). level: One of "default" (use the conversation's setting), "always" (every message), "mention" (only when mentioned) or "never".

Returns: JSON object of the updated thread (same shape as get_thread).

ParametersJSON Schema
NameRequiredDescriptionDefault
levelYes
tokenYes
thread_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate mutation (readOnlyHint=false) and idempotency (idempotentHint=true). The description adds important behavioral context: the side effect of following/unfollowing the thread based on the level, and the return value shape. It does not cover error conditions or permissions, but the annotations already establish safety profile.

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?

Well-structured with a clear purpose sentence, a note on side effects, a compact Args list, and a Returns line. Every sentence adds value, and the most important information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 3-parameter tool with an output schema, the description covers all needed details: token acquisition, thread_id semantics, level options, and return shape. The side effect is disclosed. An agent has everything required to invoke it correctly.

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 0%, so the description must compensate. It fully explains each parameter: token ('Use list_conversations to find tokens'), thread_id ('the ID of the thread's first message'), and level (enumerates all four values with meanings). This is far beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific action ('Set the current user's notification level for a thread') with a clear verb and resource. It also explains a key side effect (following/unfollowing) that distinguishes it from other thread-related tools. The purpose is unambiguous and distinct from siblings like rename_thread or list_threads.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit guidance on how to find the token ('Use list_conversations to find tokens'), explains the level options with their effects, and notes the side effect on subscription. It does not explicitly state 'use this instead of X' but the tool's unique role is clear from the description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_user_enabledA
DestructiveIdempotent

Enable or disable a user account. Requires admin (or sub-admin) privileges.

A disabled user cannot log in and their sessions and app passwords stop working, but the account, its files and shares are kept. Enable it again to restore access. Nobody can enable or disable their own account. Disabling needs the destructive permission level, enabling the write level.

Args: user_id: The user to enable or disable. enabled: True to enable the account, false to disable it.

Returns: Confirmation message.

ParametersJSON Schema
NameRequiredDescriptionDefault
enabledYes
user_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations: explains the exact side effects of disabling (sessions and app passwords stop working, files/shares retained), the reversibility (re-enable restores access), the self-operation ban, and the distinct permission levels for the destructive vs write path. This meaningfully contextualizes destructiveHint=true and idempotentHint=true.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core action and privileges, then layers on behavioral detail. The Args/Returns framing is a little verbose for an MCP description but every sentence carries information, so waste is minimal.

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 two-param mutation tool, the description covers purpose, permissions, side effects, reversibility, and both parameters. An output schema exists, so the brief 'Confirmation message' note is sufficient and no return-value detail is required.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry both parameters, and it does: user_id is identified as the target and enabled is defined as true=enable/false=disable. It does not specify the expected format of user_id (ID vs email), leaving a minor 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?

States a specific verb pair (enable/disable) and resource (user account) unambiguously. An agent can immediately distinguish it from siblings like update_user, delete_user, or set_user_status without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear prerequisites and constraints: requires admin/sub-admin privileges, you cannot toggle your own account, and disabling vs enabling need different permission levels. It doesn't explicitly route to an alternative sibling (e.g., delete_user) or state when to prefer this over them, so it stops short of the 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_user_statusA
Idempotent

Set the current user's status.

You can set the online status type, a custom message, or both in a single call. At least one of status_type or message must be provided.

Args: status_type: Online status — "online", "away", "dnd", "invisible", or "offline". Leave empty to keep the current status type. message: Custom status message (e.g., "Working from home", "On vacation"). Leave empty to keep the current message. icon: Status icon emoji (e.g., "🏠", "🌴"). Only used with message. clear_at: Unix timestamp when the status message should be cleared. Use 0 to never auto-clear.

Returns: JSON object with the updated status.

ParametersJSON Schema
NameRequiredDescriptionDefault
iconNo
messageNo
clear_atNo
status_typeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark the call non-destructive and idempotent, and the description adds behavioral detail beyond them: leaving fields empty preserves current values, icon is only used with message, and clear_at=0 disables auto-clear. No contradictions with annotations are present.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded, and the Args/Returns layout is scannable with every line adding information. There is no filler or redundancy with the schema.

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 simple tool, non-destructive/idempotent annotations, and existing output schema, the description covers core behavior, constraints, parameter semantics, and return value. No critical information is missing for an agent to invoke it correctly.

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 0%, so the description carries the full burden and meets it: each parameter gets semantics, examples, valid values ('online', 'away', 'dnd', ...), and empty/default behavior. It also documents the at-least-one invariant not present in 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 opens with a specific verb and object ('Set the current user's status') and defines the scope: status type, custom message, or both in a single call. This is enough to distinguish from sibling get_user_status and clear_user_status by intent.

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?

Provides clear usage constraints ('At least one of status_type or message must be provided') and explains empty fields preserve current values, but never states when to prefer clear_user_status for clearing or get_user_status for reading. Selection among the status siblings is left implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

share_collectiveA

Create a public link to a collective, or to one page and its subpages. Anyone with the link can read.

Needs share rights in the collective. Sharing a page without subpages turns it into a folder page (its file becomes /Readme.md, the page ID stays), and sharing the landing page shares the whole collective. Deleting the collective's link leaves page links in place.

Args: collective_id: The numeric collective ID. page_id: A page to share on its own (default 0 = the whole collective). editable: Let people with the link edit too (default false). This needs your edit rights and is ignored when the collective does not let regular members edit; if it fails, the link exists read-only. password: Optional password the link asks for.

Returns: JSON with the share, including its url.

ParametersJSON Schema
NameRequiredDescriptionDefault
page_idNo
editableNo
passwordNo
collective_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare it is a non-read-only, non-idempotent, non-destructive write; the description adds substantial behavior beyond that: the permission precondition, the folder-page side effect (file becomes <title>/Readme.md, page ID retained), the landing-page cascade, the editable-flag failure fallback to read-only, and that deleting the collective link preserves page links. This is exactly the mutation context an agent needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action, then behavior, then Args/Returns. Dense but every sentence adds actionable information; only the Returns section is mildly redundant given an output schema exists.

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 4-parameter mutation tool with a public-link side effect, the description covers preconditions, defaults, side effects, edge cases, and failure modes. With an output schema present, no further return-value elaboration is needed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden and does so: collective_id (numeric ID), page_id (default 0 = whole collective), editable (default false, needs edit rights, ignored when members can't edit, fails to read-only), and password. Every parameter gains meaning not present in the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Create) and resource (public link to a collective / page), and immediately defines the scope distinction between collective-wide and single-page sharing. An agent can distinguish this from create_share, update_collective_share, and delete_collective_share without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear usage context: requires share rights in the collective, page_id=0 means the whole collective, and sharing the landing page shares everything. It does not, however, explicitly name the sibling alternatives (e.g., create_share vs. update_collective_share vs. list_collective_shares) or say 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.

submit_formA

Submit answers to a form on behalf of the current user.

Args: form_id: Numeric form id. answers: Object mapping question id (as string) to array of answer values. Example: {"42": ["my comment"], "43": [1, 3]} where 42 is a text question and 43 has option ids 1 and 3 selected. share_hash: Required if submitting via a public link share instead of direct access. Obtain from the form's hash field.

Returns: Empty OCS data on success (HTTP 201).

ParametersJSON Schema
NameRequiredDescriptionDefault
answersYes
form_idYes
share_hashNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this as a non-readonly, non-idempotent, non-destructive operation. The description adds context about the return format (empty OCS data, HTTP 201) and the share_hash mechanism, which helps an agent understand side effects. 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?

The description is efficient: a one-line purpose, a clean Args block with bullet points, and a Returns line. The most important info (purpose) is front-loaded, and every sentence earns its place. No fluff or repetition.

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 submit operation with three parameters (one nested), the description covers all parameters with examples, explains the share_hash edge case, and specifies the return value. An agent can call this tool correctly without needing the output schema or additional context. It's fully adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must fully compensate. It explains each parameter: form_id as numeric, answers with a concrete example mapping question ids to answer arrays, and share_hash with its purpose and source. This adds substantial meaning beyond the bare schema types.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Submit answers to a form on behalf of the current user.' This clearly distinguishes it from sibling tools like list_submissions, update_submission, or create_form. The purpose is unambiguous and not a tautology.

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 creating a form submission and clarifies the conditional use of share_hash for public link access. It doesn't explicitly contrast with update_submission or list_submissions, but the action is distinct enough that an agent can infer when to use it. The share_hash condition is a specific usage guideline.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

trash_collectiveA
DestructiveIdempotent

Move a collective to the trash.

The collective and its pages are soft-deleted. Use restore_collective to undo, or delete_collective to permanently remove it.

Args: collective_id: The numeric collective ID.

Returns: Confirmation message.

ParametersJSON Schema
NameRequiredDescriptionDefault
collective_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare destructiveHint=true and readOnlyHint=false, and the description adds the key behavioral fact that the operation is a soft-delete affecting both the collective and its pages, and that it is reversible via restore. This goes beyond the annotations by explaining the degree of destructiveness and the side effect on pages, which is useful context. It does not detail any potential error conditions or auth requirements, but the annotation coverage plus the soft-delete explanation justify a high score.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and well-structured: it front-loads the core action in the first sentence, immediately follows with usage context (undo/permanent), and then provides a clean Args and Returns section. Every sentence earns its place with no redundant filler, making it easy for an agent to parse quickly.

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 a single integer parameter and a confirmation return, the description covers the essential information: what it does, the side effects (soft-delete of pages), the reversal path, and the parameter meaning. It does not mention edge cases (e.g., what happens if the collective is already trashed) or error handling, but given the tool's simplicity and the presence of an output schema, the description is nearly complete. A small gap exists around idempotency behavior, but the annotations cover that.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With schema description coverage at 0%, the description carries the full burden for parameter documentation. It explicitly states 'collective_id: The numeric collective ID,' which clarifies that the parameter is the identifier of the collective to be trashed, adding meaning beyond the bare schema type of 'integer.' This is minimal but sufficient for a single, obvious 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 opens with a clear, specific verb+resource statement: 'Move a collective to the trash.' It also clarifies the action as a soft-delete, which distinguishes it from both restore (undo) and delete (permanent). This makes its purpose unambiguous and differentiates it from the sibling tools restore_collective and delete_collective without requiring schema 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 names the alternatives and the conditions for choosing them: 'Use restore_collective to undo, or delete_collective to permanently remove it.' This provides direct guidance on when to use this tool versus its siblings, leaving no ambiguity for the agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

trash_collective_pageA
DestructiveIdempotent

Move a page to the collective's trash.

The page is soft-deleted. Use restore_collective_page to undo, or delete_collective_page to permanently remove it. The landing page cannot be trashed.

Args: collective_id: The numeric collective ID. page_id: The numeric page ID.

Returns: Confirmation message.

ParametersJSON Schema
NameRequiredDescriptionDefault
page_idYes
collective_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, the description adds meaningful behavioral context: the page is soft-deleted, the action is reversible via restore, permanent removal requires a different tool, and the landing page is an invalid target. It even states that a confirmation message is returned, which is useful operational detail.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and well-structured: operation, soft-delete consequence, undo/permanent alternatives, constraint, args, and return value. Every sentence earns its place and the most important behavioral distinction is front-loaded.

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 two-parameter mutation with an output schema and annotations already covering the destructive/idempotent nature, the description provides the essential lifecycle, constraints, and response information. Nothing critical is missing for an agent to select and invoke this 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?

Schema description coverage is 0%, so the description must compensate. It does label both required parameters and adds the landing-page restriction, but 'numeric collective ID' and 'numeric page ID' largely restate the schema titles and provide no additional constraints or guidance on how to obtain the IDs. This is adequate for simple ID parameters but not more.

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 opening sentence 'Move a page to the collective's trash' gives a specific verb and resource, and the description immediately clarifies that the action is a soft-delete. It also names related sibling operations restore_collective_page and delete_collective_page, making the tool's purpose easy to distinguish from permanent deletion.

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 explains the soft-delete behavior and tells the agent that restore_collective_page undoes the action while delete_collective_page permanently removes the page. It also calls out the landing-page restriction, giving clear conditions for when this tool can and cannot be used.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

unassign_tagA
DestructiveIdempotent

Remove a system tag from a file.

Args: file_id: The numeric file ID. tag_id: The tag ID to remove.

Returns: Confirmation message.

ParametersJSON Schema
NameRequiredDescriptionDefault
tag_idYes
file_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already convey mutating/destructive behavior (destructiveHint=true, readOnlyHint=false) and idempotency (idempotentHint=true), so the description does not need to repeat those. It adds the 'system tag' detail and confirms a return message, but does not describe side effects or failure conditions. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short, front-loaded with the action, and organized with clear Args and Returns sections. Every sentence serves a purpose without unnecessary filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter mutation with annotations and an output schema, the description is nearly complete. Minor gaps remain: it does not explicitly say whether the tag object itself is deleted or merely unlinked from the file, and it provides no prerequisite information.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden of explaining parameters. It compensates by defining file_id as 'the numeric file ID' and tag_id as 'the tag ID to remove', which is meaningful beyond the bare integer types in the schema. It could add more context about where to find these IDs, but the essential semantics are present.

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 ('Remove') and a clear resource ('a system tag from a file'), which makes the operation unambiguous. It is easy to distinguish from sibling tools like assign_tag or delete_tag even without opening their schemas.

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 intended use is implied by the action: an agent should call this when a tag association needs to be removed from a file. However, there is no explicit when-to-use guidance, no mention of alternatives, and no statement that this differs from permanently deleting a tag.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

unpin_messageA
DestructiveIdempotent

Unpin a message, for everyone (needs moderator rights) or only from your own view.

Args: token: The conversation token. message_id: The pinned message. for_everyone: True (default) removes the pin for all participants; false only hides it for you. Talk remembers one hidden pin per conversation, so hiding another shows this one again.

Returns: Confirmation message.

ParametersJSON Schema
NameRequiredDescriptionDefault
tokenYes
message_idYes
for_everyoneNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=true, but the description adds real context: the moderator-rights prerequisite and the non-obvious behavior that Talk remembers only one hidden pin per conversation (hiding another re-shows the previous one). This is meaningful behavioral disclosure 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Uses a clean Args/Returns structure that is front-loaded with the purpose. Every sentence earns its place, though the structured blocks are slightly more verbose than strictly necessary.

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 3-parameter mutation tool with an output schema present, the description covers purpose, permission prerequisites, per-parameter semantics, and an edge-case quirk. Nothing an agent needs to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden and does so well: it explains token, message_id, and especially the for_everyone default plus its edge-case behavior. Each parameter's meaning is clear beyond what the bare schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Unpin a message') and immediately distinguishes the two operating scopes (for everyone vs. only your own view). An agent can identify the operation and its modes without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear context on when each mode applies (for_everyone requires moderator rights) and the effect of the default. It does not explicitly name the counterpart tool pin_message or state when not to use this one, so it falls short of full routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_circle_configA
Idempotent

Update a circle's config flags (bitmask). Requires admin or owner level.

The server auto-adjusts dependent flags — inspect the config field of the returned circle to see what was actually stored:

  • Setting REQUEST (64) without OPEN auto-adds OPEN → stored as 80.

  • Setting FEDERATED (32768) without ROOT auto-adds ROOT → stored as 40960.

  • Clearing OPEN while REQUEST is on drops REQUEST too.

  • Clearing ROOT while FEDERATED is on drops FEDERATED too.

Args: circle_id: String circle id. config: Bitmask integer. Valid user-facing flags (combine with OR): 8=VISIBLE (listed for non-members), 16=OPEN (anyone can join via join_circle), 32=INVITE (adding a member generates an invitation to accept), 64=REQUEST (join requests need moderator approval; implies OPEN), 128=FRIEND (members can invite friends), 256=PROTECTED (password-protected; password must be set via a dedicated setting endpoint, not exposed by this tool), 4096=LOCAL (not federated, even on GlobalScale), 8192=ROOT (circle cannot be nested inside another circle), 16384=CIRCLE_INVITE (nested circles confirm before joining), 32768=FEDERATED (federated to other instances; implies ROOT), 65536=MOUNTPOINT (auto-create Files folder). Pass 0 for a fully private, invite-by-admin-only circle. NOTE: 1 (SINGLE), 2 (PERSONAL), 4 (SYSTEM), 512 (NO_OWNER), 1024 (HIDDEN), 2048 (BACKEND), and 131072 (APP) are rejected by the public API (400 "Configuration value is not valid").

Returns: JSON of the updated circle. Compare config in the response to the requested value to detect auto-mutations described above.

ParametersJSON Schema
NameRequiredDescriptionDefault
configYes
circle_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes well beyond annotations by explaining server-side auto-adjustments with concrete examples (e.g., REQUEST→OPEN, FEDERATED→ROOT) and instructs to compare the returned config to detect mutations. It also discloses that certain flags are rejected by the public API and that password setting is handled elsewhere. This provides rich behavioral context beyond the idempotentHint=true 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?

Although long, the description is tightly structured with clear sections: purpose/requirement, auto-adjustment notes, Args list, and Returns. Every sentence conveys essential information; there is no fluff or redundancy. It is front-loaded with the core purpose and permission requirement.

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 complexity of a bitmask config with auto-adjustments and rejected flags, the description covers all necessary aspects: valid flags, dependencies, invalid values, and how to interpret the response. The output schema exists, so return format is implicitly covered, and the description adds guidance on comparing the config field. Nothing critical is missing.

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?

With 0% schema description coverage, the description fully compensates. It explains circle_id as a string and config as a bitmask with a comprehensive list of flag values, meanings, OR-combination instructions, the meaning of 0, and rejected flags. This is far more than the schema offers and ensures correct parameter usage.

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 a specific verb and resource: 'Update a circle's config flags (bitmask).' It clearly distinguishes from siblings like update_circle_name and update_circle_description by focusing on the config bitmask. The purpose is unambiguous and immediately understandable.

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 specifies the prerequisite 'Requires admin or owner level' and clarifies this tool is for config flags, not other circle properties. It doesn't explicitly mention when not to use it, but the context and sibling names make the intended use clear. It could be more explicit about alternatives, but the purpose is distinct enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_circle_descriptionA
Idempotent

Update a circle's description. Requires admin or owner level.

Args: circle_id: String circle id. description: New description text. Pass empty string to clear.

Returns: JSON of the updated circle.

ParametersJSON Schema
NameRequiredDescriptionDefault
circle_idYes
descriptionYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=false and destructiveHint=false, so the mutation and non-destructive nature are known. The description adds valuable context: the required permission level (admin/owner) and the special behavior of passing an empty string to clear the description. It also states the return format (JSON of updated circle), going 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 concise, with a clear opening sentence followed by structured Args and Returns sections. No fluff or redundant information; every line 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?

For a simple two-parameter update tool with an output schema, the description covers all essential aspects: purpose, permission, parameters, and return type. It is complete and self-sufficient, with no missing critical information.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden of explaining parameters. It clearly explains circle_id and description, including the special case of empty string to clear. This fully compensates for the lack of 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 action ('Update a circle's description') with a specific verb and resource. It distinguishes itself from sibling tools like update_circle_name and update_circle_config by focusing solely on the description field, so an agent can easily tell them apart.

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 provide guidance on when to use this tool versus alternatives. It mentions a prerequisite (admin or owner level) but no exclusions or alternative suggestions. The usage is implied by the name and the purpose, but not explicitly stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_circle_member_levelA
Idempotent

Change a member's level (role) in the circle. Requires admin or owner.

Args: circle_id: String circle id. member_id: The member-level id from list_circle_members (NOT the user's singleId or userId — use the "id" field from members). level: One of "member", "moderator", "admin", "owner". Promoting someone to "owner" transfers ownership; the caller becomes admin. Older Circles releases cannot transfer ownership on SQLite or PostgreSQL; the tool then says so and nothing changes.

Returns: JSON of the updated member (same shape as entries from list_circle_members: id, userId, level, status, circleId, singleId, …). Use the "level" field to confirm the new role. Note: this returns the member, not the circle.

ParametersJSON Schema
NameRequiredDescriptionDefault
levelYes
circle_idYes
member_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations (which only cover readOnly=false, idempotent=true, destructive=false). It discloses the permission requirement, the ownership-transfer side effect, and the version-dependent failure that silently changes nothing on SQLite/PostgreSQL — exactly the kind of behavioral context an agent needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose, then structured Args/Returns sections. Every sentence is informative, though the length is at the upper end; the Returns block partially overlaps the output schema but adds the useful note that the member, not the circle, is returned.

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 3-param mutation tool with 0% schema coverage and an existing output schema, the description fills every gap: identity of each parameter, permission requirements, side effects, and failure modes. Nothing essential is missing.

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 0%, so the description carries the full burden and does so. It clarifies member_id is the member-level id from list_circle_members, not the user's singleId/userId, and enumerates valid level values with their promotion semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Change a member's level (role) in the circle') with immediate scoping. It clearly distinguishes itself from siblings like update_circle_name, add_circle_member, and remove_circle_member. An agent can identify the operation without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides the crucial prerequisite ('Requires admin or owner') and describes the special ownership-transfer case and its fallback on older releases. It stops short of explicitly routing to alternatives (e.g., add/remove member), but the context is clear enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_circle_nameA
Idempotent

Rename a circle. Requires admin or owner level on the circle.

Args: circle_id: String circle id. name: New name.

Returns: JSON of the updated circle.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
circle_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=false, idempotentHint=true, and destructiveHint=false, so the mutation behavior is covered. The description adds valuable context by disclosing the permission requirement and stating that the return value is 'JSON of the updated circle,' going beyond what the 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?

The description is compact and well-structured: a one-sentence purpose, the permission requirement, and clearly labeled Args/Returns sections. Every line earns its place, and the key action is front-loaded.

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 two-parameter rename operation, the description covers the action, permission condition, parameter semantics, and return value. An output schema exists for the updated circle, so the agent has everything needed to invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0% description coverage, but the description compensates by documenting both parameters: 'circle_id: String circle id' and 'name: New name.' The 'name' explanation clarifies that it is the replacement value, which adds meaning beyond the bare schema type and title.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Rename a circle,' a specific verb and resource that clearly identifies the tool's function. This distinguishes it from sibling tools like update_circle_description and update_circle_config without requiring schema inspection.

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 states a usage prerequisite: 'Requires admin or owner level on the circle.' This gives an agent a clear condition for when the tool is appropriate. It does not name alternative tools or exclusions, but the prerequisite is strong contextual guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_collective_pageA
Idempotent

Change a page's text, title or emoji. Only what you pass changes.

The text replaces the whole page; read it first with get_collective_page to edit part of it. Earlier versions stay in the file's version history. Someone editing the page in the browser at the same time may be asked which version to keep.

Args: collective_id: The numeric collective ID. page_id: The numeric page ID. content: New Markdown text for the whole page. title: New title (renames the page). The landing page cannot be renamed. emoji: New emoji shown before the title; an empty string removes it.

Returns: JSON object with the page afterwards.

ParametersJSON Schema
NameRequiredDescriptionDefault
emojiNo
titleNo
contentNo
page_idYes
collective_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations (idempotent/non-read-only/non-destructive) by disclosing partial-update semantics ('Only what you pass changes'), full-replace semantics for text, preserved version history, and concurrent-edit conflict behavior. These are non-obvious traits an agent must know before calling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the key partial-update rule and the read-first instruction before the Args block, and every sentence earns its place. The Args/Returns layout is scannable, though slightly longer than strictly needed.

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 5-param mutation with an output schema already present, the description covers all params, replace/partial-update behavior, version history, conflict handling and the companion read tool. Nothing an agent needs to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description carries the burden and mostly does: it documents all five args and adds real semantics (empty string removes emoji, landing page cannot be renamed, content replaces the whole page). Minor gap: it never explains the nullable defaults the schema allows, so the null-vs-omitted behavior is inferred.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Change a page's text, title or emoji') with the exact mutable fields, which clearly separates it from create_collective_page, move_collective_page and trash_collective_page. It does not explicitly name those siblings, but the operation is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly tells the agent to read first with get_collective_page and the condition that selects it ('to edit part of it'), which is exactly the routing guidance needed. It also pre-empts the concurrent-editing scenario where a version conflict may be surfaced.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_collective_shareA
Idempotent

Change whether a public link lets people edit, and its password. Needs edit rights in the collective.

Args: collective_id: The numeric collective ID. token: The share token, from list_collective_shares. editable: Whether people with the link may edit. page_id: The page the link is for, 0 for the whole collective (default: looked up from the token). password: A new password; an empty string removes it; leave out to keep it.

Returns: JSON with the share afterwards.

ParametersJSON Schema
NameRequiredDescriptionDefault
tokenYes
page_idNo
editableYes
passwordNo
collective_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly=false, idempotent=true and destructive=false, so the safety profile is covered. The description adds genuinely non-derived behavior: the edit-rights requirement, that an empty password string removes it while omitting it preserves it, and that page_id defaults to a value looked up from the token.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the purpose sentence, then a compact Args block, then a one-line return note; no filler. The return line is mildly redundant given an output schema exists, keeping it just under top marks.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description need not explain the response shape, and it correctly stays brief there. Auth requirement, parameter semantics, defaults, and the token's origin are all covered, so an agent has everything needed to invoke it correctly.

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 0%, so the description carries the full burden, and it delivers: every one of the 5 parameters is defined, including the two nullables' semantics (password: empty string removes, omit to keep; page_id: 0 for whole collective, null means look up from token) and the token's source.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific update operation on a specific resource: toggling link editability and changing its password on a collective share. It is clearly distinguishable from list_collective_shares and delete_collective_share, which share the same noun. It stops short of 5 because it never names the closest alternative (e.g. the generic update_share) that an agent would need to rule out.

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?

"Needs edit rights in the collective" gives one real prerequisite, and the token's provenance is routed to list_collective_shares. However, there is no explicit when-to-use-this vs update_share/share_collective guidance and no exclusions, so usage is only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_collective_tagA
Idempotent

Rename a collective's page tag or change its color; pages keep it.

Args: collective_id: The numeric collective ID. tag_id: The tag's ID, from list_collective_tags. name: New name. color: New color, six hex digits with or without "#".

Returns: JSON with the tag afterwards.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
colorNo
tag_idYes
collective_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare not-readOnly, idempotent, non-destructive, so the safety profile is covered. The description adds real value beyond that by noting 'pages keep it' — clarifying that renaming/recoloring does not strip the tag from pages. That non-obvious retention behavior is exactly the kind of context annotations can't express.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded purpose sentence followed by clearly labeled Args and Returns sections; no padding. The phrase 'pages keep it' is slightly terse but earns its place as behavioral signal.

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?

An output schema exists, so return-value detail is not the description's responsibility, and it still gives a one-line summary. All four parameters are documented despite zero schema coverage. Only the missing when-to-use/exclusion guidance keeps it from a 5.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the burden, and it does: it explains collective_id as numeric, tag_id as sourced from list_collective_tags, name as the new value, and color as six hex digits with or without '#'. The hex-format detail materially reduces invocation error.

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 gives a specific verb+resource: rename a collective's page tag or change its color. That cleanly separates it from create_collective_tag, delete_collective_tag, and list_collective_tags. It stops short of explicitly naming the sibling it complements, but the scope is 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?

Usage is only implied: naming list_collective_tags as the source of tag_id tells the agent how to obtain an input, but there is no explicit statement of when to prefer this over create_collective_tag or delete_collective_tag, nor any prerequisites (e.g., permissions).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_contactA
Idempotent

Update an existing contact. Only provided fields are changed.

Pass an empty string to clear a scalar field (e.g. note=""). For emails/phones, pass [] to remove all. Do not provide both email and emails (or phone and phones).

Requires the contact's current etag (from get_contacts or get_contact) to prevent conflicting updates.

Args: uid: The contact UID to update. etag: Current ETag for conflict detection. Get from get_contacts/get_contact. full_name: New full display name. given_name: New first name. family_name: New last name. email: Set a single email (replaces all, TYPE=WORK). Pass "" to remove all. phone: Set a single phone (replaces all, TYPE=CELL). Pass "" to remove all. emails: Array of {"value","type"} to replace all emails. Pass [] to clear. phones: Array of {"value","type"} to replace all phones. Pass [] to clear. organization: New organization. Pass "" to remove. title: New job title. Pass "" to remove. note: New note. Pass "" to remove. book_id: Address book ID (default "contacts").

Returns: JSON with the updated contact object.

ParametersJSON Schema
NameRequiredDescriptionDefault
uidYes
etagYes
noteNo
emailNo
phoneNo
titleNo
emailsNo
phonesNo
book_idNocontacts
full_nameNo
given_nameNo
family_nameNo
organizationNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With readOnlyHint=false and idempotentHint=true, the annotations only gesture at mutability; the description supplies the important behavioral details: partial updates, empty-string clearing for scalar fields, [] clearing for emails/phones, and etag-based conflict prevention. It also explicitly warns against providing both singular and plural forms, which is valuable beyond what annotations or schema convey.

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 well-organized: overview, clearing rules, conflict-detection requirement, then an Args list. It is slightly redundant because the etag requirement appears both in the prose and again under the etag arg, but the extra length is justified by the high parameter count.

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 13-parameter mutation tool with conflict-detection requirements, the description covers prerequisites, parameter semantics, clearing behavior, mutual-exclusion constraints, and the return value. Nothing an agent needs to call it correctly is missing, and the output schema means the return value needs no further elaboration.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description documents every parameter in the Args section, including the special semantics of email vs emails, phone vs phones, and the default for book_id. This fully compensates for the bare input schema and adds details such as TYPE=WORK / TYPE=CELL and the shape of the array items.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Update an existing contact', clearly distinguishing this from the sibling create/delete/get contact tools. It also states the key patch semantics ('Only provided fields are changed'), so an agent knows exactly what operation this performs.

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 establishes clear usage context: this is for modifying an existing contact, and it mandates obtaining the current etag from get_contacts or get_contact first. It does not explicitly enumerate alternatives like create_contact or delete_contact, but the 'existing contact' framing plus the etag prerequisite is enough to route an agent correctly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_conversationA
DestructiveIdempotent

Change a conversation for everyone in it. Needs moderator rights.

Only the fields you pass change, one request each; if one fails, the error names it and the fields already changed before it.

Args: token: The conversation token. name: New name, up to 255 characters. description: New description, up to 2000 characters; an empty string removes it. read_only: True to stop everyone from writing (moderators included); also ends a running call. public: True to let anyone with the link join; fails when the instance requires passwords for public conversations, and for one-to-one, note-to-self and breakout conversations. False makes it invite only and removes everyone who joined through the link, so it needs the destructive permission level. preserved: True to protect it: it cannot be deleted, its history not cleared, and its public and joinable settings not changed until it is unpreserved. Owners only; needs Talk 25 (Nextcloud 35).

Returns: JSON with the conversation afterwards.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
tokenYes
publicNo
preservedNo
read_onlyNo
descriptionNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations by disclosing the partial-update semantics ('only the fields you pass change, one request each'), failure behavior ('the error names it and the fields already changed before it'), and destructive side effects like read_only ending a running call and public=False removing link-joined participants. This is exactly the kind of extra context annotations cannot express.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose and prerequisite, then well-organized Args section. Slightly verbose in places (the public line is dense), but every sentence conveys behavioral constraints that an agent needs, so nothing is wasted.

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 6-parameter mutation tool with a destructive annotation, zero schema coverage, and an output schema, the description supplies auth requirements, partial-update/failure semantics, per-field side effects, and return shape ('JSON with the conversation afterwards'). Nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the full load — and it does: it documents character limits for name and description, the empty-string removal convention, the semantics of read_only and public including password-requirement failures, and the constraints on preserved (owners only, Talk 25). This compensates fully for the schema 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?

States a specific verb and resource ('Change a conversation for everyone in it') with scope made explicit via 'for everyone in it', distinguishing it from per-user tools like set_conversation_preferences. An agent can immediately tell this is a conversation-wide mutation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Clearly states the prerequisite ('Needs moderator rights') and conditions for specific fields (public fails for one-to-one, note-to-self, breakout conversations; preserved needs owners and Talk 25). It lacks explicit routing to sibling tools like delete_conversation or set_conversation_tags, but the field-level conditions are strong.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_cospend_billA
Idempotent

Update a Cospend bill. Requires PARTICIPANT access.

Pass only fields you want to change. See create_cospend_bill for field semantics.

Args: project_id: String project id. bill_id: Integer bill id. what: New description. amount: New amount. payer: New payer member id. payed_for: New non-empty list of ower member ids (replaces, doesn't merge). Passing [] raises ValueError — the server no-ops silently on empty payedFor, which would look like a successful update but leave owers unchanged. date: New "YYYY-MM-DD" date. timestamp: Alternative to date. comment: New comment. category_id: New category id (0 = uncategorized). payment_mode_id: New payment mode id (0 = unset). repeat: New repeat mode ("n", "d", "w", "b", "s", "m", "y"). repeat_freq: New repeat frequency. repeat_until: New stop date "YYYY-MM-DD". Pass empty string to clear (repeat indefinitely). repeat_all_active: New owers behavior on repeat. deleted: 0 = restore from trash, 1 = move to trash. Use delete_cospend_bill for trashing in normal flow.

Returns: JSON {"bill_id": } confirming the updated bill id.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNo
whatNo
payerNo
amountNo
repeatNo
bill_idYes
commentNo
deletedNo
payed_forNo
timestampNo
project_idYes
category_idNo
repeat_freqNo
repeat_untilNo
payment_mode_idNo
repeat_all_activeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes far beyond the annotations by disclosing partial-update semantics, the payed_for replace-not-merge behavior, the silent server no-op on empty payedFor (with a ValueError safeguard), the deleted parameter's restore/trash dual meaning, and the exact return payload. This adds substantial context that annotations alone do not 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 front-loaded with purpose and access requirement, then organized as a clear Args list. Each parameter explanation is terse yet informative, and the extended note on payed_for is justified because it warns of a dangerous silent failure. No sentence is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's 16 parameters and zero schema description coverage, the description covers purpose, auth level, all parameter semantics, a critical gotcha, and the return format. It also references create_cospend_bill for deeper field semantics, avoiding unnecessary duplication. The agent has everything needed to invoke the tool correctly.

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?

With schema description coverage at 0%, the description carries the full burden of explaining all 16 parameters. Every parameter has at least a one-line semantic explanation, including special constraints (e.g., repeat modes, category_id 0 meaning uncategorized, repeat_until empty string to clear, deleted values). This fully compensates for the schema's lack of 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 opens with 'Update a Cospend bill,' which is a specific verb and resource that clearly distinguishes it from siblings like create_cospend_bill, delete_cospend_bill, and get_cospend_bill. It also states the required access level (PARTICIPANT), further narrowing the tool's role.

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?

There is clear guidance on when not to use the deleted parameter ('Use delete_cospend_bill for trashing in normal flow') and a reference to create_cospend_bill for field semantics. It also advises 'Pass only fields you want to change.' However, it does not explicitly frame when to choose update over create, though the verb and context make this obvious.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_cospend_memberA
Idempotent

Update a Cospend member. Requires MAINTAINER access.

Pass only the fields you want to change.

IMPORTANT: Setting activated=False on a member who has no bills will permanently delete them, not just disable them. To always keep a recoverable record, ensure the member has at least one associated bill first, or use delete_cospend_member which is unambiguous.

Args: project_id: String project id. member_id: Integer member id (from list_cospend_members). name: New display name. weight: New share weight. activated: True = active, False = disabled (or deleted if no bills). color: New hex color (with or without leading "#"). Pass empty string to clear the color (server picks one on next display). user_id: Link/unlink to a Nextcloud user id. Pass empty string to unlink.

Returns: JSON of the updated member, or null if the member was deleted as described above.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
colorNo
weightNo
user_idNo
activatedNo
member_idYes
project_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description usefully discloses auth requirements, partial updates, and a permanent-deletion side effect, but those behaviors contradict the annotations, which declare destructiveHint=false. Under the rubric, a description that contradicts its annotations scores 1 regardless of the added detail.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core operation and auth, then the critical warning, then a compact Args list, then return behavior. Each sentence earns its place; the length is justified by the dangerous edge case.

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 mutation tool with an output schema, the description covers access control, partial-update semantics, the destructive edge case and its mitigation, exact parameter sentinels, and return behavior. Nothing needed to invoke the tool correctly is missing.

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?

With 0% schema description coverage, the description carries the full burden and succeeds: every parameter is explained, including special values (empty string to clear color or unlink user_id), the source of member_id, and the conditional meaning of activated. An agent can construct every argument correctly without external knowledge.

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 opening sentence states a specific action and resource ('Update a Cospend member') and clarifies scope through the MAINTAINER requirement and partial-update behavior. It also distinguishes itself from delete_cospend_member by explaining the deletion edge case.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly instructs callers to pass only the fields they want to change and gives an unambiguous when-not case: if a recoverable record is required, ensure the member has a bill or use delete_cospend_member instead. This is direct alternative routing, not just implied context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_cospend_projectA
Idempotent

Update a Cospend project's settings. Requires ADMIN access.

Pass only the fields you want to change; omit the rest.

Args: project_id: String project id. name: New display name. auto_export: Periodic CSV auto-export frequency. Same code set as bill repeat: "n"=none (default), "d"=daily, "w"=weekly, "b"=biweekly, "s"=semi-monthly, "m"=monthly, "y"=yearly. currency_name: Main currency name (free-form string, e.g. "EUR"). Pass empty string to clear. deletion_disabled: When set, delete_cospend_bill returns HTTP 403 ("project deletion is disabled"). delete_cospend_project is NOT gated by this flag and still succeeds. Useful as a guard against accidental bill removal in shared projects. category_sort: Default category ordering. "a"=alphabetical (default), "m"=manual (custom order field), "u"=most used, "r"=recently used. payment_mode_sort: Same options as category_sort, for payment modes. archived_ts: Archive control with three special values. - 0 → archive now (server records the current Unix timestamp). - -1 → unarchive (clears the field). - any other int → archive at that exact Unix timestamp. Note: 0 ARCHIVES the project (it does not unarchive).

Returns: JSON {"project_id": ..., "updated": true} — the OCS endpoint returns no body, so this is a synthetic confirmation.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
project_idYes
archived_tsNo
auto_exportNo
category_sortNo
currency_nameNo
deletion_disabledNo
payment_mode_sortNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover read/write and idempotency, but the description adds valuable behavior: ADMIN requirement, partial-update semantics, the nuanced deletion_disabled flag and its effect on sibling tools, and the special archived_ts values including the warning that 0 archives rather than unarchives. It also discloses the synthetic confirmation response, which is beyond the structured 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 long but every section earns its place: purpose, permission, partial-update instruction, parameter details, and return value. The structure is front-loaded with the key facts and uses consistent formatting for the argument list.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 8 parameters and no schema descriptions, the description is fully self-contained: it covers the purpose, required permission, parameter semantics, special behaviors, and the response format. An agent has everything needed to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden, and it succeeds. Every parameter is explained with value sets, defaults, and special cases—notably archived_ts with its 0/-1/timestamp semantics and deletion_disabled's exact 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?

States a specific verb and resource: 'Update a Cospend project's settings.' This clearly distinguishes it from sibling tools like create_cospend_project, delete_cospend_project, and update_cospend_bill. The subsequent parameter list further reinforces the tool's scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear usage context: it requires ADMIN access and supports partial updates by passing only the fields to change. It does not explicitly name alternative tools or state when not to use it, but the context is strong enough for an agent to select it appropriately.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_eventA
Idempotent

Update an existing calendar event. Only provided fields are changed.

Uses the event's ETag for safe concurrent updates — if the event was modified since it was last read, the update will fail with a conflict error.

Args: calendar_id: Calendar identifier (e.g. "personal"). event_uid: The event's UID to update. Use get_events to find UIDs. summary: New event title. start: New start date/datetime in ISO 8601 format. end: New end date/datetime in ISO 8601 format. description: New description. Pass "" to clear. location: New location. Pass "" to clear. status: New status: "CONFIRMED", "TENTATIVE", or "CANCELLED". categories: New categories as comma-separated string. Pass "" to clear.

Returns: Confirmation message with the updated event UID.

ParametersJSON Schema
NameRequiredDescriptionDefault
endNo
startNo
statusNo
summaryNo
locationNo
event_uidYes
categoriesNo
calendar_idYes
descriptionNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=false, idempotentHint=true, destructiveHint=false. The description goes beyond these by disclosing the ETag-based concurrency conflict behavior and the partial-update semantics. It also explains clearing fields with empty strings, adding significant behavioral context not available from annotations or 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?

The description is well-structured: opening with the core action and partial-update note, followed by concurrency detail, then a clear Args list, and a Returns line. Every sentence adds value; no filler. The most important information is front-loaded, and the parameter documentation is efficient.

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 mutation tool with 9 parameters and an output schema, the description covers all necessary aspects: what it does, how partial updates work, concurrency behavior, parameter semantics, and the return value. The output schema exists but the description summarizes the return ('Confirmation message with the updated event UID'). It does not mention error cases beyond conflict, but that is acceptable given the ETag note.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries full responsibility for parameters. It provides an Args section that explains all 9 parameters, including formats (ISO 8601 for start/end), allowed values (status enum), and clearing semantics. This far exceeds the schema's bare names and types, making it easy for an agent to construct correct arguments.

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: 'Update an existing calendar event.' This uses a specific verb and resource, and the word 'existing' distinguishes it from create_event. The sibling list includes create_event, get_event, delete_event, so the update intent is 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 by saying 'existing calendar event' and points to get_events for finding UIDs. It also explains partial update behavior ('Only provided fields are changed') which is key to using it correctly. However, it does not explicitly contrast with create_event or mention scenarios where update is not appropriate, 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.

update_flowA
DestructiveIdempotent

Change a Nextcloud Flow rule. Only the fields you pass change; the operation class cannot.

Global flows need the destructive permission level.

Args: flow_id: The flow's ID, from list_flows. scope: The scope the flow is in: "user" (default) or "global". name: New name. checks: New complete list of checks (replaces the old ones), each with "class", "operator" and "value"; at least one. operation_config: New operation settings, an object or a JSON string (see create_flow). entity: New entity class. events: New complete list of triggering events.

Returns: JSON with the updated flow, as list_flows shows it.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
scopeNouser
checksNo
entityNo
eventsNo
flow_idYes
operation_configNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructive=true and idempotent=true, but the description goes further: it discloses partial-update semantics ('only the fields you pass change'), an immutable field, and that checks/events are full replacements rather than merges. The permission requirement for global flows explains the destructive hint rather than merely repeating it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core behavior and constraints, then a clean Args breakdown. Efficient overall, though the Returns line partially duplicates information the output schema already provides.

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 7-parameter mutation tool with an output schema, it covers the semantics an agent needs: replacement vs. merge behavior, permissions, defaults, and parameter sourcing. Return format being deferred to the output schema is appropriate.

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 0%, so the description carries the burden and largely succeeds: flow_id source, scope values with default, checks structure (class/operator/value, at least one, replaces old), operation_config accepted formats, and events replacement. A few fields like 'entity' are terse ('New entity class'), leaving minor ambiguity about valid values.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb (Change) plus resource (a Nextcloud Flow rule), with the update scope stated immediately. It clearly distinguishes itself from the create_flow/delete_flow/list_flows siblings that appear in the tool list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear context: only passed fields change, the operation class is immutable, and global flows require the destructive permission level. It also routes to list_flows for the ID and create_flow for operation_config details. It doesn't explicitly state when to prefer create_flow versus update_flow, so not a full 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_formA
Idempotent

Update a form's properties.

Args: form_id: Numeric form id. key_value_pairs: Object with the fields to change. Common keys: title (str), description (str), isAnonymous (bool), submitMultiple (bool), allowEditSubmissions (bool), expires (unix timestamp, 0 = never), showExpiration (bool), state (0=active, 1=closed, 2=archived), maxSubmissions (int, 0 = unlimited), submissionMessage (str), access (object with permitAllUsers/showToAllUsers), fileFormat, path (destination folder for the generated submissions spreadsheet — must be sent together with fileFormat to (re)link the form to a file).

Returns: JSON of the updated form (refetched after the patch for convenience).

ParametersJSON Schema
NameRequiredDescriptionDefault
form_idYes
key_value_pairsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotentHint=true and destructiveHint=false, so the safety profile is covered. The description adds meaningful behavioral detail by stating that the JSON of the updated form is refetched after the patch, and it clarifies a special coupling requirement between fileFormat and path. It does not contradict 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is longer than average but earned by the high number of customizable form properties. It is well-structured with an Args section and a Returns section, and the core purpose is front-loaded. A minor inefficiency is that the long key list could be formatted more compactly, but nothing is extraneous.

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 two-parameter update tool with a flexible object parameter, the description provides a comprehensive field reference, return behavior, and special constraints. The output schema already covers return expectations, and the description fills in all remaining practical details an agent needs to invoke the tool correctly.

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 0%, so the description carries the full burden of parameter documentation. It thoroughly explains form_id and enumerates the common keys of key_value_pairs with their types, allowed values, and special rules. This far exceeds the minimal schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a clear verb and resource: 'Update a form's properties.' It is unambiguous about what the tool operates on and is easily distinguishable from siblings like create_form, get_form, and delete_form. The detailed argument list further clarifies the scope.

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 identifies the tool as an update operation but does not explicitly state when to use it versus alternatives such as create_form or update_question. The intended use is implied by the name and the fields listed, but no exclusions or alternative routing are provided. It does add useful context about the fileFormat/path constraint, which helps correct usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_form_shareB
Idempotent

Update a share's permissions.

Args: form_id: Numeric form id. share_id: Numeric share id. key_value_pairs: Object with fields to change. Most commonly: permissions (array of strings — see create_form_share).

Returns: JSON of the updated share (refetched via the parent form).

ParametersJSON Schema
NameRequiredDescriptionDefault
form_idYes
share_idYes
key_value_pairsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide the core safety profile (idempotent, non-destructive, read-write). The description adds that the returned share is 'refetched via the parent form,' which clarifies the response source, but it does not disclose whether key_value_pairs is merged or fully replaced, nor any side effects beyond updating the share.

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 compact and well-structured with Args and Returns sections, placing the operation first. No filler; each sentence contributes. Slight redundancy with 'Numeric form id' and 'Numeric share id' against schema types is minor and acceptable.

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 call shape and return behavior, and an output schema exists to document the response. Yet for a tool with an open-object key_value_pairs and many sibling share tools, the lack of field enumeration and explicit update semantics leaves an agent uncertain about full usage.

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 0%, so the description carries full parameter burden. It correctly identifies form_id and share_id as numeric IDs and explains key_value_pairs as 'Object with fields to change,' citing 'permissions' as the common case. However, it offers no exhaustive list of supported fields or types beyond permissions, leaving the open-ended key_value_pairs under-specified.

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 uses a clear verb-resource pair: 'Update a share's permissions.' It distinguishes from create_form_share and generic update_share by mentioning the parent form context in Returns, but it doesn't explicitly state that this tool is for form-scoped shares 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?

There is no when-to-use guidance or comparison against sibling tools like create_form_share, update_share, or delete_form_share. The only reference to a sibling ('see create_form_share') is for the permissions format, not for tool selection, so an agent receives little direction on choosing this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_optionA
Idempotent

Update an option's properties.

Args: form_id: Numeric form id. question_id: Numeric question id. option_id: Numeric option id. key_value_pairs: Object with fields to change. Common keys: text (str). Do NOT pass order — use reorder_options instead.

Returns: JSON of the updated option (refetched via the parent question).

ParametersJSON Schema
NameRequiredDescriptionDefault
form_idYes
option_idYes
question_idYes
key_value_pairsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotentHint true and destructiveHint false, so the mutation/read-only profile is covered. The description adds that the updated option is 'refetched via the parent question' and that the return is a JSON of the updated option, giving the agent a clear model of the side effect and result. It also warns about not using `order`, which is a behavioral constraint not 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?

The description is extremely concise: a single purpose line, a structured args block, and a returns line. Every sentence adds value, and the exclusion of `order` is front-loaded. No unnecessary fluff; the structure is scannable and efficient.

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 requires three IDs and a nested object, the description covers all required parameters and their meanings. The return behavior is specified, and since there is an output schema, it needn't detail the exact JSON structure. The warning about `order` is a critical edge case that is addressed. Nothing the agent needs to call it correctly is missing.

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 descriptions are entirely absent, so the description must fully compensate. It explains each parameter: form_id, question_id, option_id as numeric IDs, and key_value_pairs as 'Object with fields to change. Common keys: text (str).' It also adds the critical warning about `order` and alternative tool. This is a complete semantic mapping.

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 begins with a clear verb+resource statement: 'Update an option's properties.' It specifies the action on a distinct resource (option), differentiating it from sibling update tools like update_question or update_form. The explicit exclusion of 'order' and referral to reorder_options further rules out overlap.

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 a clear when-not-to-use rule: 'Do NOT pass `order` — use reorder_options instead.' This directly guides the agent to the correct sibling for ordering operations. It implies this tool is for updating other properties (e.g., text), but does not enumerate specific scenarios beyond that.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_questionA
Idempotent

Update a question's properties (cannot change order — use reorder_questions).

Args: form_id: Numeric form id. question_id: Numeric question id. key_value_pairs: Object with fields to change. Common keys: text (str), description (str), isRequired (bool), name (str, alternate id for public linking), extraSettings (object; varies by question type).

Returns: JSON of the updated question (refetched after the patch).

ParametersJSON Schema
NameRequiredDescriptionDefault
form_idYes
question_idYes
key_value_pairsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds valuable behavioral context: it explicitly states the tool cannot change order (a limitation), and it discloses that the return value is the updated question 'refetched after the patch', which tells the agent the response reflects the post-update state. This goes beyond the annotations and 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?

The description is compact and well-structured: a one-line summary, a clear exclusion note, a concise Args list, and a Returns line. Every sentence earns its place, and the most important constraint (cannot change order) is front-loaded in the first sentence.

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 3-parameter mutation tool with an output schema, the description covers the essential context: what the tool does, what it cannot do, what parameters mean, and what the return value is. The output schema exists, so return-value details don't need to be in the description. Minor gap: it doesn't mention error conditions or permissions, but these are not critical for an agent to invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden of explaining parameters. It explains form_id and question_id as numeric IDs, and key_value_pairs as an object with fields to change, listing common keys (text, description, isRequired, name, extraSettings) and their types. This is substantial compensation for the schema's bare property definitions, though it doesn't exhaustively document every possible key (which is reasonable given additionalProperties: true).

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 a specific verb ('Update') and resource ('a question's properties'), and explicitly distinguishes itself from reorder_questions by noting it cannot change order. This clearly differentiates it from the sibling tool reorder_questions and other question-related tools like create_question, delete_question, and get_question.

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 says 'cannot change order — use reorder_questions', which provides a clear exclusion and routes to the correct alternative. It also lists common keys for key_value_pairs, giving practical guidance on what fields can be updated. However, it doesn't explicitly state when to use this tool versus other update tools (e.g., update_form, update_option), though the resource-specific naming makes this fairly clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_shareA
Idempotent

Update properties of an existing share.

Only provided parameters are changed. Omitted parameters keep their current value.

Args: share_id: The numeric share ID to update. permissions: New permission flags (1=read, 2=update, 4=create, 8=delete, 16=share). password: Set or change password (link/email shares only). Pass "" to remove password. expire_date: Set expiration in "YYYY-MM-DD" format. Pass "" to remove expiration. note: Set or update the share note. Pass "" to clear. label: Set or update the share label. Pass "" to clear. public_upload: Enable (true) or disable (false) public upload on shared folders (link shares only). hide_download: Show (false) or hide (true) the download button on public link shares.

Returns: JSON object with the updated share details.

ParametersJSON Schema
NameRequiredDescriptionDefault
noteNo
labelNo
passwordNo
share_idYes
expire_dateNo
permissionsNo
hide_downloadNo
public_uploadNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, idempotentHint=true, and destructiveHint=false. The description adds meaningful behavioral context: partial-update semantics, the special meaning of empty strings to clear fields, and type-specific constraints (password for link/email shares, public_upload for link shares). It does not contradict 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a clear summary line, a partial-update note, a labeled Args block, and a Returns line. It is somewhat long due to the 8 parameters, but every line earns its place. The most important behavioral note (only provided parameters are changed) is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 8-parameter mutation tool with no schema descriptions, the description is quite complete: it covers all parameters, return type, and key behavioral semantics. It could add a note about error conditions or required permissions, but the output schema exists and the annotations cover idempotency and non-destructiveness. The gaps are minor.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden of explaining parameters. It does so thoroughly: each parameter gets a type, a meaning, and often a special value convention (e.g., pass "" to remove). It also explains the permission bit flags, which the schema does not. This fully compensates for the schema's lack of 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 opens with a specific verb and resource: 'Update properties of an existing share.' It clearly distinguishes this from sibling tools like create_share and delete_share, and the parameter list enumerates exactly which properties are updatable. The title is null, but the description fully compensates.

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 states that only provided parameters are changed and omitted ones keep their current value, which is essential usage guidance for a partial-update tool. It also notes share-type restrictions for password and public_upload. However, it does not explicitly say when to prefer this over create_share or delete_share, though the sibling context makes that fairly obvious.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_submissionA
Idempotent

Update an existing submission's answers. Requires allowEditSubmissions on the form.

Args: form_id: Numeric form id. submission_id: Numeric submission id. Must belong to the current user. answers: Full replacement answers object (same shape as submit_form).

Returns: JSON of the updated submission (refetched).

ParametersJSON Schema
NameRequiredDescriptionDefault
answersYes
form_idYes
submission_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already signal mutation and idempotency. The description adds valuable behavioral detail: answers are a 'full replacement answers object,' not a partial merge, and the tool refetches the updated submission for the response. It also provides authorization and ownership constraints 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 compact and well-organized: a one-sentence purpose, concise parameter list, and explicit return value. Every sentence earns its place and there is no filler or repetition of schema details.

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 an output schema present and annotations covering idempotency, the description covers the necessary operational context: permission, ownership, full replacement semantics, and the refetched return value. It lacks an explicit 'use this for existing submissions, not new ones' contrast with submit_form, but the wording makes that distinction reasonably clear.

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 0% schema description coverage, the description carries the full burden and does so well: form_id is numeric, submission_id is numeric and ownership-restricted, and answers is a full replacement object shaped like submit_form. The only gap is that the answer object's internal shape is deferred to submit_form rather than described directly.

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 and resource: 'Update an existing submission's answers.' The word 'existing' distinguishes it from submission creation via submit_form cops. It is also clearly distinct from update_form because the target is a submission, not a form.

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 states clear prerequisites: 'Requires allowEditSubmissions on the form' and 'Must belong to the current user.' It implies the use case is editing an existing submission, though it does not explicitly name submit_form as the alternative for new submissions. This is clear context with minor room for improvement on alternative routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_taskA
Idempotent

Update an existing task. Only provided fields are changed.

For optimistic locking, pass the etag from a previous get_task or get_tasks call. If the task was modified since that read, the update will fail with a 412 Precondition Failed error. If omitted, the current etag is fetched automatically (still safe against concurrent writes during this call, but won't detect earlier external changes).

Args: list_id: Task list identifier (e.g. "tasks"). task_uid: The task's UID to update. Use get_tasks to find UIDs. summary: New task title. description: New description. Pass "" to clear. due: New due date/time in ISO 8601 format. Pass "" to clear. start: New start date/time in ISO 8601 format. Pass "" to clear. status: New status: "NEEDS-ACTION", "IN-PROCESS", "COMPLETED", or "CANCELLED". priority: New priority 0-9 (0=undefined, 1=highest, 9=lowest). percent_complete: New completion percentage 0-100. categories: New categories as comma-separated string. Pass "" to clear. etag: Optional ETag from a previous read for optimistic locking.

Returns: Confirmation message with the updated task UID.

ParametersJSON Schema
NameRequiredDescriptionDefault
dueNo
etagNo
startNo
statusNo
list_idYes
summaryNo
priorityNo
task_uidYes
categoriesNo
descriptionNo
percent_completeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, the description discloses substantial behavior: partial updates only, 412 failure when the etag is stale, automatic etag fetching when omitted, and the concurrency caveat that external earlier changes won't be detected. It also clarifies that empty strings clear fields and that the operation returns a confirmation with the updated UID. This is rich, useful 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 efficiently organized: a two-sentence overview, an optimistic-locking clarification, then a tidy Args list, followed by the return value. Nothing is redundant, and the most important caveat (etag/412) appears near the front.

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 an 11-parameter update tool with an empty schema and no enums, this description is complete: it covers required parameters, optional parameters, formats, allowed values, clearing behavior, concurrency behavior, and the return value. An agent has everything needed to invoke it correctly.

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 0%, so the description carries the full burden, and it succeeds. Every parameter is explained with formats, allowed values, ranges, and clearing semantics: ISO 8601 for dates, the four status values, priority scale 0-9, percent range 0-100, comma-separated categories, and etag behavior. This fully compensates for the bare input schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Update an existing task.' It clearly distinguishes updating from creating by emphasizing 'existing task' and 'Only provided fields are changed,' so an agent knows it is a partial-update operation rather than creation or 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?

It gives clear context: use this to update an existing task, only provided fields are changed, and UIDs come from get_tasks. It also explains when optimistic locking applies and what happens if the etag is omitted. It does not explicitly call out sibling alternatives like complete_task or create_task, but the intended usage is clear enough without exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_userA
DestructiveIdempotent

Change several fields of a user account in one call. Needs Nextcloud 34 or newer.

Only the fields you pass are changed. Nextcloud validates all of them first and applies none if one fails; the error then names each rejected field. A few requests are skipped without an error, so compare the returned "groups" and "subadmin" with what you asked for: a sub-admin cannot take the user out of groups they do not administer, only full admins can add someone to "admin", and nobody can be made sub-admin of "admin".

Changing another user needs admin rights, or sub-admin rights over one of their groups; sub-admin groups need admin rights. Any user can change their own display name (if the instance allows it), email, language and password. Nextcloud only accepts this call from admins and sub-admins, though, so for a regular user's own account the fields are set one by one instead, and a rejected field then no longer undoes the ones set before it.

After changing your own password, the old one stops working, including for this server if it logs in with it; app passwords keep working.

Args: user_id: The user to change. Example: "john.doe" display_name: New display name. An empty string resets it to the user ID. email: New primary email address. An empty string removes it. password: New password. Must satisfy the instance's password policy. Needs the destructive permission level, since the old password is gone afterwards. quota: Storage quota, e.g. "5 GB", "500 MB", a byte count, "none" (unlimited) or "default". language: Language code, e.g. "en", "de", "fr". manager: User ID of the user's manager (Nextcloud does not check that it exists). An empty string removes it. groups: The complete list of group IDs the user should be in: groups missing from it are left, new ones joined, and [] leaves every group. Get the current ones with get_user and IDs with list_groups. Needs the destructive permission level, since it can remove memberships. Taking your own account out of "admin" this way is refused. subadmin_groups: The complete list of groups the user should administer as a sub-admin; [] removes all. Needs the destructive permission level.

Returns: JSON with the user's details after the change, as get_user returns them.

ParametersJSON Schema
NameRequiredDescriptionDefault
emailNo
quotaNo
groupsNo
managerNo
user_idYes
languageNo
passwordNo
display_nameNo
subadmin_groupsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Far exceeds the annotation hints (destructiveHint/idempotentHint): it discloses atomic validation ("applies none if one fails", error names each rejected field), silent skips that require re-checking "groups"/"subadmin", permission edge cases (sub-admin group removal, adding to "admin"), and that a self password change invalidates the old password.

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 long but front-loaded with purpose and organized into behavioral rules, Args, and Returns. Nearly every sentence adds non-obvious behavior, though a few permission clauses could be tightened without losing meaning.

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?

Complete for a high-complexity mutation tool: prerequisites, atomicity, partial-skip behavior, side effects, and parameter meanings are all covered. The output schema is referenced indirectly ("as get_user returns them") while still flagging that returned groups/subadmin may differ from what was requested.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden and does: it documents all nine arguments, including empty-string semantics (reset display_name, remove email/manager), quota formats, group-list replacement behavior, and which fields require the destructive permission level.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource ("Change several fields of a user account in one call"), and the phrasing distinguishes it from create_user, delete_user, and set_user_enabled among siblings. An agent can immediately tell this is the multi-field mutation tool for an existing user.

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 it can be used and when not: own-account edits by regular users call the fields one by one instead, since the server rejects this call for them; other users need admin or sub-admin rights. It also names sibling helpers (get_user, list_groups) for resolving group IDs.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

upload_fileA
Idempotent

Upload or overwrite a text file in Nextcloud.

Use this for plain-text content (markdown, source code, CSV, JSON, etc.). For binary files (images, PDFs, archives), use upload_file_binary instead.

Creates the file if it doesn't exist. Overwrites if it does.

Args: path: Destination path relative to user's root. Example: "Documents/report.md" content: Text content to write to the file.

Returns: Confirmation message.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
contentYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description reveals important behavior beyond the annotations: it creates files if absent and overwrites if present. The annotations already cover read-only, idempotent, and destructive hints, so the bar is lower, and the description adds useful context about content-type limitations and overwrite semantics. No contradiction with the annotations exists.

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 appropriately sized and front-loaded. The first sentence states the core operation, the second gives usage guidance, and the remaining lines cover behavior, parameters, and return value. Every sentence earns its place with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter text upload tool, this description is complete: it covers what the tool does, when to use it, the distinction from the binary variant, create/overwrite behavior, path semantics with an example, and the return value. The output schema and annotations cover the rest.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden, and it fully compensates. It defines 'path' as relative to the user's root with a concrete example, and defines 'content' as the text to write. This goes far beyond the schema's bare 'Path' and 'Content' titles.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Upload or overwrite a text file in Nextcloud', a specific verb plus resource. It also explicitly distinguishes itself from upload_file_binary by scoping to plain-text content (markdown, source code, CSV, JSON). This clearly separates it from the most similar sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The tool states exactly when to use it ('plain-text content') and explicitly routes binary content to 'upload_file_binary instead'. This gives the agent a direct decision rule, including the alternative tool name, rather than leaving the choice to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

upload_file_binaryA
Idempotent

Upload or overwrite a binary file in Nextcloud.

Use this for images, PDFs, archives, or any non-text content. The content must be base64-encoded. For plain-text files, use upload_file instead.

Creates the file if it doesn't exist. Overwrites if it does.

Args: path: Destination path relative to user's root. Example: "Photos/photo.png" content_base64: File bytes encoded as a base64 string. May be empty to create an empty file. content_type: MIME type for the upload request (e.g. "image/png", "application/pdf"). If omitted, inferred from the path extension; falls back to "application/octet-stream". Note: Nextcloud re-derives the stored MIME type from the filename, so this mainly controls the HTTP upload header.

Returns: Confirmation message with the uploaded byte count.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
content_typeNo
content_base64Yes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, it discloses that content must be base64-encoded, files are created or overwritten, content_type behavior and fallback logic, and that Nextcloud re-derives the stored MIME type from the filename. This adds substantial behavioral context without contradicting 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 well-organized: purpose, usage guidance, parameter details, and return value. Each sentence adds value, and the key distinctions are front-loaded before the parameter 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?

With three parameters fully explained, explicit MIME handling, overwrite semantics, and a return description, the tool is completely callable by an agent. The presence of an output schema means further return details are not required, and none are obviously missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description compensates fully: path is defined as relative to user's root with an example, content_base64 is explained as base64-encoded bytes with empty allowed, and content_type is described with inference and fallback behavior. This is far more useful than the bare 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 states a specific verb and resource: 'Upload or overwrite a binary file in Nextcloud.' It clearly distinguishes this tool from upload_file by specifying it is for non-text content and directing plain-text use elsewhere.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly lists when to use this tool ('images, PDFs, archives, or any non-text content') and names the alternative for plain-text files ('For plain-text files, use upload_file instead'). The overwrite/create behavior also gives clear context for expected effects.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vote_pollA
Idempotent

Vote on a poll in a Talk conversation.

Voting replaces any previous vote — calling this again with different option_ids changes your vote. You cannot vote on closed polls.

Args: token: The conversation token. poll_id: The poll ID. Use get_poll to see available polls. option_ids: List of option indices to vote for (0-based). For example, if options are ["Yes", "No", "Maybe"], use [0] to vote "Yes", or [0, 2] to vote "Yes" and "Maybe". The number of choices must not exceed the poll's max_votes (0 means unlimited).

Returns: JSON object with updated poll details including your votes (voted_self) and current vote counts (if visible).

ParametersJSON Schema
NameRequiredDescriptionDefault
tokenYes
poll_idYes
option_idsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond annotations, the description explains the mutation semantics: voting replaces any previous vote and re-calling with different option_ids changes the vote. It also discloses the closed-poll restriction and the max_votes constraint, which annotations alone do not 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?

The description is efficiently organized: purpose, behavioral caveats, parameter details, and return format. Every sentence contributes actionable information, and the most important facts (purpose and vote replacement) are front-loaded.

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?

All 3 required parameters are documented, behavioral constraints and return shape are covered, and an output schema exists for return values. There is no critical missing context for selecting or invoking this tool.

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 0%, but the description fully compensates: token is defined as the conversation token, poll_id is tied to get_poll, and option_ids gets 0-based indexing, a worked example, and a max_votes limit explanation. This is more than enough for an agent to form correct arguments.

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 opening line 'Vote on a poll in a Talk conversation' names a specific verb, resource, and scope. It is clearly distinguishable from sibling poll tools such as create_poll, close_poll, and get_poll without needing to open their schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It tells the agent when to use the tool (to vote), when not to ('You cannot vote on closed polls'), and points to the prerequisite alternative 'Use get_poll to see available polls.' The replacement-vote behavior also clarifies the effect of repeated calls.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 66 tool updatesv0.9.0
    • Addedaccept_share
    • Addedadd_participant
    • Addedadd_reaction
    • Changedcreate_circle1 field changed
      • addedInput schema / properties / team_folder
        Added value: +{
        +  "default": false,
        +  "title": "Team Folder",
        +  "type": "boolean"
        +}
    • Changedcreate_collective_page1 field changed
      • addedInput schema / properties / content
        Added value: +{
        +  "default": "",
        +  "title": "Content",
        +  "type": "string"
        +}
    • Addedcreate_collective_tag
    • Changedcreate_conversation2 fields changed
      • addedInput schema / properties / description
        Added value: +{
        +  "default": "",
        +  "title": "Description",
        +  "type": "string"
        +}
      • addedInput schema / properties / preset
        Added value: +{
        +  "default": "",
        +  "title": "Preset",
        +  "type": "string"
        +}
    • Addedcreate_conversation_tag
    • Addedcreate_flow
    • Addedcreate_group
    • Addeddecline_share
    • Changeddelete_circle1 field changed
      • addedInput schema / properties / delete_team_folder
        Added value: +{
        +  "default": false,
        +  "title": "Delete Team Folder",
        +  "type": "boolean"
        +}
    • Changeddelete_collective2 fields changed
      • addedInput schema / properties / delete_team
        Added value: +{
        +  "default": false,
        +  "title": "Delete Team",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / delete_team_folder
        Added value: +{
        +  "default": false,
        +  "title": "Delete Team Folder",
        +  "type": "boolean"
        +}
    • Addeddelete_collective_share
    • Addeddelete_collective_tag
    • Addeddelete_conversation
    • Addeddelete_conversation_tag
    • Addeddelete_flow
    • Addeddelete_group
    • Changeddelete_share3 fields changed
      • addedInput schema / properties / federated
        Added value: +{
        +  "default": false,
        +  "title": "Federated",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / share_id / anyOf
        Added value: +[
        +  {
        +    "type": "integer"
        +  },
        +  {
        +    "type": "string"
        +  }
        +]
      • removedInput schema / properties / share_id / type
        Removed value: -"integer"
    • Addededit_message
    • Changedget_activity4 fields changed
      • addedInput schema / properties / actor
        Added value: +{
        +  "default": "",
        +  "title": "Actor",
        +  "type": "string"
        +}
      • addedInput schema / properties / end
        Added value: +{
        +  "default": "",
        +  "title": "End",
        +  "type": "string"
        +}
      • addedInput schema / properties / search
        Added value: +{
        +  "default": "",
        +  "title": "Search",
        +  "type": "string"
        +}
      • addedInput schema / properties / start
        Added value: +{
        +  "default": "",
        +  "title": "Start",
        +  "type": "string"
        +}
    • Addedget_activity_counts
    • Addedget_flow_options
    • Addedget_message_context
    • Addedget_reactions
    • Changedleave_circle1 field changed
      • addedInput schema / properties / delete_team_folder
        Added value: +{
        +  "default": false,
        +  "title": "Delete Team Folder",
        +  "type": "boolean"
        +}
    • Addedlist_activity_filters
    • Addedlist_collective_page_attachments
    • Addedlist_collective_shares
    • Addedlist_collective_tags
    • Addedlist_conversation_presets
    • Addedlist_conversation_tags
    • Changedlist_conversations2 fields changed
      • removedInput schema / properties / include_notifications_disabled
        Removed value: -{
        -  "default": false,
        -  "title": "Include Notifications Disabled",
        -  "type": "boolean"
        -}
      • addedInput schema / properties / modified_since
        Added value: +{
        +  "default": "",
        +  "title": "Modified Since",
        +  "type": "string"
        +}
    • Addedlist_flows
    • Addedlist_group_members
    • Addedlist_groups
    • Addedlist_message_reminders
    • Addedlist_pending_shares
    • Addedlist_recent_collective_pages
    • Addedlist_shared_items
    • Changedlist_shares1 field changed
      • addedInput schema / properties / shared_with_me
        Added value: +{
        +  "default": false,
        +  "title": "Shared With Me",
        +  "type": "boolean"
        +}
    • Addedmark_conversation_read
    • Addedmark_conversation_unread
    • Addedmove_collective_page
    • Addedpin_message
    • Addedremove_message_reminder
    • Addedremove_participant
    • Addedremove_reaction
    • Addedrename_conversation_tag
    • Addedsearch_collective_pages
    • Addedsearch_mentions
    • Addedset_collective_page_tags
    • Addedset_conversation_preferences
    • Addedset_conversation_tags
    • Addedset_message_reminder
    • Addedset_participant_role
    • Addedset_user_enabled
    • Addedshare_collective
    • Addedunpin_message
    • Addedupdate_collective_page
    • Addedupdate_collective_share
    • Addedupdate_collective_tag
    • Addedupdate_conversation
    • Addedupdate_flow
    • Addedupdate_user
  2. 7 tool updatesv0.8.0
    • Changedget_messages1 field changed
      • addedInput schema / properties / thread_id
        Added value: +{
        +  "default": 0,
        +  "title": "Thread Id",
        +  "type": "integer"
        +}
    • Addedget_thread
    • Addedlist_subscribed_threads
    • Addedlist_threads
    • Addedrename_thread
    • Changedsend_message2 fields changed
      • addedInput schema / properties / thread_id
        Added value: +{
        +  "default": 0,
        +  "title": "Thread Id",
        +  "type": "integer"
        +}
      • addedInput schema / properties / thread_title
        Added value: +{
        +  "default": "",
        +  "title": "Thread Title",
        +  "type": "string"
        +}
    • Addedset_thread_notification_level
  3. 161 tool updatesv0.7.0
    • First observedadd_circle_member
    • First observedadd_comment
    • First observedadd_mail_message_tag
    • First observedassign_tag
    • First observedclear_user_status
    • First observedclose_poll
    • First observedcomplete_task
    • First observedcopy_file
    • First observedcreate_announcement
    • First observedcreate_circle
    • First observedcreate_collective
    • First observedcreate_collective_page
    • First observedcreate_contact
    • First observedcreate_conversation
    • First observedcreate_cospend_bill
    • First observedcreate_cospend_member
    • First observedcreate_cospend_project
    • First observedcreate_directory
    • First observedcreate_event
    • First observedcreate_form
    • First observedcreate_form_share
    • First observedcreate_mail_tag
    • First observedcreate_options
    • First observedcreate_poll
    • First observedcreate_question
    • First observedcreate_share
    • First observedcreate_tag
    • First observedcreate_task
    • First observedcreate_user
    • First observeddelete_all_submissions
    • First observeddelete_announcement
    • First observeddelete_circle
    • First observeddelete_collective
    • First observeddelete_collective_page
    • First observeddelete_comment
    • First observeddelete_contact
    • First observeddelete_cospend_bill
    • First observeddelete_cospend_member
    • First observeddelete_cospend_project
    • First observeddelete_event
    • First observeddelete_file
    • First observeddelete_form
    • First observeddelete_form_share
    • First observeddelete_message
    • First observeddelete_option
    • First observeddelete_question
    • First observeddelete_share
    • First observeddelete_submission
    • First observeddelete_tag
    • First observeddelete_task
    • First observeddelete_trash_item
    • First observeddelete_user
    • First observeddisable_app
    • First observeddismiss_all_notifications
    • First observeddismiss_notification
    • First observededit_comment
    • First observedempty_trash
    • First observedenable_app
    • First observedexport_submissions
    • First observedget_activity
    • First observedget_app_info
    • First observedget_circle
    • First observedget_collective_page
    • First observedget_collective_pages
    • First observedget_contact
    • First observedget_contacts
    • First observedget_conversation
    • First observedget_cospend_bill
    • First observedget_cospend_project
    • First observedget_cospend_project_settlement
    • First observedget_cospend_project_statistics
    • First observedget_current_user
    • First observedget_event
    • First observedget_events
    • First observedget_file
    • First observedget_file_reminder
    • First observedget_file_tags
    • First observedget_form
    • First observedget_mail_message
    • First observedget_messages
    • First observedget_participants
    • First observedget_poll
    • First observedget_question
    • First observedget_share
    • First observedget_submission
    • First observedget_task
    • First observedget_tasks
    • First observedget_user
    • First observedget_user_status
    • First observedjoin_circle
    • First observedleave_circle
    • First observedleave_conversation
    • First observedlist_addressbooks
    • First observedlist_announcements
    • First observedlist_apps
    • First observedlist_calendars
    • First observedlist_circle_members
    • First observedlist_circles
    • First observedlist_collectives
    • First observedlist_comments
    • First observedlist_conversations
    • First observedlist_cospend_bills
    • First observedlist_cospend_members
    • First observedlist_cospend_projects
    • First observedlist_directory
    • First observedlist_forms
    • First observedlist_mail_accounts
    • First observedlist_mail_messages
    • First observedlist_mailboxes
    • First observedlist_notifications
    • First observedlist_questions
    • First observedlist_search_providers
    • First observedlist_shares
    • First observedlist_submissions
    • First observedlist_tags
    • First observedlist_task_lists
    • First observedlist_trash
    • First observedlist_users
    • First observedlist_versions
    • First observedmove_file
    • First observedmove_mail_message
    • First observedremove_circle_member
    • First observedremove_file_reminder
    • First observedremove_mail_message_tag
    • First observedreorder_options
    • First observedreorder_questions
    • First observedrestore_collective
    • First observedrestore_collective_page
    • First observedrestore_trash_item
    • First observedrestore_version
    • First observedsearch_circles
    • First observedsearch_files
    • First observedsend_mail
    • First observedsend_message
    • First observedset_file_reminder
    • First observedset_mail_message_flags
    • First observedset_user_status
    • First observedsubmit_form
    • First observedtrash_collective
    • First observedtrash_collective_page
    • First observedunassign_tag
    • First observedunified_search
    • First observedupdate_circle_config
    • First observedupdate_circle_description
    • First observedupdate_circle_member_level
    • First observedupdate_circle_name
    • First observedupdate_contact
    • First observedupdate_cospend_bill
    • First observedupdate_cospend_member
    • First observedupdate_cospend_project
    • First observedupdate_event
    • First observedupdate_form
    • First observedupdate_form_share
    • First observedupdate_option
    • First observedupdate_question
    • First observedupdate_share
    • First observedupdate_submission
    • First observedupdate_task
    • First observedupload_file
    • First observedupload_file_binary
    • First observedvote_poll

TDQS

A3.9/5.0

Scored across 222 tools

Disambiguation4/5

Across 222 tools spanning many Nextcloud apps, most names and descriptions are carefully differentiated (e.g. get_event vs get_events, list_shares vs list_pending_shares vs list_shared_items, create_tag vs create_collective_tag vs create_mail_tag). A few generic names such as create_tag, assign_tag, and list_tags could be confused with app-specific tag tools, and the sheer breadth makes selection harder, but the detailed descriptions largely disambiguate.

Naming Consistency5/5

Nearly all tools follow a snake_case verb_noun pattern: list_*, get_*, create_*, update_*, delete_*, set_*, remove_*, add_*, etc. App-specific prefixes (collective_, cospend_, conversation_, mail_) are applied predictably. No mixed camelCase or wildly inconsistent verb styles appear.

Tool Count1/5

222 tools is an extreme mismatch for an MCP server set, far beyond the 50+ threshold for 'extreme mismatch.' Even if each app area is covered, the total surface is too heavy for an agent to navigate efficiently without specialized routing.

Completeness5/5

The surface provides deep CRUD/lifecycle coverage across files, shares, tags, comments, versions, trash, calendars, tasks, contacts, Talk, forms, collectives, circles, Cospend, mail, announcements, users/groups, flows, activity, and search. Only minor optional operations (e.g. update_announcement, hard delete_mail_message) are absent, which are not dead ends for core workflows.

Maintenance

ActivityMaintained
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers