Skip to main content
Glama
anythink-cloud

Anythink-MCP

Official

Anythink CLI

The official command-line interface for Anythink — the headless backend platform for developers and founders. Manage your projects, entities, data, workflows, users, files, and payments without leaving the terminal.

NuGet Release Homebrew MCP Registry License: MIT

   ░███                             ░██    ░██        ░██           ░██
  ░██░██                            ░██    ░██                      ░██
 ░██  ░██  ░████████  ░██    ░██ ░████████ ░████████  ░██░████████  ░██    ░██
░█████████ ░██    ░██ ░██    ░██    ░██    ░██    ░██ ░██░██    ░██ ░██   ░██
░██    ░██ ░██    ░██ ░██    ░██    ░██    ░██    ░██ ░██░██    ░██ ░███████
░██    ░██ ░██    ░██ ░██   ░███    ░██    ░██    ░██ ░██░██    ░██ ░██   ░██
░██    ░██ ░██    ░██  ░█████░██     ░████ ░██    ░██ ░██░██    ░██ ░██    ░██
                             ░██
                       ░███████

Contents


Related MCP server: stripe

Installation

Both the anythink CLI and the anythink-mcp server are distributed together. The quickest way to get both is Homebrew.

brew install anythink-cloud/tap/anythink

This installs both commands onto your PATH:

  • anythink — the CLI

  • anythink-mcp — the MCP server (see MCP server)

Or tap first, then install:

brew tap anythink-cloud/tap
brew install anythink

Update to the latest release:

brew upgrade anythink

Uninstall:

brew uninstall anythink

macOS / Linux — download binary

Grab the latest release for your platform from the Releases page:

Platform

Binary

macOS (Apple Silicon)

anythink-osx-arm64

macOS (Intel)

anythink-osx-x64

Linux (x86_64)

anythink-linux-x64

Linux (ARM64)

anythink-linux-arm64

# Example — macOS Apple Silicon
curl -Lo anythink https://github.com/anythink-cloud/anythink-cli/releases/latest/download/anythink-osx-arm64
chmod +x anythink
sudo mv anythink /usr/local/bin/

The MCP server ships as a matching anythink-mcp-<platform> binary on the same release — download and install it the same way (e.g. anythink-mcp-osx-arm64).

Verify the download against checksums.txt in the release assets:

sha256sum -c checksums.txt --ignore-missing

.NET global tool

If you have the .NET 8 SDK installed:

dotnet tool install --global anythink-cli

Build from source

git clone https://github.com/anythink-cloud/anythink-cli
cd anythink-cli
dotnet build
dotnet run --project src/AnythinkCli.csproj -- --help

Getting started

# 1. Create an account (or log in if you already have one)
anythink signup

# 2. Create a billing account
anythink accounts create --name "My Company"

# 3. Create a project
anythink projects create "My App" --region lon1

# 4. Connect to the project
anythink projects use <project-id>

# 5. Start building
anythink entities list
anythink workflows list

Your credentials and project profiles are stored in ~/.anythink/config.json. You can manage multiple projects by running projects use to switch between them.


Command reference

signup / login / logout

anythink signup                        Create a new Anythink account
anythink login                         Log in to the platform
anythink logout                        Remove saved credentials for a project profile

signup and login are interactive — they prompt for email and password and walk you through connecting to a billing account and project on first run.


accounts

Manage billing accounts. A billing account is the container for one or more projects and holds your subscription and payment details.

anythink accounts list                 List your billing accounts
anythink accounts create               Create a new billing account
anythink accounts use <id>             Set the active billing account

Examples

anythink accounts create --name "Acme Ltd" --email billing@acme.com
anythink accounts use a1b2c3d4

projects

Create and manage Anythink projects. Each project is an isolated backend instance with its own database, auth, files, and workflows.

anythink projects list                 List projects in the active billing account
anythink projects create <name>        Create a new project
anythink projects use <id>             Connect to a project (sets it as the active profile)
anythink projects delete <id>          Delete a project

Options — projects create

Flag

Description

--region <id>

Deployment region (e.g. lon1)

--plan <id>

Plan ID (see anythink plans)

Examples

anythink projects create "My App" --region lon1
anythink projects use a1b2c3d4
anythink projects delete a1b2c3d4 --yes

config

View and manage saved CLI profiles.

anythink config show                   List all profiles and platform settings
anythink config use <profile>          Set the active project profile
anythink config remove <profile>       Remove a profile

Profiles are named by project alias or ID and stored in ~/.anythink/config.json.


entities

Manage entities (database tables) in the active project.

anythink entities list                 List all entities
anythink entities get <name>           Get entity details and fields
anythink entities create <name>        Create a new entity
anythink entities update <name>        Update entity settings
anythink entities delete <name>        Delete an entity and all its data

Options — entities create

Flag

Description

--rls

Enable row-level security

--public

Make the entity publicly readable

--lock

Lock new records (prevent direct creation)

--junction

Mark as a junction (many-to-many) table

Examples

anythink entities create orders --rls
anythink entities get customers
anythink entities delete temp_data --yes

fields

Manage fields on an entity. Fields map directly to database columns.

anythink fields list <entity>          List fields on an entity
anythink fields add <entity> <name>    Add a field
anythink fields delete <entity> <id>   Delete a field

Options — fields add

Flag

Description

--type <type>

Field type: varchar, text, int, float, bool, datetime, json, uuid

--required

Mark the field as required

--unique

Enforce a unique constraint

--indexed

Add a database index

--default <value>

Default value

Examples

anythink fields list customers
anythink fields add customers email --type varchar --unique --required
anythink fields add products price --type float --required
anythink fields delete customers 1234 --yes

data

CRUD operations on entity records.

anythink data list <entity>            List records
anythink data get <entity> <id>        Get a single record by ID
anythink data create <entity>          Create a new record
anythink data update <entity> <id>     Update a record
anythink data delete <entity> <id>     Delete a record
anythink data export <entity> <file>   Export records to CSV, JSON or JSONL
anythink data import <entity> <file>   Create records from CSV, JSON or JSONL

Options — data list

Flag

Description

--limit <n>

Records per page (default: 20)

--page <n>

Page number (default: 1)

--filter <expr>

Field filters — JSON ({"status":"draft","total":{"gte":10}}) or field=value pairs (status=draft&total=GTE:10). See below.

--json

Output raw JSON instead of table

--all

Stream all pages as sequential JSON objects (requires --json, constant memory)

Filter operators (JSON form) — {"field": value} matches exactly, {"field": [a, b]} matches any, {"field": null} matches empty. For anything else use an operator object, e.g. {"price": {"gte": 10, "lt": 100}}:

Operator

Meaning

field=value form

eq / ne

Equal / not equal

x=v / x=!v

gt gte lt lte

Comparisons

x=GT:v …

contains / not_contains

Case-insensitive substring

x=C:v / x=NC:v

starts_with / ends_with

Case-insensitive prefix/suffix

x=SW:v / x=EW:v

in

Any of a list

x=IN:a,b

null: true / null: false

Empty / not empty

x=NULL: / x=NNULL:

exists: true / exists: false

Has / lacks related records

x=EXISTS: / x=NOT_EXISTS:

Options — data create / data update

Flag

Description

--data <json>

JSON object of field values

Examples

anythink data list blog_posts --limit 10
anythink data get blog_posts 42
anythink data create blog_posts --data '{"title":"Hello World","status":"draft"}'
anythink data update blog_posts 42 --data '{"status":"approved"}'
anythink data delete blog_posts 42 --yes

Export and import — data export streams records page by page to a file; data import creates one record per row. Always run an import with --dry-run first: it validates every row and sends nothing.

anythink data export customers customers.csv
anythink data export orders orders.jsonl --filter 'status=paid' --fields id,total
anythink data import customers customers.csv --dry-run
anythink data import customers customers.csv --errors rejected.csv --yes

Flag (export)

Description

--format <fmt>

csv, json or jsonl. Default: from the extension (.csv, .json, .jsonl, .ndjson). - as the file writes to stdout (needs --format)

--filter <expr>

Same syntax as data list --filter

--fields a,b

Columns to export, in order. CSV defaults to the entity's fields

--page-size <n>

Records per request (default 200, max 1000)

--force

Overwrite an existing file. Without it an existing file is never touched. The file is written to a temporary name and renamed on success, so a failed export never leaves a partial file

--no-formula-guard

CSV only: see below

Flag (import)

Description

--format <fmt>

csv, json (an array of objects) or jsonl. Default: from the extension, else the first character ([ or {)

--dry-run

Validate and report; nothing is sent

--concurrency <n>

Parallel creates (default 4, max 16)

--errors <file>

Write skipped and failed rows, with an _error column or property, so they can be fixed and re-imported

--ignore-unknown

Drop columns that aren't fields on the entity instead of rejecting the row

--yes

Skip the confirmation prompt. Required when not running interactively (CI, scripts, agents), otherwise the import refuses before writing anything

How values are handled:

  • CSV is RFC 4180: cells containing a comma, quote or line break are quoted, quotes are doubled, and quoted cells can span lines. Objects, arrays, JSON fields and relations are written as compact JSON text.

  • Formula guard (export): CSV text starting with =, +, -, @, tab or carriage return is prefixed with ' so spreadsheets don't run it as a formula. Numbers are never changed. This includes phone numbers such as +44 20 7946 0000 and any text with a leading + or -. The guard is one-way: importing the file keeps the ' unless the file was exported with --no-formula-guard.

  • Types follow the entity's fields. Text keeps its exact characters (00123 stays 00123); integers and decimals are parsed with . as the decimal separator (1,5 is rejected, never guessed); booleans accept true/false, 1/0 and yes/no; dates must be ISO 8601 (2025-03-31, 2025-03-31T09:30:00Z; no offset means UTC); JSON fields must be valid JSON.

  • An empty CSV cell is sent as null. In JSON and JSONL input an empty string stays an empty string.

  • Bad rows are skipped, never sent. They are reported with a row number (CSV: record number, so the header is row 1; JSONL: line number; JSON: position in the array) and counted as skipped. Rows the server rejects are counted as failed. The exit code is non-zero if any row was skipped or failed.

  • Retries: 400, 409 and 422 are never retried, so a create is not repeated. See Uncertain failures below for what is retried.

  • System columns are ignored on import: id, created_at, updated_at, tenant_id and locked are never sent, and the import says which it ignored. Importing an export back into the same project therefore creates duplicates with new ids and timestamps; it does not update the originals.

  • One-to-many collections and secret fields are skipped on import (the import lists them), and one-to-many columns are left out of an export unless you name them in --fields. Many-to-many, file and user columns are copied as ids, which only mean something inside the same project; the import warns once per column.

  • Empty boolean cells are sent as null rather than false.

  • Uncertain failures: only 429/503 responses and requests that never reached the server (DNS, connection or TLS failures) are retried. If a request times out or the connection drops after sending, the row is reported as UNCERTAIN: may have been created, in the errors file too; check the project before re-importing it. Rate-limit waits pause every worker together and are retried for over a minute before giving up.

  • Ctrl+C stops reading the file, finishes the rows already queued and prints a partial summary (exit code 1). An interrupted export removes its temporary file.

  • data import and data export read and write local files, so they are not available through the hosted (HTTP) MCP server.

Not supported yet: updating or upserting existing records by key, looking up relations by a natural key (use the related record's id), and file uploads.


Full-text search across your entities, plus index lifecycle management.

anythink search query <text>                          Run a search
anythink search similar <entity> <id>                 Find similar documents
anythink search rehydrate [<entity>]                  Rebuild the search index (admin)
anythink search purge [<entity>]                      Wipe the search index (admin)
anythink search audit <entity>                        Compare configured public-searchable fields
                                                       with what public search actually returns

Options — search query

Flag

Description

--entities <list>

Comma-separated entity names. Default: all indexed entities.

--filter <expr>

Filter expression, e.g. "status=published AND category=news". Supports _geoRadius.

--sort <list>

Comma-separated sort fields, e.g. "created_at:desc,id:asc".

--facet <fields>

Comma-separated fields to compute facet counts on.

--highlight

Highlight matched terms in results.

--page N

Page number (default: 1).

--limit N

Results per page (1-100, default: 20).

--public

Use the unauthenticated /search/public endpoint (only public-marked fields).

--json

Print the raw response JSON.

Index lifecycle

rehydrate and purge are admin operations on the search index:

  • search rehydrate — rebuilds the index from the database (no data loss; just resyncs)

  • search purge — deletes the index (run rehydrate after to repopulate)

Both confirm by default; pass -y / --yes to skip the prompt for automation.

search audit — public-search data leak check

Compares what the entity's schema says should be public-searchable (fields with publicly_searchable=true and the entity's own is_public=true) against what /search/public actually returns. Any field appearing in public results that isn't on the allowlist is reported as a leak.

Exits with code 1 if a leak is detected — useful for CI/CD.

Examples

# Browse everything
anythink search query "*"

# Filtered search with sorting
anythink search query "anythink" --filter "status=published" --sort "created_at:desc"

# Compare what public visitors see vs what's in the database
anythink search audit posts
anythink search audit users --query "alice" --sample 10

# Reindex after a schema change
anythink search rehydrate posts
anythink search rehydrate --yes        # everything (admin)

# Geo search (radius in metres)
anythink search query "*" --filter "_geoRadius(51.5074,-0.1278,5000)"

workflows

Manage automation workflows. A workflow can have several triggers: a cron schedule, an entity event, an API route, or a manual run.

anythink workflows list                List all workflows (--json for a compact summary)
anythink workflows get <id>            Get workflow details and steps (--json for the full definition)
anythink workflows create <name>       Create a new workflow
anythink workflows update <id>         Rename a workflow or change its description
anythink workflows enable <id>         Enable a workflow
anythink workflows disable <id>        Disable a workflow
anythink workflows trigger <id>        Manually trigger a workflow
anythink workflows delete <id>         Delete a workflow

Trigger types — workflows create --trigger <type> (not case-sensitive; default Manual)

Type

Fires

Required flag

Other flags

Manual

When run by hand, on an entity

--entity <name>

Event

When an event happens, such as a record being created

--entity <name> for the Entity... events

--event <event>, --filter <json>

Timed

On a cron schedule

--cron <expr>

Api

When its API route is called

--api-route <route>

--event (not case-sensitive) is EntityCreated (default), EntityUpdated, EntityDeleted, UserRegistered, UserInvited, SubscriptionCreated, SubscriptionActivated, SubscriptionExpired, PaymentCreated, PaymentSucceeded, PaymentFailed, PaymentMethodCaptured, PaymentMethodCaptureFailed, PaymentMethodRemoved or PushActionTaken; only the three Entity... events need --entity. A trigger missing its required flag is rejected before anything is sent, and a flag that doesn't apply to the chosen type is ignored with a warning.

Other options — workflows create

Flag

Description

--description <text>

Workflow description

--enabled

Enable the workflow straight away

--filter-file <path>

Read the Event filter JSON from a file

Examples

anythink workflows create daily-sync --trigger Timed --cron "0 6 * * *"
anythink workflows create on-post --trigger Event --entity blog_posts --event EntityUpdated
anythink workflows create import-hook --trigger Api --api-route hooks/import
anythink workflows create review-posts --entity blog_posts
anythink workflows trigger 76
anythink workflows disable 83

users

Manage users in the active project.

anythink users list                    List all users
anythink users me                      Show the currently authenticated user
anythink users get <id>                Get a user by ID
anythink users invite <email> <first> <last>   Create a user and send an invitation email
anythink users delete <id>             Delete a user

Options — users invite

Flag

Description

--role-id <id>

Assign a role to the new user

Examples

anythink users list
anythink users invite alice@example.com Alice Smith --role-id 3
anythink users delete 42 --yes

files

Manage uploaded files in the active project.

anythink files list                    List uploaded files
anythink files get <id>                Get file metadata by ID
anythink files upload <path>           Upload a file
anythink files delete <id>             Delete a file

Options — files list

Flag

Description

--page <n>

Page number

--limit <n>

Files per page (default: 25)

Options — files upload

Flag

Description

--public

Make the file publicly accessible

Examples

anythink files list
anythink files upload logo.png --public
anythink files upload export.csv
anythink files delete 12 --yes

email

View and edit the project's transactional email templates (confirmation, invite, recovery and so on) and the HTML shell that wraps every email's body. Email commands need the project's email permissions; the API enforces them for whoever is signed in.

anythink email templates list                      List the project's email templates
anythink email templates show <type>               Show a template's subject and content
anythink email templates update <type>             Change a template's subject and/or content
anythink email preview                             Render an unsaved draft and print the HTML
anythink email shell show                          Show the shell HTML (custom or platform default)
anythink email shell update                        Save new shell HTML, or reset it

Options — email templates show

Flag

Description

--rendered

Print the rendered HTML (with sample data) instead of the source

Options — email templates update

Flag

Description

--subject <text>

New subject line

--content <path>

File with the new content (use - to read stdin)

--content-text <html>

The new content, passed inline (use this or --content, not both)

Pass at least one of the subject or the content. Whatever you leave out keeps its current value. Empty content is refused.

Options — email preview (renders on the server and saves nothing)

Flag

Description

--subject <text>

Subject to render (default: Preview)

--content <path>

File with the content (use - for stdin)

--content-text <html>

The content, passed inline

--wrapper <path>

Optional shell HTML to render against (use - for stdin)

--wrapper-text <html>

Optional shell HTML, passed inline

Options — email shell update (pass exactly one)

Flag

Description

--html <path>

File with the new shell HTML (use - for stdin)

--html-text <html>

The new shell HTML, passed inline

--reset

Go back to the platform default shell

HTML is limited to 1,000,000 characters. The shell and template commands print raw HTML, so you can redirect it to a file. Through the MCP server the file options are not offered, so agents pass the HTML inline with content_text, wrapper_text and html_text.

Examples

anythink email templates list
anythink email templates show confirmation --rendered > confirmation.html
anythink email templates update confirmation --subject "Welcome aboard"
anythink email templates update confirmation --content ./confirmation.html
cat confirmation.html | anythink email templates update confirmation --content -
anythink email preview --subject "Hi" --content ./draft.html --wrapper ./shell.html
anythink email shell show > shell.html
anythink email shell update --html ./shell.html
anythink email shell update --reset

roles

Manage roles in the active project. Roles control what authenticated users can access.

anythink roles list                    List all roles
anythink roles create <name>           Create a new role
anythink roles delete <id>             Delete a role

Options — roles create

Flag

Description

--description <text>

Human-readable description of the role

Examples

anythink roles list
anythink roles create editor --description "Can edit content"
anythink roles delete 5 --yes

api-keys

Issue and manage API keys for non-interactive access (CI pipelines, scripts, integrations). Each key is scoped to a permission set, has an expiry, and is tied to the user that created it.

The raw key is shown once on creation and never retrievable — save it immediately or use --save-as to write it directly into a CLI profile.

anythink api-keys list                              List your API keys
anythink api-keys create <name> --permissions ...   Create a new key
anythink api-keys revoke <id>                       Revoke a key

Options — api-keys create

Flag

Description

--permissions <list>

Required. Comma-separated permission names, e.g. data:read,data:create

--expires-in <days>

Days until expiry (default: 90, max: 365)

--no-expiry-cap

Allow --expires-in greater than 365 days

--save-as <profile>

Save the new key directly to a CLI profile instead of printing it

--json

Print the response as JSON to stdout (the key is in this output — handle carefully)

-y, --yes

Skip the confirmation prompt

Output behaviour

By default, the success message goes to stdout and the raw key goes to stderr on its own line. This makes it easy to capture only the key:

anythink api-keys create ci-deploy --permissions data:read --yes 2> key.txt

If the server drops any of the requested permissions because the current user does not hold them, the CLI surfaces a loud warning so you do not end up with a quietly under-scoped key.

Examples

# Create a 90-day key for CI
anythink api-keys create github-actions --permissions "data:read,data:create" --yes 2> key.txt

# Create a key and save it directly into a profile (key never echoes)
anythink api-keys create scraper --permissions data:read --save-as scraper-bot --yes
anythink --profile scraper-bot data list posts

# Revoke a key
anythink api-keys revoke 42 --yes

menus

Manage dashboard sidebar menus in the active project. Menus control what entities appear in the Anythink dashboard and how they are grouped.

anythink menus list                                        List all menus with tree structure
anythink menus get <menu_id> [--json]                      Show one menu (and its role) with its items and child items
anythink menus create <name> <role_id>                     Create a menu shown to a role
anythink menus update <menu_id> [--name <text>] [--role <id>]
                                                           Rename a menu or change its role
anythink menus delete <menu_id> [--yes]                    Delete a menu and all of its items
anythink menus add-item <menu_id> <entity>                 Add an entity to a dashboard menu
anythink menus update-item <menu_id> <item_id> [options]   Change an item's name, icon, link or parent
anythink menus remove-item <menu_id> <item_id> [--yes]     Remove an item, along with its child items
anythink menus reorder-items <menu_id> <item_ids>          Set the order of items that share a parent
anythink menus reorder <menu_ids>                          Set the order of menus

Options — menus add-item

Flag

Description

--icon <name>

Lucide icon name (e.g. MessageCircle, Target)

--name <text>

Display name (defaults to entity name, title-cased)

--parent <id>

Parent menu item ID for nesting under a group

Options — menus update-item (only the fields you pass change)

Flag

Description

--name <text>

New display name

--icon <name>

New Lucide icon name

--entity <name>

Point the item at an entity's page (instead of --href)

--href <path>

Point the item at any path (instead of --entity)

--parent <id>

Parent item ID to nest under; 0 moves it to the top level

reorder-items and reorder take comma-separated IDs in the order you want them (301,299,300). The items you name take the first places within their group; items you leave out follow in their current order, and reorder-items needs all the items to share one parent. Locked items (the built-in ones) can't be changed, removed or moved; they keep their place, and the items between them reuse their own position numbers (they are only renumbered when two of them tie).

add-item and update-item --entity look the entity up first (system entities count), and stop only if it doesn't exist; if the lookup itself fails (for example, no permission), the item is saved and a warning says the entity couldn't be checked. Moving an item to a new parent with update-item --parent puts it last among its new siblings.

Removing an item also removes its direct child items. The command says so, and refuses when those children are locked or have items of their own.

A role is shown only its first menu, so create (and update --role) warns when the role already has one. delete removes the menu's locked built-in items with it, and says when the role is left with no menu.

Examples

# List all menus and their items
anythink menus list

# Show menu 250 with the item IDs you need for the commands below
anythink menus get 250

# Add "Check-ins" under the Profiles group (parent 168) in admin menu (250)
anythink menus add-item 250 check_ins --icon MessageCircle --parent 168

# Add a top-level menu item
anythink menus add-item 250 badges --icon Award

# Rename an item and give it another icon
anythink menus update-item 250 299 --name "Achievements" --icon Trophy

# Remove an item
anythink menus remove-item 250 299 --yes

# Put items 301, 299 and 300 first, in that order
anythink menus reorder-items 250 301,299,300

charts

Build and manage the charts shown on dashboards in the active project. Every command takes --json, which prints a compact result with the ids the next step needs. In the MCP server each command is a tool of the same name (charts_create, charts_preview and so on).

anythink charts list [--entity <name>]            List charts, newest first
anythink charts get <id>                          Show a chart's configuration
anythink charts create <name> [options]           Create a chart
anythink charts update <id> [options]             Change a chart; options you leave out keep their value
anythink charts delete <id> [--yes]               Delete a chart
anythink charts preview [options]                 Show the data a configuration would draw, without saving it
anythink charts platform-metrics                  List the usage metrics a platform chart can plot

Options — charts create, charts update and charts preview

Flag

Description

--entity <name>

Entity whose records the chart plots

--type <type>

column (bar chart), line, pie, area, stat, gauge or funnel

--group-by <field>

Field for the x axis, or the slices of a pie

--interval <size>

Bucket a date --group-by: hour, day, week, month, quarter or year

--measure <field>

Numeric field to aggregate (needed unless --agg is count)

--agg <how>

count (default), sum, avg, min or max

--stack-by <field>

Field that splits each bar or point into a second breakdown

--filter <f:op:value>

Filter such as status:eq:published. Operators: eq ne gt gte lt lte contains in exists not_exists. Repeat for several fields; a chart keeps one filter per field

--timeframe <preset>

all, 24h, 7d, 30d, 90d, 365d or custom (with --from and --to)

--limit <n>, --sort <asc|desc>, --cumulative <bool>

Row limit, sort order and running total

--target <n>, --target-mode <goal|warning>

A goal or warning level on a stat or gauge

--compare <bool>, --compare-days <n>, --compare-overlay <bool>

Compare with the previous period

--source <entity|platform|quota>

Where the data comes from. Platform charts use --platform-metric (see charts platform-metrics), quota charts use --quota-metric

--config <json>

Anything else, as a JSON object, e.g. {"funnelStages":[{"label":"Signed up"}]} for a funnel. Typed options win over it

--rows <n>

charts preview only: most rows to show (default 50)

A missing or unknown value is refused before anything is sent, with a message naming it. Check a chart with charts preview before charts create: it takes the same options and shows what the chart would draw.

Examples

# What would a pie of orders by status show?
anythink charts preview --entity orders --type pie --group-by status

# Save it, then a revenue chart with a filter
anythink charts create "Orders by status" --entity orders --type pie --group-by status
anythink charts create "UK revenue per month" --entity orders --type column --group-by created_at \
  --interval month --measure total --agg sum --filter region:eq:uk --timeframe 365d

# A usage chart from the platform metrics
anythink charts create "Workflow runs" --source platform --platform-metric workflow_runs --type line

# Change one thing
anythink charts update 12 --timeframe 30d

dashboards

Build and manage dashboards. A dashboard is a set of widgets (charts, lists, notes and so on) laid out on a 12-column grid. Every command takes --json.

anythink dashboards list                                 List the dashboards you can see
anythink dashboards get <id>                             Show a dashboard with its widgets and their positions
anythink dashboards mine                                 Show your landing dashboard, or the project default
anythink dashboards create <name> [options]              Create a dashboard
anythink dashboards update <id> [options]                Rename it, change who can see it, or replace its widgets and layout
anythink dashboards delete <id> [--yes]                  Delete a dashboard and its widgets (the charts are kept)
anythink dashboards add-chart <dashboard-id> <chart-id>  Add a chart as a new widget
anythink dashboards remove-widget <dashboard-id> <widget-id>  Remove a widget
anythink dashboards data <id> [--widget <id>]            Show the data behind the widgets
anythink dashboards widget-preview --type <type>         Show the data a widget would draw, without saving it
anythink dashboards set-home <id>                        Make it your landing dashboard
anythink dashboards promote-to-default <id> [--yes]      Copy it over the project default (administrators only)

add-chart and remove-widget read the dashboard, change only that widget, and write the rest back as it was.

Options

Command / flag

Description

create --chart <id>

Put a chart on the new dashboard. Repeat for several

create --description, --shared, --allow-shared-edit, --home, --default

Description, who can see or edit it, and whether it is your landing or the project default dashboard

create/update --config <json>

Other settings as a JSON object: widgets (each with type, title and settings) and layout. On update, widgets replaces the whole list, so include every widget to keep, with its id

update --name, --description, --shared <bool>, --allow-shared-edit <bool>

The fields to change; the rest are left alone

add-chart --title <text>

Widget title (defaults to the chart's name)

add-chart --column, --row, --width, --height

Position and size on the grid (default width 4, height 3, placed below the existing widgets). Leave them all out and the dashboard places the widget itself

data --widget <id>, --rows <n>

Only these widgets; most rows to show per widget (default 20)

widget-preview --type, --chart, --config, --rows

Widget type (chart, list, markdown, ...), the chart to show, or the widget's own settings as JSON

Examples

# A dashboard with two charts already on it
anythink dashboards create Sales --chart 12 --chart 14

# Add a third, half the width of the grid
anythink dashboards add-chart 3 15 --width 6

# See what is on it, then take a widget off
anythink dashboards get 3
anythink dashboards remove-widget 3 41

# The numbers behind it
anythink dashboards data 3 --json

settings

View and change project settings in the active project, including the allowed application URLs that browsers may call the API from (CORS).

anythink settings get [--json]                   Show all project settings
anythink settings set <key> <value> [--yes]     Set a single project setting
anythink settings cors list                      List allowed application URLs
anythink settings cors add <url> [--yes]         Add an allowed origin
anythink settings cors remove <url>              Remove an allowed origin

Keys — settings set

Key

Value

name, description

Text

require_email_confirmation

true / false

allow_registrations

true / false

default_role_id

Role ID for newly registered users

enable_group_rls

true / false

payment_success_url, payment_cancel_url

URL

app_engagement_trial_enabled

true / false

app_engagement_trial_days

Number of days

ai_mode

platform or byok

ai_byok_provider, ai_default_model

Text

google_maps_key

Text

Origins must be http/https with a host and optional port, with no path, query or fragment; a trailing / is stripped. A wildcard such as https://*.example.com is only safe on a domain you control, so wildcards under shared hosting domains (vercel.app, github.io, …) or a bare TLD are refused unless you pass --yes.

Some changes widen who can sign up: default_role_id pointing at an administrator role is refused unless you pass --yes, and allow_registrations true and require_email_confirmation false ask for confirmation (pass --yes when running non-interactively).

cors add and cors remove clear the project's CORS cache, so the change applies straight away. Matching is case-insensitive and adding a URL that is already present does nothing. Anythink's own domains and localhost are always allowed and don't need adding.

Examples

# Allow a deployed front end to call the API
anythink settings cors add https://my-app.vercel.app

# Allow every subdomain of a domain you own
anythink settings cors add "https://*.example.com"

# Remove an origin
anythink settings cors remove https://my-app.vercel.app

# Let users sign up on their own
anythink settings set allow_registrations true

integrations

Manage integrations — both the catalog of available providers (Claude, OpenAI, Slack, Google, etc.) and the active connections that hold credentials for them.

anythink integrations list                                  List available providers
anythink integrations get <provider>                        Show details and operations for one provider
anythink integrations connections list [--provider <p>]     List your active connections

anythink integrations connect <provider>                    Create an API-key connection (Claude, OpenAI, etc.)
anythink integrations oauth status <provider>               Show OAuth client setup status
anythink integrations oauth configure <provider>            Set the OAuth client ID + secret
anythink integrations oauth connect <provider>              Connect via the browser OAuth flow

anythink integrations test <connection-id>                  Test a connection
anythink integrations enable <connection-id>                Enable a connection
anythink integrations disable <connection-id>               Disable a connection
anythink integrations disconnect <connection-id>            Delete a connection

anythink integrations execute <provider> <operation>        Run an operation on a connected provider

API-key providers — integrations connect

Flag

Description

--api-key <key>

API key for the provider. If omitted, you'll be prompted (input is hidden).

--name <name>

Friendly name for this connection (default: <provider> connection)

--user-connection

Make this a user-scoped connection (only the current user sees it). Default: tenant-wide.

OAuth providers — integrations oauth connect

The CLI starts a local HTTP listener on http://localhost:8745/callback, opens your browser to the provider's authorisation URL, and exchanges the returned code for a connection — no copy/paste of auth codes required.

Flag

Description

--name <name>

Friendly name for this connection

--user-connection

Make this a user-scoped connection

--port <n>

Local callback port (default: 8745)

--no-open

Don't try to open the browser — just print the URL

--timeout <secs>

How long to wait for the callback (default: 300)

OAuth credentials need to be set up once per provider before you can connect:

anythink integrations oauth configure slack          # prompts for client_id + secret (hidden)
anythink integrations oauth connect slack --name main

Running operations — integrations execute

Flag

Description

--input <k=v>

Input parameter as key=value. Repeatable.

--inputs <json>

All inputs as a JSON object.

--json

Print the full JSON response (default: just the content field if present).

Examples

# Browse what's available
anythink integrations list
anythink integrations get claude

# API-key flow (Claude, OpenAI)
anythink integrations connect claude --name "main"
anythink integrations execute claude generate-text --input "prompt=Tell me a haiku"

# OAuth flow (Slack, Google, GitHub)
anythink integrations oauth configure slack
anythink integrations oauth connect slack --name main

# Manage connections
anythink integrations connections list
anythink integrations test <connection-id>
anythink integrations disable <connection-id>
anythink integrations disconnect <connection-id> --yes

pay

Manage AnythinkPay — Stripe Connect, Apple in-app purchases, payments, subscription plans, and live subscriptions.

anythink pay status                    Show Stripe Connect account status
anythink pay connect                   Set up a Stripe Connect account and start onboarding
anythink pay setup                     Guided setup: Stripe Connect, Apple IAP, and a first plan
anythink pay payments                  List recent payments
anythink pay methods                   List saved payment methods
anythink pay entitlement               Show the current user's access / trial entitlement
anythink pay payment-options           Show available payment providers for a platform/storefront

anythink pay trial status|enable|disable          Manage the app engagement trial

anythink pay apple credentials set                Set Apple IAP credentials (.p8 from a file)
anythink pay apple credentials show               Show Apple IAP credentials (identifiers masked)
anythink pay apple credentials notification-url   Print the URL to register in App Store Connect
anythink pay apple verify                         Verify an Apple transaction (testing)

anythink pay plans list|get|create|update|delete  Manage subscription plans

anythink pay subscriptions list|get|events        Inspect subscriptions and history
anythink pay subscriptions cancel|resume          Standard lifecycle actions
anythink pay subscriptions delete|force-expire|relink|resync   Admin recovery (project admin)

anythink pay offers list|get|create|update        Manage promo and referral offers
anythink pay offers pause|activate                Change an offer's status
anythink pay offers delete                        Permanently delete an offer, its codes and redemption records
anythink pay offers codes|add-code|redemptions    Inspect and extend an offer
anythink pay offers user-code                     Look up a user's personal referral code

Commands that cancel, delete, expire, relink or pause (pay plans delete, pay subscriptions cancel|delete|force-expire|relink, pay offers pause|delete) ask for confirmation. Pass -y/--yes to skip the prompt; in a non-interactive shell they refuse to run without it.

pay plans update only changes the fields you pass: omitted flags keep the plan's current currency, interval, type and active state. Use --active or --inactive to change availability.

Options — pay payments

Flag

Description

--page <n>

Page number

--limit <n>

Payments per page (default: 25)

pay connect is interactive — it prompts for business type, country, and contact email, creates a Stripe Connect account, then opens the Stripe onboarding URL in your browser. pay setup chains Stripe Connect, Apple IAP credentials, and a first plan; each step is optional.

Subscription plans can carry an --apple-product-id (and optional --apple-subscription-group-id) so one plan covers both Stripe and Apple. pay apple credentials set reads the App Store Connect .p8 private key from a file and stores it encrypted — it is never printed or logged.

Required permissions

Command surface

Permission

Plan / subscription reads, entitlement, payment-options

anythink_subscription_plans:read

Plan writes

anythink_subscription_plans:create / :update / :delete

Payment reads/writes

anythink_payments:read / :create

Apple credentials, admin recovery (delete/force-expire/relink/resync)

project administrator

Examples

anythink pay setup
anythink pay plans create --plan-name monthly --name Monthly --amount 9.99 --currency gbp --interval month --apple-product-id example_monthly
anythink pay apple credentials set --issuer-id <uuid> --key-id <id> --bundle-id com.example.app --private-key-file ./AuthKey.p8
anythink pay apple verify --signed-transaction <JWS>
anythink pay subscriptions events <subId>
anythink pay entitlement

oauth

Configure OAuth social sign-in providers for the active project.

anythink oauth google status           Show Google OAuth configuration status
anythink oauth google configure        Set Google OAuth client ID and secret

Google OAuth lets your project's users sign in with their Google account. You'll need a Google Cloud project with the OAuth 2.0 credentials created — see the Google Cloud Console.

Set the authorised redirect URI in your Google Cloud credentials to:

https://api.my.anythink.cloud/org/<your-org-id>/auth/v1/google/callback

Examples

anythink oauth google status
anythink oauth google configure

api

List all API endpoints available for the active project — both platform routes and the dynamically generated REST routes for your entities.

anythink api                           List all endpoints
anythink api --json                    Output as JSON (useful for AI tooling)

docs

Print the full CLI reference.

anythink docs                          Print reference as markdown
anythink docs --json                   Print reference as JSON (for AI/tooling consumption)

migrate

Copy the entity schema (entities + fields) from one project profile to another. Useful for promoting a schema from staging to production.

anythink migrate --from <profile> --to <profile>

Options

Flag

Description

--from <profile>

Source profile name (required)

--to <profile>

Destination profile name (required)

--dry-run

Show what would be migrated without making changes

Examples

anythink migrate --from my-app-staging --to my-app-prod
anythink migrate --from my-app-staging --to my-app-prod --dry-run

plans

List available Anythink plans.

anythink plans                         List plans
anythink plans --json                  Output as JSON

MCP server

The Anythink MCP server exposes the platform to AI assistants (Claude, Cursor, etc.) via the Model Context Protocol.

Install

No install needed — the recommended way is to run it on demand with npx:

npx -y @anythink-cloud/mcp

Prefer a native binary on your PATH? Any of:

# Homebrew (bundled with the CLI — see Installation above)
brew install anythink-cloud/tap/anythink

# .NET global tool (requires the .NET 8 SDK)
dotnet tool install -g anythink-mcp

# Or download the anythink-mcp-<platform> binary from the Releases page

Configure

Add to Cursor Install in VS Code

For Claude Code, register it in one command:

claude mcp add anythink -- npx -y @anythink-cloud/mcp

Or add it to your MCP client config manually (e.g. .mcp.json):

{
  "mcpServers": {
    "anythink": {
      "command": "npx",
      "args": ["-y", "@anythink-cloud/mcp"]
    }
  }
}

To pin a profile, add it to args: ["-y", "@anythink-cloud/mcp", "--profile", "my-project"]

Works in any MCP client. Most use the same mcpServers JSON shown above — just add it to the client's config file:

Client

Config file

Claude Code

claude mcp add anythink -- npx -y @anythink-cloud/mcp (or .mcp.json)

Claude Desktop

claude_desktop_config.json (Settings → Developer → Edit Config)

Cursor

~/.cursor/mcp.json (or the Add to Cursor button above)

VS Code

.vscode/mcp.json (or the Install in VS Code button above)

Cline

cline_mcp_settings.json (MCP Servers → Configure)

Windsurf

~/.codeium/windsurf/mcp_config.json

A couple of clients use a different config shape:

mcpServers:
  - name: anythink
    command: npx
    args:
      - -y
      - "@anythink-cloud/mcp"
{
  "context_servers": {
    "anythink": {
      "source": "custom",
      "command": "npx",
      "args": ["-y", "@anythink-cloud/mcp"]
    }
  }
}

(Using a native binary instead of npx? Use "command": "anythink-mcp" with no args.)

Once connected, run the login tool, then accounts_use / projects_use to pick your working context.

Available tools

The MCP server provides dedicated tools for authentication, account/project management, and configuration — plus a generic cli tool that can run any CLI command:

Tool

Description

signup

Create a new Anythink account

login

Log in with email and password

login_direct

Store credentials directly (org ID + API key or JWT)

logout

Remove a saved profile

config_show

List all profiles

config_use

Switch active profile

config_remove

Remove a profile

accounts_list

List billing accounts

accounts_create

Create a billing account

accounts_use

Set the active billing account

projects_list

List projects

projects_create

Create a project

projects_use

Connect to a project

projects_delete

Delete a project

cli

Run any CLI command (entities, data, workflows, roles, etc.)

The hosted MCP server (anythink-mcp --hosted) has no sign-in or profile tools. Its accounts_list, accounts_create, plans, projects_create and projects_delete tools run as the signed-in user and appear only when the user grants account access; see the MCP server docs.


Contributing

Prerequisites

Setup

git clone https://github.com/anythink-cloud/anythink-cli
cd anythink-cli
dotnet build

Running locally

dotnet run --project src/AnythinkCli.csproj -- --help
dotnet run --project src/AnythinkCli.csproj -- projects list
dotnet run --project src/AnythinkCli.csproj -- entities list

Releases

Releases are automated via GitHub Actions. Push a version tag to trigger a build:

git tag v1.2.0
git push origin v1.2.0

The workflow builds self-contained binaries for macOS (arm64, x64) and Linux (x64, arm64), computes SHA256 checksums, and publishes them as a GitHub release.

Project structure

anythink-cli/
├── src/                        # CLI source
│   ├── Commands/               # Command implementations (signup, login, etc)
│   ├── Config/                 # CliConfig.cs, Profile, ConfigService
│   ├── Models/                 # ApiModels.cs, BillingModels.cs
│   ├── Client/                 # HttpApiClient.cs, AnythinkClient.cs, BillingClient.cs
│   ├── Output/                 # Renderer.cs (Spectre.Console helpers)
│   └── Program.cs              # Application entry point & .env loader
├── mcp/                        # MCP server source
│   ├── Tools/                  # MCP tool implementations
│   ├── McpClientFactory.cs     # Auth + client resolution
│   └── Program.cs              # MCP server entry point
├── tests/                      # CLI unit tests
├── mcp-tests/                  # MCP unit tests
├── AnythinkCli.sln             # Solution file
└── .gitignore

License

MIT — see LICENSE. This covers the Anythink CLI and MCP server source in this repository; it does not grant rights to the Anythink platform, APIs, or services, which are governed by separate terms at anythink.cloud.


Built with Spectre.Console · Powered by Anythink

Available Tools

175 tools
accounts_createCreate a billing accountAInspect

Create a new billing account (organization) to hold projects and payment details. Requires a prior platform login (use the 'login' tool first). The new account is automatically set as the active account, so subsequent 'projects_create' / 'projects_list' calls target it without further setup. Returns the new account's id and name. Most users need only one account — call 'accounts_list' first to check whether a suitable one already exists.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesOrganization name, e.g. 'Acme Inc' — shown on invoices and in the dashboard
emailYesBilling email address that receives invoices and receipts
currencyNoISO currency for billing: 'gbp', 'usd', or 'eur'. Defaults to 'gbp'. Cannot be changed later.gbp

TDQS

A4.7/5.0
Behavior5/5

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

Annotations only supply destructiveHint=false and a title, so the description carries the real burden — and it does: it discloses the auth prerequisite, the non-obvious side effect that the new account becomes the active account (changing what projects_create/projects_list target), and the return payload. Creation is not idempotent-safe by implication, and the 'check first' warning covers the duplicate-account risk.

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 sentences, front-loaded with the action, followed by prerequisite, side effect, return value, and the routing hint. Every sentence carries information an agent needs and there is no filler or restatement of the title.

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?

There is no output schema, and the description compensates by stating what is returned (the new account's id and name). Combined with the login prerequisite and the active-account side effect, an agent has everything needed to call this correctly and sequence it properly.

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

Parameters3/5

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

Schema description coverage is 100%, so name, email, and currency (including the immutable-after-creation constraint and default) are already fully documented. The description adds no parameter-level detail beyond that, which is the expected baseline when the schema does the heavy lifting.

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

Purpose5/5

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

States a specific verb and resource ('Create a new billing account (organization)') plus what the resource holds ('projects and payment details'). It is immediately distinguishable from siblings like accounts_list, accounts_use, and projects_create, which are all named explicitly.

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

Usage Guidelines5/5

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

Gives explicit preconditions ('Requires a prior platform login (use the login tool first)') and an explicit when-not/gate ('Most users need only one account — call accounts_list first to check whether a suitable one already exists'). Nothing about tool selection 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.

accounts_listList billing accountsA
Read-only
Inspect

List the billing accounts (organizations) the logged-in user belongs to. Requires a prior platform login (use the 'login' tool first). Returns each account's id, organization name, billing email, currency, and status (Active/Suspended/Canceled), and flags which one is currently active. A billing account holds your projects and payment details — pick one with 'accounts_use' before creating or listing projects.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, so safety is covered, yet the description adds real value: an authentication prerequisite, the exact fields returned (id, organization name, billing email, currency, status), the Active/Suspended/Canceled enumeration, and which account is currently active. It stops short of stating side effects or pagination, but there are none expected for a zero-arg list tool.

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

Conciseness5/5

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

Three sentences, front-loaded with what is listed, then the auth prerequisite, then the downstream action. Every sentence carries distinct information with no restatement of the name or title.

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?

There is no output schema, and the description compensates by enumerating the returned fields and status values plus the 'currently active' flag. Combined with the auth prerequisite and sibling routing, nothing needed to call this tool 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 takes no parameters, so the baseline of 4 applies; the description correctly implies no filtering or input is required. There is no filter syntax or scoping option to explain.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 (billing accounts/organizations), and disambiguates by clarifying parenthetically that accounts are organizations. It also situates itself among siblings by naming accounts_use as the follow-up action, so an agent can separate it from accounts_create 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?

Explicit prerequisites ('Requires a prior platform login (use the login tool first)') and explicit next-step routing ('pick one with accounts_use before creating or listing projects'). Both when-to-use and the relevant alternative are stated, not implied.

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

accounts_useSwitch the active billing accountAInspect

Set the active billing account that project commands operate on. Call this after 'login' when you belong to more than one account, before using 'projects_list', 'projects_create', or 'projects_use'. Accepts a full account UUID or a unique prefix; run 'accounts_list' to see valid ids. Returns the resolved account name and id, or an error if no account matches.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesBilling account id — full UUID or a unique leading prefix. Get ids from 'accounts_list'.

TDQS

A4.5/5.0
Behavior4/5

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

With only destructiveHint=false in annotations, the description carries most of the load and does well: it discloses the accepted input forms, that it resolves to a name/id on success, and that a non-matching id yields an error. It stops short of stating auth requirements or whether the switch persists across sessions, so not a full 5.

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

Conciseness5/5

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

Three tight sentences, front-loaded with the effect, followed by the sequencing guidance and the return behavior. No filler; 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 single-parameter switch tool with no output schema, the description covers effect, prerequisites, input forms, and success/failure outcomes. 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.

Parameters3/5

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

Schema coverage is 100% and the single id parameter is fully documented in the schema, including the full-UUID-or-unique-prefix semantics and the accounts_list pointer. The description's mention of the same details adds little beyond what the schema already states, so baseline 3 applies.

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

Purpose5/5

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

States a specific verb (Set) and resource (active billing account that project commands operate on), and positions itself clearly against siblings accounts_list and accounts_create. An agent can distinguish this from projects_use and config_use without opening a schema.

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

Usage Guidelines5/5

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

Explicitly names the precondition ('after login'), the condition ('when you belong to more than one account'), and the downstream tools that depend on it ('projects_list', 'projects_create', 'projects_use'). It also routes to accounts_list for id discovery, 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.

apiApiA
Read-only
Inspect

List all API endpoints (platform + dynamically generated entity routes). Lists full URLs for a fixed set of core routes (auth, API keys, entities, fields, workflows), the five CRUD routes of every entity in the project plus public routes for public entities, and the route of each API-triggered workflow. Use it to give app developers endpoint URLs; to call one, use fetch. Returns JSON.

ParametersJSON Schema
NameRequiredDescriptionDefault
base_urlNoOverride base URL for this command

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=true, openWorldHint=false), and the description adds meaningful context beyond them: the exact categories of routes returned and the return format ('Returns JSON'), which matters since no output schema exists. It does not mention auth needs, pagination, or ordering, but the annotated baseline keeps the bar reasonable.

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 scope detail, usage, and return format. The middle enumeration is dense but each clause carries distinct scope information, so little is wasted.

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

Completeness4/5

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

For a one-parameter, read-only listing tool with a fully documented parameter and no output schema, the description covers what is listed, why to use it, the alternative for invocation, and the return format. Missing only minor operational details such as auth or pagination behavior.

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

Parameters3/5

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

One parameter (`base_url`) with 100% schema description coverage, so the schema already documents it. The description adds no parameter-level information, which matches the baseline of 3 for high schema coverage.

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

Purpose5/5

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

States a specific verb and resource ('List all API endpoints') and elaborates its scope: platform core routes plus dynamically generated entity CRUD/public routes and workflow-triggered routes. It also distinguishes itself from the sibling `fetch`, so an agent can tell what this does versus calling an endpoint.

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 condition ('Use it to give app developers endpoint URLs') and names the alternative for a related need ('to call one, use `fetch`'). There is no explicit negative scope (e.g., when not to use it versus `docs`), so it stops short of the full when/when-not/alternatives bar.

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

api_keys_createApi keys: createAInspect

Create an API key. The raw key is shown once and never retrievable. Creates a project API key with the named permissions (names from fetch on /permissions) that expires after 1 to 365 days, 90 by default. Permissions you don't hold yourself are dropped with a warning. The raw key appears only in this output, or goes straight into a CLI profile with save_as, so store it at once. Returns JSON.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesName for the API key (e.g. "github-actions", "backup-script")
save_asNoSave the new key directly into a CLI profile instead of printing it
expires_inNoDays until the key expires (default: 90, max: 365 unless --no-expiry-cap)
permissionsNoComma-separated permission names, e.g. "data:read,data:create"
no_expiry_capNoAllow --expires-in greater than 365 days (use sparingly)

TDQS

A4.3/5.0
Behavior5/5

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

Rich disclosure beyond the annotations: the raw key is shown once and never retrievable, expiry is 1–365 days (90 default), permissions the caller lacks are silently dropped with a warning, and the key lands only in the output or a CLI profile. These are the exact behavioral facts an agent needs and none are in the annotations.

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

Conciseness4/5

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

Front-loaded with the core action and generally tight. The 'shown once and never retrievable' / 'appears only in this output... store it at once' pairing is mildly redundant, and the trailing 'Returns JSON' adds little, but the paragraph earns its space overall.

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

Completeness4/5

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

With no output schema, the description carries return information and does so adequately, emphasizing that the raw key is delivered once in the output. Annotations cover the safety profile (non-readOnly, non-destructive). Minor gap: it doesn't describe the JSON shape returned, but the critical one-time-secret caveat is covered.

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

Parameters4/5

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

Schema coverage is 100% (baseline 3), and the description adds meaning on top: save_as diverts the raw key into a CLI profile, expires_in semantics/range, and that requested permissions fall back to what the caller actually holds. Slightly exceeds what the schema alone conveys.

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

Purpose5/5

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

States a specific verb (Create) and resource (API key / project API key) with concrete scope details: permissions, expiry, and where the raw key goes. An agent can distinguish this from api_keys_list and api_keys_revoke 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 largely implied by the create verb rather than stated. It hints at the save_as alternative ('goes straight into a CLI profile with save_as') and points to `fetch` on /permissions for valid names, but gives no explicit when-to-use/when-not guidance or comparison to sibling tools.

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

api_keys_listApi keys: listA
Read-only
Inspect

List API keys for the current user. Shows each key's id, name, number of permissions, expiry date and whether it is active, expired or revoked; key values are never returned. Use the id with api_keys_revoke.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is given. The description adds genuinely useful context beyond that: which fields are exposed, the status classification (active/expired/revoked), and the security-relevant guarantee that key values are never returned. Missing pagination/size behavior 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?

Two tight sentences: purpose first, then the returned fields and the security note, then the cross-reference. Every clause earns its place with no 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?

With no parameters and no output schema, the description compensates by enumerating the returned fields and statuses, so an agent knows exactly what to expect from a call. 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?

The tool takes zero parameters, so the baseline is 4 and there is nothing further the description could clarify about inputs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 with scope ('List API keys for the current user'), clearly distinguishing it from siblings like api_keys_create and api_keys_revoke. An agent can identify it 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 routes the agent downstream: 'Use the id with `api_keys_revoke`', which names the consuming tool. It does not state when-not to use it or list other alternatives, 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.

api_keys_revokeApi keys: revokeA
Destructive
Inspect

Revoke an API key by ID. Revokes the key immediately and for good, so any script, CI job or CLI profile using it starts failing to authenticate. Create a replacement with api_keys_create first if something still needs access. It changes or deletes existing data, so check with the user before running it.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesAPI key ID to revoke. Find it with api_keys_list.

TDQS

A4.5/5.0
Behavior5/5

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

Goes well beyond the destructiveHint annotation by spelling out irreversibility (immediately and for good), the concrete downstream consequence (scripts, CI jobs, CLI profiles failing to authenticate), and a user-confirmation requirement.

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

Conciseness5/5

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

Three tight sentences, front-loaded with the action and consequence, followed by the prerequisite and safety caution. 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 one-param destructive mutation with a complete schema and annotations, the description covers safety, irreversibility, prerequisites, and consequences. No output schema needed and nothing an agent requires is missing.

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

Parameters3/5

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

Schema description coverage is 100% and the single param is fully documented there, including how to find the ID via api_keys_list. The description only restates 'by ID,' adding no meaning beyond the schema, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb (revoke) and resource (API key) with the identifying argument (by ID), and the `api_keys_revoke` name plus description clearly separate it from api_keys_create/list 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 advises creating a replacement with `api_keys_create` first if access is still needed and to check with the user before running. It provides strong preconditions and caution, though it does not enumerate when not to revoke (e.g., shared keys) beyond the general warning.

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

charts_createCharts: createAInspect

Create a chart. Check it first with charts preview. Saves a chart that plots an entity's records, a platform usage metric (see charts_platform_metrics) or a plan quota. Settings are checked first and the call is refused with the problems listed. The new chart isn't shown anywhere until you put it on a dashboard with dashboards_add_chart or dashboards_create. Returns JSON.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoEnd of a custom time window, e.g. 2026-03-31
aggNoHow to combine the --measure values: count (default), sum, avg, min or max
fromNoStart of a custom time window, e.g. 2026-01-01
nameYesChart name
sortNoSort direction: asc or desc
typeNoChart type: column (bar chart), line, pie, area, stat, gauge or funnel
limitNoMost points or rows to plot
configNoOther chart settings as a JSON object, e.g. {"limit":10,"target":500} or funnelStages for a funnel. Typed options win over this. Setting names can be camelCase or snake_case
entityNoEntity whose records the chart plots (for an entity chart)
filterNoFilter as field:operator:value, e.g. status:eq:published. Operators: eq, ne, gt, gte, lt, lte, contains, in, exists, not_exists. Repeat for several fields. Replaces the chart's existing filters
sourceNoWhere the data comes from: entity (default), platform (usage metrics) or quota (plan limits)
targetNoGoal or warning level drawn on a stat or gauge
compareNoCompare with the previous period (true/false)
measureNoNumeric field to aggregate (needed unless --agg is count)
group_byNoField for the x axis, or the slices of a pie. A date field is bucketed with --interval
intervalNoBucket size for a date --group-by: hour, day, week, month, quarter or year
stack_byNoField that splits each bar or point into a second breakdown
timeframeNoTime window: all, 24h, 7d, 30d, 90d, 365d or custom
cumulativeNoPlot a running total (true/false)
target_modeNoWhat --target means: goal or warning
compare_daysNoHow many days back the comparison period starts (defaults to the length of the time window)
quota_metricNoPlan limit for a quota chart: storage, files, users, workflows or emails
compare_overlayNoDraw the previous period over the current one (true/false)
platform_metricNoUsage metric for a platform chart. List them with: charts platform-metrics
platform_periodNoWindow for a platform metric: day, week, month, quarter or year

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare the mutation/read and safety profile (readOnlyHint=false, destructiveHint=false, openWorldHint=false). The description adds valuable behavior beyond that: settings are validated and the call is refused with problems listed, and the chart stays invisible until attached to a dashboard. It doesn't detail permission requirements 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.

Conciseness5/5

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

Front-loaded with the core action and then packs workflow, side-effect and return-format facts into a few tight sentences with no filler. 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 25-parameter mutation tool with no output schema, the description covers the essential workflow, validation/refusal behavior, and the post-create visibility constraint. It notes 'Returns JSON' but the absence of an output schema leaves return shape largely unstated, a minor gap given the richness elsewhere.

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

Parameters3/5

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

Schema description coverage is 100% and the parameter docs are very detailed, so the schema carries the semantic load. The description adds no per-parameter meaning beyond what the schema already states, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb+resource ('Create a chart') and immediately clarifies the three data sources it can plot (entity records, platform usage metric, plan quota), naming the relevant sibling charts_platform_metrics. An agent can distinguish it from charts_update/charts_preview without opening a schema.

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

Usage Guidelines4/5

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

Gives explicit workflow guidance ('Check it first with charts preview') and names where the result must go next (dashboards_add_chart or dashboards_create). It stops short of stating when NOT to use it (e.g. editing an existing chart via charts_update), so it is strong but not fully exhaustive.

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

charts_deleteCharts: deleteA
Destructive
Inspect

Delete a chart. Dashboards that show it keep an empty widget until you remove it. Permanently removes a saved chart from the project. To take a chart off one dashboard but keep it, use dashboards_remove_widget instead. After deleting, find the widgets that showed it with dashboards_get and clear them with dashboards_remove_widget. Returns JSON. It changes or deletes existing data, so check with the user before running it.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesChart ID. Find it with charts_list.

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, but the description adds concrete consequence detail beyond that: dangling empty widgets remain on dashboards, deletion is permanent, and it warns to check with the user first. It does not discuss auth requirements or reversibility beyond 'permanently,' which slightly caps the score.

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?

Four sentences, mostly informative, but the follow-up instruction ('find the widgets...clear them') is operational guidance rather than purpose-defining and somewhat pads the length. Front-loaded well with the core action first.

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

Completeness4/5

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

No output schema, so the description notes it returns JSON, though not the shape. Covers the mutation, the side effect on dashboards, and the safety warning. Sufficient for an agent to call it correctly given annotations already flag destructiveness.

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

Parameters4/5

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

Schema coverage is 100%, giving a baseline of 3; the description adds the operational constraint that the chart ID is required but the schema already says that too. The description's 'find it with charts_list' is already in the schema's parameter description, so no extra value there, but the schema itself is complete.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 ('chart'), plus the permanent nature of the removal. Explicitly distinguishes itself from the more surgical dashboards_remove_widget by contrast.

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

Usage Guidelines5/5

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

Gives explicit when-to-use and when-not-to-use: 'To take a chart off one dashboard but keep it, use dashboards_remove_widget instead.' Also prescribes a follow-up workflow (find dangling widgets via dashboards_get, clear with dashboards_remove_widget).

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

charts_getCharts: getA
Read-only
Inspect

Get a chart's full configuration. Shows every setting of one saved chart: type, data source, entity or metric, grouping, measure and aggregation, filters, time window, target and comparison. Read it before charts_update; to see the data it draws, use dashboards_widget_preview with type chart and its id. Returns JSON.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesChart ID. Find it with charts_list.

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 and openWorldHint=false, covering the safety profile. The description adds useful observability context by enumerating exactly which configuration fields are returned and noting the payload is JSON, 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?

Three sentences, front-loaded with the core action, then the returned fields, then routing guidance. No filler; every clause carries 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-param read tool with annotations covering safety and no output schema, the description compensates by listing the return contents and stating the format. Nothing an agent needs to call and interpret it 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 100% and the single `id` param is documented in the schema with a pointer to `charts_list`. The description adds no syntax, format, or constraint detail beyond what the schema already provides, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource ('Get a chart's full configuration') and enumerates the concrete settings returned (type, data source, entity/metric, grouping, measure/aggregation, filters, time window, target, comparison). It distinguishes itself from `charts_update` and `dashboards_widget_preview`, so an agent can route correctly 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 when to use it ('Read it before `charts_update`') and names the alternative for a different need ('to see the data it draws, use `dashboards_widget_preview` with type chart and its id'). Both the when and the alternative are stated outright.

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

charts_listCharts: listA
Read-only
Inspect

List charts, newest first. Shows each saved chart's id, name, type, data source, the entity or metric it plots and when it last changed; pass entity to see only one entity's charts. A chart is saved on its own and appears on a dashboard only once added with dashboards_add_chart. Returns JSON.

ParametersJSON Schema
NameRequiredDescriptionDefault
entityNoOnly charts that plot this entity

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and openWorldHint=false, so the safety profile is covered. The description adds genuinely useful behavior: the newest-first sort order, the returned fields, and JSON output format.

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 ordering, return shape, filter usage, and domain context. Well ordered; the trailing 'Returns JSON' is minor filler but not harmful.

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 list tool with no output schema, the description covers ordering, fields, filtering, and the chart/dashboard relationship. Nothing essential for correct invocation is missing.

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

Parameters3/5

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

Schema coverage is 100%, so the single `entity` parameter is already documented as 'Only charts that plot this entity'. The description's 'pass entity to see only one entity's charts' largely restates the schema, so baseline 3 applies.

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

Purpose5/5

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

States a specific verb ('List charts') plus the ordering ('newest first') and enumerates the exact fields returned (id, name, type, data source, entity/metric, last changed). This clearly distinguishes it from siblings like charts_get, charts_create, and charts_delete.

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 that passing `entity` narrows results to one entity, and clarifies the chart/dashboard relationship ('appears on a dashboard only once added with dashboards_add_chart'). It stops short of explicitly contrasting this tool with charts_get, but the intended use is clear.

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

charts_platform_metricsCharts: platform metricsA
Read-only
Inspect

List the usage metrics a platform chart can plot. Shows each project usage metric a chart with source platform can plot: its id, label, shape, supported chart types and breakdowns. Pass a metric's id as platform_metric to charts_preview or charts_create, and one of its breakdowns as stack_by. Returns JSON.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnlyHint=true, openWorldHint=false), and the description adds useful context beyond them: it discloses the shape of each returned record and that the response is JSON. With no output schema present, describing return contents is genuinely valuable, though pagination/error behavior is not mentioned.

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

Conciseness4/5

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

Three sentences, front-loaded with the core purpose and then the follow-up wiring. Slightly repetitive in restating 'usage metrics a platform chart can plot', but there is no filler and no buried 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 zero-parameter, side-effect-free lookup with no output schema, the description covers what the agent needs: what is listed, what each entry contains, and how to consume the ids downstream. Annotations already carry the read-only safety story, so the remaining gap is minor.

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. The description still adds meaning by explaining how the returned ids map onto parameters of other tools (platform_metric for charts_preview/charts_create, stack_by for breakdowns), which helps the agent use the output 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?

States a specific verb (List) and resource (usage metrics a platform chart can plot), and enumerates exactly what each entry contains: id, label, shape, supported chart types and breakdowns. An agent can distinguish this discovery/lookup tool from siblings like charts_list, charts_get, charts_preview and charts_create 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 names the concrete alternatives and the workflow: 'Pass a metric's id as platform_metric to charts_preview or charts_create, and one of its breakdowns as stack_by.' That is strong context for when this tool is the right entry point. It stops short of an explicit when-not-to-use or ordering statement, so a 4 rather than a 5.

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

charts_previewCharts: previewA
Read-only
Inspect

Show the data a chart configuration would draw, without saving it. Runs a chart configuration against the project's current data and shows the points, totals or rows it would plot, trimmed to rows. Use it to settle entity, grouping, measure and filters before charts_create or charts_update; for a chart already saved, use dashboards_widget_preview. Returns JSON.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoEnd of a custom time window, e.g. 2026-03-31
aggNoHow to combine the --measure values: count (default), sum, avg, min or max
fromNoStart of a custom time window, e.g. 2026-01-01
rowsNoMost rows or points to show (default 50)
sortNoSort direction: asc or desc
typeNoChart type: column (bar chart), line, pie, area, stat, gauge or funnel
limitNoMost points or rows to plot
configNoOther chart settings as a JSON object, e.g. {"limit":10,"target":500} or funnelStages for a funnel. Typed options win over this. Setting names can be camelCase or snake_case
entityNoEntity whose records the chart plots (for an entity chart)
filterNoFilter as field:operator:value, e.g. status:eq:published. Operators: eq, ne, gt, gte, lt, lte, contains, in, exists, not_exists. Repeat for several fields. Replaces the chart's existing filters
sourceNoWhere the data comes from: entity (default), platform (usage metrics) or quota (plan limits)
targetNoGoal or warning level drawn on a stat or gauge
compareNoCompare with the previous period (true/false)
measureNoNumeric field to aggregate (needed unless --agg is count)
group_byNoField for the x axis, or the slices of a pie. A date field is bucketed with --interval
intervalNoBucket size for a date --group-by: hour, day, week, month, quarter or year
stack_byNoField that splits each bar or point into a second breakdown
timeframeNoTime window: all, 24h, 7d, 30d, 90d, 365d or custom
cumulativeNoPlot a running total (true/false)
target_modeNoWhat --target means: goal or warning
compare_daysNoHow many days back the comparison period starts (defaults to the length of the time window)
quota_metricNoPlan limit for a quota chart: storage, files, users, workflows or emails
compare_overlayNoDraw the previous period over the current one (true/false)
platform_metricNoUsage metric for a platform chart. List them with: charts platform-metrics
platform_periodNoWindow for a platform metric: day, week, month, quarter or year

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 (readOnlyHint=true, openWorldHint=false). The description adds real value beyond them: it clarifies that nothing is saved, that it runs against the project's current data, that output is trimmed to rows, and that it returns JSON. It does not mention auth/permission needs or rate limits, keeping it short of a 5.

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

Conciseness5/5

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

Three tight sentences, front-loaded with the core purpose, then usage, then return format. No filler; 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 25-param, no-required preview tool with no output schema, the description covers purpose, when to use, and a rough return shape ('points, totals or rows', 'Returns JSON'). It is complete enough to call correctly, though it could say more about the returned structure since no output schema exists.

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

Parameters3/5

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

Schema coverage is 100% across all 25 parameters, so the schema already docs each option in detail. The description reinforces key concepts (entity, grouping, measure, filters, row trimming) but adds no syntax or format detail beyond the schema. Baseline 3 is correct when the schema does the heavy lifting.

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

Purpose5/5

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

States a specific verb and resource: preview the data a chart configuration would draw without saving. It explicitly names what it produces (points, totals, rows) and distinguishes itself from `charts_create`, `charts_update`, and `dashboards_widget_preview`, so an agent can select it 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 Guidelines5/5

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

Explicit when-to-use: settle entity, grouping, measure and filters before create/update. Also names the alternative for the already-saved case (`dashboards_widget_preview`). Both the positive condition and the routing alternative are spelled out.

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

charts_updateCharts: updateA
Destructive
Inspect

Change a chart. Only the settings you pass change; the rest stay as they were. Saves new settings on an existing chart; a filter replaces all of its existing filters. Dashboard widgets point at the chart rather than copying it, so every dashboard showing it draws the new version. Use charts_get first to see its current settings. Returns JSON. It changes or deletes existing data, so check with the user before running it.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesChart ID. Find it with charts_list.
toNoEnd of a custom time window, e.g. 2026-03-31
aggNoHow to combine the --measure values: count (default), sum, avg, min or max
fromNoStart of a custom time window, e.g. 2026-01-01
nameNoNew chart name
sortNoSort direction: asc or desc
typeNoChart type: column (bar chart), line, pie, area, stat, gauge or funnel
limitNoMost points or rows to plot
configNoOther chart settings as a JSON object, e.g. {"limit":10,"target":500} or funnelStages for a funnel. Typed options win over this. Setting names can be camelCase or snake_case
entityNoEntity whose records the chart plots (for an entity chart)
filterNoFilter as field:operator:value, e.g. status:eq:published. Operators: eq, ne, gt, gte, lt, lte, contains, in, exists, not_exists. Repeat for several fields. Replaces the chart's existing filters
sourceNoWhere the data comes from: entity (default), platform (usage metrics) or quota (plan limits)
targetNoGoal or warning level drawn on a stat or gauge
compareNoCompare with the previous period (true/false)
measureNoNumeric field to aggregate (needed unless --agg is count)
group_byNoField for the x axis, or the slices of a pie. A date field is bucketed with --interval
intervalNoBucket size for a date --group-by: hour, day, week, month, quarter or year
stack_byNoField that splits each bar or point into a second breakdown
timeframeNoTime window: all, 24h, 7d, 30d, 90d, 365d or custom
cumulativeNoPlot a running total (true/false)
target_modeNoWhat --target means: goal or warning
compare_daysNoHow many days back the comparison period starts (defaults to the length of the time window)
quota_metricNoPlan limit for a quota chart: storage, files, users, workflows or emails
compare_overlayNoDraw the previous period over the current one (true/false)
platform_metricNoUsage metric for a platform chart. List them with: charts platform-metrics
platform_periodNoWindow for a platform metric: day, week, month, quarter or year

TDQS

A4.3/5.0
Behavior5/5

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

Adds behavioral detail well beyond the annotations: partial-update semantics (unpassed settings persist), the destructive-replace behavior of `filter`, and the non-obvious propagation that dashboard widgets reference the chart rather than copy it, so every dashboard redraws. It also reinforces the user-confirmation requirement consistent with destructiveHint=true.

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

Conciseness4/5

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

Front-loads the purpose and keeps each sentence short and on-task, with the safety caution last where it belongs. Mild redundancy between 'Only the settings you pass change' and 'Saves new settings on an existing chart', plus a low-value 'Returns JSON.' line, keep it from a 5.

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 26-parameter mutation with no output schema, the description covers the essentials: partial-update behavior, filter replacement, propagation side effects, prerequisite read, and confirmation. The only weak spot is the vague 'Returns JSON.' in place of any return-shape hint, though the absence of an output schema makes this a minor gap.

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

Parameters3/5

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

Schema description coverage is 100% across all 26 parameters, so the schema already carries the parameter documentation and the baseline is 3. The description adds only the filter-replacement rule, which is also stated in the schema, so there is no meaningful extra parameter insight.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 chart') and immediately qualifies it as a partial update against an existing chart, which separates it from charts_create. It also names charts_get as the read-side sibling to consult first, so an agent can route correctly 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?

Gives concrete pre-call guidance ('Use charts_get first to see its current settings') and a confirmation rule ('check with the user before running it'). It doesn't explicitly state when NOT to use it (e.g., to create a chart, use charts_create), 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.

cliRun an Anythink CLI commandA
Destructive
Inspect

Run any Anythink CLI command and return its output. Prefer the dedicated tools; use this for anything they don't cover. Pass the command exactly as you would after 'anythink', e.g. 'entities list' or 'data list posts'. Destructive pay commands (delete, expire, relink, pause and similar) must be run by a person in a terminal; never add '--yes' on their behalf. 'data import' creates records (not destructive): run it with --dry-run first and only add '--yes' after the user approves the dry run. 'import directus' changes the project: run it with '--dry-run' first and only add '--yes' once the user has approved the plan. Add '--json' where supported for machine-readable output.

ParametersJSON Schema
NameRequiredDescriptionDefault
commandYesCLI arguments after 'anythink', e.g. 'entities list', 'users me', 'data list blog_posts --json', 'migrate --from a --to b --dry-run', 'fetch /some/path'. Do NOT include 'anythink' itself or '--profile' (profile is injected automatically).

TDQS

A4.6/5.0
Behavior5/5

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

Annotations only flag openWorldHint and destructiveHint; the description goes far beyond that by naming the destructive command families (delete, expire, relink, pause), forbidding '--yes' on the user's behalf, mandating human execution of destructive pay commands, and prescribing dry-run-first workflows for import commands. No contradiction with the destructiveHint annotation—it explains 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-loads purpose and the fallback routing before the command syntax and safety rules. Dense but every sentence carries a distinct constraint for a broad escape-hatch tool; minor redundancy with the schema's example 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 an open-ended catch-all tool with no output schema, this covers what an agent must know: what it is, when to prefer siblings, exact argument format, and the safety/dry-run obligations for destructive and project-mutating subcommands.

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

Parameters3/5

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

Schema coverage is 100% and the schema already documents the single command parameter, including the 'do not include anythink or --profile' rule. The description largely restates that with different examples, adding only the --json hint, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb+resource ('Run any Anythink CLI command and return its output') and immediately positions itself against the many dedicated siblings by declaring itself the fallback ('Prefer the dedicated tools; use this for anything they don't cover'). Concrete examples ('entities list', 'data list posts') make the intent 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 says when to use it (anything the dedicated tools don't cover) and when not to (prefer dedicated tools). Adds further conditional guidance: which destructive commands a human must run, and the --dry-run-then-approve protocol for 'data import' and 'import directus'.

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

config_removeRemove a saved project profileA
Destructive
Inspect

Delete a saved project profile from the local CLI configuration. Removes only the locally stored credentials and settings — it does not delete the project or revoke tokens server-side (to remove the project itself, use 'projects_delete'). Run 'config_show' to see profile names. Returns confirmation, or a not-found message.

ParametersJSON Schema
NameRequiredDescriptionDefault
profileYesName of the profile to remove from local config. See 'config_show' for valid names.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations only supply destructiveHint=true, but the description adds the crucial semantic that destruction is scoped to local credentials/settings and that no server-side revocation occurs — a distinction an agent could easily get wrong. It also discloses the outcome shape ('confirmation, or a not-found message').

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

Conciseness5/5

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

Three sentences, each doing distinct work: scope of deletion, boundary/exclusion with alternative, and return behavior plus name discovery. The core action is front-loaded 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?

No output schema exists, yet the description covers the return contract ('confirmation, or a not-found message'), the local-vs-server scope, and how to find valid inputs. 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.

Parameters3/5

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

Schema description coverage is 100% for the single 'profile' parameter, so the schema already documents name and source of valid values. The description's 'Run config_show to see profile names' reinforces this but adds nothing the schema doesn't already state; baseline 3 applies.

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

Purpose5/5

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

States a specific verb+resource+scope: 'Delete a saved project profile from the local CLI configuration.' The qualifier 'from the local CLI configuration' immediately distinguishes it from the similarly named sibling 'projects_delete', which the description also explicitly names.

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 when-not clause ('it does not delete the project or revoke tokens server-side') with the correct alternative named ('to remove the project itself, use projects_delete'). It also routes the agent to 'config_show' to discover valid profile names, covering the pre-call lookup step.

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

config_showShow saved profilesA
Read-only
Inspect

Show the local CLI configuration: all saved project profiles and platform logins, and which of each is active. For every profile it returns the name, org id, auth method (api-key or token), alias, and platform; for every platform it returns the URLs, billing account, and login status. Use this to discover profile names for 'config_use', 'config_remove', or 'logout', and to check which project the 'cli' tool currently targets. Reads local config only — makes no network calls.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/5

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

The annotations declare readOnlyHint=true, but the description adds the important behavioral fact that it 'Reads local config only — makes no network calls,' which is beyond what annotations provide. It doesn't cover error states or edge cases (e.g., no config file), 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?

The description is front-loaded with the main purpose and then details the return payload; it is two dense sentences with no fluff, though the second sentence is long.

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

Completeness5/5

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

Given no output schema and zero parameters, the description fully specifies what is returned (profile fields and platform details) and its side-effect-free local nature, leaving no 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.

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. The description correctly implies no input is needed, and the schema coverage is 100%.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 ('Show the local CLI configuration: all saved project profiles and platform logins') and drills into exact returned fields, making its purpose unmistakable against siblings like config_use or config_remove.

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 names the alternatives it feeds into ('discover profile names for config_use, config_remove, or logout') and its diagnostic use case ('check which project the cli tool currently targets'), providing clear when-to-use context.

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

config_useSwitch the active project profileAInspect

Switch the active project profile that the 'cli' tool's commands operate against. Use this to move between already-connected projects without re-authenticating. The profile must already exist (created by 'projects_use' or 'login_direct'); run 'config_show' to see available profile names. Returns confirmation, or an error if the profile does not exist.

ParametersJSON Schema
NameRequiredDescriptionDefault
profileYesName of an existing profile to make active. See 'config_show' for valid names.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations only declare destructiveHint=false, so the description carries most of the burden and does well: it discloses the state-mutating effect (which profile the cli operates against), the prerequisite that the profile pre-exist, and the error condition when it doesn't. It stops short of describing persistence or side effects on in-flight sessions, so not a full 5.

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

Conciseness5/5

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

Three sentences, front-loaded with the action, then usage rationale, then prerequisites and return behavior. 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.

Completeness4/5

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

For a single-parameter, non-destructive mutation with no output schema, the description covers prerequisites, alternatives, and return behavior ('confirmation, or an error'). Complete enough for correct invocation; only marginal behavioral detail is absent.

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

Parameters3/5

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

Schema coverage is 100% and the schema already documents the 'profile' parameter including the 'See config_show for valid names' pointer. The description restates the existence constraint without adding format or syntax detail, so baseline 3 applies.

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

Purpose5/5

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

States a specific verb+resource ('Switch the active project profile') and goes further by naming the exact consumer ('the cli tool's commands operate against'). This distinguishes it from sibling config tools like config_show and config_remove without the agent needing to open 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 Guidelines5/5

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

Explicitly states when to use it ('move between already-connected projects without re-authenticating'), states the prerequisite ('profile must already exist'), names the creating alternatives ('projects_use' or 'login_direct'), and routes to config_show for valid names. Both usage context and alternatives are fully covered.

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

dashboards_add_chartDashboards: add chartAInspect

Add a chart to a dashboard as a new widget. Everything else on the dashboard stays as it was. This is how a saved chart gets onto a dashboard. The widget takes the chart's name as its title unless title is given, and goes after the existing widgets unless column, row, width or height place it on the 12-column grid. Create the chart first with charts_create; avoid dashboards_update for this, as it replaces every widget. Returns JSON.

ParametersJSON Schema
NameRequiredDescriptionDefault
rowNoTop edge, in grid rows from 0 (defaults to below the existing widgets)
titleNoWidget title (defaults to the chart's name)
widthNoWidth in grid columns (default 4)
columnNoLeft edge, in grid columns from 0 (the grid is 12 columns wide)
heightNoHeight in grid rows (default 3)
chart_idYesChart ID. Find it with charts_list.
dashboard_idYesDashboard ID. Find it with dashboards_list.

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false and destructiveHint=false, so the safety profile is covered. The description adds real behavioral context beyond them: non-destructive semantics ('Everything else on the dashboard stays as it was') and default behaviors for title and widget placement. Only the return value is thin ('Returns JSON'), which limits 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?

Four tight sentences, front-loaded with the core action, then defaults, then the routing guidance. No filler; each sentence adds a distinct, useful fact.

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 non-destructive additive mutation with full annotations and no output schema, the definition covers action, non-destructiveness, defaults, prerequisites, and the sibling to avoid. 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 100%, so the baseline is 3, but the description adds interpretation beyond the per-parameter schema: it explains that title defaults to the chart's name and that position/placement is governed collectively by column, row, width and height on a 12-column grid, and defaults to after existing widgets when none are given. This exceeds what each isolated schema entry conveys.

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

Purpose5/5

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

States a specific verb and resource ('Add a chart to a dashboard as a new widget') and immediately distinguishes itself from siblings by naming `charts_create` (prerequisite) and `dashboards_update` (the wrong tool, since it replaces every widget). An agent can tell it apart from other dashboard tools 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?

Explicit when-to-use ('This is how a saved chart gets onto a dashboard'), an ordering prerequisite ('Create the chart first with `charts_create`'), and an explicit when-not-to-use with reason ('avoid `dashboards_update` for this, as it replaces every widget'). Nothing is left to inference.

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

dashboards_createDashboards: createAInspect

Create a dashboard, optionally with charts already on it. Makes a new dashboard owned by you, visible only to you unless shared is set. Each chart id passed becomes a chart widget titled with the chart's name; add more later with dashboards_add_chart. Build the charts first with charts_create. Making it the project default needs an administrator. Returns JSON.

ParametersJSON Schema
NameRequiredDescriptionDefault
homeNoMake it your landing dashboard
nameYesDashboard name
chartNoChart to put on the dashboard. Repeat for several
configNoOther settings as a JSON object: widgets (each with type, title and config_json) and layout_json. Typed options win over this
sharedNoLet everyone in the project see this dashboard
defaultNoMake it the project's default dashboard, the one new users start from (administrators only)
descriptionNoWhat the dashboard is for
allow_shared_editNoLet everyone who can see it edit it (needs --shared)

TDQS

A4.8/5.0
Behavior5/5

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

Beyond the annotations' safety profile, it discloses the ownership model ('owned by you'), the visibility semantics ('visible only to you unless shared is set'), the auth gate on default ('administrators only'), the chart-id-to-widget mapping behavior, and that it returns JSON. This is substantive context annotations alone would 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?

Six short clauses, front-loaded with the core action, then ownership/visibility, then routing, then the admin caveat. Every sentence carries distinct information with no 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?

With 8 params, full schema coverage and safety annotations, the description covers the meaningful gaps: prerequisites, ownership, sharing, and admin gating. The return value is only 'Returns JSON' with no output schema, a minor gap, but not one that would cause an incorrect 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 coverage is 100%, so the baseline is 3. The description adds real meaning beyond the schema: it explains that each chart id becomes a widget titled with the chart's name, and clarifies the shared/default interplay. It stops short of detailing the config JSON structure, which the schema already summarizes.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 ('Create a dashboard') and immediately adds scope ('optionally with charts already on it'), which distinguishes it from dashboards_update and dashboards_add_chart. An agent can tell what this does 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 Guidelines5/5

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

Routes explicitly to alternatives with conditions: 'add more later with dashboards_add_chart' and 'Build the charts first with charts_create'. It also flags the prerequisite for the default flag ('needs an administrator'), 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.

dashboards_dataDashboards: dataA
Read-only
Inspect

Get the data behind a dashboard's widgets. Runs a saved dashboard's widgets, or only the widget ids passed, and shows each one's id, title, type and current data, trimmed to rows per widget. Use it to read what a dashboard shows now; use dashboards_widget_preview to try a widget that isn't on a dashboard yet. Returns JSON.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesDashboard ID. Find it with dashboards_list.
rowsNoMost rows or points to show per widget (default 20)
widgetNoOnly this widget's data. Repeat for several; leave out for every widget

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 and openWorldHint=false, so safety is covered. The description adds genuine behavioral context: it runs widgets, returns each widget's id/title/type/current data, and trims output to rows per widget. It could still note cost/latency of running all widgets, but this is solid added value.

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

Conciseness5/5

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

Three front-loaded sentences with zero filler, moving from purpose to mechanism to routing to return format. 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?

Complete for a read-only tool: all parameters are schema-documented, the alternative is named, and the return shape is described even though no output schema exists. Nothing needed 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.

Parameters3/5

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

Schema description coverage is 100%, so all three parameters (id, rows, widget) are already documented in the schema. The description restates widget filtering and row trimming but adds no syntax or defaults beyond what the schema provides, so baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource: gets the data behind a dashboard's widgets by running them and showing id, title, type and data. It clearly distinguishes itself from dashboards_widget_preview by scope (saved dashboard vs. unattached widget).

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

Usage Guidelines5/5

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

Explicitly says when to use it ('read what a dashboard shows now') and names the alternative ('use dashboards_widget_preview to try a widget that isn't on a dashboard yet'). The selection condition is fully specified.

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

dashboards_deleteDashboards: deleteA
Destructive
Inspect

Delete a dashboard and its widgets. The charts on it are kept. Removes the dashboard for everyone who can see it. To take one chart off a dashboard, use dashboards_remove_widget; to delete a chart itself, use charts_delete. If it was your home dashboard, dashboards_mine falls back to the project default. Returns JSON. It changes or deletes existing data, so check with the user before running it.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesDashboard ID. Find it with dashboards_list.

TDQS

A4.5/5.0
Behavior5/5

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

Annotations declare destructiveHint=true, and the description adds real behavioral context beyond that: widgets are destroyed but charts are preserved, the removal affects everyone who can see it, and a deleted home dashboard falls back to the project default. This is exactly the impact detail an agent needs 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?

Impact and routing information is front-loaded in tight sentences, with the destructive warning last where it belongs. 'Returns JSON' is low-value filler that keeps it from a 5.

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 with no output schema, the description covers blast radius, sibling routing, and the home-dashboard edge case. The only thin spot is the vague 'Returns JSON' in place of any return-value detail, which is minor given no output schema exists.

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

Parameters3/5

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

There is a single id parameter and schema coverage is 100%, with the schema itself pointing to dashboards_list for discovery. The description adds no syntax or format detail for id, so the baseline 3 for a fully documented schema is appropriate.

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

Purpose5/5

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

States a specific verb and resource ('Delete a dashboard') and immediately clarifies scope with 'and its widgets. The charts on it are kept.' An agent can distinguish this from charts_delete and dashboards_remove_widget 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 Guidelines5/5

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

Explicitly names the alternatives and the conditions that select them: use dashboards_remove_widget to take one chart off, charts_delete to delete a chart itself. It also states the correct precondition ('check with the user before running it') for a destructive operation.

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

dashboards_getDashboards: getA
Read-only
Inspect

Get a dashboard with its widgets and their positions. Shows a dashboard's name, description, sharing settings, owner and each widget's id, type, title, the chart it shows and its grid position. Use it to find widget ids for dashboards_remove_widget and dashboards_data, and to see the current widgets before dashboards_update. Returns JSON.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesDashboard ID. Find it with dashboards_list.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description adds genuinely useful behavior beyond that — it enumerates the returned fields (name, description, sharing settings, owner, per-widget id/type/title/chart/grid position) and states the format is JSON, which matters given there is no 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.

Conciseness4/5

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

Front-loaded with the core action, then return contents, then usage routing. Dense but every clause carries information; the field enumeration is slightly long but justified by the absence of an output 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 read tool with no output schema, the description compensates by describing the return payload in detail and routing to consuming siblings. Nothing an agent needs to call and interpret it correctly is missing.

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

Parameters3/5

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

Schema description coverage is 100% and the single `id` param already documents itself ('Find it with dashboards_list'). The description adds no syntax or format detail beyond the schema, so baseline 3 applies.

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

Purpose5/5

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

Specific verb+resource (get a dashboard) with scope explicit — 'with its widgets and their positions' — which distinguishes it from dashboards_list and dashboards_mine without opening either schema. An agent can tell exactly what it retrieves.

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 names two downstream siblings that consume widget ids (`dashboards_remove_widget`, `dashboards_data`) and the pre-update read pattern for `dashboards_update`. This is textbook when-to-use guidance tied to concrete alternatives.

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

dashboards_listDashboards: listA
Read-only
Inspect

List the dashboards you can see. Shows each dashboard's id, name, owner and whether it is your home, the project default or shared. A dashboard is a grid of widgets, most of them showing a saved chart; open one with dashboards_get to see its widgets, or dashboards_mine for the one you land on. Returns JSON.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description adds useful context beyond that: the exact attribute set returned, the home/default/shared classification, and that the payload is JSON. It does not mention pagination or result-size behavior, which is the only notable gap for a list 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?

Three sentences, front-loaded with the action and return fields, with the routing guidance last. The middle sentence defining a dashboard as 'a grid of widgets' is mildly tangential but earns its place by making the relationship to dashboards_get concrete; overall tightly written 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 zero-parameter, read-only list tool with no output schema, the description covers the essentials: what is listed, what fields come back, and which sibling to use next. Minor omissions such as pagination or ordering prevent a 5, but 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.

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. There is no parameter syntax or format for the description to clarify, and the text correctly does not invent any.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 dashboards you can see') and immediately enumerates the returned attributes (id, name, owner, home/default/shared). It also names the sibling tools it is not (dashboards_get, dashboards_mine), so an agent can distinguish it 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 Guidelines5/5

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

Explicitly routes the agent: use dashboards_get to inspect a dashboard's widgets and dashboards_mine for the one you land on. The when-to-use-this vs. alternatives decision is fully spelled out rather than implied.

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

dashboards_mineDashboards: mineA
Read-only
Inspect

Get your landing dashboard, or the project default if you have none. Shows the same detail as dashboards_get for the dashboard you see first when you open the project. Use it when you don't have a dashboard id; change which dashboard you land on with dashboards_set_home. Returns JSON.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds genuinely useful behavior: the fallback to the project default when the user has no dashboard, and the return format ('Returns JSON'). It does not describe pagination or error cases, but for a parameterless read tool that is a minor gap.

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

Conciseness4/5

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

Three front-loaded sentences, with the core purpose first and usage/return notes after. Slight redundancy between 'landing dashboard' and 'the dashboard you see first when you open the project,' but 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 tool with no output schema, the description covers purpose, fallback behavior, usage condition, sibling relationship, and return format. 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 takes zero parameters, so the baseline of 4 applies. The description correctly implies a parameterless call by advising use 'when you don't have a dashboard id,' requiring no further argument 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?

States a specific verb and resource ('Get your landing dashboard, or the project default if you have none') and clarifies scope by likening the detail level to `dashboards_get`. An agent can distinguish this from dashboards_get and dashboards_list without opening another 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?

Provides an explicit selection condition ('Use it when you don't have a dashboard id') and names the sibling that governs the alternative behavior ('change which dashboard you land on with `dashboards_set_home`'). Nothing about when to pick this over its siblings 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.

dashboards_promote_to_defaultDashboards: promote to defaultA
Destructive
Inspect

Copy a dashboard over the project default that new users start from (administrators only). Overwrites the project default dashboard with a copy of this one. The default is what new users start from and what anyone without a home dashboard lands on; the dashboard you copy from stays as it was. To change only your own landing dashboard, use dashboards_set_home. Returns JSON. It changes or deletes existing data, so check with the user before running it.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesDashboard ID. Find it with dashboards_list.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, and the description goes well beyond them: it explains exactly what is overwritten (the project default), what is preserved (the source dashboard), who is affected (new users and anyone without a home dashboard), the admin requirement, and that it needs user confirmation.

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 constraint, and every sentence carries operational weight. The clause explaining what the default is slightly restates the opening sentence, a minor redundancy in an otherwise tight four-sentence definition.

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 admin tool with no output schema, the description covers everything an agent needs: effect, scope, side effects, permissions, confirmation guidance, and the sibling alternative. Nothing material 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 100% and the schema already tells the agent the id is a dashboard ID discoverable via dashboards_list. The description only implicitly clarifies that the id refers to the source dashboard being copied rather than the target, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource (copy a dashboard onto the project default) plus scope (new users' starting dashboard) and an access gate (administrators only). It is unmistakably distinct from siblings like dashboards_set_home, dashboards_update, and dashboards_create.

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 names the alternative for a closely related goal: 'To change only your own landing dashboard, use dashboards_set_home.' It also states the admin-only prerequisite and warns to confirm with the user before running, so both when-to-use and when-to-avoid are covered.

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

dashboards_remove_widgetDashboards: remove widgetA
Destructive
Inspect

Remove a widget from a dashboard. Everything else on the dashboard stays as it was. Takes the widget off the dashboard and out of its layout; the chart it showed is kept and can be added back with dashboards_add_chart. Get widget ids from dashboards_get. Use charts_delete only to remove the chart from the project entirely. Returns JSON. It changes or deletes existing data, so check with the user before running it.

ParametersJSON Schema
NameRequiredDescriptionDefault
widget_idYesWidget ID (from dashboards get)
dashboard_idYesDashboard ID. Find it with dashboards_list.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations only flag destructiveHint=true generically; the description sharpens the blast radius by stating that 'everything else on the dashboard stays as it was' and that the underlying chart 'is kept and can be added back'. That non-destructive-to-the-chart nuance is the exact behavioral detail an agent needs and cannot derive from the hints alone.

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 scope, then alternatives, then the safety warning — a good ordering. 'Returns JSON' is low-value filler that repeats what is implied and slightly dilutes an otherwise tight passage.

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-required-parameter mutation with no output schema, the description covers action, preservation semantics, id sourcing, alternative tools, and a user-confirmation caveat. No output schema exists, so it needn't describe return values, and 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.

Parameters3/5

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

Schema description coverage is 100% and both parameters are already documented in-schema. The description's 'Get widget ids from `dashboards_get`' adds a mild pointer to where ids come from, but otherwise the schema carries the parameter semantics — baseline 3.

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

Purpose5/5

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

The first sentence names a specific verb and resource ('Remove a widget from a dashboard'), and the body distinguishes this from adjacent operations by naming `dashboards_add_chart` (re-add) and `charts_delete` (delete the chart entirely). An agent can pick this tool over its siblings 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 Guidelines5/5

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

It gives explicit routing: use this to detach a widget, use `charts_delete` 'only to remove the chart from the project entirely', and use `dashboards_get` to source ids. It even states a prerequisite workflow (confirm with the user before running) — nothing is left to inference.

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

dashboards_set_homeDashboards: set homeA
Destructive
Inspect

Make a dashboard of yours your landing dashboard. Changes only your own landing dashboard, replacing your previous home; other users are unaffected. Check the result with dashboards_mine. To change what new users start from, use dashboards_promote_to_default. Returns JSON. It changes or deletes existing data, so check with the user before running it.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesDashboard ID. Find it with dashboards_list.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already flag the destructive mutation. The description adds crucial context: it replaces your previous home, affects only your own landing dashboard, leaves other users unaffected, and recommends confirming with the user. This scope-of-effect detail goes beyond the annotations and is exactly the kind of behavioral context needed.

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 in the first sentence and follows with scoping, alternatives, and a safety note. The sentence 'Returns JSON' is minor filler, but overall structure is efficient with no major 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?

Given the tool is destructive (annotations cover this), takes one fully-described parameter, and has no output schema, the description supplies all additional information an agent needs: exact effect, user-scope, alternatives, and a confirmation warning.

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

Parameters3/5

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

Schema coverage is 100%, with the sole parameter 'id' fully documented in the schema, including where to find it. The description does not add anything beyond the schema, so the baseline of 3 applies.

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

Purpose5/5

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

States a specific verb and resource: making one of your dashboards your landing dashboard. It explicitly distinguishes from siblings by naming dashboards_promote_to_default for changing the default new users start from.

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?

Provides explicit when-to-use guidance, including the alternative tool for a different use case (dashboards_promote_to_default) and a validation step via dashboards_mine. Also advises checking with the user before running due to its destructive nature.

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

dashboards_updateDashboards: updateA
Destructive
Inspect

Rename a dashboard, change who can see it, or replace its widgets and layout. Changes a dashboard's name, description or sharing, or replaces its whole widget list and layout through config; widgets missing from a new list are removed. To add or remove one chart, use dashboards_add_chart or dashboards_remove_widget, which keep everything else. Only the owner can change sharing. Returns JSON. It changes or deletes existing data, so check with the user before running it.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesDashboard ID. Find it with dashboards_list.
nameNoNew dashboard name
configNoOther changes as a JSON object. widgets replaces the whole widget list, so include every widget to keep (with its id); layout is a list of {widget_id, x, y, w, h}
sharedNoLet everyone in the project see it (true/false). Only its owner can change this
descriptionNoNew description
allow_shared_editNoLet everyone who can see it edit it (true/false). Only its owner can change this

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 and destructiveHint=true, but the description adds non-obvious details beyond them: widgets absent from a new list are removed, only the owner can change sharing, and the response is JSON. It stops short of describing permissions needed for other fields or how partial updates interact with untouched 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?

Well front-loaded: the capability and the destructive consequence come first, then alternatives, then the confirmation warning. The first sentence and the following 'Changes a dashboard's name, description or sharing...' clause partially restate each other, a mild redundancy in an otherwise efficient block.

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 tool with no output schema, the description supplies the safety-warning, ownership constraint, alternative routing, and the replace-vs-add semantics. With annotations and full schema coverage in place, nothing material 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 100%, so the schema already documents each parameter; baseline is 3. The description adds consequence-level meaning for `config` (whole-list replacement and silent removal of omitted widgets) and the owner-only restriction on sharing, which helps an agent reason about the call rather than just the syntax.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 specific verbs and resource: rename a dashboard, change its visibility, or replace its widgets and layout. It also explicitly distinguishes itself from dashboards_add_chart and dashboards_remove_widget by contrasting 'replace its whole widget list' with 'add or remove one chart'.

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

Usage Guidelines5/5

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

Names the alternative tools and the exact condition that selects them ('To add or remove one chart, use `dashboards_add_chart` or `dashboards_remove_widget`, which keep everything else'). It also adds a prerequisite/confirm step: check with the user before running it because it changes or deletes existing data.

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

dashboards_widget_previewDashboards: widget previewA
Read-only
Inspect

Show the data a widget would draw, without saving it. Works for a saved chart, given its id, and for list, materialised view, markdown and other widgets, given their config. Use it to see what a saved chart shows now, or to try a widget before adding it with dashboards_add_chart or dashboards_update; use dashboards_data for widgets already on a dashboard. Returns JSON.

ParametersJSON Schema
NameRequiredDescriptionDefault
rowsNoMost rows or points to show (default 20)
typeNoWidget type: chart, materialised_view, list, quick_action, markdown, media or getting_started
chartNoChart to preview (for a chart widget)
configNoThe widget's settings as JSON, e.g. {"entityName":"orders","limit":5} for a list

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already establish readOnlyHint=true and openWorldHint=false, so safety is covered. The description adds useful context beyond that: it is a dry-run that does not save, and it returns JSON. It stops short of detailing response shape or any auth/limit behavior, but with annotations carrying the safety profile this is solidly above baseline.

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

Conciseness5/5

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

Three tight sentences, front-loaded with the core action and scope. Every clause carries routing information or a behavioral constraint; 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?

For a multi-mode preview tool with readOnly annotations and no output schema, the description covers the supported widget types, the two invocation modes, the routing to add/update/data siblings, and the return format. 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.

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description goes further by mapping the two usage modes to parameters: a saved chart is previewed by id ('chart'), while list, materialised view and markdown widgets are previewed via their config, which clarifies how 'chart' and 'config' relate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 ('Show') and resource ('the data a widget would draw') and immediately clarifies the non-persistent preview scope. It names the sibling tools it is not (dashboards_data, dashboards_add_chart, dashboards_update), so an agent can disambiguate 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 Guidelines5/5

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

Explicit when-to-use: to see what a saved chart shows now, or to try a widget before persisting it. It names the alternative 'dashboards_data' for widgets already on a dashboard and ties add/update flows to dashboards_add_chart and dashboards_update. Nothing is left to inference.

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

data_createData: createAInspect

Create a new record. Inserts one record from a JSON object of field names to values and returns the created record with its new id. Objects or arrays given for jsonb fields are sent as JSON strings automatically. Workflows with an EntityCreated trigger on this entity will run. To load many rows from a file, use data_import.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNoJSON object with field values, e.g. '{"name":"Alice","age":30}'
entityYesEntity name

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly=false, destructive=false). The description adds genuine behavior beyond them: it returns the created record with its new id, auto-stringifies objects/arrays for jsonb fields, and discloses that EntityCreated workflows will fire — a meaningful side effect an agent should know.

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 with the core action, then consequences and the sibling route. No filler sentences — each one (id return, jsonb coercion, workflow trigger, bulk alternative) 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 2-parameter create tool with no output schema, the description covers the payload format, return shape, side effects, and the bulk-load escalation path. 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 coverage is 100%, so the baseline is 3. The description goes beyond the schema by explaining the data payload is a JSON map of field names to values and that jsonb objects/arrays are auto-coerced to JSON strings, adding real semantic value for the 'data' 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 (create) and resource (record), and clarifies it inserts exactly one record from a JSON object and returns it with a new id. It distinguishes itself from siblings like data_import, data_update, and data_delete without the agent needing to open 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 routes bulk loading to the alternative: 'To load many rows from a file, use `data_import`.' This gives a clear condition for choosing a sibling, though it doesn't spell out other when-not cases (e.g. via API vs file).

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

data_deleteData: deleteA
Destructive
Inspect

Delete a record. Removes one record by its numeric id. Records in other entities that point to it through a relationship field follow that field's on-delete rule; with the default, CASCADE, they are deleted too. Workflows with an EntityDeleted trigger on this entity will run. It changes or deletes existing data, so check with the user before running it.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesRecord ID. Find it with data_list.
entityYesEntity name

TDQS

A4.2/5.0
Behavior5/5

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

Even though annotations already declare destructiveHint=true and openWorldHint=false, the description adds substantial context an agent could not infer: related records cascade via the relationship field's on-delete rule, and EntityDeleted-triggered workflows will fire. It also surfaces the confirm-with-user expectation.

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 layers cascade, workflow, and safety notes in tight sentences. Every sentence carries information, though the four-sentence block is slightly dense for a two-parameter deletion 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?

No output schema exists, but for a destructive delete the description covers the effects that matter: what is removed, what cascade consequences follow, what side effects (workflow triggers) occur, and the required user confirmation. 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.

Parameters3/5

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

Schema coverage is 100%, so the schema already documents both parameters (id even tells you to find it with data_list). The description reinforces that the id is numeric but adds little meaning beyond what the schema provides, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb (delete) and resource (one record, identified by numeric id, within an entity), and the cascade/workflow sentences make the scope concrete. An agent can tell this apart from sibling delete tools like entities_delete or files_delete without opening a schema, because the resource is a data record reached through an entity name.

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 family naming (data_list/data_create/data_update/data_delete) but never stated, and no alternative is named for the case where you actually want to remove a schema or a file. The only guidance is the caution to confirm with the user before running, which is a safety instruction rather than routing.

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

data_exportData: exportAInspect

Export records to a CSV, JSON or JSONL file (streamed page by page). Writes every matching record to a file on the machine running the CLI, or to standard output when the file is -, fetching page by page. Uses the same filter syntax as data_list; one-to-many fields are left out unless named in the field list. It won't overwrite an existing file unless forced. For one page of records, use data_list.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesOutput file, or - for stdout
forceNoOverwrite FILE if it already exists
entityYesEntity name
fieldsNoComma-separated fields to export (default: all)
filterNoSame filter syntax as 'data list --filter'
formatNocsv, json or jsonl (default: from the file extension)
page_sizeNoRecords fetched per request (default: 200, max: 1000)
no_formula_guardNoCSV: don't prefix text starting with = + - @ with a quote (exact values, but unsafe to open in a spreadsheet)

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, destructiveHint=false, openWorldHint=false, and the description adds real side-effect context: streamed page-by-page fetching, writing to a local file or stdout with '-', and the overwrite guard ('won't overwrite an existing file unless forced'). It omits any permission/auth requirements or practical limits, so it is strong but not exhaustive.

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

Conciseness4/5

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

Four sentences, front-loaded with the core action and formats, then the caveats. Slightly redundant phrasing of 'streamed page by page' / 'fetching page by page' in the first two sentences, but otherwise every clause carries information.

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

Completeness4/5

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

For an 8-parameter export tool with no output schema, the description covers formats, filtering, field selection, overwrite behavior, and streaming. The only meaningful gap is the absence of auth/permission or throughput expectations; the destination and result (a file or stdout) are otherwise well explained.

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

Parameters4/5

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

Schema description coverage is 100%, so baseline is 3, but the description adds meaning not in the schema: one-to-many fields are omitted unless explicitly named in the field list, and format defaults derive from the file extension. These are behavioral rules about the parameters rather than restatements.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 (export records) plus the output formats (CSV, JSON, JSONL), and explicitly distinguishes itself from the sibling data_list. An agent can identify this as the bulk/paged export 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 routing rule: 'For one page of records, use data_list,' which is the exact counter-condition for this tool. It also tells the agent the filter syntax matches data_list, so filters can be reused without re-learning.

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

data_getData: getA
Read-only
Inspect

Get a single record by ID. Returns all of one record's field values by its numeric id. Use data_list with a filter when you don't know the id, search_query to find it by text, and data_rls to see which users can access it.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesRecord ID. Find it with data_list.
entityYesEntity name

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered and the bar is lower. The description adds genuine value by disclosing the return shape ('all of one record's field values') in the absence of an output schema, and signals an access-control dimension by pointing to data_rls. It stops short of describing not-found/denied behavior, so it is 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.

Conciseness5/5

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

Two sentences, front-loaded with the core action, then a compact routing clause. Every clause earns its place and nothing is repeated 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?

No output schema exists and the description compensates by stating what is returned; annotations cover the read-only safety profile and the required entity/id pair is documented in-schema. Minor gap: nothing about error behavior for a missing id or an RLS-denied record, which is relevant given the data_rls reference.

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

Parameters3/5

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

Schema description coverage is 100% and both parameters are documented in-schema (including how to find the id), so the baseline is 3. The description only echoes the schema ('numeric id') and adds no format, range, or entity-name guidance beyond it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 a single record by ID') and immediately clarifies the lookup key ('numeric id'), which separates it from the list/search siblings. It also names the sibling tools it is not, so an agent can route 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 Guidelines5/5

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

Explicitly gives the conditions for the alternatives: use data_list with a filter when the id is unknown, search_query for text lookup, and data_rls for access/permission questions. This is a complete when-to-use / when-not-to-use routing block rather than an implied hint.

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

data_importData: importAInspect

Create records from a CSV, JSON array or JSONL file. Always run with --dry-run first and only add --yes after the dry run is approved. Reads a file on the machine running the CLI and creates one new record per row, checking values against the entity's field types; rows with unknown columns are rejected unless told to ignore them. System columns such as id are ignored, so it never updates existing records. For a single record, use data_create.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesCSV, JSON array or JSONL file
entityYesEntity name
errorsNoWrite rows that were skipped or failed, with an _error column, so they can be fixed and re-imported
formatNocsv, json or jsonl (default: from the file extension, else sniffed)
dry_runNoValidate every row and report what would be created; sends nothing
concurrencyNoParallel create requests (default: 4, max: 16)
ignore_unknownNoDrop columns that aren't fields on the entity instead of rejecting the row

TDQS

A4.5/5.0
Behavior5/5

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

Annotations only declare the safety profile (readOnlyHint=false, destructiveHint=false, openWorldHint=false), so the description carries the rest and does so well: it reads a local file, creates one record per row, validates against field types, rejects unknown columns unless ignore_unknown is set, ignores system columns, and never updates existing records. That is substantial 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?

Four tightly packed sentences with the safety protocol front-loaded and no filler. Minor friction: it references a '--yes' flag that has no corresponding schema parameter, which could momentarily confuse an agent mapping prose to inputs.

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 7-parameter mutation tool with no output schema and only safety annotations, the description covers the important semantics: validation, row rejection, system-column handling, and the mandatory dry-run flow. The only gaps are the concurrency setting and the errors-file return behavior, which are minor for a create-only import.

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

Parameters3/5

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

Schema coverage is 100%, so baseline is 3. The description does add meaning for a few parameters (dry-run validation, dropping unknown columns, format inference), but it never mentions concurrency or the errors output-file behavior, so it does not meaningfully exceed what the schema already documents.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 precise verb and resource ('Create records from a CSV, JSON array or JSONL file') and immediately scopes the operation as bulk/one-record-per-row. It also names the sibling it is not ('For a single record, use data_create'), so an agent can route between the two without opening either schema.

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

Usage Guidelines5/5

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

Gives explicit procedural guidance ('Always run with --dry-run first and only add --yes after the dry run is approved') plus an explicit alternative for the single-record case (data_create). Both the when-to-use and the when-to-use-something-else cases are covered.

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

data_listData: listA
Read-only
Inspect

List records in an entity. Returns one page of records (rows), 20 by default. Filter by field values with JSON such as {"status":"draft","price":{"gte":10}} or pairs such as status=draft&price=GTE:10. Use data_get when you know the record id, or search_query to find records by text across entities. Returns JSON.

ParametersJSON Schema
NameRequiredDescriptionDefault
allNoStream all pages to stdout as sequential JSON objects (requires --json). Each object contains one page of results.
pageNoPage number (default: 1)
limitNoRecords per page (default: 20)
entityYesEntity name
filterNoField filters: JSON like {"status":"draft","price":{"gte":10}} or field=value pairs like 'status=draft&price=GTE:10'

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 and openWorldHint=false, so safety is covered. The description usefully adds pagination behavior (one page, 20 by default) and the filter syntax, though it does not explain how 'all' streaming interacts with 'limit' beyond what the schema states.

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 sentences, front-loaded with the core action and pagination, then filter syntax, then the sibling routing. Zero waste.

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, the description covers scope, return format ('Returns JSON'), pagination default, filter syntax, and alternative tools. With annotations carrying the safety profile and no output schema to explain, 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.

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description's filter examples largely duplicate the schema's filter description, and the '20 by default' note repeats the limit parameter description, so it adds little semantic value beyond the structured 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?

States a specific verb+resource ('List records in an entity') and explicitly differentiates itself from two siblings, data_get and search_query, with the conditions that select each. An agent can route correctly 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 Guidelines5/5

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

Names both alternatives and the exact condition for each: use data_get when the record id is known, use search_query for text search across entities. This leaves nothing to inference.

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

data_rlsData: rlsA
Destructive
Inspect

View or set RLS (row-level security) user access on a record. Without a user id, returns the users who have row-level security (RLS) access to the record, with their names and whether access is read-only. With a user id, grants that user access to the record, full by default or read-only when asked. It cannot remove access, and only matters on entities with RLS turned on. It changes or deletes existing data, so check with the user before running it.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesRecord ID. Find it with data_list.
userNoUser ID to grant access to
entityYesEntity name
readonlyNoGrant read-only access (default: full access)

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, but the description adds genuine context beyond them: the hard limitation that it cannot remove access, the RLS-enabled-entity precondition, and the instruction to confirm with the user first. The phrase 'changes or deletes existing data' is slightly loose given it cannot remove access, but it is not a 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?

Front-loaded with the core purpose and structured as view-then-set-then-caveats. It is five sentences and repeats the '(row-level security (RLS))' expansion twice, a minor redundancy, but 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?

Despite having no output schema, the description explains the return shape (users with names and read-only status). Combined with annotations covering the safety profile and 100% parameter coverage, 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.

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning: the presence/absence of `user` toggles the tool between read and grant mode, and `readonly` is described as defaulting to full access. That enriches the schema's terse flag 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 ('View or set RLS user access on a record') and immediately clarifies the dual-mode behavior (view vs grant) based on whether a user id is supplied. This is clearly distinct from the surrounding data_create/data_update/data_delete CRUD 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 maps the two usage modes: without a user id it reads access, with a user id it grants access. It also gives a meaningful precondition ('only matters on entities with RLS turned on') and a caution ('check with the user before running it'). It stops short of naming an alternative tool, so it lands just below the top band.

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

data_updateData: updateA
Destructive
Inspect

Update a record. Changes only the fields named in the JSON object and returns the updated record; other fields keep their values. Objects or arrays given for jsonb fields are sent as JSON strings automatically. Workflows with an EntityUpdated trigger on this entity will run. To create a record instead, use data_create. It changes or deletes existing data, so check with the user before running it.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesRecord ID. Find it with data_list.
dataNoJSON object with fields to update
entityYesEntity name

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=false and destructiveHint=true, so the mutation risk is known; the description goes further by disclosing partial-update semantics (only named fields change), the return value (updated record), automatic JSON-string coercion for jsonb fields, and the side effect that EntityUpdated workflows fire. These are non-obvious behaviors an agent cannot infer from 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?

Front-loaded with the core action, then behavior, then the alternative in a compact sequence of short sentences. The trailing confirmation warning is mildly redundant with destructiveHint but still earns its place as actionable guidance.

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

Completeness5/5

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

With no output schema, the description compensates by stating what is returned, and it covers partial-update semantics, the jsonb coercion edge case, side effects, and the create alternative. Nothing needed 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.

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3, but the description adds real meaning for `data`: it clarifies that only named fields are touched and that objects/arrays for jsonb fields are stringified automatically, which is not visible 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?

States a specific verb and resource ('Update a record') and immediately disambiguates from the sibling 'data_create' for the create case. An agent can distinguish this from data_create/data_delete without opening a schema.

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

Usage Guidelines4/5

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

Explicitly routes the create case to `data_create` and adds a caution to confirm with the user before running, which is meaningful usage guidance for a destructive write. It stops short of contrasting with data_delete or data_get, which are the other obvious alternatives in this sibling set.

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

docsDocsA
Read-only
Inspect

Print the full CLI reference (markdown or --json for AI/tooling consumption). Prints a hand-written reference of CLI commands, options and examples without calling the API or needing a project. It omits some groups, such as integrations, secrets, API keys and settings, so treat the tool list as the authority on what exists. Returns JSON.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, and the description adds genuinely useful context beyond them: no API call is made, no project is required, and the reference deliberately omits groups like integrations, secrets, API keys and settings. The caveat that the tool list is the authority on what exists is a meaningful disclosure of incompleteness.

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 three compact sentences with no filler. Minor redundancy: "Print the full CLI reference" and "Prints a hand-written reference" restate the same action, and "Returns JSON" overlaps with the earlier "--json for AI/tooling consumption".

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

Completeness4/5

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

No output schema and no parameters, so the description must stand on its own, and it does: it describes the content source, the cost profile (no API/project), and the known coverage gaps. The only gap is the unexplained markdown-vs-JSON selection given there is no input parameter for 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?

There are zero input parameters, so the schema baseline is 4. The description mentions a markdown/--json output mode that is not represented in the schema, which is a minor mismatch but does not obscure parameter semantics.

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: printing the full CLI reference, with the markdown/--json variants named. It does not explicitly distinguish itself from the sibling `cli` tool, so an agent must infer the division of labor between them.

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: the parenthetical "for AI/tooling consumption" hints at the audience, and "without calling the API or needing a project" implies a cheap, context-free lookup. There is no explicit when-to-use or when-not-to-use guidance relative to `cli`, `api`, or `fetch`.

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

email_previewEmail: previewA
Read-only
Inspect

Render uncommitted subject + content + optional wrapper, print HTML. Renders a draft subject and body with sample data, inside a draft shell if given or the project's current one otherwise, and returns the HTML. Nothing is saved and no email is sent. Use it to check edits before email_templates_update or email_shell_update.

ParametersJSON Schema
NameRequiredDescriptionDefault
contentNoPath to file containing content (or '-' for stdin)
subjectNoSubject line to render (defaults to 'Preview')
wrapperNoOptional path to a wrapper HTML override (or '-' for stdin)
content_textNoThe content to render, passed inline
wrapper_textNoOptional wrapper HTML override, passed inline

TDQS

A4.5/5.0
Behavior4/5

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

Annotations declare readOnlyHint=true and openWorldHint=false, and the description usefully reinforces this with 'Nothing is saved and no email is sent.' It also discloses behavior the annotations do not: sample data is injected, and the wrapper falls back to the project's current shell when none is supplied.

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 the safety and usage notes come in logical order. The opening 'Render uncommitted subject + content + optional wrapper, print HTML' partially restates the following sentence, 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?

With no output schema, the description correctly tells the agent the tool returns HTML. It covers what is rendered, the wrapper default, sample data, and the no-save/no-send guarantee, so an agent has enough 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?

Schema coverage is 100%, so the schema already documents each parameter; baseline is 3. The description goes beyond it by explaining wrapper resolution (draft shell if given, otherwise the project's current one) and that content is rendered with sample data, which the schema does not state.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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: render a draft email subject, content and optional wrapper to HTML. It also distinguishes itself from the commit-oriented siblings email_templates_update and email_shell_update, so an agent can place it precisely in the workflow.

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

Usage Guidelines5/5

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

Gives explicit when-to-use guidance: 'Use it to check edits before email_templates_update or email_shell_update.' It names the concrete alternatives and the condition that selects this tool over them, leaving nothing to inference.

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

email_shell_showEmail: shell showA
Read-only
Inspect

Show the current shell HTML (custom or platform default). Returns the HTML layout that wraps the body of every email the project sends, and says whether it is customised or the platform default. The {{Content}} placeholder marks where each template's body goes. Read it before email_shell_update.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds real behavioral value beyond that: it discloses the return content (the HTML layout wrapping every email body), that it reports customised vs default state, and the {{Content}} placeholder 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?

Three tight sentences, front-loaded with purpose, then return content and placeholder semantics, then the usage hint. 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?

With no output schema, the description carries the burden of explaining what comes back, and it does so precisely (layout HTML plus custom/default flag). Nothing an agent needs to invoke and interpret the call 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?

Zero parameters, so the baseline is 4. The description's explanation of the {{Content}} placeholder is genuinely useful orientation for the returned HTML, even though there are no inputs to document.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 (Show) plus resource (shell HTML), with immediate scope disambiguation of custom vs platform default. It also names the sibling email_shell_update, so an agent can distinguish 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 Guidelines4/5

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

Explicitly states 'Read it before `email_shell_update`,' which routes the agent to the correct sequencing relative to the write twin. No when-not guidance is given, but the primary usage context is clear.

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

email_shell_updateEmail: shell updateA
Destructive
Inspect

Save new shell HTML, or pass --reset to revert to the platform default. Replaces the HTML layout around every email the project sends, or with reset returns to the platform default. Keep the {{Content}} placeholder where the body goes; the server sanitises the HTML. Check a draft with email_preview first. It changes or deletes existing data, so check with the user before running it.

ParametersJSON Schema
NameRequiredDescriptionDefault
htmlNoPath to file with the new shell HTML (or '-' for stdin)
resetNoReset the shell to the platform default
html_textNoThe new shell HTML, passed inline

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already carry destructiveHint=true and readOnlyHint=false, and the description reinforces with 'changes or deletes existing data, so check with the user.' It adds genuinely new behavioral context: the server sanitises the HTML and the {{Content}} placeholder must be preserved.

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 primary action and appropriately sized, but the reset behavior is stated twice ('revert to the platform default' and 'returns to the platform default'), which is mild redundancy rather than wasted 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 no-output-schema mutation tool, it covers both operating modes, the placeholder constraint, sanitisation behavior, the destructive warning, and the preview-first workflow. 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 coverage is 100%, so baseline is 3. The description adds usable semantics beyond the schema: the reset flag's effect (returns to platform default) and the invariant that the {{Content}} placeholder must remain. Minor friction: it expresses reset as a CLI-style '--reset' flag while the schema exposes a boolean.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 (save/replace the shell HTML layout around every project email) and covers both modes (save vs. reset to default). The scope 'around every email the project sends' cleanly separates it from siblings like email_templates_update and email_shell_show.

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 workflow condition: 'Check a draft with email_preview first' and 'check with the user before running it.' It names one alternative (email_preview) explicitly, though it doesn't distinguish save-shell from email_templates_update or state when reset vs. save is appropriate.

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

email_templates_listEmail: templates listA
Read-only
Inspect

List all email templates for this project. Shows each template's type (such as confirmation, invite or recovery), subject, and whether it is locked or active. These are the account emails Anythink sends for the project; pass a type to email_templates_show to read one or email_templates_update to change it.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description adds real context beyond that: these are the account emails Anythink sends for the project, and each entry carries a type, subject, and locked/active state, which tells the agent what a mutation would affect. No pagination or rate-limit detail, hence 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.

Conciseness5/5

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

Two sentences, both front-loaded: the first states the action and returned fields, the second supplies the sibling routing. No filler or restatement of the title.

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

Completeness5/5

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

With no output schema, the description carries the return-value burden and does so by naming the fields returned. For a zero-parameter, read-only list tool with annotations covering safety, 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 there is nothing to document and the baseline is 4. The description correctly does not invent parameter 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?

The description states a specific verb and resource ('List all email templates for this project') and even enumerates the fields returned (type, subject, locked/active). It clearly distinguishes itself from the sibling read-one (email_templates_show) and write (email_templates_update) 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 routes the agent to the correct sibling with conditions: use email_templates_show to read one, email_templates_update to change one. That covers alternatives well, though it offers no explicit when-not-to-use guidance and the 'pass a type' phrasing sits oddly on a tool that itself takes no parameters.

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

email_templates_showEmail: templates showA
Read-only
Inspect

Show a template's subject + content, or the rendered HTML with --rendered. By default returns the stored subject and content with their {{ placeholders }} intact, which is what to edit; with rendered it returns the full email HTML inside the project's shell, filled with sample data. Read it before email_templates_update.

ParametersJSON Schema
NameRequiredDescriptionDefault
renderedNoShow the rendered HTML using sample data instead of the raw content
template_typeYesThe template type (e.g. confirmation, invite, recovery)

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description goes beyond them by disclosing what each mode actually returns: raw content with placeholders preserved vs full email HTML wrapped in the project's shell filled with sample data. No auth/rate-limit notes, hence 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?

Three sentences, front-loaded with the core action and then the mode distinction. Dense and largely waste-free, though the CLI-style flag reference is slightly off-register for an MCP parameter.

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

Completeness4/5

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

A read-only, two-parameter tool with full schema coverage and no output schema; the description compensates by describing the return shape in both modes. Nothing critical for correct invocation is missing, though it could note the required template_type explicitly.

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

Parameters4/5

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

Schema coverage is 100%, but the description still adds meaning: it explains the consequence of the rendered flag (full HTML in the project shell with sample data) versus the default (editable placeholders). The '--rendered' notation is CLI-flavored and does not exactly match the boolean parameter name, which slightly muddies the 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?

States a specific verb (Show) and resource (a template's subject + content), and explicitly splits the two operating modes (raw content vs rendered HTML). It also names the sibling workflow target (email_templates_update), so an agent can place it without opening 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?

Clear mode selection guidance: the default output with intact {{ placeholders }} is 'what to edit', while rendered gives the full HTML with sample data. It also adds a workflow ordering hint ('Read it before email_templates_update'). No explicit exclusions against other siblings (e.g. email_templates_list, email_preview), so not a 5.

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

email_templates_updateEmail: templates updateA
Destructive
Inspect

Update a template's subject and/or content. Saves a new subject and/or body for one template type, keeping whichever you leave out; every email of that type the project sends from then on uses it. Pass the body inline in content_text. Check a draft first with email_preview, as the previous content isn't kept. It changes or deletes existing data, so check with the user before running it.

ParametersJSON Schema
NameRequiredDescriptionDefault
contentNoPath to a file containing the new HTML/text content (use '-' for stdin)
subjectNoNew subject line
content_textNoThe new HTML/text content, passed inline
template_typeYesThe template type to update

TDQS

A4.8/5.0
Behavior5/5

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

Goes well beyond the destructiveHint annotation by disclosing blast radius ('every email of that type the project sends from then on uses it'), the merge semantics ('keeping whichever you leave out'), and the irreversible loss of prior content ('the previous content isn't kept'). It also flags the confirmation requirement for a destructive write.

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, then layers merge semantics, the parameter hint, the draft-check, and the safety warning. Four sentences, all substantive, though the merge-semantics clause is slightly wordy.

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, no-output-schema update tool, the description covers scope, merge behavior, reversibility, parameter disambiguation, and the recommended verification path. An agent has everything needed to call it correctly and safely.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning by clarifying 'Pass the body inline in content_text', disambiguating it from the file/stdin 'content' parameter. It doesn't elaborate on template_type values or subject, but the schema carries those.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 template's subject and/or content') and pins the scope to 'one template type'. This distinguishes it cleanly from email_templates_show, email_templates_list, and email_preview 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 Guidelines5/5

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

Explicitly routes the agent to the alternative ('Check a draft first with email_preview') and gives a precondition ('check with the user before running it') plus when-not guidance implied by the destructive nature. Nothing about when to use this vs. siblings 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.

entities_createEntities: createAInspect

Create a new entity. Creates an empty entity, which is a new database table in the active project; add its columns afterwards with fields_add. Options make it public (queryable without signing in), turn on row-level security (RLS), block new records through the API, or mark it as a many-to-many junction table.

ParametersJSON Schema
NameRequiredDescriptionDefault
rlsNoEnable row-level security
nameYesEntity name (e.g. 'customers', 'orders')
publicNoMake entity publicly queryable (no auth required)
junctionNoMark as a many-to-many junction table
lock_recordsNoPrevent creation of new records via API

TDQS

A4.5/5.0
Behavior4/5

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

Annotations only declare the safety profile (not read-only, not destructive, closed-world). The description adds substantive behavior beyond that: creation produces a real table in the active project, and each option's effect is spelled out (public = queryable without signing in, lock_records = blocks API record creation). It stops short of stating permissions or whether creation is reversible, but the added context is real.

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

Conciseness4/5

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

Two sentences, front-loaded with the action and its next-step, with the option list trailing where it belongs. The final sentence is a long run-on enumerating four flags, but each clause carries distinct information, so 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?

For a create tool with no output schema, it covers what an agent needs: the resource created, where it lives, the next step, and flag meanings. The minor gap is that it never says what is returned (e.g., an id) or how the new entity is referenced by the follow-up fields_add 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 coverage is 100%, so the baseline is 3, but the description adds interpretive gloss beyond the terse schema strings — e.g. 'public' is expanded to 'queryable without signing in' and 'lock_records' to blocking new records through the API. That meaningfully clarifies the four boolean flags for an agent deciding which to set.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 ('Create a new entity') immediately followed by a functional definition ('a new database table in the active project'). It also disambiguates from the sibling that follows it in the workflow (fields_add) and from entities_update/entities_delete.

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 sequencing guidance: create the entity, then 'add its columns afterwards with `fields_add`'. This tells the agent both when to use it and which sibling handles the next step, which is exactly the alternative-routing the dimension asks for.

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

entities_deleteEntities: deleteA
Destructive
Inspect

Delete an entity and all its data. Drops the entity's table, removing all of its fields and every record in it for good. To remove one column, use fields_delete; to remove one record, use data_delete. It changes or deletes existing data, so check with the user before running it.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesEntity name to delete

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare destructiveHint=true, but the description goes further by spelling out the concrete consequence (the table is dropped and data is gone 'for good'), i.e. irreversibility, and adds a user-confirmation caution. That is meaningful behavioral context 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?

Three short sentences, front-loaded with the destructive scope, then the sibling routing, then the safety caution. No filler; 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 one-parameter destructive tool with no output schema and full annotation coverage, the description covers scope, alternatives, and the safety prerequisite. 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.

Parameters3/5

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

There is a single parameter and schema description coverage is 100% ('Entity name to delete'), so the schema already carries the parameter semantics. The description adds no extra meaning such as naming/casing rules, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource (delete an entity) and immediately bounds the scope: the entity's table, all its fields, and every record. It also names the sibling tools that do the narrower operations, so an agent can distinguish it from fields_delete and data_delete 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 routes the agent: use fields_delete to remove one column, data_delete to remove one record, otherwise this tool. It also adds a caution to confirm with the user before running it, which is exactly the when-to-use guidance needed for a destructive operation.

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

entities_getEntities: getA
Read-only
Inspect

Get entity details and fields. Takes the entity name. Returns its table name, its public, RLS and lock-new-records flags, and each field's id, name, database type, display type and required, unique and indexed flags. For one field's full definition, including relationship and select options, use fields_get.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesEntity name

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 openWorldHint=false; the description goes beyond them by enumerating the returned flags (public, RLS, lock-new-records) and field properties, which is valuable since there is no output schema. It omits any mention of error/not-found behavior for an unknown entity name.

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

Conciseness5/5

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

Three short sentences, front-loaded with the purpose, then the parameter, then the return shape, then the alternative. Every sentence carries distinct information 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?

Because no output schema exists, the description usefully compensates by enumerating the returned entity and field attributes, and it points to the sibling for deeper field detail. It is broadly complete, though it does not cover failure modes or whether the response is paginated/nested.

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

Parameters3/5

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

Schema description coverage is 100% and the single parameter `name` is documented in the schema itself. The description's 'Takes the entity name' adds nothing beyond the schema, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource ('Get entity details and fields') and distinguishes itself from the sibling `fields_get` by scoping itself to the entity level. An agent can tell it apart from `entities_list` and `fields_get` without opening a schema.

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

Usage Guidelines4/5

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

Explicitly routes the agent to `fields_get` when a single field's full definition (relationships, select options) is needed, which is the key ambiguity for this tool family. It does not, however, state an explicit when-not rule or contrast against `entities_list`.

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

entities_listEntities: listA
Read-only
Inspect

List all entities. Returns each entity (table) in the active project with its database table name, field count, and whether it is public or has row-level security (RLS) on. System entities are not included. To see one entity's settings and field definitions, use entities_get.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds meaningful context beyond that: which fields are returned, that system entities are excluded, and that RLS/public status is surfaced.

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

Conciseness5/5

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

Three tight sentences, front-loaded with the action, then the return payload, then the routing hint. 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?

With no output schema, the description carries the burden of describing return values, and it does so (table name, field count, public/RLS status) plus the system-entity exclusion. Nothing needed to call this zero-arg list 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 takes zero parameters, so there is nothing for the description to disambiguate; baseline is 4. The schema coverage is 100% (empty object), and the description correctly does not invent 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?

States a specific verb (list) and resource (entities/tables) scoped to the active project, and explicitly distinguishes itself from the singular `entities_get`. An agent can tell it apart from siblings like entities_create/entities_update without opening a schema.

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

Usage Guidelines4/5

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

Routes the agent to the correct alternative with an explicit condition: use `entities_get` for one entity's settings and field definitions. It gives clear context but does not mention other near alternatives (e.g., fields_list) or exclusions such as when not to list.

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

entities_updateEntities: updateA
Destructive
Inspect

Update entity settings. Changes an entity's public, row-level security (RLS) and lock-new-records settings; any you leave out keep their current value. It cannot rename the entity or change its fields, so use fields_update for columns. Making an entity public lets anyone query its records without signing in. It changes or deletes existing data, so check with the user before running it.

ParametersJSON Schema
NameRequiredDescriptionDefault
rlsNoEnable/disable row-level security (true/false)
nameYesEntity name to update
publicNoSet public access (true/false)
lock_recordsNoEnable/disable record locking (true/false)

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 readOnlyHint=false, yet the description adds real value beyond them: partial-update semantics (omitted settings retain current values), the security consequence of making an entity public (anyone can query without signing in), and a warning to confirm with the user. This is rich context layered on top of the safety 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-loads the core action, then adds only sentences that carry unique information: partial-update behavior, the sibling alternative, the security implication, and the caution. No filler or redundancy with the structured fields.

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 no output schema, the description covers everything needed to call it responsibly: partial-update semantics, hard limits, security impact, and a user-confirmation nudge, all consistent with destructiveHint=true.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds meaning beyond the terse schema labels: it explains that leaving a setting out preserves its current value and clarifies the real-world effect of the public flag. This goes past restating the schema without fully documenting every parameter's syntax.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 (update) and resource (entity settings) and enumerates exactly which settings change (public, RLS, lock-new-records). It explicitly distinguishes itself from fields_update for column changes, so an agent can route correctly 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 Guidelines5/5

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

Gives clear when-to-use context, names the alternative (fields_update) for the case this tool cannot handle, and states the exclusion explicitly (cannot rename or change fields). It also adds a pre-run caution to check with the user.

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

fetchFetchA
Destructive
Inspect

Make an authenticated API request to the active project. Sends a request to any project endpoint, with the path relative to /org/{project}, using the CLI's credentials, and prints the response body. Use it only where no dedicated tool exists, such as /permissions or integration field options; POST, PUT and DELETE change data. all follows every page of a GET. It changes or deletes existing data, so check with the user before running it.

ParametersJSON Schema
NameRequiredDescriptionDefault
allNoFollow every page of a paged GET response, printing each page as it arrives
bodyNoRequest body (JSON string)
pathYesAPI path (e.g. /integrations/definitions/slack)
methodNoHTTP method (default: GET)

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 readOnlyHint=false, so the 'changes or deletes existing data' line is partly redundant. The description still adds real value beyond the annotations: which HTTP methods mutate (POST/PUT/DELETE), that credentials come from the CLI, that `all` paginates a GET, and that it prints the response body.

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

Conciseness4/5

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

Dense and front-loaded: purpose first, then the fallback rule, then method semantics and the safety check. Most sentences earn their place; the mutation warning is slightly restated by the final sentence, but the length is justified for a catch-all 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?

For a generic HTTP tool with no output schema, the description covers auth source, path resolution, method semantics, pagination behavior, and the return behavior (prints body). An agent has everything needed to invoke it correctly, and the absence of an output schema is compensated for.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description compensates with meaning the schema lacks: the path is resolved relative to /org/{project}, and `all` is scoped specifically to GET pagination. The method-mutation mapping adds cross-parameter semantics not stated per-field 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?

States a specific verb (make/send an authenticated API request) and resource (any project endpoint, path relative to /org/{project}), plus what it produces (prints the response body). It also distinguishes itself from the ~140 specific siblings by framing itself as the generic escape hatch used only when no dedicated tool exists.

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

Usage Guidelines5/5

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

Explicitly says 'Use it only where no dedicated tool exists' and gives concrete examples (/permissions, integration field options), which is an unusually clear when-to-use-vs-alternatives rule against a large sibling set. It adds a confirmation prerequisite ('check with the user') for mutating methods.

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

fields_addFields: addAInspect

Add a field to an entity. Adds a column to an existing entity; always pass the database type. The display type defaults from it (varchar to input, boolean to checkbox, relationships to relationship). Relationship types need the target entity's name, and on-delete defaults to CASCADE; user and file fields link to users and files automatically. Returns the new field's id.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesField name (snake_case)
typeNoDatabase type: varchar, varchar array, text, integer, integer array, bigint, bigint array, decimal, decimal array, boolean, date, timestamp, jsonb, geo, file, user, one-to-one, one-to-many, many-to-one, many-to-many, dynamic-reference
labelNoHuman-readable label
entityYesEntity name
publicNoMark field as public
targetNoTarget entity name for relationship fields (many-to-one, one-to-many, many-to-many)
uniqueNoEnforce unique constraint
defaultNoDefault value
displayNoDisplay type: input, textarea, rich-text, select, entity-select, radio, country-select, checkbox, short-date, long-date, timestamp, relationship, file, secret, user, jsonb, geo, dynamic-reference
indexedNoAdd database index
optionsNoComma-separated option list for select display, e.g. "Running,Cycling,Rugby". Use label=value to split, e.g. "Running=running,Cycling=cycling"
multipleNoAllow multiple values on a select field
requiredNoMark field as required
on_deleteNoDeletion behavior: CASCADE, SET NULL, SET DEFAULT, RESTRICT (default: CASCADE). Underscores are accepted (SET_NULL, SET_DEFAULT) and normalised.
name_fieldNoSet as name field
searchableNoEnable full-text search on this field
descriptionNoField description

TDQS

A4.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, destructiveHint=false, openWorldHint=false), so the description's added value is its disclosure of defaults: display type inferred from database type, on-delete defaulting to CASCADE, and automatic user/file linking. It also states the return value (the new field's id), which matters since there is no 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?

Four tight sentences, each earning its place: purpose, the type requirement, the defaulting rules, and the return value. The most important constraint (always pass the database type) 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 17-parameter mutation tool with no output schema, the description covers the highest-risk gaps: default behaviors, relationship requirements, and the return value. Remaining parameter detail is fully covered by the schema, so the definition 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.

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds real semantics beyond the schema: how display defaults from type, that relationship types need target, and that on-delete defaults to CASCADE. It does not clarify the many boolean flags (unique, indexed, searchable, multiple), but it meaningfully enriches the relationship-related parameters.

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

Purpose5/5

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

States a specific verb and resource ('Add a field to an entity') and immediately clarifies it as adding a column to an existing entity, which unambiguously distinguishes it from fields_update, fields_delete, and fields_list. An agent can select 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 Guidelines4/5

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

Gives concrete conditional guidance: always pass the database type, relationship types require the target entity's name. It does not name alternatives (e.g. fields_update) or state when not to use it, so it stops short of the top band, but the usage context is clear.

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

fields_deleteFields: deleteA
Destructive
Inspect

Delete a field from an entity. Takes the field's name, not its id, and drops that column from the entity, so the value it held is lost from every record. To remove the whole entity and its records, use entities_delete. It changes or deletes existing data, so check with the user before running it.

ParametersJSON Schema
NameRequiredDescriptionDefault
entityYesEntity name
field_nameYesField name

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 readOnlyHint=false, but the description adds real value beyond them: it says the column is dropped and the value it held is lost from every record, and it recommends user confirmation. This explains what actually gets destroyed, which the annotations only flag categorically.

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 short sentences, front-loaded with the core action, then name-vs-id, then the sibling routing, then the safety note. No filler; 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 two-parameter destructive tool with no output schema and annotations already covering the safety profile, the description covers action, input semantics, alternative routing, and irreversibility. 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 100%, so the schema handles the two params, but the description adds meaning the schema lacks: field_name is the field's name, not its id. That disambiguation is genuinely useful 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?

States a specific verb+resource (delete a field from an entity) and further specifies scope by noting it takes the field's name rather than id. It distinguishes itself from the closely related entities_delete, so an agent can route correctly without opening either schema.

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

Usage Guidelines4/5

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

Names an explicit alternative and the condition that selects it: to remove the whole entity and its records, use entities_delete. It also advises checking with the user before running. It does not cover the broader field-tool family (fields_update vs delete), but the key routing decision is stated.

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

fields_getFields: getA
Read-only
Inspect

Get the full definition of one field (including relationship config). Finds the field by name on the entity (not case-sensitive) and returns its full definition as a JSON object, including relationship settings, select options, default value and search flags. To see every field on an entity at once, use fields_list.

ParametersJSON Schema
NameRequiredDescriptionDefault
entityYesEntity name
field_nameYesField name

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds genuinely useful context: case-insensitive name matching, and that the returned JSON includes relationship settings, select options, default value and search flags — important given there is no 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?

Two sentences, front-loaded with the core action and return scope, followed by the sibling routing hint. 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?

With no output schema, the description correctly compensates by enumerating what the returned JSON contains, and annotations carry the read-only safety profile. 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 coverage is 100%, so the baseline is 3. The description adds real meaning beyond the schema: the field lookup is not case-sensitive, which the schema (just 'Field name') does not convey. Slight value-add over the baseline.

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

Purpose5/5

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

States a specific verb and resource ('get the full definition of one field') and explicitly scopes it against the sibling `fields_list` ('every field on an entity at once'). An agent can distinguish it from fields_add/fields_update/fields_delete 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 names the alternative tool (`fields_list`) and the condition that selects it. The single-field vs all-fields routing decision is fully resolved in the description.

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

fields_listFields: listA
Read-only
Inspect

List fields on an entity. Takes the entity name. Returns each field's id, name, label, database type, display type and its required, unique, indexed and locked flags. For one field's complete definition, including relationship target and select options, use fields_get; for the entity's own settings, use entities_get.

ParametersJSON Schema
NameRequiredDescriptionDefault
entityYesEntity name

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 and openWorldHint=false, so the safety profile is covered. The description adds genuine value beyond that by disclosing the exact return payload, which matters because there is no output schema. It stops short of noting permissions or pagination behavior, but the return-shape disclosure is substantive 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?

Three dense sentences, zero filler, and structurally front-loaded: what it does, how to invoke it, what comes back, then where to go instead. The return-field enumeration earns its space because no 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 one-parameter, no-output-schema read tool, the description supplies the purpose, the required input, the full return shape, and sibling routing. An agent has everything needed to call it correctly and to interpret the response without additional context.

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

Parameters3/5

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

Schema coverage is 100% and the single parameter is already documented as 'Entity name'. The description's 'Takes the entity name' merely restates the schema without adding format, naming-convention, or resolution behavior for the entity identifier, so the baseline 3 is correct.

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

Purpose5/5

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

States a specific verb and resource ('List fields on an entity') and enumerates exactly what is returned (id, name, label, database type, display type, required/unique/indexed/locked flags). It explicitly distinguishes itself from the two nearest siblings, fields_get and entities_get, so an agent can select it 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 Guidelines5/5

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

Gives explicit routing rules: use `fields_get` when one field's complete definition is needed (relationship target, select options), and `entities_get` for the entity's own settings. This is a clear when-to-use-this vs when-to-use-alternatives statement, not an inference.

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

fields_updateFields: updateA
Destructive
Inspect

Update properties of an existing field. Changes a field's label, description, display type, default value, select options and its required, searchable, public-search and indexed flags. Settings you don't pass keep their value, except the description, which is cleared unless passed again. It cannot rename a field or change its database type, and locked fields are refused. It changes or deletes existing data, so check with the user before running it.

ParametersJSON Schema
NameRequiredDescriptionDefault
labelNoHuman-readable label
entityYesEntity name
publicNoMark field as publicly searchable
defaultNoDefault value
displayNoDisplay type: input, textarea, rich-text, select, entity-select, radio, country-select, checkbox, short-date, long-date, timestamp, relationship, file, secret, user, jsonb, geo, dynamic-reference
indexedNoAdd database index
optionsNoComma-separated option list for select display, e.g. "Running,Cycling,Rugby". Use label=value to split, e.g. "Running=running,Cycling=cycling"
multipleNoAllow multiple values on a select field
requiredNoMark field as required
no_publicNoRemove public searchable flag
field_nameYesField name to update
no_indexedNoRemove database index
searchableNoEnable full-text search on this field
descriptionNoField description
no_multipleNoRestrict to a single value on a select field
no_requiredNoRemove required constraint
no_searchableNoDisable full-text search on this field

TDQS

A4.7/5.0
Behavior5/5

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

Adds a genuinely non-obvious patch semantic beyond the annotations: unpassed settings retain their values EXCEPT description, which is cleared unless passed again. Combined with the locked-field refusal and the data-change warning, this is rich behavioral context the destructiveHint annotation alone does 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?

Four tight sentences, front-loaded with the core action and followed by patch semantics, hard limits, and a safety warning. No filler; every sentence carries actionable information.

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

Completeness5/5

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

For a destructive 17-parameter mutation with no output schema, the description covers the mutation surface, patch semantics, exclusions, and a confirmation guardrail, which is everything an agent needs to call it responsibly.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3, but the description adds meaning beyond the schema by grouping the mutable properties and disclosing the special clearing behavior of the description parameter. It doesn't detail the no_* negation flags, so it stays 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?

Opens with a specific verb+resource ("Update properties of an existing field") and enumerates exactly what properties can change, making it trivially distinguishable from siblings like fields_add, fields_delete, fields_get and fields_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?

Clearly states when-not conditions: it cannot rename a field or change its database type, and locked fields are refused. It also advises checking with the user first. It stops short of naming the sibling tool to use for renaming/type changes, so routing is partly left to inference.

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

files_deleteFiles: deleteA
Destructive
Inspect

Delete a file by ID. Removes the file from the project's storage by its id. Records that reference it through a file field follow that field's on-delete rule; with the default, CASCADE, they are deleted too. To see what is stored first, use files_get. It changes or deletes existing data, so check with the user before running it.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesFile ID to delete. Find it with files_list.

TDQS

A4.4/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 adds the decisive behavior the annotations cannot convey: references via a file field follow that field's on-delete rule and default to CASCADE, so related records are deleted too. It also advises user confirmation before running, which is meaningful risk context for a destructive 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?

Four tight sentences that lead with the core action, then consequence, then alternative, then caution — good front-loading. The second sentence ('Removes the file from the project's storage by its id') largely restates the first, a minor 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 single-parameter destructive tool with no output schema and destructiveHint already set, the description covers the action, the cascade side effect, the discovery path (files_get/files_list), and the confirmation expectation. Nothing an agent needs to call this 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 100% and the single `id` parameter is already documented there, including how to find it via files_list. The description only restates 'by ID' and adds no format or syntax detail beyond the schema, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource ('Delete a file by ID') and immediately scopes it with the cascade consequence, distinguishing it from siblings like files_get and files_list. An agent knows exactly what this tool does without opening the schema.

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

Usage Guidelines4/5

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

Names the alternative for inspection ('To see what is stored first, use `files_get`') and gives a pre-execution guardrail ('check with the user before running it'). It does not spell out when deletion is inappropriate or name non-file deletion tools, so it stops just short of full when/when-not coverage.

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

files_getFiles: getA
Read-only
Inspect

Get file metadata by ID. Returns one file's original and stored names, type, size, whether it is public and when it was uploaded. It gives metadata only, not the file's contents or a download link. To browse all files, use files_list.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesFile ID. Find it with files_list.

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 and openWorldHint=false, so the safety profile is covered. The description adds real behavioral value beyond that by stating the response is metadata only and explicitly excludes contents and download links, which prevents misuse. It stops short of noting auth requirements or missing-ID 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?

Four short sentences, each earning its place: purpose, return fields, negative scope, and sibling routing. Front-loaded with the operation and zero 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?

No output schema exists, but the description enumerates the returned metadata fields, which functionally substitutes for one. For a one-parameter read tool with annotations covering the safety profile, 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.

Parameters3/5

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

Single required parameter with 100% schema description coverage; the schema already explains that the ID is a file ID obtainable via files_list. The description adds no syntax or format detail beyond the schema, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb+resource ('Get file metadata by ID') and enumerates exactly what comes back: original/stored names, type, size, public flag, upload time. It also explicitly disambiguates from files_list and from content retrieval, so an agent can pick it 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 Guidelines5/5

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

Names the alternative ('To browse all files, use `files_list`') and adds the negative condition: this tool does not return contents or a download link. The when-to-use and when-not-to-use cases are both covered explicitly.

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

files_listFiles: listA
Read-only
Inspect

List uploaded files. Returns one page of the project's uploaded files, 25 by default, with each file's id, original name, type, size, whether it is public and when it was uploaded. Use files_get for one file's details, including its stored name.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number (default: 1)
limitNoItems per page (default: 25)

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description adds genuinely useful behavior beyond that: default page size of 25, that only one page is returned, and which fields each record carries. It does not mention auth requirements or the ordering of results, but the added context is substantial.

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

Conciseness5/5

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

Two sentences, zero waste, with the core action first, the return shape second, and the sibling routing last. Every clause earns its place.

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

Completeness4/5

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

With no output schema, the description usefully enumerates the returned fields and pagination behavior, which an agent otherwise could not know. It omits result ordering and whether pagination is capped, minor gaps for a simple paged list.

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

Parameters3/5

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

Schema coverage is 100% and both parameters already document their defaults, so the description's mention of '25 by default' and 'one page' largely repeats structured data. Baseline 3 is appropriate; it adds no syntax or interaction detail (e.g., how page interacts with 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?

States a specific verb+resource ('List uploaded files') and immediately scopes it: one page of the project's uploaded files. It names the sibling it is not ('Use files_get for one file's details'), so an agent can distinguish list from get without opening either schema.

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

Usage Guidelines4/5

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

Explicitly routes single-file lookups to files_get, which is the main ambiguity for this tool. It does not state exclusions such as when to prefer search or filtering tools, but the context needed to choose correctly is present.

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

files_uploadFiles: uploadAInspect

Upload a file. Uploads a file from a path on the machine running the CLI to the project's file storage and returns its new id and stored name. Files are private by default; a public file can be fetched without signing in. Use the returned id as the value of a file field with data_create or data_update.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesPath to the file to upload
publicNoMake the file publicly accessible (default: false)

TDQS

A4.5/5.0
Behavior4/5

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

Annotations declare readOnlyHint=false, destructiveHint=false, openWorldHint=false, but the description adds important behavioral context beyond that: files are private by default, public files can be fetched without signing in, and it returns id and stored name. It does not mention file size limits, allowed types, or error behavior, 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.

Conciseness5/5

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

Three sentences, front-loaded with the action and outcome, then privacy behavior, then integration guidance. Every sentence adds value without 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 two-parameter upload tool with full schema coverage and no output schema, the description covers purpose, return values, privacy semantics, and downstream usage. Nothing critical 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.

Parameters4/5

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

Schema coverage is 100%, so the schema already documents path and public with descriptions. The description adds meaning by explaining that public files are fetchable without authentication, which goes beyond the schema's 'Make the file publicly accessible' text. Baseline 4 is appropriate given full schema coverage plus a useful clarification.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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: uploads a file from a local path into project file storage and returns its new id and stored name. This is precise and distinctions from siblings like files_get or files_list are obvious.

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

Usage Guidelines4/5

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

Provides clear context: use the returned id as the value of a file field with data_create or data_update. This links the tool to downstream usage. No explicit exclusions or alternatives are named (e.g., when not to upload), but the primary usage context is well defined.

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

import_directusImport: directusA
Destructive
Inspect

Import collections, fields, flows, and data from a Directus instance. Writes into the active project: run with --dry-run first and add --yes only once the user has approved the plan. Copies a Directus instance's collections and fields into the active project as entities and fields; flows, files, roles and records come across only with include_flows, include_files, include_roles and include_data. Call it with dry_run first and show the user the plan, because a call without dry_run applies the import straight away. Returns JSON. It changes or deletes existing data, so check with the user before running it.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoTarget Anythink project profile (defaults to the active profile)
urlNoDirectus instance base URL (e.g. https://cms.example.com)
tokenNoDirectus static or admin token. Prefer the DIRECTUS_TOKEN environment variable: a flag lands in shell history and the process list
dry_runNoPreview what would be imported without making any changes
include_dataNoAlso import records from each collection (schema must already match)
include_filesNoAlso download files from Directus and re-upload to Anythink (runs before --include-data)
include_flowsNoAlso import Directus flows as Anythink workflows
include_rolesNoAlso import Directus roles + permissions, and promote collections to is_public when the Public policy can read them
allow_insecureNoAllow a plain http:// Directus URL (localhost is always allowed)

TDQS

A4.6/5.0
Behavior4/5

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

Annotations declare destructiveHint=true, readOnlyHint=false, and the description reinforces this by warning that a call without dry_run applies the import immediately and that it changes or deletes existing data. It adds context beyond annotations, though it does not detail auth requirements 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?

Front-loads the core purpose and destructive warning, but the description is somewhat repetitive, restating the dry-run advice multiple times and using both --dry-run and dry_run terminology.

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 purpose, destructive nature, required safety workflow, and the meaning of the optional include_* parameters. With no output schema, it also notes the tool returns JSON. Complete for a 9-parameter destructive import 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 coverage is 100%, so baseline is 3, but the description adds semantic detail by explaining that flows/files/roles/records only come across with the corresponding include_* flags and that include_files runs before include_data, which is not captured 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?

States a specific verb (Import) and enumerated resources (collections, fields, flows, data) from a named source (Directus), and distinguishes itself from the sibling data_import by naming the source system.

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

Usage Guidelines5/5

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

Explicitly instructs to run with --dry-run first and add --yes only after user approval, and explains what is included only when include_flows/include_files/include_roles/include_data are set. This is exactly the when/when-not guidance an agent needs for a destructive tool.

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

integrations_connectIntegrations: connectAInspect

Connect to a provider with an API key (prompts for the key if not given). Only for providers whose auth type is api_key (see integrations_get); OAuth providers fail here and need integrations_oauth_configure. Stores the key encrypted on the server and creates a project-wide connection, or a private one with user_connection, printing its id. Pass the key in api_key, then check the connection with integrations_test.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoFriendly name for this connection (default: "<provider> connection")
api_keyNoAPI key for the provider. If omitted, you'll be prompted (input is hidden).
providerYesProvider key (e.g. claude, openai)
user_connectionNoMake this a user-scoped connection (only the current user sees it). Default: tenant-wide.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations mark it non-readOnly, non-destructive, and closed-world, so the safety bar is lower. The description still adds real behavior: it prompts for the key when missing, stores it encrypted server-side, creates either a project-wide or user-scoped connection, and prints its id. It does not say what happens if a connection already exists, which 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.

Conciseness4/5

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

Four densely packed sentences, front-loaded with the core action and the OAuth exclusion before moving to storage semantics and follow-up. Every sentence carries information, though the density borders on overload.

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 preconditions (auth type lookup via integrations_get), the action, the side effects (encrypted storage, connection scope), the return (prints its id), and the next step (integrations_test). No output schema exists, and the description still explains what is produced.

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

Parameters3/5

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

Schema description coverage is 100%, so all four parameters (name, api_key, provider, user_connection) are already documented in the schema. The description reinforces api_key and user_connection usage but adds no syntax or default details beyond the structured fields, so baseline 3 applies.

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

Purpose5/5

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

States a specific verb + resource (connect to a provider) and immediately scopes it to api_key providers, routing the agent away from OAuth. An agent can distinguish this from integrations_oauth_connect/configure and integrations_test 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 Guidelines5/5

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

Explicit when-not guidance ('OAuth providers fail here and need integrations_oauth_configure') names the alternative tool. It also states the follow-up step ('check the connection with integrations_test') and points to integrations_get for determining auth type.

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

integrations_connections_listIntegrations: connections listA
Read-only
Inspect

List your integration connections. Shows each connection's id, provider, name, scope (the whole project or one user) and whether it is enabled; stored credentials are never shown. Use the id with integrations_test, integrations_enable, integrations_disable and integrations_disconnect.

ParametersJSON Schema
NameRequiredDescriptionDefault
providerNoFilter to a specific provider

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds genuinely useful behavior beyond that: what each row exposes (scope = whole project or one user; enabled flag) and the security guarantee that stored credentials are never returned.

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

Conciseness5/5

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

Two tight sentences. The core purpose and returned fields come first, then the id-routing hint. No filler, no restatement of the title.

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

Completeness4/5

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

With no output schema, the description compensates by listing the fields returned, and it discloses the credential-hiding guarantee. Absent only pagination/ordering notes, which are minor for a typically small connection list.

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

Parameters3/5

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

Schema description coverage is 100%, so the single 'provider' parameter is already documented in the schema and the description need not repeat it. Baseline 3 is appropriate; the description adds no filter syntax or 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?

States a specific verb and resource ('List your integration connections') and enumerates the returned fields (id, provider, name, scope, enabled), which is far more informative than the title. It does not explicitly distinguish itself from the sibling email_templates_list/integrations_list, so sibling differentiation is only partial.

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 downstream context by naming the four tools that consume the returned id (integrations_test/enable/disable/disconnect), which tells the agent why to call this first. It stops short of stating when-not to use it versus integrations_list, so no explicit exclusion.

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

integrations_disableIntegrations: disableAInspect

Disable a connection. Stops integrations_execute and workflow steps from using the connection but keeps its stored credentials, so integrations_enable can turn it back on. Prefer this to integrations_disconnect when the pause may be temporary.

ParametersJSON Schema
NameRequiredDescriptionDefault
connection_idYesConnection ID. Find it with integrations_connections_list.

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 and destructiveHint=false, so the safety profile is covered. The description adds real behavioral context beyond that: what actually stops (integrations_execute and workflow steps), and crucially that stored credentials survive, making the action reversible via integrations_enable. It does not mention permission requirements or error cases, so it falls 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.

Conciseness5/5

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

Three tightly-packed sentences with zero filler. The core action leads, the effect on dependent tools follows, and the disambiguation against the sibling comes last where an undecided agent will look.

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

Completeness5/5

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

No output schema exists, but the description needn't explain return values for a state toggle, and annotations carry the safety hints. Between the reversibility note, the sibling disambiguation, and the schema's ID lookup pointer, 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.

Parameters3/5

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

Only one parameter, and the schema already documents it at 100% coverage, including how to find the ID via integrations_connections_list. The description adds no syntax, format, or edge-case detail about connection_id, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb (disable) and resource (connection) and immediately differentiates itself from two closely-named siblings: integrations_enable (the reverse) and integrations_disconnect (the harder alternative). An agent can pick between the three 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 Guidelines5/5

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

Explicitly names the alternative (integrations_disconnect) and the condition that selects this tool over it: 'Prefer this to integrations_disconnect when the pause may be temporary.' The when-to-use-vs-alternative decision is fully closed out.

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

integrations_disconnectIntegrations: disconnectA
Destructive
Inspect

Delete a connection. Removes the connection and its stored credentials from the project; workflow steps that rely on it fail until the provider is connected again with integrations_connect or the OAuth flow. Use integrations_disable to pause it instead. It changes or deletes existing data, so check with the user before running it.

ParametersJSON Schema
NameRequiredDescriptionDefault
connection_idYesConnection ID to delete. Find it with integrations_connections_list.

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 beyond by disclosing the concrete fallout: stored credentials are removed and dependent workflow steps fail until reconnection. It also adds an authorization/etiquette constraint ('check with the user before running it') that no annotation conveys.

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

Conciseness5/5

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

Three tight sentences, front-loaded with the destructive action and its scope, followed by the alternative and the safety caveat. Every sentence carries distinct, load-bearing 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 single-parameter destructive tool with no output schema, the description supplies everything needed: what is destroyed, downstream impact, the safer alternative, and a user-confirmation rule. 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.

Parameters3/5

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

Schema description coverage is 100%, and the single parameter already documents itself and its discovery path ('Find it with integrations_connections_list'). The description adds no format or constraint detail beyond the schema, so the baseline 3 for schema-documented params applies.

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

Purpose5/5

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

Opens with a specific verb+resource ('Delete a connection') and immediately scopes what is removed (the connection and its stored credentials from the project). An agent can distinguish this from siblings like integrations_disable or integrations_list 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 Guidelines5/5

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

Explicitly names the alternative ('Use integrations_disable to pause it instead') and the remediation path ('connected again with integrations_connect or the OAuth flow'). It states both when to use this and when to prefer a sibling, and adds a pre-flight caution to confirm with the user.

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

integrations_enableIntegrations: enableAInspect

Enable a connection. Turns a disabled connection back on so integrations_execute and workflow steps can use it again; its stored credentials are unchanged. Returns the connection's name and new state. The opposite is integrations_disable.

ParametersJSON Schema
NameRequiredDescriptionDefault
connection_idYesConnection ID. Find it with integrations_connections_list.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare a non-destructive mutation (readOnlyHint=false, destructiveHint=false). The description adds value beyond them: it specifies that stored credentials are unchanged and that the tool returns the connection's name and new state, which an agent cannot infer from the annotations alone.

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

Conciseness5/5

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

Three short sentences, front-loaded with the action, then the effect, then the inverse. No filler and nothing repeated from the title that isn't also doing routing work.

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 state toggle, the description covers the effect, side-effect profile, return value (substituting for the absent output schema), and the sibling relationship. 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.

Parameters3/5

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

Schema coverage is 100% and the single parameter's description already tells the agent to find the ID via integrations_connections_list. The tool description adds no further parameter meaning, so the baseline 3 is appropriate.

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

Purpose5/5

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

States a specific verb ('Enable') and resource ('a connection'), then elaborates the exact effect: re-enabling a disabled connection for integrations_execute and workflow steps. It explicitly names its opposite, integrations_disable, so an agent can distinguish the pair without opening either schema.

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

Usage Guidelines4/5

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

Gives clear context for when this applies ('a disabled connection') and names the inverse tool for the opposite situation. It stops short of stating preconditions or failure modes (e.g. what happens if the connection is already enabled), so it is strong but not fully explicit.

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

integrations_executeIntegrations: executeAInspect

Run an operation on a connected provider. Calls the provider live with the project's first enabled connection to it, using inputs given as key=value pairs or a JSON object, and may incur the provider's charges. The API currently runs only the claude provider (inputs prompt, system_prompt, model, max_tokens); other providers return an error, so use them in workflow steps via workflows_integration_add. Returns JSON.

ParametersJSON Schema
NameRequiredDescriptionDefault
inputNoInput parameter as key=value. Repeatable.
inputsNoInputs as a JSON object, e.g. '{"prompt":"hello"}'
providerYesProvider key
operationYesOperation key (see 'integrations get <provider>')

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 (readOnlyHint=false, openWorldHint=true, destructiveHint=false): it warns the call is live, may incur the provider's charges, uses the project's first enabled connection, is limited to claude, and errors for other providers. The charge warning and first-connection behavior are exactly the kind of risk context 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?

Three dense sentences, front-loaded with the core action and ending with the return format. The provider-specific caveat is packed in but every clause carries information; only marginal tightening is possible.

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 live, charge-incurring, open-world call with no output schema, it covers the essentials: input formats, provider limitation, cost warning, connection selection, and return type. It lacks detail on error shapes other than the non-claude case and any timeout/rate-limit 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 coverage is 100%, so the baseline is 3, but the description adds real meaning by explaining the two input styles (key=value pairs vs. a JSON object) and enumerating the claude operation's inputs (prompt, system_prompt, model, max_tokens). It does not document how to discover non-claude operation keys beyond pointing at 'integrations get'.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 ('Run an operation on a connected provider') and immediately scopes it to a live call against the first enabled connection. It distinguishes itself from siblings like integrations_test, integrations_get, and workflows_integration_add by naming the workflow route 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 clear when-not and alternative: only the claude provider runs here, and other providers 'return an error, so use them in workflow steps via workflows_integration_add.' It does not contrast with other integration siblings (integrations_test, integrations_get), but the primary routing decision is spelled out.

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

integrations_getIntegrations: getA
Read-only
Inspect

Show details and operations for one provider. Shows the provider's description, auth type and each operation's key, name and description. Operation keys are what integrations_execute and workflow integration steps (workflows_integration_add) take. It does not say whether the project is connected; integrations_connections_list does.

ParametersJSON Schema
NameRequiredDescriptionDefault
providerYesIntegration provider key (e.g. claude, slack, hubspot)

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered; the description adds real value by disclosing the return payload shape (description, auth type, per-operation key/name/description) in the absence of an output schema. It also draws an explicit boundary around what the tool does NOT report (project connection state), which prevents a common misread.

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 short sentences, front-loaded with purpose, then return contents, then downstream consumers, then the exclusion. Every sentence carries distinct information with no 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 no output schema, the description covers purpose, return shape, downstream key usage, and scope boundaries. An agent has everything needed to call 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.

Parameters3/5

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

Schema coverage is 100% and the single 'provider' parameter is fully documented with concrete examples (claude, slack, hubspot). The description only says 'one provider' without adding format or lookup rules beyond the schema, so the baseline 3 is appropriate.

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

Purpose5/5

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

States a specific verb (Show) and resource (details and operations for one provider) and enumerates exactly what is returned: provider description, auth type, and each operation's key/name/description. It is clearly distinguishable from integrations_list (all providers) and integrations_connections_list (connection status).

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 downstream use of the returned operation keys ('what integrations_execute and workflows_integration_add take') and explicitly rules out connection status, routing the agent to integrations_connections_list for that. It never states a plain 'use this when you need X' trigger, so it stops 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.

integrations_listIntegrations: listA
Read-only
Inspect

List available integration providers. Start here when connecting a third-party service. Shows each provider's key, category, auth type (api_key or oauth2) and operation count; providers turned off for this project are left out. Next, read a provider with integrations_get, then connect it with integrations_connect (API key) or integrations_oauth_configure (OAuth).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already cover read-only safety (readOnlyHint=true, openWorldHint=false). The description adds genuinely non-obvious behavior: providers disabled for the project are omitted, and each result carries key, category, auth type (api_key vs oauth2) and operation count. This pre-empts confusion about missing providers and tells the agent what it can branch on. It stops short of full transparency only because it doesn't characterize ordering, completeness guarantees, or response envelope.

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

Conciseness5/5

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

Three sentences, front-loaded with the purpose, then the entry-point instruction, then the field list and exclusions, then the next-step routing. Every clause carries information an agent needs; nothing is repeated from the title 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?

With no input parameters and no output schema, the description takes on the job of explaining the return shape, which it does (key, category, auth type, operation count) along with the filtering caveat about disabled providers. Nothing required to call or interpret this tool 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 takes zero parameters, so there is nothing to disambiguate and the baseline is 4. The description does not need to carry parameter meaning, and appropriately spends its words on the returned provider fields 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?

States a specific verb and resource ('List available integration providers') and immediately scopes it in the ecosystem by naming the follow-on siblings integrations_get, integrations_connect and integrations_oauth_configure. An agent can distinguish this from integrations_connections_list or integrations_test without opening a schema.

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

Usage Guidelines5/5

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

Explicit entry-point guidance ('Start here when connecting a third-party service') plus an ordered workflow: list, then read with integrations_get, then connect via integrations_connect or integrations_oauth_configure depending on auth type. The condition selecting each alternative is named.

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

integrations_oauth_callback_urlIntegrations: oauth callback urlA
Read-only
Inspect

Print the redirect URL to add to OAuth app configurations (same for every provider). Prints only the dashboard redirect URL for this project, worked out locally from the API address and project id without an API call. Give it to the user to add to their OAuth app at the provider before integrations_oauth_configure; integrations_oauth_status shows it with the provider's setup state.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description nonetheless adds real behavioral context: it is computed locally without an API call, scoped to this project's dashboard redirect, and identical across every provider. That is genuinely useful and non-redundant.

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

Conciseness5/5

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

Three tight sentences, front-loaded with the core output, then scoping/computation detail, then the workflow placement. No filler and nothing repeated from the title.

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

Completeness5/5

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

No output schema, but the description states what is printed (the redirect URL) and that it is project-scoped and provider-independent. For a zero-arg, no-API read, this is complete enough to call 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?

Zero parameters, so the baseline is 4; there is no parameter surface for the description to explain. Nothing is missing here.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 ('Print') plus resource ('the redirect URL to add to OAuth app configurations'), and it explicitly disambiguates from siblings by naming integrations_oauth_configure and integrations_oauth_status. An agent can tell exactly what this returns and how it differs from the other oauth tools without opening a schema.

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

Usage Guidelines5/5

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

Explicit ordering guidance: give the URL to the user 'before integrations_oauth_configure'. It also names the alternative (integrations_oauth_status) and how it differs (shows the URL alongside provider setup state), so the when-to-use choice is fully resolved.

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

integrations_oauth_configureIntegrations: oauth configureA
Destructive
Inspect

Set the OAuth client ID + secret for a provider. Saves the client ID and secret of an OAuth app the user created at the provider and enables it for the project (disable saves it switched off). Each run replaces the previous settings, so social sign-in turns off unless use_social_sign_in is passed again. Afterwards users connect from the dashboard or with integrations_oauth_connect. It changes or deletes existing data, so check with the user before running it.

ParametersJSON Schema
NameRequiredDescriptionDefault
disableNoSave the credentials but mark the provider disabled
providerYesProvider key (e.g. slack, google, github)
client_idNoOAuth client ID for this tenant. Prompted if omitted.
client_secretNoOAuth client secret. Prompted (hidden) if omitted.
use_social_sign_inNoAlso expose this provider as a social sign-in option for end users

TDQS

A4.6/5.0
Behavior5/5

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

Beyond the destructiveHint=true annotation, it discloses a critical non-obvious trait: each run replaces prior settings, silently disabling social sign-in unless use_social_sign_in is re-passed. It also states the disable branch saves credentials but switches off, and advises user confirmation for a destructive write.

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 scope, replacement semantics, next step, and caution. Every sentence is load-bearing, though the second sentence partially restates the first's scope without new 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?

There is no output schema, so the description carries the return/next-step burden and does so by naming integrations_oauth_connect and the dashboard as the connection path. For a destructive 5-param mutation, the coverage of replacement behavior and caution is 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 coverage is already 100%, so the baseline is 3. The description adds meaning by explaining the two behavioral flags: 'disable saves it switched off' and social sign-in re-enables only when use_social_sign_in is passed, which goes slightly beyond the raw schema text.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 ('Set the OAuth client ID + secret for a provider') and clarifies exactly what is being saved and enabled. An agent can distinguish it from integrations_oauth_connect (which connects users) and oauth_google_configure 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 context (the app must already exist at the provider) and names the follow-up tool integrations_oauth_connect plus the dashboard as the way users connect. It also says to check with the user before running. It stops just short of explicitly contrasting with the sibling oauth_google_configure path.

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

integrations_oauth_connectIntegrations: oauth connectAInspect

Connect via the browser OAuth flow (starts a local listener). Opens the provider's sign-in page in a browser on this machine and waits up to five minutes for the callback on localhost (port 8745 by default), then creates the connection. A person must complete the sign-in, and the provider must first be set up with integrations_oauth_configure; for API-key providers use integrations_connect.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoFriendly name for this connection (default: "<provider> connection")
portNoLocal port for the OAuth callback (default: 8745)
no_openNoDon't try to open the browser automatically — just print the URL
timeoutNoSeconds to wait for the OAuth callback before giving up (default: 300)
providerYesProvider key (e.g. slack, google, github)
user_connectionNoMake this a user-scoped connection (only the current user sees it). Default: tenant-wide.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations only give the safety profile (readOnlyHint=false, destructiveHint=false, openWorldHint=false); the description adds substantial behavioral context beyond that: it starts a local listener, opens a browser, waits up to five minutes, and requires a human to complete the sign-in. The prerequisite and human-in-the-loop requirement are exactly the kind of context an agent needs and cannot get 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.

Conciseness5/5

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

Two tight sentences that front-load the core action and mechanism, then append prerequisites and the sibling alternative. Every clause earns its place with no repetition of the title.

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 human-in-the-loop OAuth flow with six documented parameters and no output schema, the description covers the flow, timing, defaults, prerequisite, and the correct alternative tool. Nothing an agent needs to select or invoke it correctly is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so all six parameters (including defaults for port 8745 and the 300s timeout) are already documented in the schema. The description echoes the port and timeout defaults but adds no syntax or format detail beyond what the schema provides, so baseline 3 applies.

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

Purpose5/5

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

States a specific verb and mechanism ('Connect via the browser OAuth flow') and then explains exactly what happens: opens the provider's sign-in page, waits for the callback on localhost, and creates the connection. It is clearly distinguishable from the sibling `integrations_connect` (API-key providers) and `integrations_oauth_configure` (setup).

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 when/when-not guidance: use this for browser OAuth, use `integrations_connect` for API-key providers, and the provider must first be configured with `integrations_oauth_configure`. The alternative tool is named directly with the condition that selects it, leaving nothing to inference.

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

integrations_oauth_statusIntegrations: oauth statusA
Read-only
Inspect

Show OAuth client setup status for a provider. Shows whether a client ID is saved for the provider, whether it is enabled and also used for end-user social sign-in, and the redirect URL its OAuth app must allow. Check it before integrations_oauth_configure, or after to confirm the credentials were saved.

ParametersJSON Schema
NameRequiredDescriptionDefault
providerYesProvider key (e.g. slack, google, github)

TDQS

A4.5/5.0
Behavior4/5

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

The annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds useful behavioral context by enumerating what the status reports: whether a client ID is saved, whether it is enabled and used for social sign-in, and the required redirect URL. It does not cover edge cases such as unknown providers, but that is a minor gap given the annotation coverage.

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

Conciseness5/5

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

Three sentences, front-loaded with the core purpose, followed by the specific fields returned and then the usage cue. No sentence is redundant and every part 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?

With no output schema, the description carries the burden of explaining return values and does so clearly: saved client ID, enabled state, social sign-in usage, and redirect URL. For a one-parameter, read-only status tool, this gives an agent 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.

Parameters3/5

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

Schema description coverage is 100%, and the single `provider` parameter is fully documented in the schema with examples (slack, google, github). The description implies the tool operates on a provider but adds no syntax or format detail beyond what the schema already provides, so the baseline of 3 applies.

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

Purpose5/5

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

The description states a specific verb and resource: 'Show OAuth client setup status for a provider.' It distinguishes this tool from the sibling `integrations_oauth_configure` by naming it as the write-side alternative, so an agent can tell the two apart without opening the 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 gives explicit timing guidance: 'Check it before `integrations_oauth_configure`, or after to confirm the credentials were saved.' The alternative tool is named and the conditions for using this status check are clear, 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.

integrations_testIntegrations: testAInspect

Test a connection. Use after connecting, with an id from integrations_connections_list. The API currently only confirms the connection exists in this project and does not call the provider, so a pass does not prove the stored credentials work.

ParametersJSON Schema
NameRequiredDescriptionDefault
connection_idYesConnection ID. Find it with integrations_connections_list.

TDQS

A4.3/5.0
Behavior5/5

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

Discloses a non-obvious and decision-critical behavioral limitation: the API only confirms project-level existence and never calls the provider, so a pass does not validate stored credentials. This is exactly the kind of caveat annotations cannot express, and it materially changes how an agent should interpret success.

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

Conciseness5/5

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

Two tight sentences: the action and prerequisite come first, the caveat second. Nothing is redundant and no sentence 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?

With no output schema, the description carries the burden of explaining what a successful result means — and it does so directly by warning that a pass proves only existence, not credential validity. Nothing needed to call or interpret the tool is missing.

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

Parameters3/5

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

Schema description coverage is 100% for the single parameter, so the schema already documents `connection_id` including where to find it. The description merely repeats that pointer, adding no new syntax or format detail.

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 ('Test a connection'), which cleanly separates it from siblings like integrations_connections_list (read) and integrations_execute (invoke). It doesn't explicitly contrast with 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 Guidelines4/5

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

Gives clear sequencing ('Use after connecting') and names the source of the required id (`integrations_connections_list`). It does not state when to prefer integrations_execute or integrations_get instead, so it lacks explicit alternatives.

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

loginSign inAInspect

Log in to the Anythink platform with email and password. Returns a session token used for account and project management. For Google sign-in, use the 'login_google' tool.

ParametersJSON Schema
NameRequiredDescriptionDefault
emailYesEmail address
passwordYesPassword

TDQS

A4.2/5.0
Behavior4/5

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

Annotations only carry destructiveHint=false, which says almost nothing for an auth tool. The description compensates by disclosing the return artifact ('Returns a session token used for account and project management'), which is essential since there is no output schema. It still omits failure behavior (invalid credentials), token lifetime/expiry, and whether logging in invalidates existing sessions.

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

Conciseness5/5

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

Three sentences, no filler, and front-loaded: purpose first, then the return value, then the alternative-route caveat. 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?

With no output schema, the description correctly supplies the return value and notes the token's downstream role. It stops short of documenting error/credential-failure behavior and token expiry, which an agent calling a login tool would benefit from.

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

Parameters3/5

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

Schema description coverage is 100%, and both parameters are trivially self-documenting ('Email address', 'Password'), so the baseline 3 applies. The description adds no format, validation, or sourcing guidance 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?

States a specific verb (log in), the resource/credential mechanism (email and password), and the platform. It also names the sibling it is not (login_google), letting an agent distinguish it from login_google, login_direct, signup, and the oauth_* tools 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 routes Google sign-in to the 'login_google' tool, which is a clear when-to-use-elsewhere statement. However, other closely related siblings such as login_direct and oauth_google_configure are not addressed, so an agent in a Directus/SSO context still has to guess.

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

login_directSign in to a project directlyAInspect

Store credentials directly for a project (bypasses billing login). Use this when you already have an org ID and API key or JWT token.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgIdYesOrganization/tenant ID
tokenNoJWT access token
apiKeyNoAPI key (ak_...)
baseUrlNoOverride API base URL
profileNoProfile name to save as (defaults to org ID)

TDQS

A3.6/5.0
Behavior3/5

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

Annotations only declare destructiveHint=false, so the description must carry the behavioral load. It discloses that credentials are stored and billing login is bypassed, but says nothing about where credentials persist, whether an existing profile is overwritten, or what authentication/validation occurs.

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 core action and zero filler. Slightly terse for a credential-storing tool, but no wasted words.

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

Completeness3/5

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

For a tool that writes persistent credentials with no output schema, the description covers the basic purpose but omits operating details an agent would want: storage location, overwrite semantics, and success/failure behavior. Adequate but with clear gaps.

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

Parameters3/5

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

Schema description coverage is 100% and all five parameters (orgId, token, apiKey, baseUrl, profile) are documented in the schema. The description only echoes org ID and API key/JWT, ignoring baseUrl and profile, so it adds no meaning beyond the schema; baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource: store credentials for a project. The parenthetical 'bypasses billing login' gestures at how it differs from the plain login path, but it never names a sibling tool (login, login_google, signup) outright, so differentiation is only partial.

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?

'Use this when you already have an org ID and API key or JWT token' gives a clear precondition for selecting this tool. It stops short of naming alternatives or when-not-to-use cases (e.g., use login_google for OAuth), so it is clear context without explicit routing.

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

login_googleSign in with GoogleAInspect

Sign in to the Anythink platform with Google. Opens the user's browser to Google's consent screen and waits for them to approve, then stores the session token. The browser step must be completed by the user; everything before and after is tool-driven. This does NOT pick a billing account or project — after it returns, call 'accounts_list' then 'accounts_use', and 'projects_list' then 'projects_use'. Needs a local browser, so it only works over stdio (not the hosted HTTP server).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior5/5

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

Annotations only give openWorldHint and destructiveHint; the description adds substantial context beyond them: the browser step requires human intervention, the tool blocks while waiting for approval, the session token is stored afterward, and it cannot run on the hosted HTTP server. These are real behavioral traits an agent must plan around.

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 sentences, front-loaded with what the tool does, then the human-in-the-loop constraint, then the required follow-up sequence, then the environment restriction. Every sentence carries distinct, actionable information with no 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?

No output schema exists, yet the description covers the interaction flow, the user's required action, what is persisted, the post-call workflow, and the transport limitation. 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.

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. The description correctly implies a parameterless invocation and adds no misleading parameter claims.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 ('Sign in to the Anythink platform with Google') and precisely describes the mechanism (opens browser to Google's consent screen, waits for approval, stores session token). It is clearly distinguishable from siblings like login_direct, signup, and oauth_google_configure.

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 what the tool does NOT do (pick a billing account or project) and names the exact follow-up calls in order: accounts_list then accounts_use, projects_list then projects_use. It also states the environment constraint (stdio only, not hosted HTTP). It does not contrast itself against login_direct/signup, so it stops short of full when-not guidance.

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

logoutSign outAInspect

Remove the saved credentials for a project profile from local CLI config. Use this to disconnect from a project or clear a stale token; it deletes only the stored profile locally and does not revoke the token server-side or affect the project. Omit the profile to remove the currently active one. Run 'config_show' to see profile names.

ParametersJSON Schema
NameRequiredDescriptionDefault
profileNoName of the profile to remove. Defaults to the active profile. See 'config_show' for names.

TDQS

A4.4/5.0
Behavior5/5

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

Annotations only declare destructiveHint=false; the description earns credit by explaining why — deletion is confined to local stored credentials, the server-side token is untouched, and the project is unaffected. It also discloses the default behavior when the profile is omitted.

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

Conciseness5/5

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

Three tight sentences; the destructive scope ('local only') is front-loaded ahead of the usage conditions and the sibling pointer. Zero 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 zero-required-param, no-output-schema tool, this covers purpose, scope, default behavior, and where to find profile names. It does not mention success/failure feedback or what happens for a nonexistent profile, a minor gap.

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

Parameters3/5

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

Schema coverage is 100% and the single parameter is fully documented, including its default and the 'config_show' lookup hint, which the description merely echoes. Baseline 3 applies because the description adds no syntax or format detail 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?

States a specific verb and resource ('remove the saved credentials for a project profile from local CLI config') with an explicit scope limiter ('locally'). An agent can distinguish this from config_show, config_remove, login, and projects_use 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 when-to-use conditions ('disconnect from a project or clear a stale token') and an explicit boundary ('does not revoke the token server-side or affect the project'), plus a pointer to 'config_show' for profile names. It stops short of naming a specific sibling as the alternative for related jobs (e.g. config_remove), so it is strong but not fully routing.

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

oauth_google_configureOauth: google configureA
Destructive
Inspect

Set Google OAuth client ID and secret. Saves the Google Cloud OAuth client ID and secret that let the project's end users sign in with Google, and switches that sign-in on or off. It only works interactively, prompting for each value (blank keeps the current one), then prints the callback URL to add to the Google OAuth client. It changes or deletes existing data, so check with the user before running it.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, so the mutation risk is partly covered. The description adds non-obvious behavior beyond the annotations: interactive-only operation, per-value prompting with blank meaning 'keep current', and printing a callback URL to paste into the Google OAuth client. It confirms rather than merely repeats the destructive nature.

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?

Four sentences, front-loaded with the core action, and each sentence carries distinct information (action, effect, interaction model, warning). Minor redundancy between 'Set Google OAuth client ID and secret' and 'Saves the Google Cloud OAuth client ID and secret' keeps it from 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?

With no parameters, no output schema, and annotations covering the safety profile, the description fills the remaining gaps: it explains the interactive input flow, the callback URL it emits, and the destructive confirmation requirement. 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?

The schema has zero parameters, so the baseline is 4. The description still usefully explains how inputs are actually collected (interactive prompts, blank retains the current value), which compensates for the empty schema and tells the agent not to expect arguments.

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 ('Set Google OAuth client ID and secret') and adds the effect ('switches that sign-in on or off'), so the agent knows exactly what the tool does. It does not explicitly name a sibling such as oauth_google_status or integrations_oauth_configure to disambiguate, which keeps it 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 Guidelines4/5

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

It gives real usage context: the tool 'only works interactively, prompting for each value (blank keeps the current one)' and instructs the agent to 'check with the user before running it'. There is no explicit statement of when-not-to-use or which sibling to prefer instead, so it stops short of the top score.

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

oauth_google_statusOauth: google statusA
Read-only
Inspect

Show Google OAuth configuration status. Reports whether Google sign-in for the project's end users is enabled and whether a client ID and secret are saved, without showing them. This covers user sign-in only; Google as an integration is handled by integrations_oauth_status and integrations_oauth_configure.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description adds genuinely useful behavior: that secret values are saved/checked but deliberately not returned ('without showing them'), which tells the agent not to expect credentials in the response. It stops short of describing pagination or exact return shape, but no output schema exists to carry that.

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

Conciseness5/5

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

Three short sentences, front-loaded with the purpose, then the reported fields, then the sibling boundary. Every sentence carries distinct information with no restatement of the title.

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 status check with no output schema, the description supplies everything needed: what is inspected, that secrets are not exposed, and how it differs from the integration-level status tool. Nothing an agent needs to invoke it correctly is absent.

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, which is the baseline-4 case: there is nothing for the description to clarify, and it correctly signals a no-argument call. No parameter text is needed or 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?

States a specific verb and resource ('Show Google OAuth configuration status') and immediately enumerates what it reports: sign-in enabled, client ID and secret saved. It also distinguishes itself from the similarly named sibling by scoping to end-user sign-in rather than integrations.

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 by naming the alternatives, `integrations_oauth_status` and `integrations_oauth_configure`, and stating the condition that selects them ('Google as an integration'). The scope boundary is unambiguous, so an agent can pick between the two OAuth status tools without opening either schema.

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

pay_connectPay: connectAInspect

Set up a Stripe Connect account and start onboarding. Creates the project's Stripe Connect account and opens Stripe's hosted onboarding page in a browser, which must be finished before plans can take card payments. It prompts for business type, country and email, so it needs an interactive terminal. Check pay_status first.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior4/5

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

Annotations only state readOnlyHint=false, destructiveHint=false, openWorldHint=false; the description adds substantial context beyond them — account creation, a browser-based hosted flow, mandatory completion before payments work, and interactive prompting for business type/country/email. It omits idempotency behavior (what happens on re-run if the account already exists) and failure/partial-completion handling, keeping it below 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?

Well front-loaded: the core action leads, then mechanics, then prerequisites. There is mild redundancy between the opening sentence ('Set up a Stripe Connect account and start onboarding') and the second ('Creates the project's Stripe Connect account...'), which could be merged without loss.

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 zero-parameter, no-output-schema tool this is nearly complete: the agent knows the tool is interactive, browser-based, blocking, and must be preceded by pay_status. Only re-run/idempotency behavior is 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?

The schema declares zero parameters with additionalProperties=false, so the baseline is 4. The description slightly exceeds that by noting the tool interactively prompts for business type, country, and email, telling the agent that inputs are collected procedurally rather than passed as 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?

States a specific verb and resource: 'Set up a Stripe Connect account and start onboarding', then details the concrete mechanism ('opens Stripe's hosted onboarding page in a browser'). This clearly separates it from siblings like pay_status, pay_plans_create, and pay_methods, which concern status/plans/payment methods rather than Connect account provisioning.

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 an explicit sequencing rule ('Check `pay_status` first') and a precondition ('which must be finished before plans can take card payments'), plus the environmental requirement of an interactive terminal. It lacks an explicit when-not-to-use clause (e.g., what to do if an account already exists), 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.

pay_entitlementPay: entitlementA
Read-only
Inspect

Show the current user's access / trial entitlement. Reports whether the signed-in user (the one this tool runs as) has paid or trial access in the project's app: status, trial end and days left, subscription id, provider, product and expiry. Read-only. To look up another user, use pay_subscriptions_by_user.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered; the description reinforces "Read-only" and, with no output schema, usefully enumerates the returned fields (status, trial end/days left, subscription id, provider, product, expiry). It stops short of details like freshness or caching, but adds solid 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?

Three tight sentences, front-loaded with the core purpose before the return payload and the alternative-tool pointer. No filler or 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 zero-param read tool with no output schema, the description supplies everything needed: identified subject, enumerated return fields, read-only nature, and a routing hint to the sibling for other users. 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 takes zero parameters, so there is nothing for the description to disambiguate; baseline 4 applies. The scoping statement ("the one this tool runs as") correctly signals that no subject argument is accepted.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 ("Show"/"Reports") on a precise resource (the signed-in user's paid or trial entitlement) and enumerates the reported fields. It is trivially distinguishable from the many pay_* siblings because it explicitly scopes to the current user.

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 an explicit alternative and the condition that selects it: "To look up another user, use `pay_subscriptions_by_user`." The current-user scope is clearly implied, but it does not distinguish itself from close siblings like pay_status, pay_trial_status, or pay_subscriptions_check_access, so guidance is strong but not complete.

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

pay_methodsPay: methodsA
Read-only
Inspect

List saved payment methods. Lists the cards and other payment methods saved by the signed-in user as a customer of this project: type, brand, last four digits and expiry. It does not list your end users' cards or the card on your Anythink billing account. Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already carry readOnlyHint=true and openWorldHint=false, so the trailing 'Read-only' only confirms them. The description adds genuine value beyond annotations by disclosing the returned fields (type, brand, last four digits, expiry) and explicitly negating two likely confusions about whose cards are listed.

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

Conciseness4/5

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

Three short sentences, front-loaded with the core action, then scope exclusions, then the safety note. The final 'Read-only' sentence is largely redundant with readOnlyHint, a minor redundancy rather than a structural flaw.

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 zero parameters, no output schema, and annotations covering safety and openness, the description supplies enough: what is listed, whose cards, which fields, and what is excluded. Slightly more detail on ordering or limits would round it out, but nothing needed 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 takes zero parameters, so there is nothing for the description to disambiguate; baseline 4 applies. It also implicitly confirms the tool is unfiltered and acts on the signed-in user's context rather than accepting an identity 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 ('List saved payment methods') and immediately narrows scope: cards saved by the signed-in user as a customer of this project, not end users' cards or the billing-account card. That scoping cleanly distinguishes it from siblings like pay_payment_options and pay_payments.

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 boundaries ('does not list your end users' cards or the card on your Anythink billing account') imply when this tool is the right one, but there is no explicit when-to-use instruction or named alternative for the cases it excludes. 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.

pay_offers_activatePay: offers activateAInspect

Activate a paused offer. Sets an offer's status to active so its codes can be redeemed again, still subject to its validity dates and caps. Use it to undo pay_offers_pause or to reopen an expired offer.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesOffer id (guid). Find it with pay_offers_list.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations only declare the write/safety profile (readOnlyHint=false, destructiveHint=false); the description adds substantive behavior beyond that, noting the activation is 'still subject to its validity dates and caps' and that it reverses a pause. It doesn't cover idempotency or authorization needs, but it adds real context over the annotations.

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

Conciseness5/5

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

Two tight sentences, front-loaded with the action and effect, then the routing guidance. No filler or restated metadata.

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 state-change tool with annotations covering the safety profile and no output schema, the description covers effect, constraints, and alternatives adequately. Auth requirements and failure modes are the only minor omissions.

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

Parameters3/5

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

Only one parameter and schema description coverage is 100%, so the schema already documents 'id' including how to find it ('Find it with pay_offers_list'). The description adds nothing further about the parameter, which is the expected baseline when the schema does the work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 ('Activate a paused offer') and immediately specifies the effect ('Sets an offer's status to active'). An agent can distinguish it from pay_offers_pause, pay_offers_update, and pay_offers_delete from the description alone.

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 names the sibling it reverses ('Use it to undo `pay_offers_pause`') and gives a second concrete use case ('reopen an expired offer'). The condition selecting this tool over its alternatives is stated rather than inferred.

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

pay_offers_add_codePay: offers add codeAInspect

Add a promo/referral code to an offer. Creates a code users enter to redeem the offer: a shared promo code, or with an owner user id, a personal referral code tied to that user. Returns the new code. There is no tool to remove a single code; codes go only when the offer is deleted with pay_offers_delete.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesOffer id (guid). Find it with pay_offers_list.
slugNoCode slug (e.g. LAUNCH50); prompted for if omitted
owner_user_idNoAttach the code to a user (personal/referral code). Omit for a shared promo code.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already cover safety (readOnlyHint=false, destructiveHint=false, openWorldHint=false). The description adds genuinely non-derived behavior: the code is returned on success, and codes cannot be individually removed, only cascade-deleted with the offer. It stops short of describing error cases or whether adding a duplicate slug overwrites.

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

Conciseness5/5

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

Three tight sentences with no filler: purpose first, mode semantics second, lifecycle constraint last. Every sentence conveys information an agent would otherwise have to guess.

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

Completeness4/5

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

No output schema exists, and the description usefully states the return ('the new code'), so return-value ambiguity is addressed. Combined with the lifecycle note and annotation-covered safety profile, the definition is nearly complete; only edge-case behavior on duplicate or invalid codes is unaddressed.

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

Parameters3/5

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

Schema description coverage is 100%, so all three parameters are already documented, including the omit-for-shared rule on owner_user_id. The description restates that mode distinction but adds no new syntax, format, or constraint detail beyond what the schema carries, so the baseline of 3 applies.

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

Purpose5/5

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

States a specific verb and resource ('Add a promo/referral code to an offer') and immediately spells out the two creation modes: shared promo code vs. personal referral code tied to an owner user id. An agent can distinguish this from pay_offers_codes and pay_offers_user_code by the shared/personal framing alone.

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 when-to-use context via the shared-vs-personal branching rule, and explicitly states the negative case: there is no removal tool, so codes only disappear when the offer is deleted with pay_offers_delete. It does not, however, explicitly contrast itself with the sibling pay_offers_user_code, which also deals with user codes.

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

pay_offers_codesPay: offers codesA
Read-only
Inspect

List the promo/referral codes attached to an offer. Lists every code on one offer, both shared promo codes and per-user referral codes, with slug, owner (or shared), redemption count and created date. Read-only. To find a specific user's personal referral code, use pay_offers_user_code.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesOffer id (guid). Find it with pay_offers_list.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered; the description reinforces 'Read-only' and, more usefully, discloses the returned fields (slug, owner/shared, redemption count, created date). It does not mention pagination or auth scope, 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.

Conciseness5/5

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

Three sentences, zero waste, front-loaded with purpose and return shape before the disambiguation clause. 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?

There is no output schema, and the description compensates by enumerating the fields returned, which is exactly the right call for a list tool. Pagination/limit behavior is left unstated, a minor gap.

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

Parameters3/5

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

Schema coverage is 100% and the sole `id` parameter is already documented with a guid hint and a pointer to pay_offers_list. The description adds nothing about the parameter beyond the schema, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb+resource ('List the promo/referral codes attached to an offer') and immediately scopes it to one offer. It explicitly names the sibling it is not, pay_offers_user_code, so an agent can distinguish it 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?

Gives an explicit alternative and the condition that selects it: 'To find a specific user's personal referral code, use pay_offers_user_code.' This is a clear when-to-use-this-vs-that routing rule.

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

pay_offers_createPay: offers createAInspect

Create an offer (rewards via convenience flags or raw JSON). Creates an offer of kind discount, trial_extension or referral. A redeemer reward is required, as raw JSON or a shortcut such as trial days or discount percent; referrer reward, eligibility, caps and dates are optional. Discount offers also create a Stripe coupon. Add a code users can enter with pay_offers_add_code.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNoOffer kind: discount, trial_extension, or referral
nameNoOffer display name
statusNoInitial status: active (default), paused, or expired
total_capNoTotal redemption cap (omit for unlimited)
valid_fromNoOffer valid-from (ISO date/time)
descriptionNoOffer description
eligibilityNoEligibility rules as JSON, e.g. {"match":"all","rules":[{"type":"subscribed_to_plan","plan_ids":[1]}]}
valid_untilNoOffer valid-until (ISO date/time)
per_user_capNoPer-user redemption cap (default 1)
redeemer_rewardNoRedeemer reward as JSON, e.g. {"type":"discount","percent_off":50,"duration":"once"}
referrer_rewardNoReferrer reward as JSON (referral offers only)
discount_percentNoShortcut: redeemer reward = N% discount (use --discount-duration for recurrence)
discount_durationNoDiscount duration for --discount-percent: once, forever, repeating (default once)
redeemer_trial_daysNoShortcut: redeemer reward = trial extension of N days
referrer_trial_daysNoShortcut: referrer reward = trial extension of N days
referrer_subscription_daysNoShortcut: referrer reward = subscription extension of N days

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare this is a non-read-only, non-destructive write. The description adds genuinely useful behavior beyond that: discount offers also create a Stripe coupon (an external side effect), and it clarifies the required/optional structure of the payload. This is real added context, though it omits error conditions or permission requirements.

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

Conciseness5/5

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

Four sentences, each carrying distinct payload: purpose, kinds, required/optional structure, and the Stripe-coupon plus next-step pointer. Front-loaded and free of 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 16-parameter mutation tool with no output schema, the description covers the required field, the shortcut-vs-JSON duality, the side effect of coupon creation, and the logical next step. Combined with full schema coverage and annotations, an agent has enough to invoke correctly.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3. The description adds conceptual meaning on top: it identifies redeemer_reward as required, explains that rewards can be given either as raw JSON or via shortcut flags (discount_percent, trial days), and notes referrer reward applies only to referral offers. Useful framing beyond the per-field schema text.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 (an offer), then enumerates the three offer kinds (discount, trial_extension, referral). This distinguishes it cleanly from siblings like pay_offers_update, pay_offers_add_code, and pay_offers_activate 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?

Explains what is required (a redeemer reward) versus optional (referrer reward, eligibility, caps, dates) and routes the agent to pay_offers_add_code for the follow-up step of attaching a code. It does not explicitly contrast when to reach for this versus update or activate, 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.

pay_offers_deletePay: offers deleteA
Destructive
Inspect

Permanently delete an offer and all its codes + redemptions (history is lost; trial bonuses already granted are preserved). Returns how many codes and redemptions were deleted and how many trial bonuses were kept. The offer's Stripe coupon is not removed. To stop redemptions while keeping the history, use pay_offers_pause instead. It changes or deletes existing data, so check with the user before running it.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesOffer id (guid). Find it with pay_offers_list.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations only declare destructiveHint=true; the description goes far beyond by enumerating exactly what is destroyed (codes + redemptions, history lost), what survives (already-granted trial bonuses), and what is left untouched (the Stripe coupon). This is precisely the extra context the annotation bar asks for.

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 destructive action and its consequences, and every sentence carries information (scope, return values, coupon caveat, alternative, safety directive). The final caution sentence lightly overlaps the destructiveHint annotation, keeping it just short of 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?

For a single-parameter destructive tool with no output schema, the description covers blast radius, preserved data, side effects on Stripe, return shape, and the safer alternative. Nothing an agent needs before invoking it is missing.

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

Parameters3/5

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

Schema description coverage is 100% and the single id parameter is fully documented in the schema ('Offer id (guid). Find it with pay_offers_list.'). The description adds nothing about the parameter, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource with scope: 'Permanently delete an offer and all its codes + redemptions'. It also explicitly distinguishes itself from the sibling pay_offers_pause, so an agent can route correctly 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 Guidelines5/5

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

Gives both the exclusion and the alternative: 'To stop redemptions while keeping the history, use pay_offers_pause instead.' It also adds a procedural guideline ('check with the user before running it'), leaving nothing to inference about when this tool is appropriate.

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

pay_offers_getPay: offers getA
Read-only
Inspect

Show one offer by id (guid). Shows one offer in full: kind, description, status, primary code, redeemer and referrer rewards, eligibility rules, per-user and total caps, validity dates and linked Stripe coupon id. Read-only; its codes and redemptions come from pay_offers_codes and pay_offers_redemptions.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesOffer id (guid). Find it with pay_offers_list.

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 openWorldHint=false, so safety is covered; the description adds real value by disclosing the full set of returned attributes and clarifying that codes/redemptions live in sibling tools rather than this response. No pagination or error behavior is mentioned, but for a single-record read that is minor.

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

Conciseness4/5

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

Two sentences, front-loaded with the core action; the long field enumeration is dense but each item is informative rather than filler. Slightly list-heavy but no wasted sentences.

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

Completeness4/5

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

With no output schema, enumerating the returned fields is the right compensation, and the cross-references to pay_offers_codes/pay_offers_redemptions prevent misuse. A brief note on not-found behavior or id format would make it 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 description coverage is 100% and the single id parameter is already documented as 'Offer id (guid). Find it with pay_offers_list.' The description restates the guid type but adds no format, validation, or sourcing detail beyond the schema, so baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource with scope ('Show one offer by id (guid)') and then enumerates the exact fields returned (kind, status, caps, validity dates, Stripe coupon id). An agent can distinguish it from pay_offers_list without opening either schema.

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

Usage Guidelines4/5

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

Implies single-record retrieval by id and routes the agent elsewhere for related data ('its codes and redemptions come from pay_offers_codes and pay_offers_redemptions'), which is a useful when-not signal. It does not explicitly contrast against pay_offers_list in the description body, though the schema param description points there.

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

pay_offers_listPay: offers listA
Read-only
Inspect

List offers. Lists the project's offers (discounts, trial extensions and referral schemes that users redeem with a code): id, name, kind, primary code, redeemer and referrer rewards, and status. Read-only. Offers are separate from subscription plans (pay_plans_list).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, and the description reinforces the safety profile ('Read-only') while adding real value: the exact fields returned (id, name, kind, primary code, rewards, status) and the scoping notion that these are project-level offers. No contradiction with 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.

Conciseness4/5

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

Front-loaded with the core action, then a compact parenthetical that defines the domain, followed by two short clarifying sentences. 'List offers.' followed by 'Lists the project's offers' is mildly redundant, but the whole passage is tight and every other clause 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?

There is no output schema, so the description's explicit enumeration of returned fields is exactly the information an agent would otherwise lack. Combined with the read-only note and sibling differentiation, nothing needed to call this tool 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 takes zero parameters, so the baseline is 4 and there is nothing for the description to disambiguate. The field enumeration it provides effectively compensates by describing what the (empty-input) call yields.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 offers) and immediately defines the domain: discounts, trial extensions, and referral schemes redeemed with a code. It also names the neighbouring concept it is NOT (`pay_plans_list`), so an agent can distinguish it from that sibling without opening a schema.

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

Usage Guidelines4/5

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

The description establishes clear read-only list context and explicitly separates offers from subscription plans, pointing at the sibling that covers the adjacent concept. It stops short of stating when to prefer `pay_offers_get` (single offer) over this bulk listing, so the routing guidance is slightly incomplete.

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

pay_offers_pausePay: offers pauseA
Destructive
Inspect

Pause an offer. Sets an offer's status to paused so none of its codes can be redeemed; past redemptions and rewards already granted stay. Reversible with pay_offers_activate. Prefer this to pay_offers_delete to stop an offer without losing its history. It changes or deletes existing data, so check with the user before running it.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesOffer id (guid). Find it with pay_offers_list.

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 and non-read-only. The description adds concrete behavior: codes become unredeemable, past redemptions and rewards are preserved, the operation is reversible, and user confirmation is advised before mutating 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?

Five short sentences front-load purpose, effect, reversibility, the preferred alternative, and a safety caution. Each sentence carries distinct, useful information for invoking 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?

For a one-parameter mutation with no output schema, the description covers effect, reversibility, alternatives, and caution. The annotations carry safety hints, so nothing material is missing for correct use.

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

Parameters3/5

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

The schema has 100% description coverage for the single required `id` parameter, including guidance to find it with `pay_offers_list`. The description adds no further parameter meaning, so the baseline of 3 applies.

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

Purpose5/5

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

States a specific verb and resource ('Pause an offer') and explains the resulting status change and its effect on codes. It distinguishes the tool from siblings `pay_offers_activate` (reversal) and `pay_offers_delete` (alternative for stopping without history loss).

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 recommends preferring this over `pay_offers_delete` when stopping an offer without losing history, and names `pay_offers_activate` as the reversal tool. This gives the agent both the alternative and the condition that selects it.

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

pay_offers_redemptionsPay: offers redemptionsA
Read-only
Inspect

List redemptions for an offer. Lists who redeemed one offer, paged: the redeemer, the status of their reward, the referrer if any and the referrer's reward status, and when it was redeemed. Read-only; use it to check whether referral rewards were granted.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesOffer id (guid). Find it with pay_offers_list.
pageNoPage number (default: 1)
limitNoItems per page (default: 50)

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so the 'Read-only' restatement is redundant, but the description adds real value by enumerating the payload fields (redeemer, reward status, referrer, redemption time) and noting results are paged. It omits auth requirements, ordering, and default page size behavior.

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 action is front-loaded in the first sentence, followed by payload detail and a usage note. It is a touch wordy with the duplicated 'List redemptions'/'Lists who redeemed', but every sentence carries information.

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

Completeness4/5

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

With no output schema, the description correctly compensates by describing the returned fields, and annotations cover the safety profile. It is nearly complete for a read-only paged list, missing only pagination/ordering expectations.

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

Parameters3/5

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

Schema coverage is 100%, and the schema already documents id, page, and limit with defaults. The description only implies paging ('paged') and adds no syntax or format detail beyond the schema, so the baseline of 3 applies.

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

Purpose4/5

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

The description states a specific verb and resource ('List redemptions for an offer') and details exactly what is returned (redeemer, reward status, referrer, referrer reward status, redemption time), which separates it from pay_offers_list/get. It never names or contrasts a sibling such as pay_offers_user_code, so it stops short of full 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?

'Use it to check whether referral rewards were granted' gives a concrete use context, so an agent knows why it would call this. There is no explicit when-not guidance or named alternative for other offer-scoped lookups.

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

pay_offers_updatePay: offers updateA
Destructive
Inspect

Update an offer (patch — only supplied fields change; kind is immutable). Changes an offer's name, description, rewards, eligibility, caps, dates or status; omitted fields are kept. Setting status to paused or expired stops its codes being redeemed. Changing a discount reward does not update the Stripe coupon made at creation. For status alone, pay_offers_pause and pay_offers_activate are simpler. It changes or deletes existing data, so check with the user before running it.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesOffer id to update. Find it with pay_offers_list.
nameNoOffer display name
statusNoSet status: active, paused, or expired
total_capNoTotal redemption cap (omit for unlimited)
valid_fromNoOffer valid-from (ISO date/time)
descriptionNoOffer description
eligibilityNoEligibility rules as JSON, e.g. {"match":"all","rules":[{"type":"subscribed_to_plan","plan_ids":[1]}]}
valid_untilNoOffer valid-until (ISO date/time)
per_user_capNoPer-user redemption cap (default 1)
redeemer_rewardNoRedeemer reward as JSON, e.g. {"type":"discount","percent_off":50,"duration":"once"}
referrer_rewardNoReferrer reward as JSON (referral offers only)
discount_percentNoShortcut: redeemer reward = N% discount (use --discount-duration for recurrence)
discount_durationNoDiscount duration for --discount-percent: once, forever, repeating (default once)
redeemer_trial_daysNoShortcut: redeemer reward = trial extension of N days
referrer_trial_daysNoShortcut: referrer reward = trial extension of N days
referrer_subscription_daysNoShortcut: referrer reward = subscription extension of N days

TDQS

A4.5/5.0
Behavior5/5

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

Annotations only flag destructive/not-read-only; the description goes well beyond them by disclosing patch semantics (omitted fields kept), the immutability of kind, the side effect that pausing/expiring halts code redemption, and the non-obvious caveat that changing a discount reward does not update the Stripe coupon created at creation.

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 constraint, then side effects, alternatives, and caution in a logical order. The clause enumerating updatable fields ('name, description, rewards, eligibility, caps, dates or status') partially restates the schema, which is the one bit of low-yield text.

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

Completeness4/5

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

For a 16-parameter mutation with no output schema, it covers mutation semantics, side effects, and safety guidance well. It says nothing about what the call returns or error conditions, though with no output schema the return-value burden is lower.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all 16 fields. The description reinforces the mutable field set and the immutability constraint on kind, but adds no syntax or format detail beyond the schema; baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource ('Update an offer') and immediately scopes it with patch semantics ('only supplied fields change; kind is immutable'), which distinguishes it from pay_offers_create and from the narrower pay_offers_pause/activate 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?

Explicitly routes the status-only case to the simpler siblings ('For status alone, pay_offers_pause and pay_offers_activate are simpler') and adds a precondition ('check with the user before running it'). Both when-to-use and when-to-use-something-else are covered.

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

pay_offers_user_codePay: offers user codeAInspect

Look up a user's personal referral code. Returns one user's personal referral code (by numeric user id) with its slug, offer name and redemption count. If the user has no code yet the server generates one, so this call can create a code. To list all codes on one offer, use pay_offers_codes.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_idYesNumeric user id. Find it with users_list.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations declare readOnlyHint=false, and the description explains exactly why: if no code exists the server generates one, so the call can create a code. It also discloses the returned fields (slug, offer name, redemption count), which the absent output schema would otherwise leave unknown. This is meaningful disclosure beyond the annotations rather than a restatement of 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?

Four tight sentences, each earning its place: purpose, return shape, side effect, and alternative. The purpose and the create-on-demand caveat are front-loaded where the agent will see them.

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

Completeness5/5

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

With no output schema, the description supplies the return fields and the write side effect, and it routes to the correct alternative. An agent has everything needed to call this correctly and interpret the result.

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

Parameters3/5

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

Schema description coverage is 100% and the single parameter is documented there (including how to find it with users_list). The description only restates 'by numeric user id', adding no syntax or format detail beyond the schema, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb+resource (look up a user's personal referral code) with explicit scope (one user, by numeric user id). It also names the sibling it is not (pay_offers_codes), so an agent can distinguish the two without opening either schema.

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

Usage Guidelines5/5

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

Gives the exact selection rule and names the alternative: use this to fetch one user's code, use `pay_offers_codes` to list all codes on an offer. No inference required to route correctly among the many pay_* siblings.

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

pay_payment_optionsPay: payment optionsA
Read-only
Inspect

Show available payment providers for a platform/storefront. Shows which payment providers (such as Stripe or Apple in-app purchase) the project offers to an app on a platform (ios, android or web), optionally for an App Store storefront country code. Read-only; use it to see what a client app will be offered.

ParametersJSON Schema
NameRequiredDescriptionDefault
platformNoClient platform: ios, android, or web
storefrontNoStorefront code (ISO 3166-1 alpha-3, e.g. GBR) — optional

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so the 'Read-only' sentence largely repeats structured data. The description does add real context by framing the result as what a client app will be offered on a given platform/storefront, but says nothing about caching, freshness, or return shape.

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?

It is short enough, but the first two sentences are redundant ('Show available payment providers' immediately followed by 'Shows which payment providers...'). The redundant opening costs a point against otherwise efficient structure.

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 read-only lookup with no output schema, the description covers scope, inputs, and intent adequately. It could say more about the shape of the returned provider list, but nothing essential for invocation is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents both platform values (ios/android/web) and the storefront country code. The description restates the platform enum and the optional storefront without adding syntax or example beyond the schema, so baseline 3 applies.

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

Purpose4/5

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

States a specific verb (show) and resource (available payment providers) scoped to a platform/storefront, which is clearly distinct from pay_methods or pay_connect work. It never explicitly differentiates itself from the closest siblings (pay_methods, pay_plans_list), 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 Guidelines4/5

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

Gives a concrete use case: 'use it to see what a client app will be offered', which tells the agent the context (client-facing preview). There is no explicit when-not-to-use or named alternative tool, so it is clear context but not full routing guidance.

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

pay_paymentsPay: paymentsA
Read-only
Inspect

List recent payments. Lists card payments the project has taken from its end users through AnythinkPay (Stripe), with id, amount, currency, status, description and date, paged by page and limit. Read-only; there is no refund tool. For recurring billing records use pay_subscriptions_list.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number (default: 1)
limitNoItems per page (default: 25)

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds real context beyond that: it enumerates the returned fields, states pagination via page/limit, and discloses the negative capability (no refunds). It stops short of noting rate limits or sort order, so it is 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?

Three sentences, front-loaded with the action, then scope, then routing. Efficient overall, though the opening 'List recent payments. Lists card payments...' is a mild restatement that could be merged.

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?

There is no output schema, and the description compensates by naming the returned fields (id, amount, currency, status, description, date). With two optional, fully documented params and annotations covering safety, 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.

Parameters3/5

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

Schema description coverage is 100% and both parameters are already documented with their defaults. The phrase 'paged by page and limit' restates what the schema says and adds no syntax, bounds, or edge-case detail. Baseline 3 applies.

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

Purpose5/5

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

Specific verb+resource ('List recent payments') with the exact scope: card payments taken from end users via AnythinkPay (Stripe). It also names the sibling it is not, `pay_subscriptions_list`, so an agent can distinguish it 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?

Explicit routing: 'For recurring billing records use pay_subscriptions_list.' It also rules out a whole class of intent with 'there is no refund tool,' telling the agent not to search for one. When-to-use and when-not-to-use are both covered.

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

pay_plans_createPay: plans createAInspect

Create a subscription plan (prompts for missing fields). Creates a subscription plan (a recurring price end users can buy), defaulting to gbp, monthly, type web and active, and once Stripe Connect is onboarded syncs a matching Stripe product and price. Nobody is charged until a user subscribes. Set the Apple product id to map an in-app purchase to it.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoDisplay name shown to subscribers
typeNoPlan type (create default: web; update keeps the current value)
amountNoRecurring amount (decimal, in the plan's currency)
currencyNoCurrency code (create default: gbp; update keeps the current value)
inactiveNoMark the plan inactive (hidden from picker)
intervalNoBilling interval: day, week, month, year (create default: month; update keeps the current value)
plan_nameNoInternal plan identifier (e.g. "trial", "monthly", "annual")
referenceNoInternal reference / external id (optional)
tier_rankNoPlan tier rank (update keeps the current value)
trial_daysNoTrial period length in days (optional)
descriptionNoDescription
product_nameNoStripe product display name (optional, defaults to Name)
interval_countNoNumber of intervals per billing cycle (create default: 1; update keeps the current value)
apple_product_idNoApple App Store product id for this plan (optional)
product_descriptionNoStripe product description (optional)
apple_subscription_group_idNoApple subscription group id (optional; auto-filled on first verify)

TDQS

A3.7/5.0
Behavior4/5

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

Annotations declare this is a non-read-only, non-destructive, non-open-world write, so safety is partly covered. The description adds real value beyond that: interactive prompting for missing fields, the defaults applied (gbp, monthly, type web, active), the downstream Stripe product/price sync gated on Connect onboarding, and the reassurance that nobody is charged until a user subscribes.

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

Conciseness4/5

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

Two sentences, front-loaded with the core action and the interactive behavior. The second sentence is a long multi-clause run-on packing defaults, Stripe sync, billing reassurance and Apple mapping, but every clause carries information.

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

Completeness4/5

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

For a 16-param, zero-required, no-output-schema tool, the description covers the key agent questions: defaults, interactive prompting, the Stripe side effect, and billing safety. It could say a bit more about what is returned or about the all-optional parameter set, but it is largely sufficient with annotations covering the write 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?

Schema description coverage is 100%, so the baseline is 3 and the schema already documents every field including its create-defaults. The description only reinforces the same defaults and briefly explains apple_product_id's mapping purpose, adding little beyond the schema text.

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 subscription plan') and even parenthesizes what a plan is ('a recurring price end users can buy'), so the agent knows the domain object. It does not explicitly contrast with sibling pay_plans_update or pay_plans_list, but the create verb makes the 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?

Usage is implied by 'create' and the note about setting the Apple product id to map an in-app purchase hints at a specific use case. However, there is no explicit when-to-use/when-not guidance or reference to the alternative tools (pay_plans_update, pay_plans_list) for evolving or inspecting existing plans.

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

pay_plans_deletePay: plans deleteA
Destructive
Inspect

Delete a subscription plan. Removes a subscription plan so it can no longer be chosen. Existing subscriptions on it, and its Stripe product and price, are left in place and keep billing. To hide a plan reversibly, use pay_plans_update with inactive instead. It changes or deletes existing data, so check with the user before running it.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesPlan id to delete. Find it with pay_plans_list.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already mark this as destructive, but the description adds critical side-effect context: existing subscriptions and the Stripe product/price are left in place and keep billing. It also warns that the tool changes or deletes existing data and should be confirmed with the user first. This goes well beyond the destructiveHint 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, then consequences, then the reversible alternative, then the safety warning. Every sentence earns its place and there is no redundant or vague 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 destructive single-parameter tool with no output schema, the description covers what is deleted, what is left intact, the reversible alternative, and the user-confirmation requirement. Nothing essential for correct invocation is missing.

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

Parameters3/5

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

Schema description coverage is 100% and the single `id` parameter is fully documented in the schema, including how to find it with pay_plans_list. The description does not add any parameter-level meaning beyond the schema, so the baseline of 3 applies.

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

Purpose5/5

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

Starts with a specific verb and resource: 'Delete a subscription plan.' It further clarifies the effect ('so it can no longer be chosen'), distinguishing it from pay_plans_update and sibling tools. An agent can identify exactly what this tool does 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 Guidelines5/5

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

Gives an explicit alternative for a reversible hide: use `pay_plans_update` with inactive instead. It also adds a clear safety condition: 'check with the user before running it.' Both when-to-use and when-not-to-use are covered.

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

pay_plans_getPay: plans getA
Read-only
Inspect

Show one plan by id. Shows one of the project's subscription plans in full, including type, price and interval, trial, Stripe product name and description, reference, Apple product and subscription group ids, and whether it is active. Read-only; browse plans with pay_plans_list.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesPlan id (integer). Find it with pay_plans_list.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so 'Read-only' merely repeats structured data. The real added value is the enumeration of exactly what the call returns, which substitutes for the missing output schema and tells the agent what data it will get back. It still omits error behavior for a non-existent or inaccessible plan 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?

Two sentences, front-loaded with the core action before the detail. The longer field enumeration in sentence two earns its place because no output schema exists to carry that information, and the alternative tool is named last.

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 read tool whose safety profile is fully covered by annotations, the description supplies the return contents, the discovery path for the id, and the sibling to use for browsing. Nothing essential to correct invocation is missing.

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

Parameters3/5

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

Schema coverage is 100% and the single `id` parameter is already documented as an integer discoverable via pay_plans_list. The description's 'by id' adds nothing beyond the schema, so the baseline 3 for full schema coverage is correct.

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

Purpose5/5

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

Specific verb+resource ('Show one plan by id') scoped to a single project subscription plan, and it enumerates the exact contents of the record (type, price/interval, trial, Stripe product name/description, reference, Apple product and subscription group ids, active flag). This clearly separates it from pay_plans_list without opening either schema.

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

Usage Guidelines4/5

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

The description explicitly routes the agent to the alternative: 'browse plans with `pay_plans_list`', and the schema reinforces this with 'Find it with pay_plans_list.' It clearly establishes the single-item vs browse split, though it states no exclusions or preconditions (e.g., what happens if the id is unknown).

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

pay_plans_listPay: plans listA
Read-only
Inspect

List subscription plans. Lists the project's own subscription plans, the recurring prices its end users can subscribe to: id, internal plan name, display name, price per interval, trial days, Apple product id and whether active. Read-only. Not the same as plans, which lists Anythink's hosting plans for projects.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so the description's 'Read-only' is confirmation rather than new information. It does add genuinely useful behavior context by enumerating the returned fields (id, names, price per interval, trial days, Apple product id, active flag), which matters since there is no 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.

Conciseness4/5

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

Front-loaded with the core action, then the field inventory, then the exclusion. The opening two sentences slightly restate each other ('List subscription plans. Lists the project's own subscription plans...'), a minor redundancy in an otherwise tight definition.

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

Completeness5/5

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

With no output schema and no parameters, the description carries the return-shape information itself and does so thoroughly, plus a disambiguation from the similarly named `plans` tool. Nothing an agent needs to call this correctly is absent.

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 there is nothing for the description to disambiguate; baseline is 4. No parameter guidance is needed or 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?

States a specific verb and resource ('List subscription plans') and immediately defines the resource as the project's own recurring prices for end users. It explicitly separates itself from `plans`, so an agent can route correctly without opening either schema.

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

Usage Guidelines4/5

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

Gives a clear retrieval context (the project's own subscription plans, read-only) and an explicit negative exclusion against `plans`. It does not spell out when to prefer pay_plans_get for a single plan, so it stops short of full when/when-not coverage.

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

pay_plans_updatePay: plans updateA
Destructive
Inspect

Update a subscription plan (any --flag overrides; unset = keep). Changes a subscription plan; omitted fields keep their current values, and active or inactive shows or hides it from the plan picker. Changing the amount, currency or interval points the plan at a new Stripe price for new sign-ups; existing subscriptions keep their old price. Prefer inactive over pay_plans_delete. It changes or deletes existing data, so check with the user before running it.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesPlan id to update. Find it with pay_plans_list.
nameNoDisplay name shown to subscribers
typeNoPlan type (create default: web; update keeps the current value)
activeNoMark the plan active
amountNoRecurring amount (decimal, in the plan's currency)
currencyNoCurrency code (create default: gbp; update keeps the current value)
inactiveNoMark the plan inactive (hidden from picker)
intervalNoBilling interval: day, week, month, year (create default: month; update keeps the current value)
plan_nameNoInternal plan identifier (e.g. "trial", "monthly", "annual")
referenceNoInternal reference / external id (optional)
tier_rankNoPlan tier rank (update keeps the current value)
trial_daysNoTrial period length in days (optional)
descriptionNoDescription
product_nameNoStripe product display name (optional, defaults to Name)
interval_countNoNumber of intervals per billing cycle (create default: 1; update keeps the current value)
apple_product_idNoApple App Store product id for this plan (optional)
product_descriptionNoStripe product description (optional)
apple_subscription_group_idNoApple subscription group id (optional; auto-filled on first verify)

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 readOnlyHint=false, and the description adds real substance on top: omitted fields keep current values, active/inactive controls plan-picker visibility, and changing amount/currency/interval repoints the plan to a new Stripe price for new sign-ups while existing subscriptions keep the old price. It does not say whether the change is reversible or what the response returns, but for an update tool the mutation consequences 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.

Conciseness3/5

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

The opening two clauses are near-duplicates — 'any --flag overrides; unset = keep' and 'omitted fields keep their current values' say the same thing — which is wasted space in an otherwise dense paragraph. The destructive warning is correctly placed at the end where it is likely to be read.

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 18-parameter destructive mutation with no output schema, the description covers the update-vs-create semantics, the picker visibility effect, the Stripe price side effect, and the delete alternative. Nothing an agent needs before calling it is missing.

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

Parameters4/5

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

Schema description coverage is 100% across 18 params, so the baseline is 3 and each field is already documented. The description still adds a cross-cutting rule the schema only states per-field ('any --flag overrides; unset = keep'), clarifying the patch semantics for all 18 parameters at once.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 ('Update a subscription plan') and immediately scopes it to the update semantics (any --flag overrides; unset = keep), which cleanly separates it from pay_plans_create and pay_plans_delete in the sibling list. The Stripe-price side effect is also named, so the agent knows this is not a plain field patch.

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 away from a sibling: 'Prefer inactive over `pay_plans_delete`.' It also states a precondition for invoking it at all ('check with the user before running it'), so both when-to-use and when-to-prefer-an-alternative are covered.

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

pay_statusPay: statusA
Read-only
Inspect

Show Stripe Connect account status. Reads the project's Stripe Connect account, the account your end users' card payments are paid into: account id, whether onboarding is complete, and whether charges and payouts are enabled. Read-only. If there is no account or onboarding is unfinished, use pay_connect.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so 'Read-only' is partly redundant, but the description goes further by explaining that the account is the destination of end users' card payments and that status is expressed as discrete onboarding/charges/payouts flags. It does not discuss auth requirements or freshness of the status, so it is good rather than exhaustive.

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

Conciseness5/5

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

Three compact sentences, none wasted: definition, field inventory, safety/behavior cue, and fallback routing. The most decision-relevant content (what it returns, when to go elsewhere) 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 output schema, the description carries the return-value burden and does so adequately by naming the three status fields. For a zero-parameter read tool with annotations covering safety, nothing an agent needs to select or call it 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 takes zero parameters, so there is nothing for the description to disambiguate; baseline 4 applies. No misleading parameter claims are made.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 ('Show Stripe Connect account status') and enumerates exactly what is surfaced: account id, onboarding completeness, charges/payouts enabled. It distinguishes itself from the sibling `pay_connect` by framing itself as the read side of the same domain.

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?

Provides an explicit alternative and the condition that selects it: 'If there is no account or onboarding is unfinished, use `pay_connect`.' This is exactly the routing an agent needs and leaves nothing to inference.

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

pay_subscriptions_by_userPay: subscriptions by userA
Read-only
Inspect

List subscriptions accessible to a user. Lists the subscriptions one project user (by numeric user id) is linked to, with id, name, status, price and created date. Read-only. Use it to look up a customer's subscriptions; pay_entitlement and pay_subscriptions_check_access only report on the signed-in user.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_idYesNumeric user id. Find it with users_list.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so 'Read-only' is largely confirmatory; however the description adds real behavioral value by enumerating the returned fields (id, name, status, price, created date), which is not in the annotations or schema. It omits pagination/result-size limits, so not a full 5.

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

Conciseness4/5

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

Three short sentences, front-loaded with the core action and scoped to user id early. Minor redundancy between 'List subscriptions accessible to a user' and 'Lists the subscriptions one project user is linked to', but nothing 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?

With no output schema, the description usefully discloses the returned fields, and the disambiguation against sibling read tools is complete. It stops short of noting ordering, limits, or behavior when the user has no subscriptions.

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

Parameters3/5

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

Schema coverage is 100% and the single parameter is fully documented including how to obtain it (users_list). The description only restates 'by numeric user id', adding no new syntax or constraint beyond the schema, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource ('List subscriptions accessible to a user') and immediately narrows scope to one project user by numeric id. It also names the sibling tools it is not, so an agent can distinguish it from pay_entitlement and pay_subscriptions_check_access 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?

Gives an explicit use case ('look up a customer's subscriptions') and an explicit exclusion rule: pay_entitlement and pay_subscriptions_check_access only report on the signed-in user. This is exactly the when-to-use / when-not-to-use contrast the dimension asks for.

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

pay_subscriptions_cancelPay: subscriptions cancelA
Destructive
Inspect

Cancel a subscription. Schedules a Stripe subscription to cancel at the end of its current billing period: the customer keeps access until then and is not charged again. Reversible before the period ends with pay_subscriptions_resume. Apple subscriptions are cancelled by the customer in the App Store. To end access now, see pay_subscriptions_force_expire. It changes or deletes existing data, so check with the user before running it.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesSubscription id (guid). Find it with pay_subscriptions_list.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations cover the safety profile (readOnlyHint=false, destructiveHint=true), but the description adds genuinely non-obvious behavior: the cancellation is scheduled rather than immediate, the customer retains access and is not recharged, and the action is reversible via pay_subscriptions_resume. It also flags the user-confirmation requirement. It does not mention auth scopes or rate limits, which keeps it short of perfect.

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 with the core action, then layered: timing semantics, reversibility, sibling alternatives, platform exception, and the destructive-action warning. Every sentence carries distinct information and none repeats the name or title.

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 mutation with no output schema, everything an agent needs is present: what happens to the subscription, when, whether it can be undone, how to escalate to immediate termination, and when the tool doesn't apply (Apple). Nothing material is missing.

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

Parameters3/5

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

Schema description coverage is 100% and the single `id` parameter is fully documented in the schema, including a pointer to pay_subscriptions_list for discovery. The description adds no parameter-level detail, so the baseline 3 for schema-covered parameters is appropriate.

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

Purpose5/5

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

States a specific verb and resource ('Cancel a subscription') and immediately qualifies the semantics: the cancel is deferred to the end of the current billing period. It is clearly distinguishable from pay_subscriptions_force_expire and pay_subscriptions_delete, which are named in the description itself.

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

Usage Guidelines5/5

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

Explicit routing: use pay_subscriptions_resume to reverse before period end, pay_subscriptions_force_expire to end access now, and Apple subscriptions must be cancelled by the customer in the App Store. Both the alternative and the condition that selects each one are given, plus an out-of-band exception case.

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

pay_subscriptions_check_accessPay: subscriptions check accessA
Read-only
Inspect

Check whether the current user has access to a subscription by name. Checks whether the signed-in user (the one this tool runs as) holds a subscription with the given name, optionally requiring a status, and returns whether they have access plus that subscription's id, name and status. Read-only. For another user use pay_subscriptions_by_user.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesSubscription name to check
statusNoRequire a specific status (optional)

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 openWorldHint=false, so 'Read-only' is largely a restatement. However, the description adds genuinely useful behavior beyond them: it clarifies that the check runs as the calling user and specifies the return payload (access boolean plus id, name and status), which matters since there is no 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.

Conciseness4/5

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

Front-loaded with the core action and scope, and the routing hint is short and useful. The second sentence largely re-states the first ('Check whether the current user...' / 'Checks whether the signed-in user...'), which is minor redundancy rather than wasted 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?

With no output schema, the description correctly compensates by describing the returned fields and the boolean result. Scope, required input, optional status filter, and the sibling alternative are all covered; the only meaningful omission is what a false/negative access result implies for follow-up actions.

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

Parameters3/5

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

Schema description coverage is 100%, so both parameters are already documented. The description adds only a light gloss ('by name', 'optionally requiring a status'), which is roughly what the schema's 'Require a specific status (optional)' already conveys; baseline 3 is appropriate.

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

Purpose5/5

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

States a specific verb (check access), resource (subscription), and the exact scope (the signed-in/current user) in the first sentence. It is clearly distinguishable from siblings like pay_subscriptions_get, pay_subscriptions_by_user, and pay_entitlement 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 an explicit routing rule: 'For another user use `pay_subscriptions_by_user`', which is the main selection decision for this tool. It does not address other plausible alternatives (e.g. pay_subscriptions_get for details, pay_entitlement for entitlements), so it stops short of full coverage.

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

pay_subscriptions_deletePay: subscriptions deleteA
Destructive
Inspect

Hard-delete a subscription (project admin). Project-admin recovery tool that permanently removes a stuck or duplicate subscription record and its user links from Anythink. It does not cancel at Stripe or Apple, so the customer can still be billed; use pay_subscriptions_cancel first if billing should stop. It changes or deletes existing data, so check with the user before running it.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesSubscription id (guid). Find it with pay_subscriptions_list.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, but the description adds substantive context beyond them: it deletes user links too, it does NOT cancel at Stripe/Apple so the customer can still be billed, and it is a recovery tool for stuck/duplicate records. This is exactly the extra behavioral 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 and scope, and the consequences/alternatives follow in a logical order. The closing sentence ('It changes or deletes existing data, so check with the user') is mildly redundant with destructiveHint=true, keeping it just short of 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?

For a single-param destructive mutation with annotations and no output schema, the definition covers purpose, prerequisites, billing side effects, and the correct alternative tool. An agent has everything needed to invoke it responsibly.

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

Parameters3/5

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

Schema description coverage is 100% and the schema itself tells the agent the id is a guid discoverable via pay_subscriptions_list. The description adds no parameter-level detail, so the baseline of 3 is correct when the schema carries the full burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 scope: 'Hard-delete a subscription (project admin)' plus the exact purpose ('permanently removes a stuck or duplicate subscription record and its user links'). It is clearly distinguishable from the sibling pay_subscriptions_cancel, which it names explicitly.

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 when-to-use case (stuck or duplicate subscription record) and the when-not/alternative case ('use pay_subscriptions_cancel first if billing should stop'). Nothing is left to inference.

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

pay_subscriptions_eventsPay: subscriptions eventsA
Read-only
Inspect

Show the lifecycle history of a subscription. Returns a subscription's lifecycle history, one row per event with time, event type, source, status change and summary. Read-only; check it to explain a subscription's state before using pay_subscriptions_cancel, pay_subscriptions_resync or pay_subscriptions_relink.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesSubscription id (guid). Find it with pay_subscriptions_list.

TDQS

A4.4/5.0
Behavior4/5

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

The description restates read-only (consistent with readOnlyHint=true) and, more usefully, discloses the return shape — time, event type, source, status change, summary — which no output schema provides. It stops short of stating ordering, volume, or retention limits for the event history, so it is not fully transparent.

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 and short, with the purpose in the first clause and the routing advice last. The opening two sentences partially restate each other ('Show the lifecycle history' / 'Returns a subscription's lifecycle history'), a small redundancy that keeps it out of the top band.

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 no output schema and annotations already covering safety, the description supplies everything missing: what an event row contains, that the call is non-mutating, and when to reach for it versus the mutation siblings.

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

Parameters3/5

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

Schema coverage is 100% and the single 'id' parameter is already documented in the schema, including the hint to obtain it via pay_subscriptions_list. The description adds no extra meaning about the id beyond what the schema says, so the baseline of 3 applies.

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

Purpose5/5

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

The description gives a specific verb and resource ('Show the lifecycle history of a subscription') and then specifies the granularity of the result ('one row per event'), which separates it from the sibling pay_subscriptions_get / pay_subscriptions_list. An agent can tell what this tool 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 Guidelines5/5

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

It states both a positive use case ('check it to explain a subscription's state') and a temporal condition relative to concretely named alternatives (use before pay_subscriptions_cancel, pay_subscriptions_resync, pay_subscriptions_relink). This is explicit when-to-use guidance with named siblings, which is exactly what routing requires.

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

pay_subscriptions_force_expirePay: subscriptions force expireA
Destructive
Inspect

Force-expire a subscription immediately (project admin). Project-admin recovery tool that sets a subscription's status to expired and clears its current period, so the user loses access at once while the record is kept. It changes only Anythink's record, not Stripe or Apple, so it does not stop future charges; use pay_subscriptions_cancel for that. It changes or deletes existing data, so check with the user before running it.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesSubscription id (guid). Find it with pay_subscriptions_list.

TDQS

A4.7/5.0
Behavior5/5

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

Goes well beyond the destructiveHint/readOnlyHint annotations by disclosing that the record is kept, that access is lost at once, and critically that it only mutates Anythink's record and does NOT affect Stripe or Apple billing. That last point materially changes agent decision-making and is not inferable 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.

Conciseness5/5

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

Front-loads the action and the admin requirement, then layers the recovery semantics, the billing-scope caveat, the alternative tool, and the confirmation warning. Every sentence carries distinct 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 single-parameter destructive mutation with no output schema, the description covers actor permissions, exact state change, data retention, external-system caveats, and the safer alternative — everything an agent needs to invoke it correctly and safely.

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

Parameters3/5

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

Schema description coverage is 100% and the single `id` parameter is fully documented in the schema, including a pointer to pay_subscriptions_list for discovery. The description adds no parameter-level meaning beyond that, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb ('force-expire') and resource ('a subscription'), plus the immediate scope ('sets status to expired and clears its current period'). It is clearly distinguishable from the numerous pay_subscriptions_* siblings because it names exactly what state change occurs.

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: names the alternative tool (`pay_subscriptions_cancel`) for stopping future charges, and adds a precondition ('check with the user before running it'). Both when-to-use and when-not-to-use are covered.

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

pay_subscriptions_getPay: subscriptions getA
Read-only
Inspect

Show one subscription by id (guid). Shows one subscription in full: status, price, customer email and name, current billing period, trial end, cancellation and scheduled auto-cancel dates, reference and any checkout URL. Read-only; for how it got into this state use pay_subscriptions_events.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesSubscription id (guid). Find it with pay_subscriptions_list.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, and the description reinforces 'Read-only'. With no output schema, the description adds genuine value by disclosing the returned fields (status, price, customer email/name, billing period, trial end, cancellation dates, reference, checkout URL). It stops short of noting pagination or error behavior, but a single-id lookup has little to disclose there.

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

Conciseness5/5

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

Two tight sentences, front-loaded with the core action and scope, then the field list, then the sibling routing note. No filler sentences; every clause carries information.

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

Completeness4/5

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

For a read tool with one fully-documented parameter and no output schema, the description covers the essentials and compensates for the missing return schema by listing the fields returned. It could be stronger by clarifying where the id comes from in-flow, but it is essentially complete.

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

Parameters3/5

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

Schema description coverage is 100% and the schema already documents the single `id` parameter as a guid found via pay_subscriptions_list. The description restates 'by id (guid)' without adding syntax or format detail, so the baseline of 3 applies.

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

Purpose5/5

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

States a specific verb and resource ('Show one subscription by id (guid)') and then enumerates the exact fields returned, so an agent knows precisely what it gets. It also names the sibling `pay_subscriptions_events` as the contrasting tool, disambiguating it from the 'get' family.

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 use (fetch a single subscription by guid) and an explicit alternative for a related need ('for how it got into this state use pay_subscriptions_events'). It does not, however, route to sibling reads like pay_subscriptions_list or pay_subscriptions_by_user, leaving some sibling selection to inference.

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

pay_subscriptions_listPay: subscriptions listA
Read-only
Inspect

List subscriptions (paginated, optionally filtered by --status). Lists the project's subscriptions (end users' recurring Stripe or Apple purchases of a plan) with id, name, status, price, customer email and created date, paged, optionally filtered by status such as active, trialing or cancelled. Read-only. Non-admins see only subscriptions they are linked to.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number (default: 1)
limitNoItems per page (default: 25)
statusNoFilter by status (e.g. active, trialing, cancelled)

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already cover the read-only safety profile, but the description adds real behavioral context: the fields returned per subscription and the authorization scope ('Non-admins see only subscriptions they are linked to'). It does not mention pagination defaults or rate limits, but the added access-scoping detail 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.

Conciseness3/5

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

The first parenthetical ('paginated, optionally filtered by --status') is immediately repeated in the body ('paged, optionally filtered by status such as...'), so the opening sentence is redundant. The access-scope note at the end is front-of-mind material and adds value, but the duplication costs 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?

There is no output schema, and the description compensates by enumerating the returned fields, which is exactly what an agent needs. Combined with the read-only annotation and the non-admin scoping caveat, it covers the essentials for a paginated read tool, with only pagination behavior left implicit.

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

Parameters3/5

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

Schema description coverage is 100%, so all three parameters are already documented. The description mentions status filtering and lists example values (active, trialing, cancelled), which duplicates the schema's own enum-less example rather than extending it; baseline 3 applies.

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

Purpose4/5

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

States a specific verb (list) and resource (subscriptions), and enumerates the fields returned (id, name, status, price, customer email, created date), so an agent immediately understands the resource. It does not name the nearby siblings that also return subscription data (pay_subscriptions_get, pay_subscriptions_by_user), so differentiation is left partly to inference.

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?

Implied usage is clear (enumerate a project's subscriptions, optionally filtered by status), and the access note about non-admins is useful. However, it never states when to reach for this versus pay_subscriptions_get or pay_subscriptions_by_user, so it falls short of explicit when/when-not guidance.

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

pay_subscriptions_resumePay: subscriptions resumeAInspect

Resume a cancelled subscription. Removes a scheduled cancellation from a Stripe subscription, so it renews and charges the customer again at the end of the current period. Use it to undo pay_subscriptions_cancel before the period ends.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesSubscription id (guid). Find it with pay_subscriptions_list.

TDQS

A4.5/5.0
Behavior4/5

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

Goes well beyond the annotations by disclosing the real consequence: the subscription renews and the customer is charged again at period end. That financial side effect is the key thing an agent must know before invoking this non-read-only tool. It does not cover failure modes (e.g., behavior when no cancellation is scheduled), which keeps it short of a 5.

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

Conciseness5/5

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

Three tight sentences, front-loaded with what the tool does, then the side effect, then the routing guidance. Every sentence earns its place with no restatement of the name 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 one-parameter state-change tool with no output schema, the description supplies purpose, mechanism, side effect, and the alternative tool — everything needed to call it correctly and safely.

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

Parameters3/5

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

Schema description coverage is 100% and the single `id` parameter is already documented as a guid with a discovery path via pay_subscriptions_list. The description adds no further meaning about the identifier, so the baseline of 3 applies.

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

Purpose5/5

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

Specific verb (resume) plus resource (cancelled subscription), with the underlying mechanism spelled out: it removes a scheduled cancellation on a Stripe subscription. It is unmistakably distinct from pay_subscriptions_cancel and pay_subscriptions_force_expire among the many pay_* 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?

Names the exact sibling it inverts ('undo `pay_subscriptions_cancel`') and states the timing constraint ('before the period ends'), so the agent knows both the alternative and the window in which this tool is the right choice.

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

pay_subscriptions_resyncPay: subscriptions resyncA
Destructive
Inspect

Re-sync a subscription from the provider (project admin). Project-admin tool that fetches a Stripe subscription's live state from Stripe and overwrites the stored record, returning the result. Use it when the status shown disagrees with Stripe. Apple subscriptions aren't supported yet and return an error. It changes or deletes existing data, so check with the user before running it.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesSubscription id (guid). Find it with pay_subscriptions_list.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and openWorldHint=false, so the safety profile is partly covered. The description adds genuinely new context: it overwrites the stored record, requires project-admin rights, errors on Apple subscriptions, and advises confirming with the user first. It stops short of detailing irreversibility or the returned payload shape.

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?

Four tight sentences, front-loaded with the action and its mechanism, then the usage trigger, the Apple limitation, and the destructive warning. No filler, though the 'project admin' note is repeated in the first two sentences.

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

Completeness4/5

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

For a one-parameter mutation with no output schema, the description covers purpose, prerequisites (project admin), usage trigger, unsupported provider, and a confirmation warning. The only real gap is that it does not describe the shape of the returned result beyond 'returning the result'.

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

Parameters3/5

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

Only one parameter and schema description coverage is 100% — the schema already documents 'id' and even points to pay_subscriptions_list for discovery. The description adds no further semantics about the id format or lookup, so the baseline of 3 applies.

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

Purpose5/5

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

States a specific verb and resource (re-sync a subscription) and explains the mechanism precisely: fetch the live Stripe state and overwrite the stored record. The 'project admin' qualifier and the Stripe-vs-Apple distinction clearly separate it from siblings like pay_subscriptions_relink or pay_subscriptions_get.

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 an explicit trigger condition ('use it when the status shown disagrees with Stripe') and a when-not ('Apple subscriptions aren't supported yet and return an error'). It does not name a sibling alternative for read-only inspection (e.g. pay_subscriptions_get), so it falls just short of the full when/when-not/alternatives bar.

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

pay_trial_disablePay: trial disableAInspect

Disable the app engagement trial. Turns off the project-wide app engagement trial, so users without a subscription no longer get free app access. Changes only this project setting and leaves the others as they were; undo with pay_trial_enable. Trial days granted by offers are separate and unaffected.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

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

Annotations give the safety profile (readOnlyHint=false, destructiveHint=false, openWorldHint=false), so the bar is lower. The description still adds genuine context: the blast radius (users without a subscription lose free app access), that only this project setting changes, and that the action is reversible via pay_trial_enable. It does not state whether the operation is idempotent or what the response contains, so it falls short of a 5.

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

Conciseness5/5

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

Four short clauses, front-loaded with the purpose before the scoping and reversibility details. Every sentence carries non-redundant information (effect, scope limit, rollback, offers exception) 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?

With no parameters and no output schema, the description carries the full burden and does so: it covers the effect, the scope, the rollback path, and the boundary against offer-granted trials. 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.

Parameters4/5

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

The tool takes zero parameters, so there is nothing for the description to disambiguate and the baseline of 4 applies. The description correctly adds no misleading argument information.

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

Purpose5/5

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

Names a specific verb+resource ('Disable the app engagement trial') and immediately narrows the scope to 'project-wide app engagement trial'. It also explicitly contrasts with the sibling pay_trial_enable and with offer-granted trial days, so an agent can separate it from the other pay_* tools 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?

Tells the agent when this applies (turning off project-wide trial so unsubscribed users lose free app access) and names the exact reversal path ('undo with pay_trial_enable'). It also pre-empts a likely confusion by stating offer-granted trial days are separate and unaffected.

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

pay_trial_enablePay: trial enableAInspect

Enable the app engagement trial. Turns on the project-wide app engagement trial, so users without a subscription get free app access for the longest trial length among active plans. Changes only this project setting and leaves the others as they were; undo with pay_trial_disable. Unrelated to offer trial rewards (pay_offers_create).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare this is a mutation (readOnlyHint=false) that is non-destructive, but the description goes further by disclosing scope ('Changes only this project setting and leaves the others as they were') and the exact reversal path (undo with pay_trial_disable). It doesn't discuss permissions or propagation timing, but the added scoping and reversibility detail is meaningful 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?

Three sentences, front-loaded with the core action first, then the effect on end users, then the undo/disambiguation tail. Every sentence carries distinct information with no 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 parameterless toggle with no output schema, the description covers the action, its user-visible consequence, its scope of change, and its reversal, plus sibling disambiguation. An agent has everything needed to call it correctly and safely.

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, which is the baseline-4 case per the rubric, and there is no parameter syntax for the description to elaborate. Nothing is missing or misrepresented on this dimension.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 ('Enable') and resource ('app engagement trial') and explains the effect precisely: project-wide trial so users without a subscription get free app access at the longest trial length among active plans. It also distinguishes itself from siblings by pointing to pay_trial_disable as the undo and explicitly separating itself from pay_offers_create.

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

Usage Guidelines4/5

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

Provides clear context by naming the counterpart tool (`pay_trial_disable`) for reversal and flagging that this is unrelated to offer trial rewards (`pay_offers_create`), which steers the agent away from a plausible wrong sibling. It stops short of spelling out a full set of preconditions or an explicit 'use this when X' rule, so it isn't a 5.

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

pay_trial_statusPay: trial statusA
Read-only
Inspect

Show whether the trial is enabled and its derived length. Reports whether the project-wide app engagement trial is on and how long it lasts. The length is not set directly: it is the longest trial among active subscription plans, and that plan is named. Read-only; change it with pay_trial_enable, pay_trial_disable or a plan's trial days in pay_plans_update.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds genuinely useful behavior by explaining that the trial length is not set directly but is derived as the longest trial among active subscription plans, and that the plan is named; it does not discuss auth or error behavior, which keeps it short of a 5.

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

Conciseness5/5

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

Four sentences, front-loaded with the purpose, then progressively explaining scope, derivation, and mutation alternatives. Each 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?

No output schema exists, so the description must convey what is returned; it does so by stating the enabled flag, the derived length, and the named source plan. For a simple zero-parameter read tool with read-only annotations, nothing material 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 takes no parameters, so there is nothing for the description to clarify beyond the schema. The baseline for a zero-parameter tool is 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 ('Show whether the trial is enabled and its derived length') and explains exactly what is reported, including that the length comes from the longest active subscription plan. It distinguishes itself from the mutating siblings `pay_trial_enable`, `pay_trial_disable`, and `pay_plans_update`.

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 frames this as the read-only inspection tool and names the alternative tools for changing trial state. It does not state a negative condition or when not to use it, but for an empty-schema read sibling the routing is clear.

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

projects_createCreate a projectAInspect

Provision a new project — a dedicated, isolated Anythink backend instance with its own database, API, auth, and storage. Requires platform login and an active billing account (set one with 'accounts_use'). Provisioning runs asynchronously: the project starts in a Provisioning state, so poll 'projects_list' until it is Active. Returns the new project's id, name, org id, and API URL. Connect to it with 'projects_use'.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesHuman-readable project name, e.g. 'production' or 'my-app'
planIdYesPlan id (UUID) that sets the project's resource tier and pricing. Run the 'plans' CLI command (via the 'cli' tool) to list available plan ids.
regionNoDeployment region slug, e.g. 'lon1'. Defaults to 'lon1'. Choose the region closest to your users.lon1
accountIdNoBilling account id to create the project in. Defaults to the active account set via 'accounts_use'.
descriptionNoOptional free-text description shown in the dashboard

TDQS

A4.7/5.0
Behavior5/5

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

Annotations only declare destructiveHint=false, so the description carries the real behavioral load — and it does: asynchronous provisioning, a Provisioning intermediate state, auth and billing prerequisites, and the exact return fields. That is well beyond what the structured fields 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?

Four sentences, each front-loading the most consequential information in order: what it is, what it requires, how it behaves, what it returns and how to proceed. 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?

With no output schema, the description supplies the return shape (id, name, org id, API URL), and its coverage of async state and prerequisites is complete enough for correct invocation. Nothing an agent needs before calling is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all five parameters including defaults like region='lon1' and accountId from accounts_use. The description adds no parameter syntax or format detail beyond that, so baseline 3 applies.

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

Purpose5/5

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

States a specific verb+resource ('Provision a new project') and then defines what that resource actually is — an isolated backend instance with its own database, API, auth, and storage. An agent can immediately distinguish this from siblings like projects_list, projects_use, and projects_delete.

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

Usage Guidelines5/5

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

Gives explicit prerequisites (platform login, active billing account, with the sibling 'accounts_use' named as the way to set one), the required follow-up ('poll projects_list until Active'), and the connection step ('projects_use'). This routes the agent through the whole lifecycle, not just the call.

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

projects_deleteDelete a projectA
Destructive
Inspect

Permanently delete a project and tear down its backend instance, including its database and stored data. This is destructive and irreversible — always confirm with the user first, and prefer matching by a specific id over a short prefix to avoid removing the wrong project. Requires an active billing account (set one with 'accounts_use'). Returns the deleted project's name and id on success.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesProject to delete — its UUID, name, or a unique prefix. Use a specific id to avoid accidental matches. Find ids via 'projects_list'.
accountIdNoBilling account id the project belongs to. Defaults to the active account set via 'accounts_use'.

TDQS

A4.9/5.0
Behavior5/5

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

Annotations only carry destructiveHint=true; the description adds that the effect is irreversible, what exactly gets destroyed (backend instance, database, stored data), the billing-account prerequisite, and the success return value. This is substantial context 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?

Four sentences, each carrying distinct information — effect, warning, prerequisite, return value — with the destructive/irreversible warning front-loaded. 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?

With no output schema, the description supplies the return value, plus prerequisites, irreversibility, and id-discovery guidance. An agent has everything needed to call this safely.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description ties parameter choice to consequence ('prefer matching by a specific id over a short prefix to avoid removing the wrong project'), giving the id semantics risk-relevant meaning. The accountId default behavior is left to 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?

States a specific verb and resource ('Permanently delete a project') plus the scope of the action ('tear down its backend instance, including its database and stored data'), which clearly separates it from projects_create, projects_list, and projects_use among the 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?

Explicitly says to confirm with the user first, to prefer a specific id over a short prefix, and that an active billing account is required (set via 'accounts_use'). It also points to 'projects_list' as the way to find ids, so prerequisites and alternatives are covered.

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

projects_listList projectsA
Read-only
Inspect

List the projects (provisioned backend instances) in a billing account. Requires platform login and an active billing account (set one with 'accounts_use'). Returns each project's id, name, description, region, org id, status (Initializing/Provisioning/Active/Suspended/Terminated/Error), API URL, and creation date. Use this to find a project's id before connecting with 'projects_use' or removing it with 'projects_delete'.

ParametersJSON Schema
NameRequiredDescriptionDefault
accountIdNoBilling account id to list projects for. Defaults to the active account set via 'accounts_use'.

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, so the safety profile is covered. The description adds valuable context beyond that: authentication requirements (platform login) and prerequisite state (active billing account). It also enumerates return fields including status values, which helps the agent understand the output. It does not mention pagination or rate limits, but that is a minor gap given the annotation coverage.

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 core purpose, then follows with prerequisites, return values, and usage in a logical order. Every sentence earns its place: no repetition, no filler, and the long return list is informative rather than wasteful.

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 tool with one optional parameter and no output schema, the description is complete: it covers prerequisites, return fields (substituting for an absent output schema), and cross-references to sibling tools for next steps. 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.

Parameters3/5

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

Schema description coverage is 100%, so the schema already fully documents the single optional accountId parameter including its default behavior. The description reinforces the 'active billing account' concept but does not add syntax, format, or edge-case details beyond what the schema provides. Baseline 3 is appropriate when the schema does the heavy lifting.

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

Purpose5/5

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

States a specific verb ('List') and resource ('projects'), defines the domain term ('provisioned backend instances'), and distinguishes clearly from sibling tools like projects_create, projects_use, and projects_delete. An agent can tell exactly what this tool does 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 Guidelines5/5

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

Explicitly states when to use it ('to find a project's id before connecting with projects_use or removing it with projects_delete') and lists prerequisites (platform login, active billing account set via accounts_use). Covers both 'when' and 'what you need', leaving nothing to inference.

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

projects_useSwitch the active projectAInspect

Connect to a project and save it as the active profile so the 'cli' tool's data, entities, users, and other commands target it. Resolves the project, then either stores the API key you pass or exchanges a transfer token for project-scoped credentials automatically. Requires an active billing account (set one with 'accounts_use'); the project must be Active (see 'projects_list'). Returns the saved profile name, org id, API URL, and auth method.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesProject to connect to — its name, org id, or UUID (a unique prefix is accepted). Find these via 'projects_list'.
apiKeyNoOptional project API key (ak_...). If omitted, a project-scoped token is generated automatically via transfer-token exchange.
accountIdNoBilling account id the project belongs to. Defaults to the active account set via 'accounts_use'.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations provide only destructiveHint=false, so the description carries the full behavioral burden and does so: it discloses the state mutation (persisting an active profile that redirects later commands), the credential flow (stores passed API key vs. auto-exchanges a transfer token), auth prerequisites, and the return payload. This goes well 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?

Four tight sentences, front-loaded with the primary effect before prerequisites and return values. Dense but every sentence conveys distinct, non-redundant information; only marginal 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?

No output schema exists, yet the description enumerates the returned values (profile name, org id, API URL, auth method) and covers prerequisites, credential handling, and state impact. 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 100%, so the baseline is 3, but the description adds genuine meaning: it explains the interaction between params (if apiKey is omitted a project-scoped token is generated) and that accountId defaults to the active account. This clarifies the optional-parameter tradeoffs beyond the schema text.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 ('Connect to a project and save it as the active profile') and ties the effect to the 'cli' tool's downstream behavior, clearly differentiating it from projects_list/projects_create/projects_delete. An agent knows exactly what this does 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 Guidelines5/5

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

Explicitly names prerequisites (active billing account, set via 'accounts_use') and a precondition (project must be Active, see 'projects_list'), plus routes the agent to the sibling tools for both. When-to-use is fully inferable and alternatives are named.

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

roles_createRoles: createAInspect

Create a new role. Adds a role with no entity permissions yet, so its users can't reach any data until you grant actions with roles_permissions_add. Then give it to people by passing its id as role_id to users_invite. Role names must be unique in the project.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesRole name
descriptionNoOptional description

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, destructiveHint=false and openWorldHint=false, so the mutation/safety profile is covered. The description adds non-obvious behavioral facts beyond that: a freshly created role has no entity permissions and its users cannot reach any data, and role names must be unique within the project. It stops short of saying what happens on a duplicate name or what the response contains, so it is not a full 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?

Four short sentences, zero filler, and the core action is front-loaded before the sequencing and constraint details. Every sentence carries distinct 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?

No output schema exists, and the description implies (but does not state) that the created role's id is what gets passed to `users_invite`. For a two-parameter create tool, purpose, prerequisites, follow-ups and the uniqueness constraint are all covered; only the return payload is left implicit.

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

Parameters4/5

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

Schema coverage is 100% (both `name` and `description` documented), so the baseline is 3. The description earns an extra point by adding a real constraint on `name` that the schema does not state: names must be unique in the project. It says nothing extra about `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?

Opens with a specific verb+resource ('Create a new role') and immediately differentiates itself from siblings by describing the state it produces (a role with no entity permissions), which separates it from roles_permissions_add and roles_delete. An agent can select 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 Guidelines5/5

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

Gives an explicit ordered workflow: create the role, then grant actions with `roles_permissions_add`, then assign it via `users_invite` with its id as role_id. Both the alternative and the downstream steps are named with the condition that selects them.

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

roles_deleteRoles: deleteA
Destructive
Inspect

Delete a role by ID. Removes a role and the permissions it grants. The API refuses while any user still holds the role, and the built-in admin role can't be deleted, so check users_list for its holders first. To take away only some access, use roles_permissions_remove instead. It changes or deletes existing data, so check with the user before running it.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesRole ID to delete. Find it with roles_list.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare destructiveHint=true, but the description adds real behavioral context beyond them: the deletion is blocked while any user holds the role, the built-in admin role is undeletable, and the cascade removes granted permissions. It also advises confirming with the user, which is actionable for an agent operating a destructive tool.

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

Conciseness4/5

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

Front-loaded with the action, then constraints, then the alternative, then the safety prompt – a logical ordering with no filler. The final sentence partially restates the destructiveHint annotation, a minor redundancy, but the rest of the text is tight.

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 no output schema, the description covers everything an agent needs: the effect, the blocking conditions, the prerequisite lookup, and the safer alternative. Nothing material 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 100% and the single `id` parameter is already documented in the schema ('Role ID to delete. Find it with roles_list.'). The description's 'by ID' phrasing adds nothing beyond the structured field, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb+resource ('Delete a role by ID') and immediately clarifies scope ('Removes a role and the permissions it grants'). It also explicitly distinguishes itself from the closest sibling by name (`roles_permissions_remove`), so an agent can route correctly 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?

Provides explicit when-to-use and when-not-to-use guidance: use `roles_permissions_remove` to revoke only some access, and check `users_list` first because the API refuses deletion while a user holds the role. The alternative and the precondition that selects it are both named.

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

roles_listRoles: listA
Read-only
Inspect

List all roles. Lists the project's roles with id, name, description and whether each is active. Access works through roles: each user holds one role, and a role grants actions (read, create, update, delete) per entity. Use roles_permissions_list to see what one role grants.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description goes beyond them by disclosing the returned field set and the underlying access model (one role per user; roles grant read/create/update/delete per entity), which is genuine added context. It stops short of mentioning auth requirements or pagination.

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

Conciseness4/5

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

Three tight sentences, front-loaded with what is listed before the explanatory model and the sibling pointer. The middle sentence on the access model is slightly beyond the minimum needed to call the tool, but it earns its place by explaining what 'role' means.

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

Completeness4/5

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

With no output schema, describing the returned fields is necessary and it does so. No parameters exist to document and annotations cover safety, so the definition is nearly complete; only result-size/pagination behavior is left unstated, which is minor for a roles list.

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 adds no parameter prose and instead spends its words on scope and the domain model.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 ('List all roles') plus the exact returned fields (id, name, description, active flag), and it distinguishes itself from the sibling roles_permissions_list by naming what that tool covers instead. An agent can pick this 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?

It routes the agent explicitly to `roles_permissions_list` for per-role permission detail, which is clear alternative guidance. It does not state any when-not condition (e.g. prefer a filtered lookup for large sets), so it falls just short of the top band.

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

roles_permissions_addRoles: permissions addAInspect

Add entity permissions to a role. Grants a role one or more actions (read, create, update, delete; default read) on one entity, and every user holding the role gains them at once. Its other permissions are kept and actions it already has are skipped. An action with no matching permission for that entity is reported and skipped.

ParametersJSON Schema
NameRequiredDescriptionDefault
entityYesEntity name
actionsNoComma-separated actions: read,create,update,delete (default: read)
role_idYesRole ID. Find it with roles_list.

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false and destructiveHint=false, so safety is covered; the description then adds genuine behavioral context beyond them: other permissions are retained, already-held actions are skipped (idempotent-like), every user on the role is affected at once, and unmatched actions are reported and skipped. This is meaningful disclosure of side effects and edge-case behavior.

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 focused behavioral detail. Four sentences, all relevant, with no filler; slightly more verbose than strictly necessary but each sentence carries information.

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

Completeness4/5

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

For a mutation tool with no output schema and full schema coverage, the description covers the important gaps: what changes, what is preserved, what is skipped, and the blast radius across users. An agent has enough to call it correctly, though it never addresses authentication/permission requirements.

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

Parameters3/5

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

Schema coverage is 100% and the schema already enumerates the allowed actions and the default. The description largely restates this (read/create/update/delete, default read) with only marginal additions like 'on one entity', so it does not materially exceed the structured field documentation.

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 (add) and resource (entity permissions to a role), and clarifies scope (one entity, one or more actions). It does not explicitly name the sibling it contrasts with (roles_permissions_remove / roles_permissions_list), so it stops short of full sibling differentiation, but the purpose is immediately clear.

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: it describes what adding does but gives no explicit when-to-use/when-not guidance or direction to roles_permissions_remove for the inverse. An agent can infer intent from the name and description, but no conditions or exclusions are spelled out.

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

roles_permissions_listRoles: permissions listA
Read-only
Inspect

List entity permissions for a role. Shows, entity by entity, which actions (read, create, update, delete) a role grants. Use it before roles_permissions_add or roles_permissions_remove, or to explain why users with that role can or can't reach some data.

ParametersJSON Schema
NameRequiredDescriptionDefault
role_idYesRole ID. Find it with roles_list.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description adds behavior beyond that: the output is an entity-by-entity matrix of granted actions, which tells the agent what it will actually receive and that the result is suitable for access diagnosis. It does not mention pagination or ordering for roles with many entities, a minor 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?

Two sentences, zero waste. The purpose and output shape are front-loaded, and the usage guidance follows. Nothing could be cut without losing 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?

No output schema exists, but the description informally describes the return content (entity-by-entity action list) and the role_id source is covered by the schema. An agent has enough to call it correctly; only edge cases like pagination for large roles are unaddressed.

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

Parameters3/5

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

Schema description coverage is 100% – the single role_id parameter is documented in the schema with a pointer to roles_list. The description adds nothing about the parameter, so the baseline 3 applies; the schema does the heavy lifting.

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

Purpose5/5

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

States a specific verb and resource ('List entity permissions for a role') and immediately clarifies the granularity: 'Shows, entity by entity, which actions (read, create, update, delete) a role grants.' This distinguishes it from roles_list (role inventory) and roles_permissions_add/remove (mutations) without needing to open 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 Guidelines5/5

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

Gives explicit when-to-use conditions and names the sibling tools it precedes ('Use it before `roles_permissions_add` or `roles_permissions_remove`'), plus a second use case: diagnosing why a user can or cannot reach data. Alternatives are named rather than left to inference.

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

roles_permissions_removeRoles: permissions removeA
Destructive
Inspect

Remove entity permissions from a role. Takes one or more actions (default read) on one entity away from a role; every user holding the role loses them at once, and its other permissions are kept. Actions the role doesn't have are ignored. Use roles_permissions_list first to see what it grants. It changes or deletes existing data, so check with the user before running it.

ParametersJSON Schema
NameRequiredDescriptionDefault
entityYesEntity name
actionsNoComma-separated actions: read,create,update,delete (default: read)
role_idYesRole ID. Find it with roles_list.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is covered. The description adds real value beyond that: blast radius (every user holding the role loses the permission at once), preservation semantics (other permissions kept), and lenient partial-application behavior (actions the role lacks are ignored). It does not cover reversibility, auth requirements, or error behavior for an unknown entity, so a 4 rather than a 5.

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

Conciseness4/5

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

Front-loaded with the core action, then blast radius, then alternatives and caution - a sensible order. The clause 'Takes one or more actions (default read) on one entity away from a role' partially repeats the opening sentence, a minor 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 mutation tool with an output schema absent (so returns need not be explained), full parameter coverage, and annotations carrying the safety flags, the description closes the remaining gaps: what is destroyed, who is affected, and the recommended workflow.

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

Parameters3/5

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

Schema coverage is 100%, so all three parameters (role_id, entity, actions) are already documented, including the comma-separated action list and the 'read' default. The description restates the default and 'one entity' scoping but adds no syntax or format detail beyond the schema, matching the baseline 3.

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

Purpose5/5

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

States a specific verb (remove) and resource (entity permissions from a role), and implicitly scopes it against sibling roles_permissions_add. An agent can immediately tell this is the removal counterpart 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 Guidelines5/5

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

Explicit instructions: use `roles_permissions_list` first to see current grants, and check with the user before running because it changes/deletes data. Names the alternative tool and the condition selecting it, plus a confirmation prerequisite.

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

search_auditSearch: auditA
Read-only
Inspect

Compare configured public-searchable fields vs what public search actually returns. Flags any data leaks. Runs the same query (default *) through public and signed-in search for one entity, sampling 5 records by default, and reports any field public search returned that is not marked publicly searchable, plus marked fields that didn't appear. It ends with an error when a leak is found. Fix leaks with fields_update. Returns JSON.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNoSearch query to use for the audit (default: '*' — wildcard across all records)
entityYesEntity to audit
sampleNoHow many records to inspect (default: 5)

TDQS

A4.1/5.0
Behavior4/5

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

With readOnlyHint=true and openWorldHint=false already declaring the safety profile, the description adds meaningful non-annotation behavior: it runs two searches (public and signed-in), samples 5 by default, and deliberately ends with an error when a leak is found. The error-on-detection behavior is the kind of non-obvious trait annotations 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.

Conciseness4/5

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

The purpose and leak-flagging are front-loaded, then execution behavior, then the fix pointer. The long middle sentence listing what gets reported is dense but earns its place; the trailing 'Returns JSON' is terse rather than wasteful given no 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?

With no output schema, the description does double duty by summarizing what the report contains (leaked fields plus missing marked fields) and noting the error-on-leak exit. Defaults for query and sample are covered, leaving only the exact JSON shape unspecified.

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

Parameters3/5

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

Schema coverage is 100%, so all three parameters are already documented including the `*` and sample=5 defaults. The description largely restates those defaults, adding only the 'for one entity' scoping clarification, so it sits at the baseline where the schema does the heavy lifting.

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

Purpose5/5

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

The description states a specific verb and resource: compare configured public-searchable fields against what public search actually returns, and flags leaks. It clearly distinguishes itself from search_query/search_similar siblings by being a diagnostic leak audit rather than a data-retrieval search.

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 for when to run the audit (verifying public search exposure) and routes remediation by naming `fields_update` as the fix tool. It doesn't explicitly state when NOT to use it or how it differs operationally from `search_query`, so it stops short of full alternative coverage.

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

search_purgeSearch: purgeA
Destructive
Inspect

Purge the search index. Omit ENTITY to purge everything (admin only). Deletes the search index entries for the entity, or for every entity, so search_query and search_similar return nothing for them until search_rehydrate runs. The records in the database are not touched. It changes or deletes existing data, so check with the user before running it.

ParametersJSON Schema
NameRequiredDescriptionDefault
entityNoEntity name. Omit to operate on the entire index.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare destructiveHint=true, so the safety flag is covered, but the description adds substantial context: what is actually destroyed (search index entries only, database records untouched), the admin requirement for a full purge, and that entries stay empty until search_rehydrate runs. That is real behavioral value 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 with the action, then scope, then side effects, then the caution. Every sentence earns its place and nothing is 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 destructive mutation tool with no output schema, the description covers destruction scope, permission requirement, recovery path, and the fact that the underlying data survives. An agent has everything needed to call it responsibly.

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

Parameters4/5

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

Schema coverage is 100% so the entity parameter is already documented, but the description adds meaning the schema lacks: omitting ENTITY purges the entire index and is admin-only, which materially changes how the parameter is used. Marginal but genuine addition over 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?

States a specific verb+resource ('Purge the search index') and immediately distinguishes itself from the read-side siblings by naming search_query and search_similar and the recovery tool search_rehydrate. An agent can place it precisely 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 the key usage condition for the omitted-parameter case ('purge everything (admin only)') and the recovery route via search_rehydrate, plus an explicit 'check with the user before running it' caution. It stops short of naming a when-not-to-use alternative in the sense of a different tool to pick instead, so it's clear context rather than full routing.

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

search_querySearch: queryA
Read-only
Inspect

Run a search query. Searches the search index across all indexed entities or the ones listed, with optional filter (status=published AND category=news), sort, facets and highlighting; use * to browse. The public option searches as an anonymous visitor. To list one entity's records by exact field values, use data_list; if indexed records are missing, use search_rehydrate. Returns JSON.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number (default: 1)
sortNoComma-separated sort fields, e.g. "created_at:desc,id:asc".
textYesSearch text. Use '*' for wildcard / browse all.
facetNoComma-separated fields to compute facet aggregations on.
limitNoResults per page (1-100, default: 20)
filterNoFilter expression, e.g. "status=published AND category=news". Supports _geoRadius and _geoBoundingBox.
publicNoUse the unauthenticated /search/public endpoint (returns only public-marked fields)
entitiesNoComma-separated entity names to search. Default: all indexed entities.
highlightNoEnable result highlighting on matched terms.

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 and openWorldHint=false, so safety is covered; the description goes further by disclosing that `public` hits the unauthenticated endpoint returning only public-marked fields, and that filter expressions support operators. 'Returns JSON' is thin, and there is no mention of pagination limits or behavior when nothing matches.

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 purpose, then the capability list, then the sibling routing – every clause carries information and none is filler. The middle sentence is dense and semi-colon-stacked, which slightly hurts scanability, 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?

With no output schema, the description does say it returns JSON, and it covers filtering, sorting, facets, highlighting, entity scoping and the public/anonymous mode for a 9-parameter tool. It is close to complete, though return-shape and paging behavior are left to the schema fields.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3; the description still adds meaning with a concrete filter example ('status=published AND category=news'), the wildcard/browse convention for `text`, and the anonymous-visitor semantics of `public`. It does not, however, explain `facet` or `highlight` beyond what the schema already says.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 ('Run a search query ... searches the search index') and immediately scopes it to indexed entities or a named subset. It explicitly distinguishes itself from `data_list` (exact field-value lookups) and `search_rehydrate` (missing indexed records), so an agent can route 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?

Provides concrete routing rules: use `data_list` to list one entity's records by exact field values, use `search_rehydrate` when indexed records are missing, and use `*` to browse instead of searching. It also explains the `public` option's semantics (searching as an anonymous visitor), which tells the agent when to prefer it.

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

search_rehydrateSearch: rehydrateAInspect

Rehydrate the search index. Omit ENTITY to rehydrate everything (admin only). Re-sends the entity's records, or every entity's, from the database to the search index, replacing existing entries; it runs in the background and can take a while on large entities. Use it when search_query misses records or after changing which fields are searchable. It changes no data; to clear the index instead, use search_purge.

ParametersJSON Schema
NameRequiredDescriptionDefault
entityNoEntity name. Omit to operate on the entire index.

TDQS

A4.9/5.0
Behavior5/5

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

Goes well beyond annotations by explaining that records are re-sent from the database to the index, existing entries are replaced, the operation runs in the background, may take a while on large entities, changes no data, and that omitting ENTITY requires admin rights. This is rich operational context despite readOnlyHint=false and destructiveHint=false already being declared.

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 with the core action, then scoping, behavior, use cases, and alternatives. Every sentence carries useful information without 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?

With no output schema and only modest annotations, the description fully covers operational behavior, admin constraints, side effects, timing, and the sibling alternative needed to use or avoid 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 coverage is 100% and the schema already describes ENTITY and its omission. The description adds admin-only semantics for the omitted case, which is meaningful beyond the schema, though it does not add syntax or format 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?

States a specific verb (rehydrate) and resource (search index), including scope behavior (entity vs all) and the direct sibling alternative (search_purge). An agent can distinguish it from search_query and search_purge 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 Guidelines5/5

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

Explicitly tells when to use it: when search_query misses records or after changing which fields are searchable. It names the alternative tool for clearing the index instead (search_purge) and notes the admin-only condition for omitting ENTITY.

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

search_similarSearch: similarA
Read-only
Inspect

Find documents similar to a given record (vector search). Takes an entity and a record id and returns the records closest in meaning to it, 10 by default, using vector embeddings in the search index. The public option searches as an anonymous visitor and returns only publicly searchable fields. To find records matching words you supply, use search_query. Returns JSON.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesSource document ID — find documents similar to this one
limitNoMaximum results (default: 10)
entityYesEntity name
publicNoUse the public endpoint (only public-marked fields returned)

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already cover safety (readOnlyHint=true, openWorldHint=false), and the description adds meaningful behavior: vector embeddings in the search index, a default of 10 results, and that the public option acts as an anonymous visitor returning only public fields. It stops short of detailing ranking, score, or pagination 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?

Four front-loaded sentences with no filler: purpose and mechanism first, then default, then the public caveat, then the sibling routing. Every sentence carries distinct 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 read-only vector search with no output schema, the description covers what it returns (records closest in meaning, JSON) and the key mode difference. The absence of any return-shape detail is acceptable given the readOnly annotations and simple result set.

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

Parameters3/5

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

Schema coverage is 100%, so the schema already documents id, entity, limit (default 10), and public. The description restates the default count and the public-field constraint but adds no syntax or format detail beyond the schema, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource ("Find documents similar to a given record"), identifies the mechanism (vector search), and explicitly distinguishes itself from the sibling search_query. An agent can select this 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?

Names the alternative tool (search_query) and the exact condition that routes to it ("To find records matching words you supply"), plus clarifies the public/anonymous mode. When-to-use is explicit rather than inferred.

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

secrets_createSecrets: createAInspect

Store a new secret value. Stores the value encrypted in the project under the key, for workflows to reference as {{ $anythink.secrets.KEY }}; it can never be read back. Pass it in value, as the hidden prompt can't be answered by a tool. To change an existing secret use secrets_update.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYesSecret key name (e.g. CLAUDE_API_KEY, STRIPE_SECRET_KEY)
valueNoSecret value (use for non-interactive / scripted usage)

TDQS

A4.9/5.0
Behavior5/5

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

Annotations cover the non-destructive, non-open-world safety profile, and the description adds material context beyond them: the value is encrypted, scoped to the project, referenced as {{ $anythink.secrets.KEY }}, and can never be read back. That write-once permanence is exactly the kind of trait an agent needs 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.

Conciseness5/5

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

Three short sentences, front-loaded with the core action, then the storage/reference behavior, then the sibling routing. 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 mutation with annotations present and no output schema, the description covers everything needed: durability, encryption, reference syntax, required inline value, and the correct alternative 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 coverage is 100%, so the baseline is 3, but the description adds real meaning: it explains why `value` must be supplied inline (the hidden prompt cannot be answered by a tool) and shows how the `key` becomes the reference token in workflows.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 ('Store a new secret value') and immediately scopes it against the sibling 'secrets_update'. An agent can distinguish create from update/list/delete 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 Guidelines5/5

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

Explicitly routes the agent: use this to create, use `secrets_update` to change an existing secret, and pass the value in `value` rather than relying on a prompt. Both the when and the alternative are named.

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

secrets_deleteSecrets: deleteA
Destructive
Inspect

Delete a secret. Removes the key and its encrypted value for good; workflows that reference it as {{ $anythink.secrets.KEY }} fail until it is created again. To change a value, use secrets_update instead. It changes or deletes existing data, so check with the user before running it.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYesSecret key name to delete

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare destructiveHint=true, but the description goes further with the actual blast radius: the encrypted value is gone permanently and any workflow referencing {{ $anythink.secrets.KEY }} breaks until the secret is recreated. That downstream-failure disclosure plus the user-confirmation instruction is exactly the extra context 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.

Conciseness5/5

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

Four short sentences, front-loaded with the action, then impact, then the alternative, then the safety note. No filler and each sentence carries distinct 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 destructive delete with no output schema, the definition covers action, irreversibility, downstream effect, the sibling alternative, and a confirmation requirement. Nothing material 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 100% for the single `key` parameter, so the schema already documents it. The description only incidentally hints at key naming via the {{ $anythink.secrets.KEY }} template reference; it adds no format or constraint detail. Baseline 3 is appropriate when the schema does the work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 a secret") and immediately disambiguates from the sibling secrets_update, which also modifies the same resource. An agent can tell which secrets tool to pick 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 Guidelines5/5

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

Explicitly names the alternative and the condition that selects it: "To change a value, use `secrets_update` instead." It also gives a precondition-style guideline — confirm with the user before running — so when-to-use and when-not-to-use are both covered.

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

secrets_listSecrets: listA
Read-only
Inspect

List all secret keys (metadata only, values never shown). Shows each secret's key, the users it is assigned to, and when it was created and updated; values are never returned. Use it to check a key exists before referencing it in a workflow as {{ $anythink.secrets.KEY }}, or before secrets_update or secrets_delete.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description adds the important behavioral fact that secret values are never returned (metadata only), which a caller could not infer from annotations. It doesn't cover pagination or permission requirements, 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?

Purpose is front-loaded and the sentences are short and useful. Minor redundancy: 'values never shown' and 'values are never returned' convey the same point twice, which slightly dilutes the otherwise tight 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?

With no output schema and no parameters, the description carries the return-shape burden well: it names the fields returned (key, assigned users, created/updated timestamps) and emphasizes that values are excluded. 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. The description correctly implies a no-argument full listing with no filtering, and there is nothing further to document.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 (secret keys), and immediately scopes it as metadata only. It is clearly distinguishable from siblings secrets_create/update/delete as the read-only counterpart.

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

Usage Guidelines5/5

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

Explicitly states when to use it: to verify a key exists before referencing it as {{ $anythink.secrets.KEY }} in a workflow, or before secrets_update/secrets_delete. It names the relevant alternatives and the conditions that select them.

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

secrets_updateSecrets: updateA
Destructive
Inspect

Rotate (overwrite) an existing secret value. Overwrites the stored value of an existing key, for example to rotate a credential; the old value is lost and workflows referencing the key use the new one from their next run. Pass the new value in value. Use secrets_create for a key that doesn't exist yet. It changes or deletes existing data, so check with the user before running it.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYesSecret key name
valueNoSecret value (use for non-interactive / scripted usage)

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 readOnlyHint=false, but the description goes further: it explains exactly what is destroyed (the old value is lost) and the runtime consequence (workflows referencing the key use the new value from their next run). That is real behavioral context beyond the safety 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?

Three short sentences: what it does, what it destroys, and the alternative/caution, all front-loaded with no filler. Every sentence carries information the agent needs.

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 no output schema, the description covers the action, the destructive side effect, the downstream workflow impact, the sibling alternative, and a user-confirmation caveat. 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.

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3; the description nudges above it by clarifying the meaning of `value` in context ('Pass the new value in value'), i.e. it is the replacement credential, not an identifier. It does not, however, clarify the key must pre-exist here versus 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?

States a specific verb and resource ('Rotate (overwrite) an existing secret value') and immediately disambiguates from the closest sibling by naming `secrets_create` for the non-existent-key case. An agent can distinguish this from secrets_list/secrets_delete without opening a schema.

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

Usage Guidelines5/5

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

Explicitly names the alternative ('Use `secrets_create` for a key that doesn't exist yet') with the condition that selects it, and adds a when-to-be-careful rule ('check with the user before running it'). Both routing decisions an agent faces are covered.

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

settings_cors_addSettings: cors addAInspect

Add an allowed origin (clears the CORS cache). Adds a web app origin (scheme, host and optional port, no path) or a wildcard such as https://*.example.com, so browser apps there can call the project's API straight away. A wildcard over shared hosting such as vercel.app trusts other people's sites, so check with the user first. An origin already listed is left as it is.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesApplication origin, e.g. https://app.example.com or a wildcard like https://*.example.com

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnly=false, destructive=false, openWorld=false, but the description adds real behavioral traits beyond them: the CORS cache is cleared on add, the operation is idempotent, and wildcards over shared hosts carry a security implication. It does not mention permissions/auth needs, 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-loads the core action, then layers format rules, the wildcard warning, and the idempotency caveat — each sentence earns its place. Slightly dense 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 single-parameter mutation with annotations and no output schema, the description is nearly complete: purpose, format, side effect, and safety caveat are all covered. Only permission/auth prerequisites are absent.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3; the description adds genuine meaning by specifying the expected shape ('scheme, host and optional port, no path') and the wildcard form, clarifying what a valid origin string looks like beyond the schema's examples.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 an allowed origin') with the concrete effect that browser apps can call the project's API. Easily distinguished from siblings settings_cors_list and settings_cors_remove without opening a schema.

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

Usage Guidelines4/5

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

Gives clear context for when to use it (enabling a web app origin) and an explicit caution for the wildcard-over-shared-hosting case ('check with the user first'), plus the idempotency rule ('an origin already listed is left as it is'). It does not explicitly steer to settings_cors_remove/list, 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.

settings_cors_listSettings: cors listA
Read-only
Inspect

List allowed application URLs. Shows the web app origins allowed to call this project's API from a browser. Anythink's own domains and localhost are always allowed and aren't listed. Change the list with settings_cors_add and settings_cors_remove.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnlyHint=true, openWorldHint=false), so the bar is lower; the description adds real value by disclosing that Anythink's own domains and localhost are always allowed and are deliberately omitted from the output. That implicit-entry behavior is not derivable from annotations or schema. It doesn't mention pagination or output format, which is why it isn't a 5.

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

Conciseness5/5

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

Three short sentences, front-loaded with what is listed, then the important omission caveat, then the routing to mutation siblings. 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?

With no output schema, the description carries the return-value burden and does so: it explains what the list contains, what is intentionally excluded, and where to change it. An agent has everything needed to call and interpret this 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?

Zero parameters, so the baseline is 4; there is nothing for the description to disambiguate beyond what the empty schema already establishes.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 (List) plus resource (allowed application URLs / web app origins allowed to call this project's API), immediately scoped to the project's API. It also names the two sibling tools that mutate the same list, so an agent can tell it apart from settings_cors_add/remove without opening schemas.

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

Usage Guidelines4/5

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

The sentence 'Change the list with `settings_cors_add` and `settings_cors_remove`' clearly routes mutations elsewhere, implying this tool is the read/inspection path. It stops short of an explicit 'use this when you need to audit or display allowed origins' statement, but the alternative is named.

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

settings_cors_removeSettings: cors removeA
Destructive
Inspect

Remove an allowed origin (clears the CORS cache). Removes an origin from the allow-list and clears the CORS cache, so browser apps on it are blocked straight away. Pass the origin as settings_cors_list shows it; a value not in the list is reported and nothing changes. It changes or deletes existing data, so check with the user before running it.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesApplication origin, e.g. https://app.example.com or a wildcard like https://*.example.com

TDQS

A4.6/5.0
Behavior5/5

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

Beyond the destructiveHint annotation, the description discloses real behavioral traits: the CORS cache is cleared so blocked apps take effect immediately, and an unknown origin is reported as a no-op rather than silently failing. That consequence-level detail is exactly what annotations alone 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 action and its consequence, but there is mild redundancy: the parenthetical '(clears the CORS cache)' is restated in full in the following sentence, which costs a little space.

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 tool with full annotation coverage and no output schema, the description covers action, side effect, input sourcing, failure behavior, and user-confirmation guidance. 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?

Schema coverage is 100%, so the baseline is 3; the description adds meaning by specifying that the origin must be passed exactly as settings_cors_list shows it and that non-matching values are reported. This clarifies accepted values beyond the schema's format 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?

States a specific verb (remove) and resource (an allowed origin / CORS allow-list entry), and it does so in a way that distinguishes it from siblings like settings_cors_add and settings_cors_list. An agent can tell immediately what this tool does 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 implicitly directs the agent to call settings_cors_list first to obtain the exact origin value and warns to confirm with the user before running a destructive operation. It lacks an explicit when-not framing, but the usage context is clear.

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

settings_getSettings: getA
Read-only
Inspect

Show all project settings. Shows the project's name, description, email confirmation and sign-up rules, default role for new users, group RLS, AI mode and model, payment redirect URLs, trial settings and allowed CORS origins. Secret-like values such as google_maps_key show only as set. Its field names are the keys settings_set takes. Returns JSON.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

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 openWorldHint=false, so the safety profile is covered. The description adds genuinely non-obvious behavior: secret-like values such as google_maps_key are redacted to show only as set, and the response format is JSON.

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, followed by the field enumeration that earns its place by telling the agent what it will receive. The field list is long but informative rather than 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?

With no output schema and no parameters, the description carries the return-value burden and does so adequately by listing the settings categories and noting redaction. A brief note on structure/nesting would make it fully complete.

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

Parameters4/5

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

The tool takes zero parameters, so there is nothing for the description to disambiguate; baseline 4 applies. The mention of settings_set key names is a useful cross-tool hint but not a parameter concern.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 ('Show all project settings') and enumerates exactly which settings are included, so an agent distinguishes it immediately from sibling writers like settings_set or settings_cors_add.

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 'Show all project settings' and the pointer that its field names are the keys settings_set takes, but there is no explicit when-to-use vs. when-not guidance or named alternative for reading subsets (e.g. settings_cors_list).

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

settings_setSettings: setA
Destructive
Inspect

Set a single project setting. Changes one setting, named as in settings_get (for example allow_registrations, default_role_id, ai_mode or payment_success_url), and keeps the rest; booleans take true or false. Opening sign-ups, turning off email confirmation or giving new users an admin role goes through without a further prompt. For CORS origins use settings_cors_add. It changes or deletes existing data, so check with the user before running it.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYesSetting key (run 'anythink settings get' to see them). For CORS URLs use 'settings cors'.
valueYesNew value

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 and readOnlyHint=false, so the safety profile is known; the description still adds real value by disclosing the partial-update semantics ('keeps the rest'), the value format ('booleans take true or false'), and the fact that some changes (sign-ups, email confirmation, admin role) apply without a further prompt. It stops short of describing return values or reversibility, hence 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.

Conciseness5/5

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

Three tight sentences: purpose first, alternatives and value syntax next, destructive-confirmation caveat last. No filler and nothing 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 2-parameter mutation with full schema coverage and annotations carrying the destructive/read-only profile, the description supplies everything missing: key examples, boolean formatting, the CORS sibling route, and a confirmation requirement. No output schema exists, so return values need not be explained.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds meaning the schema does not: concrete example key names and the fact that booleans are passed as true/false even though 'value' is typed as a plain string. That clarifies the loose typing the schema leaves implicit.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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+resource pair ('Set a single project setting') and immediately scopes it against the sibling it is not: 'For CORS origins use settings_cors_add'. The examples of valid keys (allow_registrations, default_role_id, ai_mode, payment_success_url) and the reference back to settings_get make the target of the operation 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 names the discovery path ('named as in settings_get'), the sibling alternative for the CORS case ('For CORS origins use settings_cors_add'), and an explicit pre-condition to confirm with the user before running. An agent knows both when to pick this tool and when to route elsewhere.

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

signupSign up for AnythinkAInspect

Register a brand-new Anythink platform account with email and password. Use this only when the user has no account yet; if they already have one, use 'login' instead. This creates the top-level user identity — it does not create a billing account or project (do that with 'accounts_create' and 'projects_create' after logging in). On success the user may need to click an email confirmation link before 'login' works; tell them to confirm, then call 'login'.

ParametersJSON Schema
NameRequiredDescriptionDefault
emailYesEmail address — becomes the login identifier and must be unique
lastNameYesUser's last name
passwordYesPassword for the new account; choose a strong value
firstNameYesUser's first name
referralCodeNoOptional referral code, if the user was invited by another customer

TDQS

A4.4/5.0
Behavior4/5

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

Annotations only declare openWorldHint and destructiveHint=false, so the description adds real value: the email-confirmation prerequisite before 'login' works, and the explicit statement that it creates only the top-level user identity and not a billing account or project. It stops short of describing the return payload or uniqueness failure behavior, so a 4 rather than 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 the core action, then immediately addresses the routing decision, the scope boundary, and the post-success step. Four sentences, each carrying distinct operational information 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 an unauthenticated, side-effecting call with no output schema, the description covers the critical success path (email confirmation) and the boundary with related tools. It does not describe what the call returns or error cases, which is a minor gap given the low overall complexity.

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

Parameters3/5

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

Schema description coverage is 100%, so all five parameters, including the referralCode default and the email uniqueness constraint, are already documented. The description mentions email and password but adds no syntax or format detail beyond the schema, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource ('Register a brand-new Anythink platform account with email and password') and explicitly scopes it against the sibling 'login'. It also carves out what it is not, distinguishing it from 'accounts_create' and 'projects_create'.

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 condition for use ('only when the user has no account yet'), the negative condition with the alternative ('if they already have one, use login instead'), and names the follow-on tools for adjacent tasks. Nothing is left to inference.

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

users_deleteUsers: deleteA
Destructive
Inspect

Delete a user by ID. Removes the user from this project, so they can no longer sign in to it or use their role's access. The role and its permissions stay in place for everyone else. Make sure you have the right person with users_get first. It changes or deletes existing data, so check with the user before running it.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesUser ID to delete. Find it with users_list.

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, so the safety profile is covered. The description adds real context beyond that: the removal is scoped to this project, the user loses sign-in and role access, and the role/permissions remain intact for everyone else. Only irreversibility of the deletion itself is not stated.

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 sentences, front-loaded with the core action, followed by consequences, then prerequisites and a safety check. No filler; every sentence adds a distinct fact an agent needs.

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 tool with no output schema, the description covers action, scope of effect, what is preserved, prerequisite verification, and the confirmation requirement. 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.

Parameters3/5

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

Schema description coverage is 100%, so the `id` parameter is already fully documented in the schema (including where to find it via users_list). The description's 'by ID' adds nothing beyond what the schema provides; baseline 3 applies.

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

Purpose5/5

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

States a specific verb (Delete) and resource (user) with explicit scope: removal from this project. It clearly separates this from siblings like users_get, users_list, and users_invite, and the ID-based targeting makes the operation 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?

Names a concrete prerequisite ('Make sure you have the right person with `users_get` first') and instructs confirmation before running. It lacks an explicit when-not-to-use clause (e.g., pointing to roles_delete for permission changes), but the pre-step guidance is clear and actionable.

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

users_getUsers: getA
Read-only
Inspect

Get a user by ID. Shows one user's name, email, role, whether they have confirmed their invitation and when they were created. Use it to check one person's role; use users_list to scan everyone, and roles_permissions_list to see what their role allows.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesUser ID. Find it with users_list.

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 and openWorldHint=false, so the safety profile is covered. The description adds genuine value beyond that by disclosing the shape of the returned record (name, email, role, invitation status, creation date). It does not mention error behavior for an unknown ID, which keeps it short of a 5.

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

Conciseness5/5

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

Two sentences, no waste, with the core action front-loaded and the routing guidance immediately after. Every clause carries 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?

No output schema exists, but the description compensates by listing the fields returned. For a one-parameter read tool with a full annotation profile, 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.

Parameters3/5

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

There is a single parameter with 100% schema description coverage, and the schema already tells the agent to find the ID via users_list. The description adds only 'by ID', so the baseline of 3 for schema-covered parameters is appropriate.

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

Purpose5/5

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

States a specific verb and resource ('Get a user by ID') and enumerates the returned fields (name, email, role, invitation confirmation, creation date). It also names the siblings it is not, so an agent can distinguish it from users_list and roles_permissions_list without opening a schema.

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

Usage Guidelines5/5

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

Explicitly routes the agent: use this to check one person's role, use `users_list` to scan everyone, and `roles_permissions_list` to see what a role allows. Both the when-to-use and the alternatives are named.

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

users_inviteUsers: inviteAInspect

Create a user and send an invitation email. Adds the person to this project with the role given by role_id, then emails them an invitation to confirm their account. Always pass role_id from roles_list: the API rejects an invite without an existing role, and administrator roles can't be given this way. Check users_list first so nobody is invited twice.

ParametersJSON Schema
NameRequiredDescriptionDefault
emailYesUser email address
role_idNoRole ID to assign. Find it with roles_list.
last_nameYesLast name
first_nameYesFirst name

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, destructiveHint=false and openWorldHint=true, so the description is not needed for the safety profile. It still adds real behavioral context beyond them: the API rejects an invite lacking an existing role, administrator roles cannot be assigned through this path, and an email is dispatched. It does not cover failure modes or idempotency beyond the role constraint.

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 with the primary action, followed by side effects and then prerequisites in four tight sentences. Every clause carries a distinct instruction (role source, rejection condition, admin exclusion, dedup check) 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?

No output schema exists, and the description covers what the call does and its preconditions adequately. One gap: role_id is not marked required in the schema yet the description says 'Always pass role_id', a tension an agent may have to resolve; it also says nothing about the returned user record or invitation state.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. The description exceeds that by constraining role_id to values obtained from roles_list and by ruling out administrator roles, information the schema does not carry. It adds no format or constraint detail for email/first_name/last_name, which the schema already documents.

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 user and send an invitation email') and clarifies the side effects: the person is added to this project with role_id and then emailed to confirm. It is clear what the tool does, though it never distinguishes itself from near-name siblings like accounts_create or signup, which an agent could plausibly confuse it with.

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 concrete preconditions rather than generic advice: always source role_id from roles_list, and check users_list first to avoid duplicate invites. That is actionable routing guidance, though it stops short of stating when to prefer this over alternatives such as accounts_create or signup.

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

users_listUsers: listA
Read-only
Inspect

List all users. Shows each person who can sign in to this project with their id, name, email, role and whether they have confirmed their invitation. Use it to find a user's id, or to see who holds a role before changing it with roles_permissions_add or deleting it with roles_delete.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description adds value by disclosing the exact shape of returned data (id, name, email, role, invitation confirmation status), which is 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero filler, with the core purpose front-loaded before the usage guidance. Every clause carries 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?

No output schema exists, so the description correctly compensates by enumerating returned fields; annotations cover the safety profile and there are no parameters to document. Nothing needed to invoke this read-only list tool 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 takes zero parameters, so per the rubric baseline is 4. The description's field listing describes output, not inputs, and no parameter semantics are needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List all users') and adds scope ('each person who can sign in to this project') plus the returned fields. The naming, juxtaposed with siblings users_get/users_me, makes the all-vs-single distinction clear, though the description never explicitly contrasts them.

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 concrete usage contexts ('find a user's id', 'see who holds a role before changing it') and names the downstream tools roles_permissions_add and roles_delete. No explicit when-not guidance or alternative-tool routing (e.g. vs users_get) is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

users_meUsers: meA
Read-only
Inspect

Show the currently authenticated user. Shows the user you are signed in as in this project: id, name, email, role, whether confirmed and when created. Your role decides what every other tool may do, so check it when a call is refused; use users_get to look up someone else.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds real behavioral value beyond that: it enumerates the returned fields and explains that role determines what every other tool may do, which is the diagnostic context an agent needs. It stops short of stating auth prerequisites or error shapes, so it is strong but not exhaustive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the identity of the resource, then the return fields, then the routing rule to `users_get`. Every sentence carries distinct information and none 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?

There is no output schema, so the description must carry the return shape, and it does (id, name, email, role, confirmed, created). Combined with the readOnly annotation and the role-based usage rationale, 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?

Zero parameters, so there is no parameter semantics to document and the baseline is 4. The description correctly spends no words on inputs and instead clarifies what the parameterless call returns.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 ('Show the currently authenticated user') and immediately enumerates the returned fields. It explicitly distinguishes itself from `users_get` ('to look up someone else'), so an agent can separate it from the sibling without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit when-to-use trigger ('check it when a call is refused' because role gates every other tool) and names the alternative for the other case (`users_get`). Both the use case and the exclusion are stated, not inferred.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

workflows_createWorkflows: createAInspect

Create a new workflow. Creates the workflow with one trigger and no steps: Manual needs entity, Timed needs cron, Event needs entity plus an event (EntityCreated by default) and an optional filter, and Api needs api_route. It stays disabled unless enabled is set; add steps with workflows_step_add, then turn it on with workflows_enable.

ParametersJSON Schema
NameRequiredDescriptionDefault
cronNoCron expression, required for a Timed trigger (e.g. '0 9 * * *')
nameYesWorkflow name
eventNoEvent for an Event trigger: EntityCreated (default), EntityUpdated, EntityDeleted, UserRegistered, PaymentSucceeded and others. Not case-sensitive
entityNoEntity name, required for an Event or Manual trigger
filterNoFilter expression JSON for Event trigger (fires only when predicate matches the row)
enabledNoEnable workflow immediately after creation
triggerNoTrigger type: Manual (default), Timed, Event, Api. Not case-sensitive
api_routeNoAPI route, required for an Api trigger
descriptionNoWorkflow description
filter_fileNoPath to a file containing the filter expression JSON

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare a non-read-only, non-destructive write, but the description adds crucial behavioral context: the workflow stays disabled unless enabled is set, it is created with exactly one trigger and zero steps, and each trigger type has specific parameter requirements. This goes well beyond the 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-loads the core action and then packs trigger requirements, default state, and next steps into a single dense second sentence. It earns its length but the second sentence is run-on enough to benefit from slight restructuring.

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 the creation lifecycle well, including the disabled default and the follow-up steps. It does not explain how to reference the newly created workflow for subsequent steps (e.g., whether an ID is returned), a minor gap given there is no output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and each parameter's schema description already documents its trigger-specific requirements and defaults. The description restates these conditions (e.g., 'Manual needs entity', 'Timed needs cron') but adds no new syntax or constraints 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?

States a specific verb and resource ('Create a new workflow') and immediately scopes it to a workflow with one trigger and no steps. It distinguishes itself from siblings by naming workflows_step_add and workflows_enable as the next steps in the lifecycle.

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 covers when to use this tool (initial creation of a trigger-only workflow), what it cannot do (no steps), and names the alternative tools for adding steps and enabling. The trigger-type requirements further specify invocation conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

workflows_deleteWorkflows: deleteA
Destructive
Inspect

Delete a workflow. Removes the workflow with its triggers and steps, so it stops running and can't be restored. To stop it for a while use workflows_disable; to keep a copy first, use workflows_export. It changes or deletes existing data, so check with the user before running it.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesWorkflow ID to delete. Find it with workflows_list.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare destructiveHint=true and readOnlyHint=false, so the safety class is already known; the description goes further by disclosing the cascade (triggers and steps are removed), that the workflow stops running, and that the operation is irreversible ("can't be restored"). That irreversibility and blast-radius detail is not recoverable 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences, each carrying distinct payload: action, consequence, alternatives, and safety prompt. The destructive outcome is front-loaded 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 one-parameter destructive tool with no output schema, everything an agent needs is present: what is deleted, what else is destroyed, that it is irreversible, safer alternatives, and a confirmation expectation. Nothing material 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 100% and the single `id` parameter already documents both its meaning and how to find it (workflows_list). The description adds no format, type, or lookup nuance beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource ("Delete a workflow") and immediately qualifies scope by stating the cascade: triggers and steps go with it. It is unmistakably distinct from siblings like workflows_disable, workflows_export, and workflows_update.

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 alternatives with their selecting conditions: `workflows_disable` for temporary stops and `workflows_export` when a copy is wanted first. It also adds a procedural precondition (confirm with the user), which is exactly the when-to-use guidance a destructive tool needs.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

workflows_disableWorkflows: disableAInspect

Disable a workflow. Stops the workflow running from its triggers but keeps its triggers, steps and job history, so workflows_enable turns it back on. Prefer this to workflows_delete when a workflow should only stop for a while.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesWorkflow ID. Find it with workflows_list.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare a non-read-only, non-destructive mutation, and the description goes beyond that by disclosing exactly what is preserved (triggers, steps, job history) and that the change is reversible via workflows_enable. That is precisely the behavioral context structured fields 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the action, then state effects, then the routing rule. No redundancy and every sentence carries distinct 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 state-toggle with no output schema, the description covers purpose, reversibility, retained state, and sibling alternatives. 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.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single `id` parameter already documents both its type and how to obtain it ('Find it with workflows_list'). The description adds nothing beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb ('Disable') plus resource ('a workflow'), with an explicit statement of what disabling does to the workflow's runtime state. It cleanly distinguishes itself from workflows_delete and workflows_enable, which are both present 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 Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes the agent: 'Prefer this to `workflows_delete` when a workflow should only stop for a while,' and names `workflows_enable` as the reverse operation. Both the alternative and the selecting condition are stated outright.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

workflows_enableWorkflows: enableAInspect

Enable a workflow. An enabled workflow runs on its own from its triggers: Timed on its cron schedule, Event when the matching event happens, Api when its route is called. Use workflows_disable to pause it without losing its steps.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesWorkflow ID. Find it with workflows_list.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, openWorldHint=false, and destructiveHint=false, but the description adds real runtime behavior: an enabled workflow runs automatically from Timed, Event, or Api triggers, and disabling pauses it without losing steps. That is useful context beyond the structured fields and creates 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?

Three tight sentences with the action front-loaded, followed by the behavior change and then the alternative tool. Every sentence adds useful selection or behavior information without 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 toggle operation, the description covers purpose, runtime behavior, trigger modes, and the workaround for pausing. With an output schema absent, no return-value explanation is required, and the annotations already carry 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?

Schema description coverage is 100%, and the single `id` parameter is already documented as 'Workflow ID. Find it with workflows_list.' The description adds no parameter details, so the schema carries the full burden. Baseline 3 is correct for a high-coverage single-parameter 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?

Specifically states the verb and resource: 'Enable a workflow.' It clearly distinguishes the action from the sibling `workflows_disable` and from adjacent workflow tools by explaining what enabling actually activates.

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?

Provides explicit routing guidance by naming the alternative tool and the condition for choosing it: 'Use `workflows_disable` to pause it without losing its steps.' This tells the agent when to use enable and when to use its counterpart.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

workflows_exportWorkflows: exportA
Destructive
Inspect

Export an existing workflow to JSON (round-trippable with seed). Gives the workflow's definition as JSON with no ids: its triggers, and its steps with their parameters, linked by step key through on_success/on_failure. Use it to back up or copy a workflow; for the ids the step tools need, use workflows_get. It changes or deletes existing data, so check with the user before running it.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesWorkflow ID to export. Find it with workflows_list.
outputNoWrite to FILE instead of stdout

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 and destructiveHint=true, and the description reinforces this with an explicit 'check with the user before running it' warning. Beyond annotations, it discloses the return shape (triggers, steps with parameters, linked via on_success/on_failure, no ids, round-trippable with seed), which is 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences with the core action and the routing alternative front-loaded, followed by the caution. No filler or 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?

With no output schema, the description compensates by describing the returned JSON structure and its linking model. Combined with the schema and annotations, an agent has everything needed to invoke the tool and interpret its result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both `id` and `output` are already documented in the schema. The description adds only a marginal note that the exported payload carries no ids; otherwise it does not extend parameter meaning, matching the baseline for full 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?

States a specific verb (export) and resource (existing workflow) plus the output format (JSON). It explicitly distinguishes itself from the sibling `workflows_get` and by implication `workflows_seed`, so an agent can route correctly without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete use cases (back up or copy a workflow) and names the alternative (`workflows_get`) with the condition that selects it (need the ids the step tools require). It also adds a pre-run caution to check with the user.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

workflows_file_handler_addWorkflows: file handler addAInspect

Add a FileHandler step with named flags (no hand-written params JSON). The step attaches a file to a record's file field: fetch_and_link downloads source_url, link_existing attaches existing_file_id, and detach unlinks it; entity, record_id (usually {{ $anythink.trigger.id }}) and field are always needed. Unlike workflows_step_add it can set on_success/on_failure in the same call, and the step is created disabled unless enabled is set.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoStep display name (defaults to the step key)
fieldNoField name on the record to link the file to (required, snake_case)
startNoSet as start step
entityNoTarget entity name (required)
enabledNoEnable step immediately
step_keyYesStep key (unique identifier, snake_case)
file_nameNoFilename to store the uploaded file as (templatable)
folder_idNoFolder ID to upload the file into (optional, templatable)
is_publicNoMark the uploaded file as public
link_modeNoHow to link to the field: set (single value) or add (append to multi-value). Default: set
operationNoFileHandler operation: fetch_and_link, link_existing, detach
record_idNoTarget record ID, typically '{{ $anythink.trigger.id }}' (required)
on_failureNoStep ID to execute on failure
on_successNoStep ID to execute on success
source_urlNoURL to fetch the file from (required for fetch_and_link; supports templating)
workflow_idYesWorkflow ID. Find it with workflows_list.
existing_file_idNoExisting file ID (required for link_existing operation; templatable)
overwrite_if_presentNoRe-process even if the field already has a value (idempotency override)

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only cover the generic safety profile (readOnly=false, destructive=false, openWorld=false). The description adds a genuinely useful trait not in the annotations: the step is created disabled unless `enabled` is set. It does not cover auth/permission needs or any failure semantics, so it is strong but not complete.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three dense sentences, front-loaded with purpose and then operations, then the sibling comparison and default-disabled caveat. Every sentence carries information; only slight density cost from packing three operation definitions into one clause.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 18-parameter mutation with no output schema and no dedicated annotations, the description covers the operation modes, conditional required fields, and a default-value behavior, which is what an agent most needs. Remaining params (folder_id, is_public, file_name, link_mode, overwrite_if_present) are fully documented in the schema, so 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?

Schema coverage is 100%, so baseline is 3, but the description adds conditional semantics the schema does not: entity, record_id and field are 'always needed' despite only workflow_id/step_key being in the required array, and it ties source_url/existing_file_id to specific operations. This meaningfully reduces the chance of a mis-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?

States a specific verb+resource ('Add a FileHandler step') and immediately enumerates the three operations (fetch_and_link, link_existing, detach) with what each does. It explicitly distinguishes itself from the sibling workflows_step_add, so an agent can route without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Names the alternative (`workflows_step_add`) and a concrete distinguishing capability (setting on_success/on_failure in the same call) plus the default-disabled behavior, which gives clear selection context. It stops short of a full when-to-use/when-not story or referencing the sibling workflows_file_handler_example as a template source.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

workflows_file_handler_exampleWorkflows: file handler exampleA
Read-only
Inspect

Print a copy-paste-ready FileHandler params JSON. The sample uses {{ $anythink... }} templates for the source URL, record id and folder, and changes nothing in the project. Adapt it as params for workflows_step_add or workflows_step_update; to add a FileHandler step directly, workflows_file_handler_add is simpler.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description adds real context beyond that: the output is a copy-paste-ready JSON, it uses {{ $anythink... }} template placeholders for source URL/record id/folder, and it explicitly 'changes nothing in the project'. It does not detail any size or format limits, but for a pure read/example tool this is strong.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, each earning its place: output description first, then the template detail, then the routing alternatives. Front-loaded with what the agent gets.

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 tool with no output schema, the description carries the whole burden and does so: it explains what is returned (a JSON sample with template placeholders) and what to do with it. 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?

The tool takes zero parameters, so the baseline is 4. There is nothing for the description to clarify in terms of argument semantics, and it correctly implies no inputs are required.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 ('Print a copy-paste-ready FileHandler params JSON'), and immediately differentiates itself from siblings by naming workflows_step_add, workflows_step_update, and workflows_file_handler_add. An agent can tell this is a sample/example generator rather than a mutating tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use it (to get params to adapt for workflows_step_add / workflows_step_update) and when a sibling is better (workflows_file_handler_add for directly adding a FileHandler step). The routing decision is fully specified.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

workflows_getWorkflows: getA
Read-only
Inspect

Get workflow details and steps. Includes each trigger with its last and next run, and every step with its id, key, action, parameters, start-step flag and on_success/on_failure step ids. Use those step ids with workflows_step_update, workflows_step_link and workflows_step_delete; for a copy without ids, use workflows_export. Returns JSON.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesWorkflow ID. Find it with workflows_list.

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 and openWorldHint=false, so the safety profile is covered. The description's real contribution is disclosing the shape of the returned document (steps, triggers, run times, linkage ids), which matters since there is no output schema. Minor gap: no pagination or size caveats, though for a single-record get those are largely irrelevant.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with what is returned, then the chaining hint, then the alternative. No filler and nothing redundant except the trailing "Returns JSON", which is minor.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the burden of telling the agent what it gets back, and it does so field by field. Combined with schema-documented input and readOnly annotations, an agent has everything needed to call and consume 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 coverage is 100% with a single required integer id, and the schema itself already tells the agent to find it via workflows_list. The description adds nothing about the parameter, but with full schema coverage the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (get workflow details and steps) and enumerates the returned payload: triggers with last/next run, and each step's id, key, action, parameters, start-step flag and on_success/on_failure ids. This clearly separates it from siblings like workflows_list (enumeration) and workflows_export (id-free copy).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit routing: returned step ids feed workflows_step_update, workflows_step_link and workflows_step_delete, while workflows_export is named as the alternative when an id-free copy is wanted. The agent knows both what to do next and which sibling to prefer for a different need.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

workflows_integration_addWorkflows: integration addAInspect

Add an Integration step (Claude, OpenAI, Slack…) with named flags (no hand-written params JSON). The step runs one provider operation, such as claude generate-text, with inputs given as key=value pairs that accept {{ $anythink... }} templates; find provider and operation keys with integrations_get. credential_source chooses the credentials (system, current_user, connection with connection_id, or entity_field), and the step is created disabled unless enabled is set.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoStep display name (defaults to the step key)
inputNoOperation input as key=value (repeatable; values support {{templating}})
modelNoConvenience shortcut for the 'model' input (AI providers)
startNoSet as start step
inputsNoOperation inputs as a JSON object (merged with --input flags)
enabledNoEnable step immediately
providerNoIntegration provider key (e.g. claude, openai, slack). Required.
step_keyYesStep key (unique identifier, snake_case)
operationNoOperation key (see 'integrations get <provider>'). Required.
on_failureNoStep ID to execute on failure
on_successNoStep ID to execute on success
workflow_idYesWorkflow ID. Find it with workflows_list.
connection_idNoConnection ID (required when --credential-source is 'connection'; templatable)
credential_fieldNoCredential field path (required when --credential-source is 'entity_field')
credential_sourceNosystem | current_user | connection | entity_field (default: system)

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the mutation safety profile (readOnly=false, destructive=false). The description adds genuinely new behavioral context beyond that: the step is created disabled unless `enabled` is set, and inputs accept {{ $anythink... }} templates. These are real traits not derivable 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core action and the 'no hand-written params JSON' framing before the credential detail. It is a dense single block but every clause carries information; only slight tightening is possible.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 15-parameter creation tool with no output schema and full schema coverage, the description covers the essential unknowns: how inputs are expressed, where to find keys, credential sourcing, and the disabled-by-default behavior. Return-value explanation is unnecessary since no output schema exists.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds meaning on top: it explains credential_source semantics (system/current_user/connection/entity_field), ties connection_id to the 'connection' source, and clarifies the key=value templating format for inputs. This is value beyond the schema text.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 (Add) and resource (an Integration step), and immediately disambiguates from the generic step-add sibling by naming the provider-operation model (claude generate-text). An agent can tell this apart from workflows_step_add without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes the agent to `integrations_get` to discover provider and operation keys, and enumerates the credential_source options with their conditions. It does not, however, state when to prefer this over workflows_step_add, leaving one sibling distinction implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

workflows_jobsWorkflows: jobsA
Read-only
Inspect

View job history for a workflow. Shows the 10 most recent runs, each with its status (Completed, Failed or Running), start time and error, plus every step's status, error and log. Use it after workflows_trigger, or when an event or schedule should have fired, to see whether a run worked and which step failed.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesWorkflow ID. Find it with workflows_list.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds useful behavioral context by disclosing that it returns the 10 most recent runs, their statuses, start time, errors, and per-step status/error/log. It omits pagination or permission details, but these are not essential here.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tightly written sentences. The first front-loads the purpose and return contents; the second front-loads the usage context. There is 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?

There is no output schema, so the description appropriately explains what the tool returns: job history, statuses, start times, errors, and step-level details. Combined with read-only annotations and a fully documented single parameter, it gives the agent everything needed to call the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% for the single required 'id' parameter, and the schema itself documents that the workflow ID can be found with workflows_list. The description adds no parameter-specific meaning, so the baseline 3 is appropriate when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'View job history for a workflow.' It also specifies the returned scope (10 most recent runs, their statuses and steps), making it easy to distinguish from related workflow tools like workflows_trigger or workflows_get.

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: 'Use it after `workflows_trigger`, or when an event or schedule should have fired.' This tells the agent when the tool is appropriate and ties it to a sibling trigger tool, but it does not explicitly state when not to use it or name an alternative for other diagnostic needs.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

workflows_listWorkflows: listA
Read-only
Inspect

List all workflows. Each entry gives the workflow's id, name, description, enabled flag, step count and its triggers (Manual, Timed, Event or Api) with their config, but not the steps. Use workflows_get to see a workflow's steps and how they link. Returns JSON.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover safety (readOnlyHint=true, openWorldHint=false), so the bar is lower. The description still adds meaningful context by enumerating the exact per-entry payload and explicitly calling out that steps are omitted, plus 'Returns JSON.' It does not mention ordering or pagination, but the return-content disclosure is strong.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three front-loaded sentences with no waste: purpose, payload detail, and alternative routing in that order. Every sentence earns its place and nothing is repeated from the title 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?

With no output schema, the description carries the return-shape burden and delivers it fully — it enumerates the fields returned and explicitly states what is not included (steps), then routes to the sibling that provides them. Nothing an agent needs to call this no-param list tool 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?

Zero input parameters, so there is nothing for the description to compensate for; baseline 4 applies. The description correctly implies an unfiltered full listing, which matches the empty schema with additionalProperties=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?

States a specific verb (List) and resource (workflows), then enumerates the fields each entry contains (id, name, description, enabled flag, step count, triggers) and explicitly notes it excludes steps. This distinguishes it cleanly from the sibling workflows_get. An agent can identify the tool without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Names the alternative sibling (workflows_get) and the condition that selects it ('to see a workflow's steps and how they link'). This is clear routing guidance, though it stops short of a full when/when-not split or noting the parameterless nature of this call.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

workflows_seedWorkflows: seedAInspect

Create a workflow and its steps from a JSON file. Reads a JSON file on this machine in the workflows_export format (name, trigger or triggers, and steps with key, action, parameters and on_success/on_failure by step key), fills {{KEY}} placeholders from var, then creates the workflow, adds its steps and links them. It always creates a new workflow, so running it twice makes two copies.

ParametersJSON Schema
NameRequiredDescriptionDefault
varNoSubstitute {{KEY}} placeholders in the JSON. Repeatable.
fileYesPath to a workflow JSON file (use `workflows export` to produce one)
enabledNoOverride the workflow's enabled flag to true

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (which declare a non-read-only, non-destructive, closed-world mutation), the description discloses the multi-step side effects (creates the workflow, adds steps, links them) and, crucially, non-idempotency: "running it twice makes two copies." It does not cover required permissions or failure behavior, but the non-idempotency note is real value 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 primary action is front-loaded and the second sentence delivers the important non-idempotency caveat. The long parenthetical format breakdown is dense but every clause carries information; there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no output schema and full annotation coverage, the description supplies the input file format, the placeholder mechanism, and the duplication caveat. It could still say more about required permissions or error handling, but nothing essential for invoking 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 100%, so the baseline is 3, but the description goes further by outlining the file's internal structure (name, trigger/triggers, steps with key, action, parameters and on_success/on_failure) and reiterating how `var` fills {{KEY}} placeholders. This meaningfully clarifies what the `file` path must contain.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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) plus resource (a workflow and its steps) and the input source (a JSON file in the `workflows_export` format). This clearly distinguishes it from siblings like workflows_create and workflows_export without needing 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?

Usage is only implied through the mechanism described and the reference to the `workflows_export` format; the description never states when to prefer this over workflows_create or names an exclusion. An agent can infer it is for seeding from an export file, but there is no explicit when/when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

workflows_step_addWorkflows: step addAInspect

Add a step to a workflow. Params are the action's settings as JSON, e.g. {"script":"return {}"} for RunScript or {"entity":"orders","data":{...}} for CreateData. The new step is unlinked: set start on the workflow's first step and chain the rest with workflows_step_link. For FileHandler or Integration steps, workflows_file_handler_add and workflows_integration_add build the params for you.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYesStep key (unique identifier)
nameNoStep display name
startNoSet as start step
actionNoAction type: ReadData, CreateData, UpdateData, UpsertData, DeleteData, CallAnApi, RunScript, Condition, SendAnEmail, SendACommand, SendPushNotification, FileHandler, Integration (for Integration, prefer 'integration-add')
paramsNoStep parameters as JSON
enabledNoEnable step immediately
workflow_idYesWorkflow ID. Find it with workflows_list.

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover safety (readOnly=false, destructive=false, openWorld=false). The description adds genuine behavioral context beyond them: the new step is created unlinked and must be wired up separately via start/link. It does not mention auth requirements or error behavior, but the added lifecycle detail 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?

Three tight sentences, front-loaded with the core action, then params format, then the linking/alternatives note. Every sentence carries distinct, actionable information with no waste.

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-param, fully-documented mutation tool with no output schema, the description covers the non-obvious parts an agent needs: params encoding, the unlinked lifecycle, and correct alternative tools. Nothing essential to a correct call 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 100%, so the baseline is 3, but the description goes further by giving concrete params JSON examples for RunScript and CreateData and pointing to helper tools for FileHandler/Integration params. This meaningfully clarifies the otherwise opaque 'params as JSON' 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?

States a specific verb and resource ('Add a step to a workflow') and immediately distinguishes itself from related siblings by naming workflows_step_link, workflows_file_handler_add, and workflows_integration_add. An agent can tell exactly what this does versus those tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes the agent: use the file-handler and integration builders for FileHandler/Integration actions rather than this tool, and chain steps with workflows_step_link. It also clarifies the unlinked-start condition, which is the key usage nuance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

workflows_step_deleteWorkflows: step deleteA
Destructive
Inspect

Delete a step from a workflow (warns if other steps link to it). The API refuses to delete a step that other steps still point to through on_success or on_failure, so re-point those with workflows_step_link first. Deleting the start step leaves the workflow with no entry point until a new step is added with start. It changes or deletes existing data, so check with the user before running it.

ParametersJSON Schema
NameRequiredDescriptionDefault
step_idYesStep ID to delete
workflow_idYesWorkflow ID. Find it with workflows_list.

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 and readOnlyHint=false, but the description adds real behavioral detail beyond them: the referential-integrity refusal path, the consequence of deleting the start step (orphaned workflow entry point), and the required user confirmation. This is exactly the extra context annotations cannot carry.

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 sentences, each earning its place: core action, linking constraint plus remedy, start-step caveat, and the user-confirmation instruction. The primary action is front-loaded and 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?

For a destructive mutation with no output schema, the description covers failure modes, prerequisites, downstream consequences, and the safety check. An agent has everything needed to invoke it correctly and safely.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and both parameters are self-documented (workflow_id even points to workflows_list), so the schema does the heavy lifting. The description adds no format or syntax detail for the parameters themselves, making the baseline 3 appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Delete a step from a workflow') and immediately scopes it with the linking caveat. An agent can tell it apart from siblings like workflows_step_add, workflows_step_link, and workflows_step_update 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 Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly describes when the call will be refused (steps still pointing via on_success/on_failure), names the prerequisite tool to resolve it (workflows_step_link), and instructs the agent to confirm with the user before running. Covers when-not and the alternative in one pass.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

workflows_step_getWorkflows: step getA
Read-only
Inspect

View step details including parameters. Shows one step's key, action, enabled and start-step flags, on_success/on_failure step ids and its full parameters. Read it before workflows_step_update, because params passed there replace the step's parameters as a whole.

ParametersJSON Schema
NameRequiredDescriptionDefault
step_idYesStep ID
workflow_idYesWorkflow ID. Find it with workflows_list.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description goes further by detailing the exact fields returned and by disclosing the destructive-replace behavior of the downstream update tool, which is genuinely 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?

Two tight sentences: the first front-loads what the tool returns, the second delivers the usage advisory. No filler and every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, but the description enumerates the returned fields, largely compensating for that gap and making the tool sufficient to call correctly. Minor omissions (permissions, error behavior) keep it just short of full completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters (workflow_id, step_id) are already documented, including the pointer to workflows_list. The description's mention of 'its full parameters' refers to returned step config rather than input params, so it adds little meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('View') plus resource ('step details') and enumerates exactly what is returned: key, action, enabled and start-step flags, on_success/on_failure step ids, and full parameters. It also implicitly separates itself from the sibling workflows_step_update, making it distinguishable 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 gives explicit sequencing guidance: 'Read it before workflows_step_update, because params passed there replace the step's parameters as a whole,' which is a concrete when-to-use directive with a stated reason. It does not, however, cover when-not-to-call or contrast with siblings like workflows_get.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

workflows_step_updateWorkflows: step updateA
Destructive
Inspect

Update step parameters and properties. Changes a step's name, params or enabled flag and keeps its action, start flag and links; it can enable a step but not disable one. Params replace the step's parameters as a whole, so read them with workflows_step_get first; to change which step runs next, use workflows_step_link. It changes or deletes existing data, so check with the user before running it.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoStep name
paramsNoStep parameters as JSON
enabledNoEnable this step
step_idYesStep ID
workflow_idYesWorkflow ID. Find it with workflows_list.

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, but the description adds substantial behavior beyond them: params are replaced wholesale rather than merged, the tool can enable but NOT disable a step, and it changes or deletes existing data so the user should be consulted. These are exactly the non-obvious traits 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core action, then layers replacement semantics, sibling routing, and a safety warning, each in a distinct sentence. No filler or restatement of the name/title; every clause carries actionable information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive mutation with no output schema, the description covers scope of change, field replacement behavior, enable-only asymmetry, prerequisite read, sibling alternative, and a caution to confirm with the user. Nothing needed 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 coverage is 100%, so the baseline is 3, but the description adds real semantics: `params` is a whole-value replacement (not a patch) and must be read first, and `enabled` is one-directional. It does not explain the JSON format of `params` beyond 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 and resource ('Update step parameters and properties') and immediately scopes the exact fields it touches (name, params, enabled) while naming what it preserves (action, start flag, links). This distinguishes it cleanly from siblings like workflows_step_add, workflows_step_link, and workflows_step_delete.

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: read params first with `workflows_step_get`, and use `workflows_step_link` to change which step runs next. It also names the condition (params replace as a whole) that forces the read-first pattern, so the when/when-not guidance is complete.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

workflows_triggerWorkflows: triggerAInspect

Manually trigger a workflow. Starts a run now and returns without the run's result; check the outcome with workflows_jobs. A Manual-trigger workflow needs entity (and entity_id for a specific record), and payload is a JSON object the steps read as $anythink.trigger.data.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesWorkflow ID. Find it with workflows_list.
entityNoEntity name for the trigger (required for Manual-trigger workflows)
payloadNoOptional JSON record to pass to the workflow (available as $anythink.trigger.data)
entity_idNoOptional entity/record id to associate with the trigger

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the non-read-only, non-destructive, open-world profile, so the bar is lower. The description still adds important behavior beyond them: the call is asynchronous and returns without the run's result, which materially shapes how an agent sequences follow-up calls. It doesn't cover permissions 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the action and effect, then the async caveat, then the input requirements. No filler or restated title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description correctly explains what comes back (no run result) and where to get it, which is the main completeness risk for this tool. Minor gap: the schema types payload as a string while the description calls it 'a JSON object', which could confuse how the value is encoded.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description goes slightly beyond the per-property text by framing the conditional relationship between trigger type and the entity/entity_id pair, and reiterating that payload is read as $anythink.trigger.data.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 ('Manually trigger a workflow') and immediately describes the effect ('Starts a run now'). It is clearly distinguishable from siblings like workflows_list, workflows_create, and workflows_jobs, and even names the sibling to use for results.

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?

Tells the agent what to do after triggering ('check the outcome with workflows_jobs') and states the prerequisite for Manual-trigger workflows (entity, plus entity_id for a specific record). It lacks an explicit when-not-to-use or trigger-type-exclusion statement, but the guidance is concrete and conditional.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

workflows_updateWorkflows: updateA
Destructive
Inspect

Update a workflow's name or description. Only the name and description change; the triggers, steps, group and enabled state are sent back unchanged, and no tool here edits a trigger. It refuses to run while an existing trigger is incomplete (e.g. a Timed trigger with no cron), which must be fixed in the dashboard first. To change a step, use workflows_step_update. It changes or deletes existing data, so check with the user before running it.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesWorkflow ID. Find it with workflows_list.
nameNoNew workflow name
descriptionNoNew workflow description

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, but the description adds substantive behavior the annotations cannot convey: only name/description mutate while other fields round-trip unchanged, the update refuses to run on an incomplete trigger, and user confirmation is required. This is rich, non-obvious 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the action and its scope, then layers constraints and the alternative in a compact sequence. Slightly dense with four clauses, but every clause carries actionable information and 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?

With no output schema, the description covers everything an agent needs: mutation scope, side effects on untouched fields, the refusal precondition, the sibling tool for step edits, and the requirement to confirm with the user. Annotations cover the safety profile and the schema covers parameters.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents id, name and description (including the pointer to workflows_list for the id). The description adds no format or syntax detail beyond that, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Update a workflow's name or description') and immediately bounds the scope, noting that triggers, steps, group and enabled state are sent back unchanged. An agent can distinguish it from workflows_step_update and workflows_trigger 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 Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes step edits to `workflows_step_update`, states the precondition failure case (incomplete trigger, e.g. Timed with no cron) and where it must be fixed (dashboard), and instructs the agent to confirm with the user before running. When-to-use, when-not-to-use, and alternatives are all present.

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. 109 tool updatesv0.2.37
    • Changedapi_keys_revoke1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"API key ID to revoke"New value: +"API key ID to revoke. Find it with api_keys_list."
    • Addedcharts_create
    • Addedcharts_delete
    • Addedcharts_get
    • Addedcharts_list
    • Addedcharts_platform_metrics
    • Addedcharts_preview
    • Addedcharts_update
    • Addeddashboards_add_chart
    • Addeddashboards_create
    • Addeddashboards_data
    • Addeddashboards_delete
    • Addeddashboards_get
    • Addeddashboards_list
    • Addeddashboards_mine
    • Addeddashboards_promote_to_default
    • Addeddashboards_remove_widget
    • Addeddashboards_set_home
    • Addeddashboards_update
    • Addeddashboards_widget_preview
    • Changeddata_delete1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"Record ID"New value: +"Record ID. Find it with data_list."
    • Addeddata_export
    • Changeddata_get1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"Record ID"New value: +"Record ID. Find it with data_list."
    • Addeddata_import
    • Changeddata_rls1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"Record ID"New value: +"Record ID. Find it with data_list."
    • Changeddata_update1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"Record ID"New value: +"Record ID. Find it with data_list."
    • Addedemail_preview
    • Addedemail_shell_show
    • Addedemail_shell_update
    • Addedemail_templates_list
    • Addedemail_templates_show
    • Addedemail_templates_update
    • Changedfetch1 field changed
      • addedInput schema / properties / all
        Added value: +{
        +  "description": "Follow every page of a paged GET response, printing each page as it arrives",
        +  "type": "boolean"
        +}
    • Changedfiles_delete1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"File ID to delete"New value: +"File ID to delete. Find it with files_list."
    • Changedfiles_get1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"File ID"New value: +"File ID. Find it with files_list."
    • Addedimport_directus
    • Changedintegrations_disable1 field changed
      • changedInput schema / properties / connection_id / description
        Previous value: -"Connection ID"New value: +"Connection ID. Find it with integrations_connections_list."
    • Changedintegrations_disconnect1 field changed
      • changedInput schema / properties / connection_id / description
        Previous value: -"Connection ID to delete"New value: +"Connection ID to delete. Find it with integrations_connections_list."
    • Changedintegrations_enable1 field changed
      • changedInput schema / properties / connection_id / description
        Previous value: -"Connection ID"New value: +"Connection ID. Find it with integrations_connections_list."
    • Changedintegrations_test1 field changed
      • changedInput schema / properties / connection_id / description
        Previous value: -"Connection ID"New value: +"Connection ID. Find it with integrations_connections_list."
    • Changedmenus_add_item1 field changed
      • changedInput schema / properties / menu_id / description
        Previous value: -"Menu ID to add the item to"New value: +"Menu ID to add the item to. Find it with menus_list."
    • Addedmenus_create
    • Addedmenus_delete
    • Addedmenus_get
    • Addedmenus_remove_item
    • Addedmenus_reorder
    • Addedmenus_reorder_items
    • Addedmenus_update
    • Addedmenus_update_item
    • Addedpay_entitlement
    • Addedpay_offers_activate
    • Addedpay_offers_add_code
    • Addedpay_offers_codes
    • Addedpay_offers_create
    • Addedpay_offers_delete
    • Addedpay_offers_get
    • Addedpay_offers_list
    • Addedpay_offers_pause
    • Addedpay_offers_redemptions
    • Addedpay_offers_update
    • Addedpay_offers_user_code
    • Addedpay_payment_options
    • Addedpay_plans_create
    • Addedpay_plans_delete
    • Addedpay_plans_get
    • Addedpay_plans_list
    • Addedpay_plans_update
    • Addedpay_subscriptions_by_user
    • Addedpay_subscriptions_cancel
    • Addedpay_subscriptions_check_access
    • Addedpay_subscriptions_delete
    • Addedpay_subscriptions_events
    • Addedpay_subscriptions_force_expire
    • Addedpay_subscriptions_get
    • Addedpay_subscriptions_list
    • Addedpay_subscriptions_relink
    • Addedpay_subscriptions_resume
    • Addedpay_subscriptions_resync
    • Addedpay_trial_disable
    • Addedpay_trial_enable
    • Addedpay_trial_status
    • Changedroles_delete1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"Role ID to delete"New value: +"Role ID to delete. Find it with roles_list."
    • Changedroles_permissions_add1 field changed
      • changedInput schema / properties / role_id / description
        Previous value: -"Role ID"New value: +"Role ID. Find it with roles_list."
    • Changedroles_permissions_list1 field changed
      • changedInput schema / properties / role_id / description
        Previous value: -"Role ID"New value: +"Role ID. Find it with roles_list."
    • Changedroles_permissions_remove1 field changed
      • changedInput schema / properties / role_id / description
        Previous value: -"Role ID"New value: +"Role ID. Find it with roles_list."
    • Addedsettings_cors_add
    • Addedsettings_cors_list
    • Addedsettings_cors_remove
    • Addedsettings_get
    • Addedsettings_set
    • Changedusers_delete1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"User ID to delete"New value: +"User ID to delete. Find it with users_list."
    • Changedusers_get1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"User ID"New value: +"User ID. Find it with users_list."
    • Changedusers_invite1 field changed
      • changedInput schema / properties / role_id / description
        Previous value: -"Role ID to assign"New value: +"Role ID to assign. Find it with roles_list."
    • Changedworkflows_create5 fields changed
      • changedInput schema / properties / api_route / description
        Previous value: -"Custom API route (for Api trigger)"New value: +"API route, required for an Api trigger"
      • changedInput schema / properties / cron / description
        Previous value: -"Cron expression (for Timed trigger, e.g. '0 9 * * *')"New value: +"Cron expression, required for a Timed trigger (e.g. '0 9 * * *')"
      • changedInput schema / properties / entity / description
        Previous value: -"Entity name for Event trigger"New value: +"Entity name, required for an Event or Manual trigger"
      • changedInput schema / properties / event / description
        Previous value: -"Event type: EntityCreated, EntityUpdated, EntityDeleted"New value: +"Event for an Event trigger: EntityCreated (default), EntityUpdated, EntityDeleted, UserRegistered, PaymentSucceeded and others. Not case-sensitive"
      • changedInput schema / properties / trigger / description
        Previous value: -"Trigger type: Manual, Timed, Event, Api"New value: +"Trigger type: Manual (default), Timed, Event, Api. Not case-sensitive"
    • Changedworkflows_delete1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"Workflow ID to delete"New value: +"Workflow ID to delete. Find it with workflows_list."
    • Changedworkflows_disable1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"Workflow ID"New value: +"Workflow ID. Find it with workflows_list."
    • Changedworkflows_enable1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"Workflow ID"New value: +"Workflow ID. Find it with workflows_list."
    • Changedworkflows_export1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"Workflow ID to export"New value: +"Workflow ID to export. Find it with workflows_list."
    • Changedworkflows_file_handler_add1 field changed
      • changedInput schema / properties / workflow_id / description
        Previous value: -"Workflow ID"New value: +"Workflow ID. Find it with workflows_list."
    • Changedworkflows_get1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"Workflow ID"New value: +"Workflow ID. Find it with workflows_list."
    • Changedworkflows_integration_add1 field changed
      • changedInput schema / properties / workflow_id / description
        Previous value: -"Workflow ID"New value: +"Workflow ID. Find it with workflows_list."
    • Changedworkflows_jobs1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"Workflow ID"New value: +"Workflow ID. Find it with workflows_list."
    • Changedworkflows_step_add1 field changed
      • changedInput schema / properties / workflow_id / description
        Previous value: -"Workflow ID"New value: +"Workflow ID. Find it with workflows_list."
    • Changedworkflows_step_delete1 field changed
      • changedInput schema / properties / workflow_id / description
        Previous value: -"Workflow ID"New value: +"Workflow ID. Find it with workflows_list."
    • Changedworkflows_step_get1 field changed
      • changedInput schema / properties / workflow_id / description
        Previous value: -"Workflow ID"New value: +"Workflow ID. Find it with workflows_list."
    • Changedworkflows_step_link1 field changed
      • changedInput schema / properties / workflow_id / description
        Previous value: -"Workflow ID"New value: +"Workflow ID. Find it with workflows_list."
    • Changedworkflows_step_update1 field changed
      • changedInput schema / properties / workflow_id / description
        Previous value: -"Workflow ID"New value: +"Workflow ID. Find it with workflows_list."
    • Changedworkflows_trigger1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"Workflow ID"New value: +"Workflow ID. Find it with workflows_list."
    • Changedworkflows_update1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"Workflow ID"New value: +"Workflow ID. Find it with workflows_list."
  2. 102 tool updatesv0.2.27
    • Changedaccounts_create2 fields changed
      • removedInput schema / description
        Removed value: -"Create a new billing account (organization) to hold projects and payment details. Requires a prior platform login (use the 'login' tool first). The new account is automatically set as the active account, so subsequent 'projects_create' / 'projects_list' calls target it without further setup. Returns the new account's id and name. Most users need only one account — call 'accounts_list' first to check whether a suitable one already exists."
      • removedInput schema / title
        Removed value: -"accounts_create"
    • Changedaccounts_list2 fields changed
      • removedInput schema / description
        Removed value: -"List the billing accounts (organizations) the logged-in user belongs to. Requires a prior platform login (use the 'login' tool first). Returns each account's id, organization name, billing email, currency, and status (Active/Suspended/Canceled), and flags which one is currently active. A billing account holds your projects and payment details — pick one with 'accounts_use' before creating or listing projects."
      • removedInput schema / title
        Removed value: -"accounts_list"
    • Changedaccounts_use2 fields changed
      • removedInput schema / description
        Removed value: -"Set the active billing account that project commands operate on. Call this after 'login' when you belong to more than one account, before using 'projects_list', 'projects_create', or 'projects_use'. Accepts a full account UUID or a unique prefix; run 'accounts_list' to see valid ids. Returns the resolved account name and id, or an error if no account matches."
      • removedInput schema / title
        Removed value: -"accounts_use"
    • Addedapi
    • Addedapi_keys_create
    • Addedapi_keys_list
    • Addedapi_keys_revoke
    • Changedcli2 fields changed
      • removedInput schema / description
        Removed value: -"Run any Anythink CLI command and return its output. Use this for commands not covered by dedicated tools (entities, fields, data, workflows, roles, menus, secrets, users, files, pay, oauth, migrate, fetch, api, docs, etc.). Pass the command exactly as you would after 'anythink', e.g. 'entities list' or 'data list posts'. Menu commands: 'menus list' shows dashboard menus with tree structure; 'menus add-item <menu_id> <entity> --icon <Icon> --parent <parent_id>' adds an entity to a dashboard menu. For destructive commands add '--yes' to skip confirmation prompts. Add '--json' where supported for machine-readable output."
      • removedInput schema / title
        Removed value: -"cli"
    • Changedconfig_remove2 fields changed
      • removedInput schema / description
        Removed value: -"Delete a saved project profile from the local CLI configuration. Removes only the locally stored credentials and settings — it does not delete the project or revoke tokens server-side (to remove the project itself, use 'projects_delete'). Run 'config_show' to see profile names. Returns confirmation, or a not-found message."
      • removedInput schema / title
        Removed value: -"config_remove"
    • Changedconfig_show2 fields changed
      • removedInput schema / description
        Removed value: -"Show the local CLI configuration: all saved project profiles and platform logins, and which of each is active. For every profile it returns the name, org id, auth method (api-key or token), alias, and platform; for every platform it returns the URLs, billing account, and login status. Use this to discover profile names for 'config_use', 'config_remove', or 'logout', and to check which project the 'cli' tool currently targets. Reads local config only — makes no network calls."
      • removedInput schema / title
        Removed value: -"config_show"
    • Changedconfig_use2 fields changed
      • removedInput schema / description
        Removed value: -"Switch the active project profile that the 'cli' tool's commands operate against. Use this to move between already-connected projects without re-authenticating. The profile must already exist (created by 'projects_use' or 'login_direct'); run 'config_show' to see available profile names. Returns confirmation, or an error if the profile does not exist."
      • removedInput schema / title
        Removed value: -"config_use"
    • Addeddata_create
    • Addeddata_delete
    • Addeddata_get
    • Addeddata_list
    • Addeddata_rls
    • Addeddata_update
    • Addeddocs
    • Addedentities_create
    • Addedentities_delete
    • Addedentities_get
    • Addedentities_list
    • Addedentities_update
    • Addedfetch
    • Addedfields_add
    • Addedfields_delete
    • Addedfields_get
    • Addedfields_list
    • Addedfields_update
    • Addedfiles_delete
    • Addedfiles_get
    • Addedfiles_list
    • Addedfiles_upload
    • Addedintegrations_connect
    • Addedintegrations_connections_list
    • Addedintegrations_disable
    • Addedintegrations_disconnect
    • Addedintegrations_enable
    • Addedintegrations_execute
    • Addedintegrations_get
    • Addedintegrations_list
    • Addedintegrations_oauth_callback_url
    • Addedintegrations_oauth_configure
    • Addedintegrations_oauth_connect
    • Addedintegrations_oauth_status
    • Addedintegrations_test
    • Changedlogin2 fields changed
      • removedInput schema / description
        Removed value: -"Log in to the Anythink platform with email and password. Returns a session token used for account and project management. For Google sign-in, use the 'login_google' tool."
      • removedInput schema / title
        Removed value: -"login"
    • Changedlogin_direct6 fields changed
      • removedInput schema / description
        Removed value: -"Store credentials directly for a project (bypasses billing login). Use this when you already have an org ID and API key or JWT token."
      • changedInput schema / properties / apiKey / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • changedInput schema / properties / baseUrl / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • changedInput schema / properties / profile / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • changedInput schema / properties / token / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / title
        Removed value: -"login_direct"
    • Changedlogin_google2 fields changed
      • removedInput schema / description
        Removed value: -"Sign in to the Anythink platform with Google. Opens the user's browser to Google's consent screen and waits for them to approve, then stores the session token. The browser step must be completed by the user; everything before and after is tool-driven. This does NOT pick a billing account or project — after it returns, call 'accounts_list' then 'accounts_use', and 'projects_list' then 'projects_use'. Needs a local browser, so it only works over stdio (not the hosted HTTP server)."
      • removedInput schema / title
        Removed value: -"login_google"
    • Changedlogout3 fields changed
      • removedInput schema / description
        Removed value: -"Remove the saved credentials for a project profile from local CLI config. Use this to disconnect from a project or clear a stale token; it deletes only the stored profile locally and does not revoke the token server-side or affect the project. Omit the profile to remove the currently active one. Run 'config_show' to see profile names."
      • changedInput schema / properties / profile / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / title
        Removed value: -"logout"
    • Addedmenus_add_item
    • Addedmenus_list
    • Addedoauth_google_configure
    • Addedoauth_google_status
    • Addedpay_connect
    • Addedpay_methods
    • Addedpay_payments
    • Addedpay_status
    • Changedprojects_create4 fields changed
      • removedInput schema / description
        Removed value: -"Provision a new project — a dedicated, isolated Anythink backend instance with its own database, API, auth, and storage. Requires platform login and an active billing account (set one with 'accounts_use'). Provisioning runs asynchronously: the project starts in a Provisioning state, so poll 'projects_list' until it is Active. Returns the new project's id, name, org id, and API URL. Connect to it with 'projects_use'."
      • changedInput schema / properties / accountId / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • changedInput schema / properties / description / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / title
        Removed value: -"projects_create"
    • Changedprojects_delete3 fields changed
      • removedInput schema / description
        Removed value: -"Permanently delete a project and tear down its backend instance, including its database and stored data. This is destructive and irreversible — always confirm with the user first, and prefer matching by a specific id over a short prefix to avoid removing the wrong project. Requires an active billing account (set one with 'accounts_use'). Returns the deleted project's name and id on success."
      • changedInput schema / properties / accountId / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / title
        Removed value: -"projects_delete"
    • Changedprojects_list3 fields changed
      • removedInput schema / description
        Removed value: -"List the projects (provisioned backend instances) in a billing account. Requires platform login and an active billing account (set one with 'accounts_use'). Returns each project's id, name, description, region, org id, status (Initializing/Provisioning/Active/Suspended/Terminated/Error), API URL, and creation date. Use this to find a project's id before connecting with 'projects_use' or removing it with 'projects_delete'."
      • changedInput schema / properties / accountId / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / title
        Removed value: -"projects_list"
    • Changedprojects_use4 fields changed
      • removedInput schema / description
        Removed value: -"Connect to a project and save it as the active profile so the 'cli' tool's data, entities, users, and other commands target it. Resolves the project, then either stores the API key you pass or exchanges a transfer token for project-scoped credentials automatically. Requires an active billing account (set one with 'accounts_use'); the project must be Active (see 'projects_list'). Returns the saved profile name, org id, API URL, and auth method."
      • changedInput schema / properties / accountId / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • changedInput schema / properties / apiKey / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / title
        Removed value: -"projects_use"
    • Addedroles_create
    • Addedroles_delete
    • Addedroles_list
    • Addedroles_permissions_add
    • Addedroles_permissions_list
    • Addedroles_permissions_remove
    • Addedsearch_audit
    • Addedsearch_purge
    • Addedsearch_query
    • Addedsearch_rehydrate
    • Addedsearch_similar
    • Addedsecrets_create
    • Addedsecrets_delete
    • Addedsecrets_list
    • Addedsecrets_update
    • Changedsignup3 fields changed
      • removedInput schema / description
        Removed value: -"Register a brand-new Anythink platform account with email and password. Use this only when the user has no account yet; if they already have one, use 'login' instead. This creates the top-level user identity — it does not create a billing account or project (do that with 'accounts_create' and 'projects_create' after logging in). On success the user may need to click an email confirmation link before 'login' works; tell them to confirm, then call 'login'."
      • changedInput schema / properties / referralCode / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / title
        Removed value: -"signup"
    • Addedusers_delete
    • Addedusers_get
    • Addedusers_invite
    • Addedusers_list
    • Addedusers_me
    • Addedworkflows_create
    • Addedworkflows_delete
    • Addedworkflows_disable
    • Addedworkflows_enable
    • Addedworkflows_export
    • Addedworkflows_file_handler_add
    • Addedworkflows_file_handler_example
    • Addedworkflows_get
    • Addedworkflows_integration_add
    • Addedworkflows_jobs
    • Addedworkflows_list
    • Addedworkflows_seed
    • Addedworkflows_step_add
    • Addedworkflows_step_delete
    • Addedworkflows_step_get
    • Addedworkflows_step_link
    • Addedworkflows_step_update
    • Addedworkflows_trigger
    • Addedworkflows_update
  3. 14 tool updatesv0.2.21
    • Changedaccounts_create4 fields changed
      • changedInput schema / description
        Previous value: -"Create a new billing account"New value: +"Create a new billing account (organization) to hold projects and payment details. Requires a prior platform login (use the 'login' tool first). The new account is automatically set as the active account, so subsequent 'projects_create' / 'projects_list' calls target it without further setup. Returns the new account's id and name. Most users need only one account — call 'accounts_list' first to check whether a suitable one already exists."
      • changedInput schema / properties / currency / description
        Previous value: -"Currency: gbp, usd, or eur (default: gbp)"New value: +"ISO currency for billing: 'gbp', 'usd', or 'eur'. Defaults to 'gbp'. Cannot be changed later."
      • changedInput schema / properties / email / description
        Previous value: -"Billing email address"New value: +"Billing email address that receives invoices and receipts"
      • changedInput schema / properties / name / description
        Previous value: -"Organization name"New value: +"Organization name, e.g. 'Acme Inc' — shown on invoices and in the dashboard"
    • Changedaccounts_list1 field changed
      • changedInput schema / description
        Previous value: -"List all billing accounts for the logged-in user"New value: +"List the billing accounts (organizations) the logged-in user belongs to. Requires a prior platform login (use the 'login' tool first). Returns each account's id, organization name, billing email, currency, and status (Active/Suspended/Canceled), and flags which one is currently active. A billing account holds your projects and payment details — pick one with 'accounts_use' before creating or listing projects."
    • Changedaccounts_use2 fields changed
      • changedInput schema / description
        Previous value: -"Set the active billing account (used for project management)"New value: +"Set the active billing account that project commands operate on. Call this after 'login' when you belong to more than one account, before using 'projects_list', 'projects_create', or 'projects_use'. Accepts a full account UUID or a unique prefix; run 'accounts_list' to see valid ids. Returns the resolved account name and id, or an error if no account matches."
      • changedInput schema / properties / id / description
        Previous value: -"Billing account ID (full UUID or prefix)"New value: +"Billing account id — full UUID or a unique leading prefix. Get ids from 'accounts_list'."
    • Changedconfig_remove2 fields changed
      • changedInput schema / description
        Previous value: -"Remove a project profile from the CLI configuration"New value: +"Delete a saved project profile from the local CLI configuration. Removes only the locally stored credentials and settings — it does not delete the project or revoke tokens server-side (to remove the project itself, use 'projects_delete'). Run 'config_show' to see profile names. Returns confirmation, or a not-found message."
      • changedInput schema / properties / profile / description
        Previous value: -"Profile name to remove"New value: +"Name of the profile to remove from local config. See 'config_show' for valid names."
    • Changedconfig_show1 field changed
      • changedInput schema / description
        Previous value: -"List all configured profiles and show which is active"New value: +"Show the local CLI configuration: all saved project profiles and platform logins, and which of each is active. For every profile it returns the name, org id, auth method (api-key or token), alias, and platform; for every platform it returns the URLs, billing account, and login status. Use this to discover profile names for 'config_use', 'config_remove', or 'logout', and to check which project the 'cli' tool currently targets. Reads local config only — makes no network calls."
    • Changedconfig_use2 fields changed
      • changedInput schema / description
        Previous value: -"Set the active project profile"New value: +"Switch the active project profile that the 'cli' tool's commands operate against. Use this to move between already-connected projects without re-authenticating. The profile must already exist (created by 'projects_use' or 'login_direct'); run 'config_show' to see available profile names. Returns confirmation, or an error if the profile does not exist."
      • changedInput schema / properties / profile / description
        Previous value: -"Profile name to activate"New value: +"Name of an existing profile to make active. See 'config_show' for valid names."
    • Changedlogin1 field changed
      • changedInput schema / description
        Previous value: -"Log in to the Anythink platform with email and password. Returns a session token used for account and project management. For Google OAuth, use the CLI instead ('anythink login --google')."New value: +"Log in to the Anythink platform with email and password. Returns a session token used for account and project management. For Google sign-in, use the 'login_google' tool."
    • Addedlogin_google
    • Changedlogout2 fields changed
      • changedInput schema / description
        Previous value: -"Remove saved credentials for a project profile"New value: +"Remove the saved credentials for a project profile from local CLI config. Use this to disconnect from a project or clear a stale token; it deletes only the stored profile locally and does not revoke the token server-side or affect the project. Omit the profile to remove the currently active one. Run 'config_show' to see profile names."
      • changedInput schema / properties / profile / description
        Previous value: -"Profile name to remove (uses active profile if omitted)"New value: +"Name of the profile to remove. Defaults to the active profile. See 'config_show' for names."
    • Changedprojects_create6 fields changed
      • changedInput schema / description
        Previous value: -"Create a new project in the active billing account"New value: +"Provision a new project — a dedicated, isolated Anythink backend instance with its own database, API, auth, and storage. Requires platform login and an active billing account (set one with 'accounts_use'). Provisioning runs asynchronously: the project starts in a Provisioning state, so poll 'projects_list' until it is Active. Returns the new project's id, name, org id, and API URL. Connect to it with 'projects_use'."
      • changedInput schema / properties / accountId / description
        Previous value: -"Billing account ID (uses active account if omitted)"New value: +"Billing account id to create the project in. Defaults to the active account set via 'accounts_use'."
      • changedInput schema / properties / description / description
        Previous value: -"Project description (optional)"New value: +"Optional free-text description shown in the dashboard"
      • changedInput schema / properties / name / description
        Previous value: -"Project name"New value: +"Human-readable project name, e.g. 'production' or 'my-app'"
      • changedInput schema / properties / planId / description
        Previous value: -"Plan ID (UUID) — use 'plans' CLI command to list available plans"New value: +"Plan id (UUID) that sets the project's resource tier and pricing. Run the 'plans' CLI command (via the 'cli' tool) to list available plan ids."
      • changedInput schema / properties / region / description
        Previous value: -"Deployment region (e.g. lon1)"New value: +"Deployment region slug, e.g. 'lon1'. Defaults to 'lon1'. Choose the region closest to your users."
    • Changedprojects_delete3 fields changed
      • changedInput schema / description
        Previous value: -"Delete a project from the billing account"New value: +"Permanently delete a project and tear down its backend instance, including its database and stored data. This is destructive and irreversible — always confirm with the user first, and prefer matching by a specific id over a short prefix to avoid removing the wrong project. Requires an active billing account (set one with 'accounts_use'). Returns the deleted project's name and id on success."
      • changedInput schema / properties / accountId / description
        Previous value: -"Billing account ID (uses active account if omitted)"New value: +"Billing account id the project belongs to. Defaults to the active account set via 'accounts_use'."
      • changedInput schema / properties / id / description
        Previous value: -"Project ID (UUID or prefix)"New value: +"Project to delete — its UUID, name, or a unique prefix. Use a specific id to avoid accidental matches. Find ids via 'projects_list'."
    • Changedprojects_list2 fields changed
      • changedInput schema / description
        Previous value: -"List all projects in the active billing account"New value: +"List the projects (provisioned backend instances) in a billing account. Requires platform login and an active billing account (set one with 'accounts_use'). Returns each project's id, name, description, region, org id, status (Initializing/Provisioning/Active/Suspended/Terminated/Error), API URL, and creation date. Use this to find a project's id before connecting with 'projects_use' or removing it with 'projects_delete'."
      • changedInput schema / properties / accountId / description
        Previous value: -"Billing account ID (uses active account if omitted)"New value: +"Billing account id to list projects for. Defaults to the active account set via 'accounts_use'."
    • Changedprojects_use4 fields changed
      • changedInput schema / description
        Previous value: -"Connect to a project and save it as the active profile. Exchanges a transfer token for project-scoped credentials."New value: +"Connect to a project and save it as the active profile so the 'cli' tool's data, entities, users, and other commands target it. Resolves the project, then either stores the API key you pass or exchanges a transfer token for project-scoped credentials automatically. Requires an active billing account (set one with 'accounts_use'); the project must be Active (see 'projects_list'). Returns the saved profile name, org id, API URL, and auth method."
      • changedInput schema / properties / accountId / description
        Previous value: -"Billing account ID (uses active account if omitted)"New value: +"Billing account id the project belongs to. Defaults to the active account set via 'accounts_use'."
      • changedInput schema / properties / apiKey / description
        Previous value: -"API key for the project (generates token if omitted)"New value: +"Optional project API key (ak_...). If omitted, a project-scoped token is generated automatically via transfer-token exchange."
      • changedInput schema / properties / id / description
        Previous value: -"Project name, org ID, or UUID (or prefix)"New value: +"Project to connect to — its name, org id, or UUID (a unique prefix is accepted). Find these via 'projects_list'."
    • Changedsignup6 fields changed
      • changedInput schema / description
        Previous value: -"Create a new Anythink account"New value: +"Register a brand-new Anythink platform account with email and password. Use this only when the user has no account yet; if they already have one, use 'login' instead. This creates the top-level user identity — it does not create a billing account or project (do that with 'accounts_create' and 'projects_create' after logging in). On success the user may need to click an email confirmation link before 'login' works; tell them to confirm, then call 'login'."
      • changedInput schema / properties / email / description
        Previous value: -"Email address"New value: +"Email address — becomes the login identifier and must be unique"
      • changedInput schema / properties / firstName / description
        Previous value: -"First name"New value: +"User's first name"
      • changedInput schema / properties / lastName / description
        Previous value: -"Last name"New value: +"User's last name"
      • changedInput schema / properties / password / description
        Previous value: -"Password"New value: +"Password for the new account; choose a strong value"
      • changedInput schema / properties / referralCode / description
        Previous value: -"Referral code (optional)"New value: +"Optional referral code, if the user was invited by another customer"
  4. 15 tool updatesv0.2.6
    • First observedaccounts_create
    • First observedaccounts_list
    • First observedaccounts_use
    • First observedcli
    • First observedconfig_remove
    • First observedconfig_show
    • First observedconfig_use
    • First observedlogin
    • First observedlogin_direct
    • First observedlogout
    • First observedprojects_create
    • First observedprojects_delete
    • First observedprojects_list
    • First observedprojects_use
    • First observedsignup

TDQS

A3.8/5.0

Scored across 175 tools

Disambiguation3/5

Descriptions are unusually thorough and cross-reference siblings explicitly ('use X instead of Y'), so most boundaries are clear. However, with 175 tools there are genuine overlaps: convenience wrappers (workflows_file_handler_add vs workflows_step_add), preview/get pairs (charts_preview vs dashboards_widget_preview vs dashboards_data), and catch-all escape hatches (cli, fetch, api) that duplicate the dedicated tools' scope. An agent must read carefully to pick correctly, so some overlap exists despite good prose.

Naming Consistency4/5

Names overwhelmingly follow a snake_case prefix_noun_verb or prefix_verb convention (email_templates_update, menus_update_item, dashboards_add_chart, pay_subscriptions_cancel, workflows_step_add). Minor deviations exist: several unprefixed top-level tools (login, signup, logout, docs, cli, fetch, api) and shorthand pay_* names break the resource-prefix pattern. Still largely predictable.

Tool Count1/5

175 tools is an extreme mismatch for a single MCP server, far past the 50+ threshold. Even granting that Anythink is a full backend platform, cramming project, entity, data, workflow, payment, email, auth, and search management into one surface is unwieldy and forces agents to select blind. This module should be decomposed into several scoped servers.

Completeness4/5

Coverage is remarkably broad: entities, fields, data, RLS, users, roles, menus, dashboards, charts, workflows, integrations, payments, email, search, secrets, files, API keys, projects and accounts all have full lifecycle tools. Only minor, explicitly acknowledged gaps exist (no refund tool, no way to remove a single offer code, no trigger-editing tool), which agents can work around.

Maintenance

ActivityMaintained
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    The Stripe Model Context Protocol server allows you to integrate with Stripe APIs through function calling. This protocol supports various tools to interact with different Stripe services.
    18,973 npm
    1,953
    -
  • A
    license
    Not graded
    quality
    Not graded
    maintenance
    A Model Context Protocol server that helps users migrate subscription businesses from RevenueCat to Adapty through natural language interactions with LLMs like Claude Desktop.
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Enables comprehensive management of Directus instances through tools for schema manipulation, content CRUD operations, and dashboard management. It allows AI assistants to programmatically interact with collections, fields, relations, and workflow automation using the official Directus SDK.
    20
    14 npm
    MIT