Anythink-MCP
OfficialManage Anythink accounts, projects, and project backends through MCP, with dedicated auth/config/project tools plus a generic CLI passthrough for all other commands.
Create/sign up/log in via email/password, Google, or direct org credentials, and log out/remove saved profiles.
Inspect, switch, and remove local CLI profiles/config.
List, create, and select billing accounts.
List, create, connect to, and delete projects.
Run any
anythinkCLI command through theclitool, covering entities, fields, data, search, workflows, users, files, roles, api-keys, menus, integrations, pay, oauth, migrate, plans, api/docs, and more.Use
--jsonwhere supported for machine-readable output and--yesfor destructive command confirmation.
Allows logging in via Google OAuth for authentication.
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.
░███ ░██ ░██ ░██ ░██
░██░██ ░██ ░██ ░██
░██ ░██ ░████████ ░██ ░██ ░████████ ░████████ ░██░████████ ░██ ░██
░█████████ ░██ ░██ ░██ ░██ ░██ ░██ ░██ ░██░██ ░██ ░██ ░██
░██ ░██ ░██ ░██ ░██ ░██ ░██ ░██ ░██ ░██░██ ░██ ░███████
░██ ░██ ░██ ░██ ░██ ░███ ░██ ░██ ░██ ░██░██ ░██ ░██ ░██
░██ ░██ ░██ ░██ ░█████░██ ░████ ░██ ░██ ░██░██ ░██ ░██ ░██
░██
░███████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.
Homebrew (macOS / Linux) — recommended
brew install anythink-cloud/tap/anythinkThis installs both commands onto your PATH:
anythink— the CLIanythink-mcp— the MCP server (see MCP server)
Or tap first, then install:
brew tap anythink-cloud/tap
brew install anythinkUpdate to the latest release:
brew upgrade anythinkUninstall:
brew uninstall anythinkmacOS / Linux — download binary
Grab the latest release for your platform from the Releases page:
Platform | Binary |
macOS (Apple Silicon) |
|
macOS (Intel) |
|
Linux (x86_64) |
|
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-cliBuild from source
git clone https://github.com/anythink-cloud/anythink-cli
cd anythink-cli
dotnet build
dotnet run --project src/AnythinkCli.csproj -- --helpGetting 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 listYour 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 profilesignup 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 accountExamples
anythink accounts create --name "Acme Ltd" --email billing@acme.com
anythink accounts use a1b2c3d4projects
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 projectOptions — projects create
Flag | Description |
| Deployment region (e.g. |
| Plan ID (see |
Examples
anythink projects create "My App" --region lon1
anythink projects use a1b2c3d4
anythink projects delete a1b2c3d4 --yesconfig
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 profileProfiles 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 dataOptions — entities create
Flag | Description |
| Enable row-level security |
| Make the entity publicly readable |
| Lock new records (prevent direct creation) |
| Mark as a junction (many-to-many) table |
Examples
anythink entities create orders --rls
anythink entities get customers
anythink entities delete temp_data --yesfields
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 fieldOptions — fields add
Flag | Description |
| Field type: |
| Mark the field as required |
| Enforce a unique constraint |
| Add a database index |
| 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 --yesdata
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 JSONLOptions — data list
Flag | Description |
| Records per page (default: 20) |
| Page number (default: 1) |
| Field filters — JSON ( |
| Output raw JSON instead of table |
| Stream all pages as sequential JSON objects (requires |
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 |
|
| Equal / not equal |
|
| Comparisons |
|
| Case-insensitive substring |
|
| Case-insensitive prefix/suffix |
|
| Any of a list |
|
| Empty / not empty |
|
| Has / lacks related records |
|
Options — data create / data update
Flag | Description |
| 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 --yesExport 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 --yesFlag ( | Description |
|
|
| Same syntax as |
| Columns to export, in order. CSV defaults to the entity's fields |
| Records per request (default 200, max 1000) |
| 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 |
| CSV only: see below |
Flag ( | Description |
|
|
| Validate and report; nothing is sent |
| Parallel creates (default 4, max 16) |
| Write skipped and failed rows, with an |
| Drop columns that aren't fields on the entity instead of rejecting the row |
| 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 0000and 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 (
00123stays00123); integers and decimals are parsed with.as the decimal separator (1,5is rejected, never guessed); booleans accepttrue/false,1/0andyes/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,409and422are 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_idandlockedare 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
nullrather thanfalse.Uncertain failures: only
429/503responses 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 asUNCERTAIN: 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 importanddata exportread 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.
search
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 returnsOptions — search query
Flag | Description |
| Comma-separated entity names. Default: all indexed entities. |
| Filter expression, e.g. |
| Comma-separated sort fields, e.g. |
| Comma-separated fields to compute facet counts on. |
| Highlight matched terms in results. |
| Page number (default: 1). |
| Results per page (1-100, default: 20). |
| Use the unauthenticated |
| 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 (runrehydrateafter 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 workflowTrigger types — workflows create --trigger <type> (not case-sensitive; default Manual)
Type | Fires | Required flag | Other flags |
| When run by hand, on an entity |
| |
| When an event happens, such as a record being created |
|
|
| On a cron schedule |
| |
| When its API route is called |
|
--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 |
| Workflow description |
| Enable the workflow straight away |
| Read the |
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 83users
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 userOptions — users invite
Flag | Description |
| 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 --yesfiles
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 fileOptions — files list
Flag | Description |
| Page number |
| Files per page (default: 25) |
Options — files upload
Flag | Description |
| Make the file publicly accessible |
Examples
anythink files list
anythink files upload logo.png --public
anythink files upload export.csv
anythink files delete 12 --yesView 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 itOptions — email templates show
Flag | Description |
| Print the rendered HTML (with sample data) instead of the source |
Options — email templates update
Flag | Description |
| New subject line |
| File with the new content (use |
| The new content, passed inline (use this or |
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 to render (default: |
| File with the content (use |
| The content, passed inline |
| Optional shell HTML to render against (use |
| Optional shell HTML, passed inline |
Options — email shell update (pass exactly one)
Flag | Description |
| File with the new shell HTML (use |
| The new shell HTML, passed inline |
| 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 --resetroles
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 roleOptions — roles create
Flag | Description |
| Human-readable description of the role |
Examples
anythink roles list
anythink roles create editor --description "Can edit content"
anythink roles delete 5 --yesapi-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 keyOptions — api-keys create
Flag | Description |
| Required. Comma-separated permission names, e.g. |
| Days until expiry (default: 90, max: 365) |
| Allow |
| Save the new key directly to a CLI profile instead of printing it |
| Print the response as JSON to stdout (the key is in this output — handle carefully) |
| 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.txtIf 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 --yesmenus
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 menusOptions — menus add-item
Flag | Description |
| Lucide icon name (e.g. |
| Display name (defaults to entity name, title-cased) |
| Parent menu item ID for nesting under a group |
Options — menus update-item (only the fields you pass change)
Flag | Description |
| New display name |
| New Lucide icon name |
| Point the item at an entity's page (instead of |
| Point the item at any path (instead of |
| Parent item ID to nest under; |
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,300charts
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 plotOptions — charts create, charts update and charts preview
Flag | Description |
| Entity whose records the chart plots |
|
|
| Field for the x axis, or the slices of a pie |
| Bucket a date |
| Numeric field to aggregate (needed unless |
|
|
| Field that splits each bar or point into a second breakdown |
| Filter such as |
|
|
| Row limit, sort order and running total |
| A goal or warning level on a stat or gauge |
| Compare with the previous period |
| Where the data comes from. Platform charts use |
| Anything else, as a JSON object, e.g. |
|
|
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 30ddashboards
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 |
| Put a chart on the new dashboard. Repeat for several |
| Description, who can see or edit it, and whether it is your landing or the project default dashboard |
| Other settings as a JSON object: |
| The fields to change; the rest are left alone |
| Widget title (defaults to the chart's name) |
| 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 |
| Only these widgets; most rows to show per widget (default 20) |
| Widget type ( |
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 --jsonsettings
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 originKeys — settings set
Key | Value |
| Text |
|
|
|
|
| Role ID for newly registered users |
|
|
| URL |
|
|
| Number of days |
|
|
| Text |
| 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 trueintegrations
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 providerAPI-key providers — integrations connect
Flag | Description |
| API key for the provider. If omitted, you'll be prompted (input is hidden). |
| Friendly name for this connection (default: |
| 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 |
| Friendly name for this connection |
| Make this a user-scoped connection |
| Local callback port (default: |
| Don't try to open the browser — just print the URL |
| How long to wait for the callback (default: |
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 mainRunning operations — integrations execute
Flag | Description |
| Input parameter as |
| All inputs as a JSON object. |
| Print the full JSON response (default: just the |
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> --yespay
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 codeCommands 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 number |
| 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 |
|
Plan writes |
|
Payment reads/writes |
|
Apple credentials, admin recovery ( | 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 entitlementoauth
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 secretGoogle 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/callbackExamples
anythink oauth google status
anythink oauth google configureapi
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 |
| Source profile name (required) |
| Destination profile name (required) |
| 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-runplans
List available Anythink plans.
anythink plans List plans
anythink plans --json Output as JSONMCP 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/mcpPrefer 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 pageConfigure
For Claude Code, register it in one command:
claude mcp add anythink -- npx -y @anythink-cloud/mcpOr 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 Desktop |
|
Cursor |
|
VS Code |
|
Cline |
|
Windsurf |
|
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 |
| Create a new Anythink account |
| Log in with email and password |
| Store credentials directly (org ID + API key or JWT) |
| Remove a saved profile |
| List all profiles |
| Switch active profile |
| Remove a profile |
| List billing accounts |
| Create a billing account |
| Set the active billing account |
| List projects |
| Create a project |
| Connect to a project |
| Delete a project |
| 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
An Anythink account (free tier works)
Setup
git clone https://github.com/anythink-cloud/anythink-cli
cd anythink-cli
dotnet buildRunning locally
dotnet run --project src/AnythinkCli.csproj -- --help
dotnet run --project src/AnythinkCli.csproj -- projects list
dotnet run --project src/AnythinkCli.csproj -- entities listReleases
Releases are automated via GitHub Actions. Push a version tag to trigger a build:
git tag v1.2.0
git push origin v1.2.0The 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
└── .gitignoreLicense
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
102 toolsaccounts_createAInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Organization name, e.g. 'Acme Inc' — shown on invoices and in the dashboard | |
| Yes | Billing email address that receives invoices and receipts | ||
| currency | No | ISO currency for billing: 'gbp', 'usd', or 'eur'. Defaults to 'gbp'. Cannot be changed later. | gbp |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and largely meets it: it discloses the auth prerequisite, the side effect that the new account becomes active, the downstream impact on projects_create/projects_list, and the return shape (id and name). It stops short of error/failure behavior (duplicate name or email, permission errors), which is the remaining gap for a mutating tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Five short sentences, each carrying unique information: purpose, auth prerequisite, side effect, return value, and alternative. The most decision-relevant constraints (login, already-have-an-account) are front-loaded rather than buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter create tool with no annotations and no output schema, the description covers purpose, auth, side effects, return values, and the alternative tool. An agent has everything needed to decide whether and how to call it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 are already fully documented including the non-changeable currency constraint. The description adds no parameter-level meaning beyond the schema, making the baseline 3 correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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'). This clearly separates it from siblings like accounts_list and accounts_use without requiring the schema to be opened.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names prerequisites ('Requires a prior platform login (use the login tool first)') and an alternative workflow ('Most users need only one account — call accounts_list first to check whether a suitable one already exists'). Both the when-to-use and the anti-pattern are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
accounts_listAInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the behavioral burden, and it discloses the auth requirement, the returned field set including status enum values (Active/Suspended/Canceled), and which account is flagged active. It omits pagination, ordering, and error behavior, keeping it below a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences that are front-loaded with the primary action, then prerequisites, then return/next-step guidance. Every sentence earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-parameter list tool with no output schema and no annotations, the description covers purpose, auth prerequisite, return values, and the follow-up tool, which is everything an agent needs to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so the baseline is 4 per the rubric. The empty schema leaves nothing for the description to clarify about inputs, and it correctly focuses on the (absent) output shape instead.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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) plus the scope restriction ('the logged-in user belongs to'). It is clearly distinct from siblings like accounts_create and accounts_use.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly gives a prerequisite ('Requires a prior platform login — use the login tool first') and a downstream action ('pick one with accounts_use before creating or listing projects'). Names both the alternative tool 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.
accounts_useAInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Billing account id — full UUID or a unique leading prefix. Get ids from 'accounts_list'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses a state mutation, the prerequisite, accepted input forms, and the failure mode ('error if no account matches'). It does not state whether the selection persists across sessions or how it interacts with a previously set account, leaving 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the core action, then prerequisites/dependents, then input and return behavior. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 supplies the return contract (resolved account name and id, or an error). Combined with the single documented parameter and explicit prerequisites, 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema description already explains the UUID-or-prefix format and points to 'accounts_list'. The description repeats this rather than adding new semantics, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Set the active billing account that project commands operate on'), and the scope clause distinguishes it from the accounts_* and projects_* siblings. An agent can tell it selects context rather than creating/listing accounts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit prerequisite ('after login'), a conditional ('when you belong to more than one account'), and downstream tools that depend on it ('projects_list', 'projects_create', 'projects_use'). It also names the alternative for discovering valid ids ('accounts_list').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apiApiBRead-onlyInspect
List all API endpoints (platform + dynamically generated entity routes)
| Name | Required | Description | Default |
|---|---|---|---|
| base_url | No | Override base URL for this command |
TDQS
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 scope context (that the listing includes both platform routes and dynamically generated entity routes), which is not derivable from the annotations, but says nothing about pagination, output shape, or auth needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with an efficient parenthetical; no filler. Slightly cryptic on its own but appropriately sized for a simple list command.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only discovery tool with one optional param and no output schema, the description covers what is listed but not the form of the results or any scoping behavior (e.g. whether entity routes require prior entity definitions). Adequate but with a clear gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With only one optional parameter at 100% schema coverage, the schema already documents base_url fully. The description adds no extra meaning about when or why to override the base URL, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (API endpoints), and the parenthetical 'platform + dynamically generated entity routes' gives real scope. The generic tool name 'api' is rescued by the description, though it does not explicitly distinguish itself from near-neighbors like docs, cli, or fetch.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites, and no mention of alternatives such as docs or cli for discovering the API surface. The agent must infer usage from the verb alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
api_keys_createApi keys: createAInspect
Create an API key. The raw key is shown once and never retrievable.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name for the API key (e.g. "github-actions", "backup-script") | |
| save_as | No | Save the new key directly into a CLI profile instead of printing it | |
| expires_in | No | Days until the key expires (default: 90, max: 365 unless --no-expiry-cap) | |
| permissions | No | Comma-separated permission names, e.g. "data:read,data:create" | |
| no_expiry_cap | No | Allow --expires-in greater than 365 days (use sparingly) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false and openWorldHint=false, so safety is covered. The description then adds the one genuinely non-obvious behavioral fact: the raw key is returned once and can never be retrieved again, which tells the agent the response value must be captured immediately rather than re-fetched.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the action and followed by the highest-value warning. 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.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 100% schema coverage for all five parameters and no output schema, the description is nearly self-sufficient for invocation; the one-time-secret note covers the biggest return-value risk. It could go slightly further by noting that save_as suppresses the printed key, tying the parameter to that behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all five parameters (name, save_as, expires_in, permissions, no_expiry_cap) are already fully documented in the schema. The description adds no extra semantics about defaults, formats, or interactions, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Create) and resource (an API key), which unambiguously separates it from api_keys_list and api_keys_revoke. It stops short of naming those siblings, so an agent still infers the boundary from the tool name rather than the prose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description offers no when-to-use guidance, no prerequisites (e.g. required role or scope), and no mention of alternatives such as reusing an existing key via api_keys_list. It is a bare imperative with no routing information.
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: listARead-onlyInspect
List API keys for the current user
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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 the 'current user' scoping constraint, but says nothing about pagination, ordering, or whether key secrets are redacted, which are the behaviors an agent would actually wonder about here.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single seven-word sentence with the scope constraint front-loaded and no filler. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 is nearly sufficient. The one open question it leaves is what a listed key object contains (notably whether the secret value is included), which for API-key tooling is material but not essential to invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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; there is no parameter syntax the description needs to compensate for. Nothing in the description is required to clarify inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (list) and resource (API keys) plus the scope qualifier 'for the current user', so the agent knows exactly what is returned. It distinguishes itself from siblings like api_keys_create and api_keys_revoke by verb alone, but never names them or explicitly rules out listing other users' keys.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied by the verb and scope; there is no statement of when to call this versus api_keys_create or api_keys_revoke, nor any prerequisite or exclusion. The self-evident read operation keeps it from scoring lower, but no explicit routing guidance is provided.
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: revokeCDestructiveInspect
Revoke an API key by ID
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | API key ID to revoke |
TDQS
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 without the description. However, the description itself adds no behavioral context such as whether revocation is permanent, whether it takes effect immediately, or what happens to in-flight requests using the key.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence that is front-loaded with the action and resource. There is no filler, though it is close to the minimum viable length rather than a tightly optimized definition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter destructive tool with annotations covering the safety profile, the description is functionally adequate. It still omits any note about irreversibility, idempotency, or error behavior, which would matter for a destructive operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter exists and schema description coverage is 100% ('API key ID to revoke'), so the schema fully documents it. The phrase 'by ID' in the description adds nothing beyond that baseline, warranting the standard 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb (revoke) and resource (an API key) with the identifying dimension (by ID), so it is unmistakable against siblings like api_keys_list or api_keys_create. It does not explicitly name or contrast those siblings, keeping it 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus api_keys_list or api_keys_create, no prerequisites, and no note about irreversibility or preconditions such as key state. The agent must infer all context from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cliAInspect
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'. For destructive commands add '--yes' to skip confirmation prompts. Add '--json' where supported for machine-readable output.
| Name | Required | Description | Default |
|---|---|---|---|
| command | Yes | CLI 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
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that output is returned, that destructive commands may prompt unless '--yes' is added, and that '--json' is available for machine-readable output. It does not cover authentication, error handling, or general side effects, but does more than the minimum.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four compact sentences with zero waste. It front-loads the core purpose and fallback role, then adds examples and flag guidance in a logical order.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter generic CLI wrapper with no output schema and no annotations, this covers the main selection and invocation concerns. It could be slightly more complete about error behavior or permission requirements, but the essential information is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single command parameter is fully described in the schema, so baseline is 3. The description adds useful flag semantics beyond the schema, especially '--yes' for skipping confirmation prompts and '--json' for machine-readable output, plus concrete examples of command formatting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Run any Anythink CLI command') and explicitly routes the agent away from dedicated tools toward this fallback. The scope and intended use are unambiguous even against a large sibling set.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use guidance ('Prefer the dedicated tools; use this for anything they don't cover') and operational instructions like adding '--yes' for destructive commands and '--json' where supported. No inference is needed to select this tool correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
config_removeAInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| profile | Yes | Name of the profile to remove from local config. See 'config_show' for valid names. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden, and it does so well: it discloses the exact scope of destruction (local credentials and settings only), clarifies what is NOT affected (server-side project, tokens), and specifies the return behavior ('confirmation, or a not-found message'). This is materially more than the schema conveys.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tightly packed sentences, front-loaded with the action and scope, then the boundary condition, then the discovery hint and return behavior. No filler; every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter local mutation with no annotations and no output schema, the description covers everything an agent needs: scope of deletion, exclusion of server-side effects, the sibling alternative, the prerequisite for valid names, and the return outcome. Nothing is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the single 'profile' parameter is already fully documented, including the config_show pointer. 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.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Delete a saved project profile from the local CLI configuration') with the scoping qualifier 'local' front-loaded. The agent can immediately distinguish this from server-side siblings like projects_delete. No ambiguity about what is being removed.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly delineates when-not-to-use ('does not delete the project or revoke tokens server-side') and names the alternative tool ('to remove the project itself, use projects_delete'). It also provides the prerequisite discovery step ('Run config_show to see profile names'). Fully self-routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
config_showAInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden — and it discloses 'Reads local config only — makes no network calls', which tells the agent this is a side-effect-free local read with no auth/network prerequisites. It also enumerates the returned fields. It stops short of stating whether anything is cached or mutated locally, 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the core purpose, then return contents, then usage routing, then a behavioral caveat. Every sentence adds information an agent needs; nothing is repeated from structured fields.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 compensates by enumerating the response shape for both profiles (name, org id, auth method, alias, platform) and platforms (URLs, billing account, login status). Combined with the usage routing and the no-network disclosure, an agent has everything required to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 clarify beyond what an empty schema already communicates.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Show the local CLI configuration') and precisely delineates scope: all saved project profiles and platform logins plus which is active. An agent can distinguish it from config_use, config_remove, and logout 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names what to use it for: discovering profile names for 'config_use', 'config_remove', or 'logout', and checking which project the 'cli' tool targets. That is concrete when-to-use routing plus named alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
config_useAInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| profile | Yes | Name of an existing profile to make active. See 'config_show' for valid names. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden; it discloses that this mutates global state (which profile cli operates against), that no re-authentication is needed, and the error behavior when the profile is absent. It does not describe whether the switch is persistent across sessions or reversible, which 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core action, then prerequisites, then return behavior in four tight sentences with no filler. Slightly overlaps with the schema's parameter note but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter state-switching tool with no annotations and no output schema, the description supplies prerequisite, discovery path, no-reauth behavior, and return semantics. Everything an agent needs to call it correctly is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single parameter's schema description already tells the agent to consult 'config_show' for valid names. The description largely repeats that guidance rather than adding format or constraint detail, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Switch) and resource (active project profile), and scopes the effect to the 'cli' tool's commands. An agent can distinguish it from config_show (read), config_remove (delete), and projects_use 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to use it 'to move between already-connected projects without re-authenticating', states the prerequisite that the profile must already exist (created by 'projects_use' or 'login_direct'), and routes to 'config_show' for discovery of valid names. 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.
data_createData: createCInspect
Create a new record
| Name | Required | Description | Default |
|---|---|---|---|
| data | No | JSON object with field values, e.g. '{"name":"Alice","age":30}' | |
| entity | Yes | Entity name |
TDQS
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 write/safe profile is covered. The description adds nothing beyond that: no conflict/duplicate behavior, no validation expectations, no note that partial or malformed JSON data will fail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four words with no waste, but this is under-specification rather than conciseness — the single sentence conveys no information an agent could not get from the tool name and annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a write tool taking an entity name plus a free-form JSON payload, the description should say something about entity semantics, required field values, or the shape of a successful result. None of that is present, and there is no output schema to fill the gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both `entity` and `data` documented (including a JSON example), so the schema carries the parameter burden. The description contributes zero additional meaning, which is the baseline expectation when coverage is complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Create a new record" essentially restates the tool name (data_create) with no differentiating detail. Among siblings like entities_create, accounts_create, projects_create, and data_update, an agent cannot tell what "record" means here or which collection this writes to.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites, and no mention of alternative creation tools such as entities_create or accounts_create. The agent must infer everything from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
data_deleteData: deleteCDestructiveInspect
Delete a record
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Record ID | |
| entity | Yes | Entity name |
TDQS
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 disclosed structurally. The description adds nothing on top: it does not say whether the delete is hard or soft, whether it cascades to related records, whether it is reversible, or what permissions are needed. With annotations carrying the safety burden the bar is lower, but the description contributes zero extra behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The three-word fragment is not concise so much as under-specified; it is front-loaded but contains no informational payload. As with a bare single-word description, brevity here reflects omission rather than efficiency.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 definition omits effect scope, recoverability, and permission requirements. The annotations cover the destructive flag, but an agent still lacks the context needed to call this safely, and the low parameter count does not excuse the gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters (id, entity) are documented in the schema itself. The description adds no syntax, format, or scoping detail beyond that, which lands squarely on the baseline of 3 for a fully covered schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description "Delete a record" essentially restates the tool name (data_delete) and title (Data: delete) with a generic resource noun. It gives no way to distinguish this from the many sibling delete tools (entities_delete, fields_delete, files_delete, secrets_delete, users_delete) or from data_get/data_create/data_update. This is tautological rather than differentiating.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites, no exclusions, and no mention of any alternative tool. An agent cannot infer from the text when data_delete is the right choice versus entities_delete or files_delete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
data_getData: getBRead-onlyInspect
Get a single record by ID
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Record ID | |
| entity | Yes | Entity name |
TDQS
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 no further behavioral details—such as permissions, error behavior when the ID is absent, or pagination—so it remains minimum viable without contradicting annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a single front-loaded sentence with no filler, which is appropriately brief for a simple lookup. It wastes nothing, though it is so terse that structure adds little beyond brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read tool with a fully documented schema, the description is serviceable but leaves the required entity argument entirely to the schema and gives no routing hints among sibling data_* tools. It is minimally complete, not comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both 'entity' and 'id' are documented in the schema. The description only alludes to the ID parameter and does not add meaning 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.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Get') and resource ('single record') plus scoping ('by ID'), which is clear. It doesn't explicitly name the required 'entity' parameter or distinguish itself from data_list/search_query, so sibling differentiation is only implied.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this instead of data_list, data_create, or data_update, nor any prerequisites. The 'by ID' clause implies a known ID is needed, but that is the extent of usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
data_listData: listCRead-onlyInspect
List records in an entity
| Name | Required | Description | Default |
|---|---|---|---|
| all | No | Stream all pages to stdout as sequential JSON objects (requires --json). Each object contains one page of results. | |
| page | No | Page number (default: 1) | |
| limit | No | Records per page (default: 20) | |
| entity | Yes | Entity name | |
| filter | No | Field filters: JSON like {"status":"draft","price":{"gte":10}} or field=value pairs like 'status=draft&price=GTE:10' |
TDQS
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 nothing further – no mention of pagination defaults, the streaming 'all' behavior, or filter semantics, despite these being non-obvious traits of the tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The single phrase is front-loaded and wastes no words, but for a tool with filtering, pagination, and streaming options it is under-specified rather than genuinely concise. It reads as a title restated rather than a deliberate one-line summary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 100% schema coverage and readOnly annotations, the structured fields carry most of the burden and no output schema is needed. The gap is routing: nothing tells the agent how this list operation relates to data_get, search_query, or entities_list, which the description should ideally address.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 filter syntax and pagination) are documented in the schema itself. The description only echoes the 'entity' parameter ('in an entity') 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('List') and resource ('records in an entity'), so the operation is immediately understandable. However, it offers no differentiation from sibling read tools like data_get, search_query, or entities_list, leaving the agent to infer scope from the name alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance on when to use this tool versus alternatives such as data_get (single record) or search_query (filtered queries), nor any stated prerequisites. Usage is only implied by the word 'List'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
data_rlsData: rlsCDestructiveInspect
View or set RLS (row-level security) user access on a record
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Record ID | |
| user | No | User ID to grant access to | |
| entity | Yes | Entity name | |
| readonly | No | Grant read-only access (default: full access) |
TDQS
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 partly covered. The description adds only the vague 'view or set' dual-mode and says nothing about what 'set' destroys (existing access grants), whether it replaces or appends, or what the response looks like — a meaningful gap for a tool flagged destructive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with the resource front-loaded and no filler. Nothing to trim.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, dual-mode tool with no output schema and four parameters, the description is too thin: it never explains how view vs set is triggered (presumably the presence of `user`), nor the effect of `readonly`, nor what happens to existing access. An agent would have to guess before invoking a destructive call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with each of the four parameters (id, user, entity, readonly) fully documented in the schema itself. The description adds no format, default, or interaction detail 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.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb pair (view/set) and resource (RLS user access) scoped to a record, so it is distinguishable from data_get/data_update siblings. However, the dual-mode 'view or set' is never resolved — the description doesn't say which input selects which mode, leaving the actual operation ambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no conditions, and no reference to alternatives such as data_update or roles_permissions_add. An agent cannot tell from the description whether this is the right tool for granting a user access versus some other permission mechanism.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
data_updateData: updateCDestructiveInspect
Update a record
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Record ID | |
| data | No | JSON object with fields to update | |
| entity | Yes | Entity name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false, and openWorldHint=false, so the safety profile is partially covered. The description adds nothing on top: it does not say whether unspecified fields are preserved or cleared, whether the entity must already exist, or what happens on an unknown id — all critical for a destructive mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three words with zero waste, but this is under-specification rather than conciseness. Nothing is front-loaded because there is nothing to front-load; the description fails to earn its place by omitting anything actionable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, non-classified mutation tool with no output schema, the description should at least state the replace-vs-merge behavior and failure modes. The annotations cover only the destructive flag, leaving the description materially incomplete for an agent deciding how to build the update payload.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (id, entity, data are all documented inline), so the baseline is 3. The description adds no meaning beyond the schema — it does not explain the entity namespace or the JSON field semantics of "data" — but the schema itself carries the parameter documentation adequately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Update a record" essentially restates the tool name and title (data_update / "Data: update") without adding scope, entity type, or any distinction from siblings like data_create, data_get, data_delete, or data_list. It is a verb+resource, but so generic that an agent cannot tell what a "record" is here or how this differs from entities_update or fields_update.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites, and no named alternative (e.g., entities_update vs data_update vs fields_update). The only implied usage is the generic CRUD inference that "update" means modify an existing record, which the name already conveyed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
docsDocsARead-onlyInspect
Print the full CLI reference (markdown or --json for AI/tooling consumption)
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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 that output is a CLI reference in markdown or JSON form, which is useful context, but it discloses little beyond the annotation-covered safety trait.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler; the verb and resource come first and the output-format detail follows compactly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only documentation tool with annotation coverage and no output schema, the description is essentially complete. The only loose end is what the '--json' invocation means for a zero-parameter MCP tool, which is left unexplained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes 0 parameters, so the baseline is 4 and the schema cannot be enriched further. The description mentions a '--json' option that the empty schema does not expose, which is a slight mismatch but does not mislead about any actual parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Print the full CLI reference'), so an agent immediately knows the outcome. However, it does not differentiate itself from the sibling 'cli' tool (or 'api'), leaving ambiguity about which reference-listing tool to pick.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The parenthetical 'markdown or --json for AI/tooling consumption' hints at intended consumption modes, but there is no explicit when-to-use, when-not-to-use, or alternative-tool guidance relative to siblings like 'cli' and 'api'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
entities_createEntities: createCInspect
Create a new entity
| Name | Required | Description | Default |
|---|---|---|---|
| rls | No | Enable row-level security | |
| name | Yes | Entity name (e.g. 'customers', 'orders') | |
| public | No | Make entity publicly queryable (no auth required) | |
| junction | No | Mark as a many-to-many junction table | |
| lock_records | No | Prevent creation of new records via API |
TDQS
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 safety profile is covered structurally. The description adds no behavioral context beyond restating the operation, such as authorization requirements, uniqueness constraints, or side effects of creating an entity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler or redundancy. It is appropriately concise for the purpose statement, though its brevity leaves other useful information absent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a five-parameter creation tool with no output schema, the description does not explain what an entity is, when to create one, or how it relates to sibling creation tools. Annotations and schema cover safety and parameters, but the description is too thin to ensure correct selection among the many create-like siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter is already documented in the input schema. The description adds no parameter-level meaning, which is acceptable at the baseline of 3 when the schema fully does that job.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and resource: 'Create a new entity'. This distinguishes it from non-create entity siblings like entities_get or entities_delete, but it does not differentiate it from other create-style tools such as data_create or accounts_create. It is clear but lacks sibling-specific context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives, no prerequisites, and no mention of any related tools. The agent is left to infer usage entirely from the name and schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
entities_deleteEntities: deleteBDestructiveInspect
Delete an entity and all its data
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Entity name to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is covered. The description usefully adds that all entity data is removed, but it says nothing about irreversibility, required permissions, or confirmation needs. It adds one meaningful detail beyond the annotations, not rich 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler. For a one-parameter destructive tool, this is appropriately sized and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given one required parameter, full schema coverage, and annotations carrying the destructive safety signal, the description is largely complete: it states the action and the cascade scope. A brief note on permanence or permissions would make it fully self-sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter has 100% schema description coverage ('Entity name to delete'), so the schema already does the heavy lifting. The description adds no naming format, ID-vs-name distinction, or other parameter nuance beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Delete') and resource ('an entity') and adds the important scope 'all its data', which separates it from entities_get, entities_update, and entities_create. It does not explicitly route the agent away from siblings like data_delete or fields_delete, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no exclusions, and no named alternatives. The agent must infer that this tool is for deleting an entity rather than updating, creating, or deleting related resources; the description offers no selection help.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
entities_getEntities: getCRead-onlyInspect
Get entity details and fields
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Entity name |
TDQS
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 only 'details and fields', which hints at the payload but discloses nothing about lookup failure behavior, name matching semantics, or permissions beyond what the annotations already imply.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Six words, front-loaded with the verb and resource, with no filler. It is efficient, though the terseness edges toward under-specification rather than optimal information density.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read tool with annotations covering safety, this is minimally adequate; there is no output schema, so the description could reasonably note whether the returned fields include related field definitions, but the omission is not fatal.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single required parameter with 100% schema description coverage ('Entity name'), so the schema does the work. The description adds no extra meaning such as accepted name formats or case sensitivity, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (get) and resource (entity) plus what is returned (details and fields), which is enough to know it is a single-record read. However, it does not differentiate from close siblings such as entities_list, entities_update, or fields_get, so an agent must inspect the schemas to route correctly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites, and no named alternative. The description never says to prefer this over entities_list when fetching one known entity, nor what happens when the name does not resolve.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
entities_listEntities: listBRead-onlyInspect
List all entities
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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 word 'all' adds a small amount of scope information (no filtering applied), but the description says nothing about pagination limits, result size, or ordering, which matters for a list operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three words with zero waste and the scope constraint front-loaded. It is arguably terse for a list tool, but nothing in the sentence is filler or redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read tool the definition is nearly complete, but there is no output schema, so the description could reasonably state what is returned (entity identifiers, pagination behavior). That gap keeps it at a minimum-viable level.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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. There are no parameter semantics for the description to clarify or omit.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (list) and resource (entities), and the scope word 'all' distinguishes it from entities_get, which retrieves a single entity. It is clear but offers no further differentiation from siblings such as entities_create/update/delete beyond the verb itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus entities_get, entities_list-style searches, or other list siblings, and no mention of prerequisites. The agent must infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
entities_updateEntities: updateCDestructiveInspect
Update entity settings
| Name | Required | Description | Default |
|---|---|---|---|
| rls | No | Enable/disable row-level security (true/false) | |
| name | Yes | Entity name to update | |
| public | No | Set public access (true/false) | |
| lock_records | No | Enable/disable record locking (true/false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=true, so the agent knows this is a destructive write operation. The description adds no behavioral context beyond that—it does not explain what gets modified, whether changes are reversible, required permissions, or side effects. With annotations covering the safety profile, it still fails to add useful behavioral detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, which would normally be positive, but for a destructive 4-parameter update tool the brevity leaves important specification gaps. It is front-loaded but under-specified rather than efficiently scoped.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive update tool with no output schema, the description should provide more context about what settings are updated, how the required name parameter is used, and any safety or permission implications. Annotations and schema help, but the description itself is too thin to be complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema itself documents each parameter clearly (rls, name, public, lock_records). The description adds no meaning beyond the schema, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The verb 'update' and resource 'entity' are clear, but 'settings' is vague and does not distinguish this tool from siblings like entities_create, entities_get, or entities_delete. An agent knows it updates entities, but not which settings or how it differs operationally from other entity tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives such as entities_create or entities_delete, nor any prerequisites or exclusions. It states only what the tool does, leaving usage context to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fetchFetchCDestructiveInspect
Make an authenticated API request to the active project
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | Request body (JSON string) | |
| path | Yes | API path (e.g. /integrations/definitions/slack) | |
| method | No | HTTP method (default: GET) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false and destructiveHint=true, but the description neither confirms nor contradicts this, and it omits crucial context: which HTTP methods are permitted, whether arbitrary paths are allowed, what authentication scopes apply, whether side effects can occur, and whether the tool is rate-limited. For a tool that can mutate the active project, this is a large gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short sentence, front-loaded and without waste. It is efficient, though its brevity comes at the cost of completeness rather than being optimally informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, open-ended API request tool with a rich parameter set and no output schema, the description is severely lacking. It should explain the permissible scope (which APIs), method restrictions, authentication behavior, and any safety warnings. With no output schema, the description also fails to indicate the structure of the response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and all three parameters (body, path, method) are documented in the schema with examples. The description adds no additional semantics beyond what the schema already provides, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a generic verb-resource pair ("Make an authenticated API request to the active project") but is essentially a raw HTTP escape hatch that could be confused with many siblings like api, cli, or integrations_execute. It does not specify what resources are reachable, what the response looks like, or how it differs from a direct API tool. It restates the tool's nature rather than carving out a distinct purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use, when-not-to-use, or alternative guidance. With ~90 siblings including api, cli, and many resource-specific tools, an agent has no way to know whether to call fetch or a dedicated tool. This is a serious omission.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fields_addFields: addCInspect
Add a field to an entity
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Field name (snake_case) | |
| type | No | Database 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 | |
| label | No | Human-readable label | |
| entity | Yes | Entity name | |
| public | No | Mark field as public | |
| target | No | Target entity name for relationship fields (many-to-one, one-to-many, many-to-many) | |
| unique | No | Enforce unique constraint | |
| default | No | Default value | |
| display | No | Display 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 | |
| indexed | No | Add database index | |
| options | No | Comma-separated option list for select display, e.g. "Running,Cycling,Rugby". Use label=value to split, e.g. "Running=running,Cycling=cycling" | |
| multiple | No | Allow multiple values on a select field | |
| required | No | Mark field as required | |
| on_delete | No | Deletion behavior: CASCADE, SET NULL, SET DEFAULT, RESTRICT (default: CASCADE). Underscores are accepted (SET_NULL, SET_DEFAULT) and normalised. | |
| name_field | No | Set as name field | |
| searchable | No | Enable full-text search on this field | |
| description | No | Field description |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false, destructiveHint=false and openWorldHint=false, so the mutation/safety profile is minimally covered. The description adds nothing beyond that: it does not state required permissions, whether field names must be unique, side effects on existing data, or which parameter combinations are valid for relationship fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with the verb front-loaded and no filler. It earns its brevity, though the size is arguably too small for a 17-parameter mutation tool rather than an issue of wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 17 parameters, no output schema, and only minimal annotations, the description leaves critical structure unexplained – notably that the chosen type determines which other parameters (target, options, display, on_delete) become relevant. An agent calling this correctly needs far more context than one sentence provides.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% across all 17 parameters, so the schema already documents types, defaults, and enum-like value lists. The description contributes no additional parameter meaning, which matches the baseline 3 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.
Does the description clearly state what the tool does and how it differs from similar tools?
"Add a field to an entity" gives a verb (add) and a resource (field), but it is essentially a restatement of the tool name/title "Fields: add" with no clarifying detail. It does not identify what kind of field, what an entity is in this domain, or how it differs from siblings like fields_update, fields_delete, or fields_get beyond the bare verb.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites, and no mention of alternatives such as fields_update for modifying an existing field or entities_create for creating the entity first. The agent must infer everything from the verb alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fields_deleteFields: deleteCDestructiveInspect
Delete a field from an entity
| Name | Required | Description | Default |
|---|---|---|---|
| entity | Yes | Entity name | |
| field_name | Yes | Field name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is covered structurally. The description adds only the 'from an entity' scoping and says nothing about permanence, whether stored field values are destroyed, or what permissions are required for a destructive schema change.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler, correctly sized for a two-parameter tool. It is arguably over-terse for a destructive operation, but nothing is wasted or buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive schema mutation with no output schema, an agent still lacks the consequences of deletion (data loss, reversibility), any required preconditions, and confirmation of what happens to existing records. The annotations signal destructiveness but the description does not contextualize it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with both required parameters documented ('Entity name', 'Field name'), so the baseline is 3. The description reinforces that field_name is scoped to entity but adds no format, naming-convention, or validation detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Delete a field') and scopes it with 'from an entity', which implicitly separates it from entities_delete and data_delete. It does not, however, name or differentiate against the close siblings fields_add, fields_update, fields_get, and fields_list, so the agent must infer the routing from the noun alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use, when-not-to-use, or alternative guidance. An agent is not told when to remove a field versus updating it, nor whether prerequisites (empty field, admin role, schema not in use) apply before deletion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fields_getFields: getBRead-onlyInspect
Get the full definition of one field (including relationship config)
| Name | Required | Description | Default |
|---|---|---|---|
| entity | Yes | Entity name | |
| field_name | Yes | Field name |
TDQS
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 one useful content-scope fact, that relationship configuration is included in the returned definition, but says nothing about failure cases (unknown entity/field) or any auth requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with zero filler, and the scope-defining phrase ('one field') plus the differentiating detail ('including relationship config') are both front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter read tool whose schema and annotations are fully populated, the description is adequate; the extra note about relationship config is the main value-add. It would be complete if it hinted at what happens when the field or entity does not exist.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with two documented string parameters, so the baseline is 3. The description adds no syntax, naming-convention, or format detail for entity or field_name beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb+resource ('Get the full definition of one field') and scopes it to a single field, which implicitly separates it from fields_list. It also flags that the payload includes relationship config, so the agent knows this is the deep-detail read rather than a summary. It stops short of naming siblings explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites, and no mention of alternatives such as fields_list or entities_get. The agent must infer that 'one field' means use this instead of the list tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fields_listFields: listCRead-onlyInspect
List fields on an entity
| Name | Required | Description | Default |
|---|---|---|---|
| entity | Yes | Entity name |
TDQS
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 nothing beyond that: no return format, pagination behavior, or permission context is provided, so it does not enrich behavioral understanding.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence fragment with zero waste. It is appropriately compact for a trivial read tool, though its extreme brevity leaves no room for any supplementary context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity, single-parameter list operation with annotations covering safety, the description is minimally adequate. However, with no output schema and no mention of return shape (list of field objects) or pagination, an agent lacks some context it might reasonably need.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the single 'entity' parameter is fully documented in the schema. The description adds no syntax, format, or constraint details beyond what the schema already provides; baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb ('List') and resource ('fields') plus scope ('on an entity'), so the core operation is unambiguous. It does not, however, explicitly distinguish itself from close siblings like fields_get or fields_update; the distinction is left to the tool name alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives such as fields_get for a single field or fields_add/update/delete. The only implied usage is the tautological 'list fields when you want to list fields,' which is not actionable routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fields_updateFields: updateCDestructiveInspect
Update properties of an existing field
| Name | Required | Description | Default |
|---|---|---|---|
| label | No | Human-readable label | |
| entity | Yes | Entity name | |
| public | No | Mark field as publicly searchable | |
| default | No | Default value | |
| display | No | Display 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 | |
| indexed | No | Add database index | |
| options | No | Comma-separated option list for select display, e.g. "Running,Cycling,Rugby". Use label=value to split, e.g. "Running=running,Cycling=cycling" | |
| multiple | No | Allow multiple values on a select field | |
| required | No | Mark field as required | |
| no_public | No | Remove public searchable flag | |
| field_name | Yes | Field name to update | |
| no_indexed | No | Remove database index | |
| searchable | No | Enable full-text search on this field | |
| description | No | Field description | |
| no_multiple | No | Restrict to a single value on a select field | |
| no_required | No | Remove required constraint | |
| no_searchable | No | Disable full-text search on this field |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false, and openWorldHint=false. The description adds only that an existing field is updated, with no disclosure of partial-update semantics, side effects, authentication needs, or how conflicting paired flags (public/no_public, indexed/no_indexed) are handled.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. It is appropriately concise, though its extreme brevity leaves no room for structure around the operation's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Annotations cover the safety profile and the schema fully documents all parameters, so the description need not repeat those. However, for a 17-parameter destructive mutation, it omits update semantics such as partial updates and how the paired 'no_' flags interact, leaving a clear gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all 17 parameters are thoroughly documented in the schema. The description adds no additional parameter meaning, making the baseline of 3 appropriate 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.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb 'Update' and resource 'properties of an existing field'. It distinguishes from sibling operations like fields_add and fields_delete by scoping the action to an existing field, though it does not explicitly name those alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus alternatives such as fields_add, fields_delete, or fields_get. There are no prerequisites, exclusions, or conditions for use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
files_deleteFiles: deleteCDestructiveInspect
Delete a file by ID
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | File ID to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the dangerous nature is conveyed structurally. The description adds nothing beyond that — no statement about irreversibility, whether deletion is soft or hard, or what happens to referencing entities.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short, front-loaded sentence with zero padding or redundancy. It is appropriately terse for a single-parameter tool, though the brevity borders on under-specification for a destructive operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, irreversible operation with no output schema, the description omits anything an agent would want before calling it: confirmation requirements, whether deletion cascades, or how the ID is discovered. The annotations cover the safety flag but not the operational consequences.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a single parameter that is fully documented ('File ID to delete'), so the schema carries the semantics. The description's 'by ID' adds no format or source detail beyond what the schema states, matching the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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') plus the keying mechanism ('by ID'), which is unambiguous. It does not distinguish itself from siblings like files_get, files_list, or files_upload, but the operation itself is unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this versus alternatives, no prerequisite conditions, and no mention of how to obtain the ID (e.g., via files_list or files_get). The agent must infer the full workflow from sibling names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
files_getFiles: getBRead-onlyInspect
Get file metadata by ID
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | File ID |
TDQS
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 that the operation returns metadata (rather than file content), which is useful context beyond annotations, but it does not describe error handling, authentication requirements, or return format details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single six-word sentence, front-loaded with the verb and resource. Every word earns its place; there is no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple and the input schema is fully documented, but there is no output schema. The description does not explain what metadata fields are returned or how errors are handled, leaving the agent to guess the response shape. Adequate but with a clear gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the single parameter 'id' is documented as 'File ID'. The description's 'by ID' adds no syntax or format detail beyond what the schema provides. 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.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Get') and resource ('file metadata') with a scoping qualifier ('by ID'), making it distinct from sibling operations like files_list, files_upload, and files_delete. However, it does not explicitly name any sibling or state what the tool is not, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, alternatives, or prerequisites are provided. The description only states the action, leaving the agent to infer that it should be used when a file ID is known, with no explicit routing to or away from sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
files_listFiles: listBRead-onlyInspect
List uploaded files
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default: 1) | |
| limit | No | Items per page (default: 25) |
TDQS
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 nothing beyond that — no mention of pagination behavior, ordering, or what fields appear in the returned file records.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single three-word phrase with zero wasted words and the verb front-loaded. Nothing to trim; fully efficient for what it attempts to convey.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple paginated list tool with fully documented params and safety annotations, the description is barely sufficient. It omits pagination awareness and any distinction from the other files_* siblings, leaving gaps an agent would have to resolve from the schema alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with two optional pagination parameters (page, limit) already documented with defaults, so the schema carries the parameter burden. The description adds no format, range, or semantics beyond what the schema provides, matching the baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear verb (list) and resource (uploaded files), so the agent knows the operation. However, it does not differentiate from siblings like files_get or files_delete, nor does it describe scope (all files? paginated set?), which keeps it below a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No indication of when to use this versus files_get, files_delete, or files_upload. There is no conditional guidance, no prerequisites, and no alternatives named, which is the minimum bar for a 3.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
files_uploadFiles: uploadCInspect
Upload a file
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Path to the file to upload | |
| public | No | Make the file publicly accessible (default: false) |
TDQS
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 safety profile is partially covered. The description adds nothing beyond that: it does not disclose overwrite behavior, auth requirements, size limits, or what the 'public' flag implies at runtime.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The single sentence is front-loaded and waste-free, which is good, but it is so terse that it functions more as under-specification than true conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity two-parameter upload tool with full schema coverage and annotations covering safety, the description is minimally adequate. It omits any note on overwrite semantics, return value, or the public-accessibility side effect, which would be useful even without an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with only two documented parameters, so the schema carries full parameter meaning. The description adds nothing about the 'path' format or the effect of setting 'public', so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb+resource ('Upload a file'), so an agent understands the action. However, it essentially restates the tool name/title and offers no differentiation from siblings like files_get, files_list, or files_delete.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use upload versus other files_* tools, nor any prerequisite or context. The operation is relatively unambiguous, but the description provides zero when-to-use direction or alternatives.
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)
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Friendly name for this connection (default: "<provider> connection") | |
| api_key | No | API key for the provider. If omitted, you'll be prompted (input is hidden). | |
| provider | Yes | Provider key (e.g. claude, openai) | |
| user_connection | No | Make this a user-scoped connection (only the current user sees it). Default: tenant-wide. |
TDQS
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 agent knows this is a non-destructive creation call. The description adds genuinely useful behavior — that omission of api_key triggers a hidden-input prompt — but says nothing about the resulting connection's lifecycle, whether it is validated (integrations_test exists for that), or tenant-vs-user visibility 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler; the credential mechanism leads and the fallback behavior is parenthetically subordinate. Nothing is wasted and nothing important is buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter write tool with no output schema, the annotations plus schema carry most of the burden, and the description covers the interactive prompt edge case. It is still thin on post-call expectations — whether the connection is immediately usable or needs integrations_test/enable — which an agent staging a multi-step integration setup would want.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters (provider, api_key, name, user_connection) are already fully documented in the schema. The description restates the API-key parameter and its prompt fallback but adds no syntax, format, or default detail 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.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (connect) and resource (provider) plus the credential mechanism (API key), which an agent can act on immediately. It does not, however, name the sibling it differs from — integrations_oauth_connect and integrations_oauth_callback_url sit right next to it in the list, and the phrase 'with an API key' only implicitly separates the two flows.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The parenthetical hints at the interaction model when no key is supplied, which is useful context, but there is no explicit when/when-not guidance and no routing to the OAuth-based connect tools. Usage is only inferable from the word 'API key'.
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 listCRead-onlyInspect
List your integration connections
| Name | Required | Description | Default |
|---|---|---|---|
| provider | No | Filter to a specific provider |
TDQS
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 nothing beyond that: no note on scoping (own account vs. workspace), result volume, or pagination for a list operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence, front-loaded with the verb. It is efficient, though it is terse to the point of omitting information an agent would want.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple parameterless-required list tool with annotations covering safety and a fully documented schema, the description is minimally adequate. It still leaves return shape and filter behavior unaddressed, which matters since there is no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single parameter's meaning ("Filter to a specific provider") is already documented in the schema. The description adds no syntax, format, or behavioral detail about the filter, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear verb and resource ("List your integration connections"), so the agent knows this is a read of connection records. However, it does not distinguish itself from the many integration siblings (integrations_list, integrations_get, integrations_connect), nor explain what a "connection" is versus an integration.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no conditions for choosing this over integrations_get or integrations_list, and no mention of the provider filter's role in selecting this tool. Usage must be entirely inferred from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
integrations_disableIntegrations: disableCInspect
Disable a connection
| Name | Required | Description | Default |
|---|---|---|---|
| connection_id | Yes | Connection ID |
TDQS
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 safety profile is covered by structured data. The description adds nothing on top of that: it does not say whether disabling is reversible, whether in-flight workflows or credentials are affected, or what permissions are required. With the lower bar set by annotations, a description that contributes zero extra behavioral context earns a low score.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three words are perfectly front-loaded and free of filler, but for a state-mutating tool this brevity crosses from concise into under-specified. The structure is clean; the size is arguably too small to carry the tool's weight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a mutation tool with no output schema and no annotation coverage of effects, so the description carries the burden of explaining consequences. It omits what disabling actually does, whether it can be undone, and how it differs from disconnect, leaving the agent with an incomplete picture for a non-read operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single parameter, connection_id, and schema description coverage is 100%, so the schema fully documents the input. The description adds no format, sourcing, or lookup guidance beyond that, which matches the baseline 3 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('disable') and resource ('a connection'), so the action is unambiguous at a glance. It does not, however, differentiate itself from close siblings such as integrations_enable, integrations_disconnect, or integrations_connect, and it uses 'connection' where the tool name uses 'integrations'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to disable versus when to use integrations_disconnect or integrations_enable, both of which sit in the same sibling set. The agent is left to infer the distinction with no exclusions or prerequisites stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
integrations_disconnectIntegrations: disconnectCDestructiveInspect
Delete a connection
| Name | Required | Description | Default |
|---|---|---|---|
| connection_id | Yes | Connection ID to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the destructive profile is covered. The description adds nothing beyond that structured data: no statement of reversibility, no indication of what is torn down (credentials, tokens, history), and no auth requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is short and front-loaded with the action, which is good. But at three words it reads as under-specification rather than earned conciseness; there was room for a clause identifying the target and any caveats without bloat.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, no-undo tool with no output schema, the description leaves out anything an agent needs beyond the bare action: irreversibility, side effects, prerequisites, or error conditions. Annotations carry the safety hint, but the description is too thin to be complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is exactly one parameter (connection_id) with 100% schema description coverage, which already documents its meaning. The description adds no additional semantic detail, so the baseline of 3 for high-coverage schemas applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a verb (delete) and resource (connection), so the core action is legible. However, it is only three words, and the operation is named 'disconnect' in both the tool name and title while the description says 'delete', leaving mild ambiguity about whether the connection is permanently removed or merely unlinked. It also does not distinguish itself from siblings like integrations_disable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites, and no naming of alternatives. Given a dense sibling set (integrations_connect, integrations_disable, integrations_connections_list), the description should indicate when disconnecting/deleting a connection is the right call versus disabling it. Nothing is offered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
integrations_enableIntegrations: enableCInspect
Enable a connection
| Name | Required | Description | Default |
|---|---|---|---|
| connection_id | Yes | Connection ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is a non-read-only, non-destructive, closed-world operation, so the safety profile is covered. The description adds nothing on top: it does not say whether enabling is idempotent, what state change occurs, or what happens to a previously disabled connection.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The two-word phrasing is maximally concise and front-loaded, but at this length it is under-specified rather than efficient — it omits context an agent needs for a mutation call.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a state-changing tool with no output schema, the description should at least say what enabling affects and how it relates to disable/connect. None of that is present, leaving the definition inadequate for correct invocation beyond the bare schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With a single parameter at 100% schema description coverage, the schema already documents connection_id, so the baseline is 3. The description contributes no additional meaning, such as where the connection_id comes from (e.g., integrations_connections_list) or its format.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Enable a connection" gives a clear verb and an object, so the basic action is identifiable. However, it never clarifies that "connection" means an integration connection, nor does it distinguish itself from siblings like integrations_connect, integrations_disconnect, or integrations_disable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance is given. The obvious routing question — when to enable versus connect or disconnect a connection — is left entirely to inference, and the natural counterpart tool integrations_disable is never mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
integrations_executeIntegrations: executeCInspect
Run an operation on a connected provider
| Name | Required | Description | Default |
|---|---|---|---|
| input | No | Input parameter as key=value. Repeatable. | |
| inputs | No | Inputs as a JSON object, e.g. '{"prompt":"hello"}' | |
| provider | Yes | Provider key | |
| operation | Yes | Operation key (see 'integrations get <provider>') |
TDQS
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 safety profile is covered structurally. The description adds nothing beyond that: it does not say the call may perform arbitrary provider-side actions, that results depend entirely on the provider/operation keys, or how failures surface.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The single sentence is front-loaded and waste-free, but its brevity reflects under-specification rather than disciplined conciseness given the tool's open-world, operation-driven nature.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an open-world execution tool with no output schema and 4 parameters, the description omits return shape, error behavior, and how to discover valid providers/operations. An agent cannot confidently call this without consulting sibling tools for context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters are already documented in the schema, including the note that operation keys come from 'integrations get <provider>'. The description supplies no additional meaning, which is the baseline-3 case 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a verb ('Run') and an object ('an operation on a connected provider'), so the general purpose is inferable. However, it gives no sibling differentiation against integrations_test, integrations_get, integrations_connect, or integrations_disable, all of which sound equally plausible for a similar request.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites, and no routing to alternatives such as integrations_test or integrations_get. The only procedural hint ('see integrations get <provider>') lives in the schema, not the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
integrations_getIntegrations: getBRead-onlyInspect
Show details and operations for one provider
| Name | Required | Description | Default |
|---|---|---|---|
| provider | Yes | Integration provider key (e.g. claude, slack, hubspot) |
TDQS
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 structurally. The description adds the useful detail that the response includes supported operations, not just metadata, but says nothing about what those operations are or how the result is shaped.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One tight sentence with no filler, and the resource scope is front-loaded. It is arguably too terse to carry much value, but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read tool with full schema coverage and read-only annotations, the description is minimally sufficient. It still leaves the agent guessing how this differs from integrations_list and what 'operations' contains, which matters in a sibling set this crowded.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema documents the sole 'provider' parameter at 100% coverage with examples (claude, slack, hubspot). The description's 'one provider' phrasing reinforces the single-provider intent but adds no format or lookup semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: 'Show details and operations for one provider', which clearly frames this as a single-provider fetch. It does not explicitly distinguish itself from near siblings like integrations_list or integrations_execute, but the 'one provider' scope is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus integrations_list, integrations_connections_list, integrations_execute, or the various integrations_oauth_* tools in the sibling set. The agent must infer that this is the detail-fetch for a single provider with no stated prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
integrations_listIntegrations: listARead-onlyInspect
List available integration providers
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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 the 'providers' scope but says nothing about return shape or ordering, so it adds only modest value 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single four-word sentence with no waste, and the resource is front-loaded. Nothing redundant is included.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a trivial zero-param list tool this is minimally adequate, but with no output schema the description could clarify what a 'provider' entry contains or distinguish its result set from connection listings. It leaves that to inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 meaning for the description to supply or omit.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (integration providers), and the qualifier 'available' usefully separates this catalog-style tool from connection-oriented siblings like integrations_connections_list. However, it does not explicitly name or contrast with those siblings, so an agent must infer the distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied by the word 'available' (providers vs. configured connections). There is no explicit when-to-use or when-not guidance relative to the many integration siblings (integrations_connections_list, integrations_get, integrations_connect).
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 urlARead-onlyInspect
Print the redirect URL to add to OAuth app configurations (same for every provider)
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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 a genuinely useful behavioral fact beyond the annotations: the returned URL is identical across all providers, which prevents redundant per-provider calls.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single well-formed sentence with the action front-loaded and no wasted words. Ideal size for a trivial zero-arg utility.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only utility with no output schema, the description tells the agent what is produced (a redirect URL) and that it is provider-independent. Lacking only an explicit pointer to where this fits in the OAuth setup flow.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters and the schema is empty with additionalProperties=false, so there is nothing for the description to document. Per the zero-parameter baseline, this is adequate as-is.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Print the redirect URL') with a clear purpose (add to OAuth app configurations). The parenthetical '(same for every provider)' distinguishes it from the provider-specific siblings like oauth_google_configure, though it doesn't name the adjacent integrations_oauth_* tools directly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage ('to add to OAuth app configurations') but gives no explicit when-to-use guidance or routing against the many sibling tools (integrations_oauth_configure, integrations_oauth_connect, integrations_oauth_status). An agent must infer the context.
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 configureCDestructiveInspect
Set the OAuth client ID + secret for a provider
| Name | Required | Description | Default |
|---|---|---|---|
| disable | No | Save the credentials but mark the provider disabled | |
| provider | Yes | Provider key (e.g. slack, google, github) | |
| client_id | No | OAuth client ID for this tenant. Prompted if omitted. | |
| client_secret | No | OAuth client secret. Prompted (hidden) if omitted. | |
| use_social_sign_in | No | Also expose this provider as a social sign-in option for end users |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, telling the agent this writes/mutates state. The description adds nothing about what gets overwritten (existing credentials for that provider), secret handling, or permission requirements, so it contributes no 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short, front-loaded sentence with zero padding. It is efficient, though terse enough that it borders on under-specification rather than ideal conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a destructive 5-parameter mutation with no output schema. The description omits how disable interacts with stored credentials, what happens on reconfiguration of an already-configured provider, and when social sign-in should be enabled — gaps the schema does not close.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and all five parameters (disable, client_id, client_secret, use_social_sign_in, provider) are documented in the schema. The description only restates client_id/client_secret and adds no syntax, format, or interaction detail, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear specific verb (set) plus resource (OAuth client ID + secret) scoped to a provider. An agent can tell it apart from connect/status/callback_url siblings by the credential-writing action, though the description never names those siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use, prerequisites, or alternatives are stated. The reader must infer from the name alone that this is a setup step preceding integrations_oauth_connect; the description text adds no routing guidance.
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 connectBInspect
Connect via the browser OAuth flow (starts a local listener)
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Friendly name for this connection (default: "<provider> connection") | |
| port | No | Local port for the OAuth callback (default: 8745) | |
| no_open | No | Don't try to open the browser automatically — just print the URL | |
| timeout | No | Seconds to wait for the OAuth callback before giving up (default: 300) | |
| provider | Yes | Provider key (e.g. slack, google, github) | |
| user_connection | No | Make this a user-scoped connection (only the current user sees it). Default: tenant-wide. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safety profile (readOnlyHint=false, destructiveHint=false), so the lower bar applies. The description usefully adds that the flow is browser-based and starts a local listener — behavior not derivable from the annotations — but omits that the call blocks until the callback or timeout, that the user must complete the login in the browser, and that it persists a new connection. Note that the browser-based external flow sits uneasily with openWorldHint=false, though the description is the accurate party here.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with the parenthetical carrying the one non-obvious mechanic; nothing is repeated from the title or annotations. It is arguably too thin for a 6-parameter interactive tool, but nothing in it is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description is the only place to explain the interactive, blocking nature of the call and its prerequisites, and it doesn't. Annotations cover safety, and the schema covers parameters, so an agent can call it, but it cannot predict that the call waits for user interaction or what state change results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and every parameter (port, no_open, timeout, provider, user_connection, name) is documented in the schema itself. The description adds no parameter-level detail beyond implicitly motivating port (local listener) and no_open (browser opening), so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Connect) plus the mechanism and scope (browser OAuth flow, local listener), so the agent knows this initiates an OAuth handshake rather than configuring or checking one. It does not differentiate from close siblings such as integrations_connect or integrations_oauth_configure, which likely connect by other means or set up credentials.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance: nothing says when to prefer this over integrations_connect, integrations_oauth_configure, or integrations_oauth_callback_url, and no prerequisites are stated (e.g. that the OAuth app must be configured first). The only usage hint is implicit in the parameter documentation of the schema, not the description.
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 statusBRead-onlyInspect
Show OAuth client setup status for a provider
| Name | Required | Description | Default |
|---|---|---|---|
| provider | Yes | Provider key (e.g. slack, google, github) |
TDQS
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 no behavioral context beyond repeating that this is a status/show operation, such as authentication requirements, rate limits, or what specifically gets checked or returned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. It communicates the core action and scope immediately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple, single-parameter status tool with full schema coverage and annotations that declare it as a read-only, closed-world operation, the description is mostly sufficient. It could be more complete by clarifying what 'setup status' returns or when to prefer it over related OAuth tools, but no critical call-time information is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the provider parameter already has an inline description with examples. The phrase 'for a provider' in the tool description adds no 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (Show) and resource (OAuth client setup status) scoped to a provider, which distinguishes it from configuration/connection siblings like integrations_oauth_configure and integrations_oauth_connect. It does not explicitly name or contrast with alternatives such as oauth_google_status, so sibling differentiation is implicit rather than explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives. It omits any mention of when-not to use it, prerequisites, or which sibling tool handles related actions, leaving the agent to infer usage entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
integrations_testIntegrations: testCInspect
Test a connection
| Name | Required | Description | Default |
|---|---|---|---|
| connection_id | Yes | Connection ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false, destructiveHint=false, and openWorldHint=false, but the description adds nothing beyond them. It does not say whether testing performs a live external call, whether it mutates connection state or health status, or whether failures are reported as errors or as a status value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The two-word phrase is not padded, but it is under-specified rather than concise: it front-loads nothing useful and leaves no structure for an agent to act on beyond the literal words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 should explain what the test returns (success/failure, diagnostics, latency); it says nothing. For a tool whose only value is the result of a check, this is a meaningful omission.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single connection_id parameter, so the schema carries the parameter documentation. The description adds no format, source, or constraint detail (e.g., where to obtain the connection ID), so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a verb and a resource ("Test a connection"), so the general purpose is inferable, but it is vague about what "test" means — credential validation, reachability, latency? It also does not distinguish this tool from siblings such as integrations_connect, integrations_get, or integrations_connections_list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to call this versus alternatives like integrations_get or integrations_connections_list, and no statement of prerequisites (e.g., that the connection must already exist via integrations_connect). The agent is left to infer usage entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
loginAInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| Yes | Email address | ||
| password | Yes | Password |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It discloses a key trait beyond schema/annotations – that a session token is returned and what it authorizes (account and project management) – which is genuinely useful for chaining calls. It says nothing about token lifetime, failure modes, or rate limiting, leaving meaningful gaps for an auth tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with what the tool does, followed by the return value and the sibling route. No padding or restatement.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 correctly steps in to describe the return (a session token and its scope). Combined with the sibling routing it is nearly complete, missing only token lifecycle or error-handling context that an auth entry point would ideally surface.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Both parameters are required and schema description coverage is 100%, so the schema already documents email and password. The description names the same two credentials without adding format, validation, or sourcing detail, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Log in') and resource ('the Anythink platform') plus the credential mechanism (email and password), and explicitly names the login_google alternative. It does not, however, differentiate itself from the near-duplicate siblings login_direct or signup, so an agent must still infer which login variant applies.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit routing rule: 'For Google sign-in, use the login_google tool.' That is a clear when-to-use-the-alternative condition. It stops short of covering the other auth siblings (login_direct, signup, logout) or stating prerequisites such as when this call should be made.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
login_directAInspect
Store credentials directly for a project (bypasses billing login). Use this when you already have an org ID and API key or JWT token.
| Name | Required | Description | Default |
|---|---|---|---|
| orgId | Yes | Organization/tenant ID | |
| token | No | JWT access token | |
| apiKey | No | API key (ak_...) | |
| baseUrl | No | Override API base URL | |
| profile | No | Profile name to save as (defaults to org ID) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses the key trait that it bypasses billing login and requires pre-existing credentials, but omits where credentials are persisted, whether they overwrite an existing profile, and any security/expiry considerations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loaded with what the tool does followed by when to use it. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter authentication tool with no annotations and no output schema, the description is adequate but incomplete: it never explains what the call returns (e.g., a session token or stored profile confirmation) or the role of the profile/baseUrl parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all five parameters with descriptions. The description only gestures at orgId, token, and apiKey and adds no format or override semantics, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Store credentials directly for a project') and clarifies the mechanism ('bypasses billing login'), which helps separate it from the 'login' and 'login_google' siblings. It does not explicitly name those siblings, so a 5 is not warranted.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides an explicit when-to-use condition: 'when you already have an org ID and API key or JWT token.' This gives clear context for selecting the tool, though it stops short of naming the alternative (e.g., 'otherwise use login') or stating exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
login_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).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses the interactive browser step, that the user must complete it, that a session token is stored afterward, and the stdio-only environment constraint. It stops short of token lifetime, failure/retry behavior, or what happens if the user denies consent, which are meaningful gaps for an auth tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four tight sentences, front-loaded with the core action, then the mechanism, then the scope boundary, then the environment constraint. No sentence is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No parameters and no output schema, so the description must carry everything — and it does: mechanism, user responsibility, post-call sequencing, and transport limitation. An agent has what it needs to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 adds no parameter detail because none is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 immediately differentiates itself from the sibling login variants by describing the browser consent flow specifically. An agent can tell this apart from login_direct or oauth_google_configure 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use context (interactive Google sign-in), explicit exclusions ('does NOT pick a billing account or project'), and the exact follow-on call sequence ('accounts_list' then 'accounts_use', 'projects_list' then 'projects_use'). It also states an environment precondition: works only over stdio, not the hosted HTTP server.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
logoutAInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| profile | No | Name of the profile to remove. Defaults to the active profile. See 'config_show' for names. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so well, disclosing exactly what is destroyed (the locally stored profile) and explicitly what is NOT affected (server-side token not revoked, project unaffected). This is precisely the mutation context an agent needs before invoking.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with purpose, then usage, then the practical note on finding profile names. Every sentence earns its place with no padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter tool with no annotations and no output schema, the description is complete: it covers purpose, effect, non-effects, and how to discover profile names. 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.
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 documents the default-to-active behavior and the config_show reference. The description's 'omit the profile to remove the currently active one' essentially restates the schema default, adding no new syntax or meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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'), so the agent knows exactly what it does. It is distinguishable from login, but the sibling config_remove is never referenced, leaving potential overlap unexplained.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear when-to-use context ('disconnect from a project or clear a stale token') and a when-not caveat (does not revoke server-side). It also points to config_show for profile names, though it never contrasts with the closely related config_remove sibling.
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 configureCDestructiveInspect
Set Google OAuth client ID and secret
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, which is consistent with 'Set.' The description adds nothing beyond that: it does not warn that existing credentials are overwritten, nor mention where the client ID/secret come from or whether admin rights are needed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with the action and object front-loaded and no filler. Brevity here is efficient, though it verges on under-specification rather than over-trimming.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation (per annotations) with no parameters and no output schema, the description should explain how credentials are provided and what state is replaced. As written, an agent cannot reliably call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema declares zero properties, so the baseline would be 4, but the description implies two required inputs (client ID and secret) that appear nowhere in the schema, leaving the agent unclear whether they are supplied by env vars, prior config, or a prompt.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Set Google OAuth client ID and secret'), so an agent knows this configures Google OAuth credentials. However, it does not distinguish itself from close siblings such as integrations_oauth_configure or oauth_google_status, which an agent must choose between.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisite (e.g. an existing Google Cloud OAuth app), and no pointer to the status sibling for verification. The agent must infer everything from the name.
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 statusBRead-onlyInspect
Show Google OAuth configuration status
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, and 'Show' merely restates that read-only profile. The description adds nothing about what the status contains, whether authentication is required, or what a missing configuration returns.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no waste. It is minimal but not padded, though the brevity contributes to the missing usage and behavioral context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 annotations covering safety and no output schema, the definition is barely adequate. It never tells the agent what the status response indicates (configured vs. not, scopes, expiry), which is the primary reason to call it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is no parameter semantics for the description to carry; baseline 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Show') and resource ('Google OAuth configuration status'), so the agent knows this is a read of OAuth setup state. It does not, however, distinguish itself from close siblings like oauth_google_configure or integrations_oauth_status, leaving the agent to infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to call this versus oauth_google_configure (to set it up) or integrations_oauth_status (integration-level status). Usage is only implied by the word 'status'.
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
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is a non-read-only, non-destructive mutation that is not open-world, so the safety profile is partly covered. The description adds that this creates an external Stripe Connect account and kicks off an onboarding flow, but omits whether it returns a redirect/onboarding URL, whether it is idempotent, or what auth is required.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single nine-word sentence with the core action front-loaded and no filler. It is efficient, though it is lean enough that a little more specificity could have been added without bloating it.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and minimal annotations, the agent is left guessing what the call returns (e.g., an onboarding URL) and what user action follows. For a side-effecting setup tool that begins a multi-step flow, the description stops at the minimum viable level.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, and the description correctly implies that setup requires no caller-supplied input. Per the rubric, a 0-parameter tool takes the baseline of 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource+action: setting up a Stripe Connect account and starting onboarding. An agent can tell this is the account-provisioning entry point, though it does not explicitly contrast itself with the pay_status / pay_payments / pay_methods siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Start onboarding' implies this is the first step in a sequence, which gives implied usage guidance. However, there is no explicit when-to-use vs alternatives (e.g., check pay_status first, or don't call if an account already exists) and no stated prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pay_methodsPay: methodsBRead-onlyInspect
List saved payment methods
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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 nothing further: no note on whether results are paginated, scoped to the current user, or limited in count, which is the kind of context that would earn credit here.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded clause with zero filler, which is appropriate for a trivial listing tool. It is terse to the point of leaving obvious questions unanswered, but it wastes no words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-parameter read-only lister with annotations covering safety, the description is minimally sufficient. It still omits any indication of result shape or scope, which would matter for an agent deciding between the several payment-related siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the schema has nothing to document and the description needs to add no parameter detail. Baseline 4 applies for a no-param tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('List') and resource ('saved payment methods'), so the operation is unambiguous. It does not, however, distinguish itself from close siblings like pay_payments, pay_status, or accounts_list, which an agent must disambiguate by guessing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to call this versus pay_payments or pay_status, and no prerequisites or context are given. The agent is left to infer usage entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pay_paymentsPay: paymentsCRead-onlyInspect
List recent payments
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default: 1) | |
| limit | No | Items per page (default: 25) |
TDQS
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 nothing beyond that — it does not disclose ordering, what 'recent' means, pagination behavior, or result counts, despite page/limit parameters existing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single three-word sentence with zero wasted language, and the core action is front-loaded. It is efficient but borders on under-specification rather than true crispness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 does not explain return shape, sort order, default range, or how pagination terminates. For a listing tool with optional paging, these gaps leave the agent guessing about what it will actually get back.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both page and limit are already fully documented in the schema. The description contributes no additional 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.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (payments), so the agent knows this is a read/list operation. However, it offers no differentiation from siblings such as pay_status or pay_methods, and 'recent' is left undefined as a scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use guidance, no exclusion criteria, and no mention of the sibling tools (pay_status, pay_methods) that an agent might confuse this with. The agent must infer usage entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pay_statusPay: statusBRead-onlyInspect
Show Stripe Connect account status
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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 nothing behavioral beyond that: it does not say what the status reflects, whether it requires an existing Connect account, or what happens if none exists. It essentially restates the title.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with no filler, and the resource is front-loaded after the verb. Nothing is wasted, though it is arguably under-specified rather than deliberately terse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 burden of conveying what comes back, and it does not: 'status' could mean onboarding state, capabilities, charges/payouts enabled, or balance. For a zero-param read tool this is minimal but survivable, leaving a clear gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the schema baseline of 4 applies. The description does not need to explain parameter meaning, though it also does not clarify that the account is inferred from the calling context rather than passed in.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 Stripe Connect account status'. That is far more informative than the title 'Pay: status' and lets an agent distinguish it from pay_payments and pay_methods. It does not explicitly contrast itself with pay_connect, but the read-vs-configure split is reasonably inferable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance is offered. The description never says whether this must be called before pay_payments, whether a connected account is required first via pay_connect, or what condition makes an agent reach for this tool. The read-only intent 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.
projects_createAInspect
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'.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Human-readable project name, e.g. 'production' or 'my-app' | |
| planId | Yes | 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. | |
| region | No | Deployment region slug, e.g. 'lon1'. Defaults to 'lon1'. Choose the region closest to your users. | lon1 |
| accountId | No | Billing account id to create the project in. Defaults to the active account set via 'accounts_use'. | |
| description | No | Optional free-text description shown in the dashboard |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does so well: it discloses asynchronous execution, the intermediate Provisioning state, the required billing/auth preconditions, the returned fields (id, name, org id, API URL), and the follow-up steps. This is behavior an agent could not infer from the schema alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the action and scope, then prerequisites, then async behavior and follow-ups. No filler or repetition of the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation with no output schema, the description fully covers what is required, what happens during execution, what is returned, and what to do next. Nothing essential for calling it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter is already documented, including the region default, the accountId fallback to the active account, and planId's role in tier/pricing. The description adds little parameter-level meaning beyond restating the billing-account prerequisite, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb+resource ('Provision a new project') and immediately defines what a project is: a dedicated, isolated Anythink backend instance with its own database, API, auth, and storage. This clearly separates it 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit prerequisites (platform login, active billing account set via 'accounts_use') and explicitly routes to alternatives: poll 'projects_list' until Active, then connect with 'projects_use'. The when-to-use contract is fully specified rather than implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
projects_deleteAInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Project to delete — its UUID, name, or a unique prefix. Use a specific id to avoid accidental matches. Find ids via 'projects_list'. | |
| accountId | No | Billing account id the project belongs to. Defaults to the active account set via 'accounts_use'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full load and does so well: it declares irreversibility, enumerates what is destroyed, notes the billing-account dependency, and even describes the success return shape. Nothing important about the operation's behavior is left implicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the destructive nature, then preconditions, then return value. Every clause adds actionable information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no output schema and no annotations, the description covers destructiveness, prerequisites, safer-invocation advice, and even the return payload for a two-parameter tool. 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so baseline is 3. The description adds marginal value by restating the prefix-matching hazard and framing the id as the safer selector, but the per-parameter meaning (UUID vs name vs prefix, accountId default) largely duplicates the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and resource ('Permanently delete a project') and immediately scopes it by naming the collateral resources torn down (backend instance, database, stored data). Easily distinguished from siblings projects_list, projects_create, and projects_use.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
States the precondition (requires an active billing account, set via 'accounts_use'), the confirmation requirement ('always confirm with the user first'), and the alternative matching strategy (specific id over short prefix). This is explicit when/when-not guidance an agent can act on without inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
projects_listAInspect
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'.
| Name | Required | Description | Default |
|---|---|---|---|
| accountId | No | Billing account id to list projects for. Defaults to the active account set via 'accounts_use'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full behavioral burden; it discloses auth requirements, the active-account dependency, and the exact shape of the returned record including the full status enum. It still omits pagination/result-limit behavior and failure modes for missing auth, 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each load-bearing: scope, prerequisites, return fields, then routing to sibling tools. The prerequisite and return-value information is front-loaded where an agent will see it first.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 enumerates the returned fields so the agent knows what to expect, and it covers the auth/account prerequisites. It is nearly complete for a one-parameter list tool; only pagination or result-limit behavior is unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single optional accountId parameter is already documented in the schema, including the default-to-active-account behavior. The description repeats the account scoping but adds no format, syntax, or edge-case detail beyond it, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('List') plus resource ('the projects (provisioned backend instances) in a billing account'), and the parenthetical disambiguates the domain-specific meaning of 'project'. An agent can distinguish it from projects_create, projects_use and projects_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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names prerequisites (platform login, an active billing account set via 'accounts_use') and states the intended use case: finding a project's id before calling 'projects_use' or 'projects_delete'. Alternatives and the condition that selects them are both given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
projects_useAInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Project to connect to — its name, org id, or UUID (a unique prefix is accepted). Find these via 'projects_list'. | |
| apiKey | No | Optional project API key (ak_...). If omitted, a project-scoped token is generated automatically via transfer-token exchange. | |
| accountId | No | Billing account id the project belongs to. Defaults to the active account set via 'accounts_use'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses the resolution-then-store flow, the apiKey vs automatic transfer-token exchange behavior, and the persistent side effect of saving active-profile credentials. It omits what happens to a previously active profile on overwrite and error modes, keeping it shy 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four tight sentences, front-loaded with purpose and effect, followed by mechanism, prerequisites, and return values. 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.
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 (profile name, org id, API URL, auth method). Combined with the stated prerequisites and credential flow, an agent has enough to invoke it correctly, though overwrite/error behavior is unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 id (name/org id/UUID prefix), the optional ak_... apiKey, and the accountId default. The description restates the apiKey exchange semantics without adding new syntax or format detail, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 clarifies downstream effect on the 'cli' tool's data, entities, and users commands. This clearly separates it from sibling tools like projects_list, projects_create, and accounts_use.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit prerequisites — an active billing account (pointing to accounts_use) and an Active project (pointing to projects_list) — which routes the agent to the right siblings for setup. It doesn't state an explicit 'when not to use this' condition, 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.
roles_createRoles: createCInspect
Create a new role
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Role name | |
| description | No | Optional description |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false and openWorldHint=false, covering the safety profile. The description adds nothing beyond them: no note on required permissions, whether duplicate role names are rejected, what happens to permissions on the new role, or what the call returns.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single four-word phrase, fully front-loaded with no filler. It earns credit for efficiency, though it sits close to the line where brevity becomes under-specification.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Annotations cover the safety profile, the schema fully documents both parameters, and there is no output schema to explain, so the gaps are modest. Still, a creation tool that never mentions name-uniqueness behavior or permission requirements leaves the agent with open questions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with only two parameters, both documented in the schema ('Role name', 'Optional description'). The description adds no extra meaning such as naming constraints, uniqueness rules, or format expectations, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a clear verb+resource ('Create a new role') that unambiguously matches the tool name and cannot be confused with write siblings like roles_delete or roles_permissions_add. It stops short of differentiating itself from any sibling or scoping what a role contains, so it is clear but minimal.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool, what prerequisites must exist (e.g. whether related roles/permissions tooling must run first), or when an alternative such as roles_permissions_add is the right choice. The agent must infer usage entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
roles_deleteRoles: deleteBDestructiveInspect
Delete a role by ID
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Role ID to delete |
TDQS
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 by structured data. The description adds nothing beyond that — no note that deletion is permanent, whether it cascades to role permissions, or whether an error occurs if the role is in use.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single six-word sentence that front-loads the action and resource with zero filler. Nothing is redundant or padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter destructive tool whose annotations cover the safety profile, the essentials are present, but with no output schema the agent has no idea whether anything is returned (e.g. the deleted record or a confirmation). Mentioning irreversibility and expected result would round it out.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single required parameter with 100% schema description coverage ("Role ID to delete"), so the schema already carries the semantics. The description merely echoes "by ID" and adds no format or sourcing guidance, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a clear verb and resource ("Delete a role") plus the selector ("by ID"), so an agent knows exactly what the tool does. It does not differentiate from siblings such as roles_create or roles_permissions_remove, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this versus alternatives (roles_list to find the ID first, roles_permissions_remove to strip permissions) and no preconditions or warnings about the destructive nature. Usage must be inferred entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
roles_listRoles: listBRead-onlyInspect
List all roles
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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, but the description adds nothing further: no mention of pagination, ordering, or what scope of roles is returned. It is a bare restatement of the operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three words, front-loaded and waste-free. It is arguably too terse to earn a 5, but nothing is padded or redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read tool with annotations covering the safety profile and no output schema, the description is minimally sufficient. It omits any hint of return volume, pagination, or role scope, which is a gap but not a fatal one.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 clarify. Schema coverage is 100% by default with an empty properties object.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (list) and resource (roles), so an agent immediately knows what it does. It does not distinguish itself from siblings like roles_permissions_list or roles_create, so it stays below a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites, and no mention of related tools such as roles_create, roles_delete, or roles_permissions_list. The agent must infer that this is the read entry point of the roles family.
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 addCInspect
Add entity permissions to a role
| Name | Required | Description | Default |
|---|---|---|---|
| entity | Yes | Entity name | |
| actions | No | Comma-separated actions: read,create,update,delete (default: read) | |
| role_id | Yes | Role ID |
TDQS
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 externally. The description adds nothing beyond that: it does not say what happens if a permission already exists, whether the addition is idempotent, or whether elevated authorization is required.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with the action front-loaded and zero filler. It is efficient, though its extreme brevity is part of why other dimensions are thin rather than a virtue here.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a simple three-parameter mutation tool with full schema coverage and no output schema, so little is strictly required. Still, for a mutation on role permissions, the absence of any note about idempotency, authorization, or relationship to the remove/list siblings leaves a visible gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters (role_id, entity, actions) are already documented in the schema, including the comma-separated action values and the 'read' default. 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource combination ('Add entity permissions to a role'), which is unambiguous about the action and target. However, it does not differentiate from the closely named siblings roles_permissions_remove and roles_permissions_list, leaving the agent to infer the distinction from names alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus roles_permissions_remove or roles_permissions_list, nor any stated prerequisites such as required permission level or whether the role must already exist. The agent gets no context beyond the one-line purpose.
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 listBRead-onlyInspect
List entity permissions for a role
| Name | Required | Description | Default |
|---|---|---|---|
| role_id | Yes | Role ID |
TDQS
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 essentially nothing beyond the title — no note on pagination, result size, or what a role with no permissions returns — so it does not earn credit for extra 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence with no filler and the resource front-loaded. Nothing redundant is present; it is appropriately sized for a trivial list operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description is the only place return values could be described, and it does not say what the permission objects contain or their shape. Combined with the absence of any 'returns empty list if unset' style note, it is only minimally complete for a read tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with a single parameter (role_id: integer, 'Role ID'), so the schema carries the burden. The description adds no semantics beyond what the schema states, which is the baseline-3 case for full coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a clear verb+resource: 'List entity permissions for a role'. It is distinguishable from siblings roles_permissions_add and roles_permissions_remove by the 'List' verb. However, it does not explicitly contrast itself with those siblings, and 'entity permissions' is slightly ambiguous about whether it returns the permission set or the entities.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or when-not-to-use guidance is provided. Usage is only implied by the sibling naming convention (add/remove/list), which an agent can reasonably infer, but the description itself does no routing work.
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 removeCDestructiveInspect
Remove entity permissions from a role
| Name | Required | Description | Default |
|---|---|---|---|
| entity | Yes | Entity name | |
| actions | No | Comma-separated actions: read,create,update,delete (default: read) | |
| role_id | Yes | Role ID |
TDQS
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 nothing beyond that — it does not say whether removals are reversible, whether they require specific privileges, or what the default 'read' action behavior means when actions 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero padding. It is efficient, though its extreme brevity leaves the definition under-specified.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema and this is a destructive mutation, so the description could reasonably explain the effect of removal or the meaning of the actions filter. Annotations carry the safety signal, and the schema covers parameters, but the definition is thin for a permission-revoking operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 role_id, entity, and actions (including the default of 'read'). The description only restates the resource and adds no format or behavioral meaning beyond the schema; baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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'), which distinguishes it from siblings roles_permissions_add and roles_permissions_list. It stops short of explicitly naming the counterpart tools, but the purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no when-to-use guidance, no prerequisites, and no mention of alternatives such as roles_permissions_add or roles_permissions_list. An agent must infer context entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_auditSearch: auditBRead-onlyInspect
Compare configured public-searchable fields vs what public search actually returns. Flags any data leaks.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Search query to use for the audit (default: '*' — wildcard across all records) | |
| entity | Yes | Entity to audit | |
| sample | No | How many records to inspect (default: 5) |
TDQS
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 usefully clarifies that the operation is a config-vs-actual comparison that flags leaks, but it omits return format, sample behavior, and any side effects or rate characteristics. With annotations carrying the safety burden, a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly written sentences with the core comparison front-loaded and the leak-flagging outcome second. There is no filler, though the extreme brevity leaves the other dimensions thin.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter tool with no output schema, the description should ideally hint at what the audit returns (the diff structure, how leaks are reported). It conveys the concept but not the result shape, so an agent knows what the tool does but not what to expect back.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents query, entity, and sample (including defaults). The description adds no syntax or format detail beyond the schema, so the baseline 3 is correct when the schema does all the work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific operation: comparing configured public-searchable fields against what public search actually returns, plus flagging leaks. This is clearly distinct from siblings like search_query, search_purge, or search_similar, though it never explicitly names them. The verb+resource is concrete enough for an agent to understand the intent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use guidance, no prerequisites, and no comparison against alternatives such as search_query or search_similar. The auditing use case is only weakly implied by 'Flags any data leaks.' Nothing tells the agent under what circumstances to prefer this over running a plain search.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_purgeSearch: purgeADestructiveInspect
Purge the search index. Omit ENTITY to purge everything (admin only).
| Name | Required | Description | Default |
|---|---|---|---|
| entity | No | Entity name. Omit to operate on the entire index. |
TDQS
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 adds context beyond them: that the operation is admin-restricted and that omitting the entity argument destroys the ENTIRE index rather than a single entity — exactly the kind of blast-radius information that matters for 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with zero filler, front-loading the action and then the scope/permission qualifier. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-param destructive tool with annotations covering safety and no output schema, the description covers action, scope, and authorization. The main remaining gap is post-purge recovery — nothing tells the agent whether the index must be rebuilt with search_rehydrate afterward.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With a single optional parameter at 100% schema description coverage, the schema already documents "Entity name. Omit to operate on the entire index." The description's "Omit ENTITY to purge everything" restates that and adds only the admin-only nuance, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource ("purge the search index") that an agent can easily separate from search_query, search_audit, and search_rehydrate by verb alone. It stops short of naming a sibling or stating the inverse operation (rehydration), so it is clear but not explicitly differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a conditional scope rule ("omit ENTITY to purge everything") and an authorization prerequisite ("admin only"), which is real usage context. However, it never says when to choose purge over the obvious alternative search_rehydrate, nor when-not to use it, leaving the alternative-selection decision implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_querySearch: queryCRead-onlyInspect
Run a search query
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default: 1) | |
| sort | No | Comma-separated sort fields, e.g. "created_at:desc,id:asc". | |
| text | Yes | Search text. Use '*' for wildcard / browse all. | |
| facet | No | Comma-separated fields to compute facet aggregations on. | |
| limit | No | Results per page (1-100, default: 20) | |
| filter | No | Filter expression, e.g. "status=published AND category=news". Supports _geoRadius and _geoBoundingBox. | |
| public | No | Use the unauthenticated /search/public endpoint (returns only public-marked fields) | |
| entities | No | Comma-separated entity names to search. Default: all indexed entities. | |
| highlight | No | Enable result highlighting on matched terms. |
TDQS
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 no further behavioral context such as authentication requirements, result format, rate limits, or how the public vs. authenticated endpoint behaves. It contributes nothing 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The single sentence is concise with no wasted words, but it is under-specified rather than optimally structured. There is no front-loading of key constraints or grouping of information to help an agent quickly parse intent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex search tool with nine parameters and no output schema, the description is inadequate: it does not state what corpus is searched, how results are shaped, or how it relates to sibling search tools. The schema compensates for parameter documentation, but the description is far too thin for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and all nine parameters (text, filter, sort, entities, etc.) are well documented in the schema itself. The description adds no meaning beyond what the schema already provides, which is the baseline 3 when the schema carries the full load.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Run a search query' is essentially a restatement of the tool name and title, adding no specificity about what is being searched (entities, indexed data, etc.) or the scope. It does not differentiate from sibling search tools like search_similar, search_purge, search_rehydrate, or search_audit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance about when to use this tool versus alternatives such as search_similar or search_audit, nor any prerequisites or exclusions mentioned. The agent is left to infer usage entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_rehydrateSearch: rehydrateBInspect
Rehydrate the search index. Omit ENTITY to rehydrate everything (admin only).
| Name | Required | Description | Default |
|---|---|---|---|
| entity | No | Entity name. Omit to operate on the entire index. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false, destructiveHint=false, openWorldHint=false, so the agent already knows this is a non-destructive mutation rather than a read. The description adds a genuinely useful operational detail, the admin-only requirement for whole-index rehydration, but says nothing about cost, duration, or whether the index is unavailable while rehydrating. Adding auth context beyond the annotations earns a 3.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the operation front-loaded and the scope/authorization caveat appended. Nothing is wasted, though the phrasing is terse enough that it reads more like a stub than a fully structured definition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter maintenance tool with no output schema and annotations covering the safety profile, the description is minimally sufficient: it says what happens and who may do it. It omits the recovery/rebuild semantics of 'rehydrate' and any performance or concurrency expectations, leaving an agent without enough to judge impact.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 fully documented in the schema ('Omit to operate on the entire index'), which is essentially the same statement the description makes. Per the calibration rule, 100% coverage sets the baseline at 3; 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.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Rehydrate) and resource (the search index), so an agent can grasp the operation immediately. It does not differentiate itself from adjacent maintenance/query siblings such as search_purge, search_query, or search_similar, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a scope rule (omit ENTITY to rehydrate everything) and an authorization constraint (admin only), which implies when each form is usable. It never states when to choose rehydrate over search_purge or the other search tools, so usage guidance remains implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_similarSearch: similarBRead-onlyInspect
Find documents similar to a given record (vector search)
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Source document ID — find documents similar to this one | |
| limit | No | Maximum results (default: 10) | |
| entity | Yes | Entity name | |
| public | No | Use the public endpoint (only public-marked fields returned) |
TDQS
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 meaningful detail that matching is vector-based (semantic) rather than keyword-based, which changes how an agent should interpret results. It does not mention scoring, ranking, or result shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence with zero waste, front-loading the action and the source record. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only search tool with a fully documented schema and safety annotations, the description is minimally adequate. With no output schema, it still doesn't hint at the return format (ranked list, score field) or pagination, which an agent would benefit from knowing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter (id, entity, limit, public) is already documented in the schema. The description adds no syntax or semantic detail beyond what the schema provides, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Find) and resource (documents) with the qualifier 'similar to a given record', and adds the mechanism '(vector search)'. However, it offers no differentiation from siblings like search_query, search_rehydrate, or search_purge, so an agent cannot distinguish intent 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'similar to a given record' implies a use case, but there is no explicit when-to-use guidance, no exclusions, and no reference to the alternative search_* tools. The agent is left to infer when semantic similarity lookup is preferable to keyword search.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
secrets_createSecrets: createCInspect
Store a new secret value
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Secret key name (e.g. CLAUDE_API_KEY, STRIPE_SECRET_KEY) | |
| value | No | Secret value (use for non-interactive / scripted usage) |
TDQS
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 safety profile is covered externally. The description adds nothing beyond that: it does not say whether an existing key is overwritten, whether the write is idempotent, how errors on duplicate keys behave, or what the operation returns.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded clause with zero padding, which fits a two-parameter tool. It is arguably over-terse rather than well-structured, since it conveys no more information than the title already provides.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a secret-writing mutation the agent still lacks the essentials: overwrite semantics on duplicate keys, scoping to the current account or project, and any confirmation of success. Annotations cover only the abstract safety flags, and there is no output schema to fill the gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both key and value documented inline including naming examples, so the baseline is 3. The description contributes no additional parameter meaning such as the value's expected encoding or the behavior of key reuse.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The phrase 'Store a new secret value' gives a concrete verb and resource, so the basic operation is identifiable. However, it offers no differentiation from the near-identical siblings secrets_update and secrets_list, so an agent cannot tell from the description alone why it should pick create over update.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this versus secrets_update, secrets_delete, or secrets_list, and no mention of prerequisites such as required scope or authentication. The only hint of context comes from the schema's note about non-interactive usage, not from the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
secrets_deleteSecrets: deleteCDestructiveInspect
Delete a secret
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Secret key name to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false, and openWorldHint=false, so the safety profile is covered by structured data. The description adds nothing beyond that: no statement of irreversibility, no confirmation that missing keys error, no permission requirements — so it earns little credit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three words with zero waste, but the extreme brevity is under-specification rather than effective conciseness for a destructive operation. It is front-loaded but trivially so.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, irreversible operation with no output schema, the agent needs to know what gets destroyed and whether the action is recoverable. The description supplies none of that, nor any scoping context, leaving a real gap despite the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 as "Secret key name to delete", so the schema carries the full burden. The description adds no format, scope, or casing details beyond it, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Delete a secret" names a specific verb and resource, which is enough to distinguish it from siblings like secrets_list or secrets_create. However it offers no scope details (which secret store, per-project vs global) and no differentiation language beyond the name itself, so it stays at minimum-viable clarity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus secrets_update (e.g. to clear a value) or when deletion is inappropriate. The agent is left to infer usage entirely from the verb and the required key parameter.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
secrets_listSecrets: listARead-onlyInspect
List all secret keys (metadata only, values never shown)
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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 disclosure beyond that: results are 'metadata only, values never shown', which tells the agent it cannot retrieve secret material through this call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded clause with zero filler. The scoping caveat is parenthetical and immediately follows the action, so nothing has to be inferred or scrolled for.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter list tool with no output schema, the critical omission to guard against is whether values leak — and the description closes that gap. Ordering, pagination, and scope (all secrets vs. scoped) are unaddressed, which keeps it out of 5 territory.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 document and nothing for the schema to miss. Baseline 4 applies; no additional parameter meaning is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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), which cleanly separates it from secrets_create, secrets_update, and secrets_delete in the sibling set. It does not name those siblings explicitly, so it stops short of a 5, but the action is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied by the verb 'list' — there is no explicit when-to-use statement, no precondition (e.g. required auth/workspace), and no reference to the sibling secret-management tools. Adequate for a trivial enumeration tool but with clear gaps.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
secrets_updateSecrets: updateBDestructiveInspect
Rotate (overwrite) an existing secret value
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Secret key name | |
| value | No | Secret value (use for non-interactive / scripted usage) |
TDQS
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 by structured data. The description adds the useful detail that the prior value is overwritten/rotated, but says nothing about reversibility limits, permissions, or audit implications.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Six words, front-loaded with the action and scope, zero filler. Every token earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter mutation whose annotations already carry the destructive/read-only profile and whose schema documents both fields, the description is nearly sufficient. It still leaves the create-vs-update routing and the optional-value workflow implicit, which is the only real gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both 'key' and 'value' are already documented in the schema. The description adds no syntax, format, or constraint detail 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.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb plus resource: 'Rotate (overwrite) an existing secret value' tells an agent exactly what happens and to what. It is clear enough to distinguish from secrets_create/secrets_delete by implication, but never names those siblings explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No statement of when to use this versus secrets_create (new secret) or secrets_delete, and no mention of prerequisites or the interactive-vs-scripted value distinction. Usage is only implied by the word 'existing'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
signupAInspect
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'.
| Name | Required | Description | Default |
|---|---|---|---|
| Yes | Email address — becomes the login identifier and must be unique | ||
| lastName | Yes | User's last name | |
| password | Yes | Password for the new account; choose a strong value | |
| firstName | Yes | User's first name | |
| referralCode | No | Optional referral code, if the user was invited by another customer |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose meaningful behavior: it creates only the top-level user identity (not billing/project), and success may require email confirmation before 'login' works. It omits auth requirements (public vs authenticated), error cases, and any rate limits, leaving minor gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four tightly scoped sentences, front-loaded with purpose then routing then scope then follow-up. Every sentence earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema and no annotations, so the description must stand alone; it covers purpose, alternatives, scope of creation, and the post-signup confirmation flow that affects the next call. 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.
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 referralCode optionality and email uniqueness). The description adds no parameter-level detail beyond the schema, making the baseline 3 correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 distinguishes itself from the sibling 'login' by describing the no-account-yet condition. An agent can tell it apart from login 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use ('only when the user has no account yet') and when-not ('if they already have one, use login'), plus negative scoping that routes to 'accounts_create' and 'projects_create' for downstream objects. Nothing about 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.
users_deleteUsers: deleteCDestructiveInspect
Delete a user by ID
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | User ID to delete |
TDQS
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 structurally. The description adds nothing beyond that: it does not say whether the deletion is irreversible, whether it cascades to related records, or what permissions are required. For a destructive operation, this is a bare minimum.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single five-word sentence with zero padding, front-loaded with the action. It is efficient, though its brevity is partly the source of the missing behavioral detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, irreversible-looking operation with no output schema, the definition should convey consequence (cascading deletes, irreversibility, auth needs). Annotations cover the destructive flag but nothing tells the agent what actually happens to the user or its data.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with a single parameter ('User ID to delete'), so the schema fully documents the input. 'By ID' in the description merely echoes the schema without adding format or constraint detail. Baseline 3 applies 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.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (delete) and resource (user) plus the identifying key, so an agent knows exactly what it does. It does not differentiate itself from the many other *_delete siblings (entities_delete, data_delete, secrets_delete), but the resource name makes the target unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this versus alternatives such as users_get, users_list, or other delete tools, and no prerequisites or warnings are stated. The only usage signal is the terse verb phrase.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
users_getUsers: getBRead-onlyInspect
Get a user by ID
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | User ID |
TDQS
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 without the description. The description adds nothing beyond that – no note on behavior for a nonexistent ID, auth/permission requirements, or response shape – but it does not contradict the annotations, so it meets the minimum viable bar.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short, front-loaded sentence with zero filler; the verb and resource come first. It is efficient, though arguably terse to the point of under-specification rather than maximally informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read-only getter with annotations covering safety and no output schema, the description is adequate but thin. It omits what the agent should expect on a missing/invalid ID and how this differs from users_me/users_list, which are the practical questions for this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 in the schema ('User ID', integer). The description's 'by ID' merely restates the schema and adds no format, range, or sourcing detail, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (get) and resource (user) with the lookup key, so the agent knows exactly what it does. It does not, however, distinguish itself from near-name siblings like users_me (current user) or users_list (enumeration), so an agent must infer the difference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance and no exclusions. The description never says to use this for an arbitrary user versus users_me for the caller or users_list for enumeration, so routing among the users_* siblings is left entirely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
users_inviteUsers: inviteBInspect
Create a user and send an invitation email
| Name | Required | Description | Default |
|---|---|---|---|
| Yes | User email address | ||
| role_id | No | Role ID to assign | |
| last_name | Yes | Last name | |
| first_name | Yes | First name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint=false, destructiveHint=false, openWorldHint=true). The description does add one genuinely useful behavioral fact not in the annotations: an invitation email is dispatched as a side effect. It does not disclose whether the email send is reversible, what happens on duplicate emails, or whether the user is created in a pending state.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with zero filler, and the primary action is front-loaded before the side effect. It is efficient, though arguably under-specified for a tool with an irreversible email side effect.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a mutation tool with an outward-facing side effect and no output schema. The description does not say whether the invite can be resent, whether the created user is pending until acceptance, whether role_id defaults, or what a duplicate invitation does — real gaps for an agent calling it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters (email, first_name, last_name, role_id) are documented in the schema; baseline 3 applies. The description adds no parameter-level meaning, e.g., that role_id is optional or what role is assigned by default.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb pair ('Create a user') plus the notable side effect ('send an invitation email'), which cleanly separates it from users_list, users_get, users_delete, and even signup. It stops short of naming any sibling or clarifying how it differs from self-service signup, so it misses the top mark.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no mention of prerequisites (e.g., admin role), and no alternative such as signup or users_create-equivalent is referenced. The agent must infer that this is the admin-initiated path from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
users_listUsers: listCRead-onlyInspect
List all users
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true and openWorldHint=false, so safety is covered externally. The description adds nothing beyond that: it does not disclose pagination, result limits, ordering, or what happens with large user sets, and the word "all" may set false expectations about an unpaginated dump.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three words, front-loaded, zero waste. It is efficiently sized and readable, though the terseness shades into under-specification rather than true economy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, no parameters, and only two annotations, the burden of describing the return value falls entirely on the description, which says nothing about what a "user" record contains or how results are paginated, ordered, or limited.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the schema carries no semantics to explain; baseline is 4. The description introduces no phantom filters or options, though it also notes no filtering support explicitly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"List all users" gives a verb and resource, but it is essentially a restatement of the name/title ('users_list' / 'Users: list') and adds no distinguishing scope. An agent still cannot tell from the description alone why it should pick users_list over users_get, users_me, or accounts_list, though the core purpose is at least not misleading.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no exclusion of alternatives, and no prerequisites. With siblings like users_get (single user) and users_me (current user) present, the description should say when a full listing is appropriate, but it says nothing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
users_meUsers: meBRead-onlyInspect
Show the currently authenticated user
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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 nothing beyond that: no note on auth/token requirements, whether it fails if unauthenticated, or what identity fields come back. It essentially restates the tool title.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One front-loaded sentence with no filler, and the scope qualifier ("currently authenticated") comes before anything else. It is appropriately sized for a zero-argument read tool, though it is very close to the bare minimum.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only, no-parameter tool this is nearly adequate. The main gap is that no output schema exists, so the description should ideally indicate what user information is returned; instead it says nothing about the response shape.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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, and schema coverage is trivially complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear specific verb+resource: "Show the currently authenticated user." This distinguishes it in intent from users_get (which requires an ID) and users_list (which enumerates all users), though the description never names those siblings. An agent can infer the distinction only because this tool takes no parameters.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied by the phrase "currently authenticated user" – i.e., call this when you don't have or need a user ID. There is no explicit when-to-use, when-not-to-use, or pointer to users_get/users_list for other lookups.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workflows_createWorkflows: createCInspect
Create a new workflow
| Name | Required | Description | Default |
|---|---|---|---|
| cron | No | Cron expression (for Timed trigger, e.g. '0 9 * * *') | |
| name | Yes | Workflow name | |
| event | No | Event type: EntityCreated, EntityUpdated, EntityDeleted | |
| entity | No | Entity name for Event trigger | |
| filter | No | Filter expression JSON for Event trigger (fires only when predicate matches the row) | |
| enabled | No | Enable workflow immediately after creation | |
| trigger | No | Trigger type: Manual, Timed, Event, Api | |
| api_route | No | Custom API route (for Api trigger) | |
| description | No | Workflow description | |
| filter_file | No | Path to a file containing the filter expression JSON |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false, destructiveHint=false and openWorldHint=false, so the agent knows this is a non-destructive write. Beyond that, the description adds nothing: it does not explain whether the workflow is created disabled by default, whether triggers are required, or what side effects creation has for a 10-parameter mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The single sentence is free of waste and front-loaded, but its brevity reflects under-specification rather than efficient communication. Minimum viable at best.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with 10 parameters, no output schema, and a rich trigger model (Manual/Timed/Event/Api), the description omits everything an agent needs to decide how to configure a call. It is not complete against the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and each of the 10 parameters carries a description (cron, event, trigger, api_route, filter, etc.). The description adds no meaning beyond that, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description "Create a new workflow" restates the tool name and title almost verbatim, adding only the verb. It does not distinguish this tool from siblings like workflows_seed, workflows_update, or workflows_trigger, so an agent gets no signal about which creation path applies.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this tool versus alternatives, no prerequisites, and no mention of what must exist before creation (e.g. entity, trigger configuration). Usage is left entirely to inference from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workflows_deleteWorkflows: deleteCDestructiveInspect
Delete a workflow
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Workflow ID to delete |
TDQS
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 structurally. The description adds nothing beyond that — no statement about whether deletion is permanent, whether associated workflow steps/jobs are cascaded, or whether the operation can be undone. With annotations doing the safety work, the description needed to contribute the 'what gets destroyed' context and did not.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero padding. It is efficient, though the brevity here reflects under-specification rather than disciplined editing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 should convey consequences: permanence, cascading deletions, or required permissions. None of that is present, leaving the agent to call a destructive tool with only a verb phrase of context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single parameter is documented as 'Workflow ID to delete', so the schema fully carries parameter meaning. The description adds no syntax or sourcing detail (e.g., where to obtain the ID, whether it accepts slugs), so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (delete) and resource (workflow), so the basic action is unambiguous. However, it offers no differentiation from the many sibling workflow tools (workflows_disable, workflows_step_delete, workflows_update), which are adjacent in name and could plausibly also remove something. The agent gets the verb+resource but no routing signal.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives such as workflows_disable (a likely reversible counterpart) or workflows_step_delete. No prerequisites, no warnings about irreversibility. The agent must infer that this is the permanent removal path.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workflows_disableWorkflows: disableCInspect
Disable a workflow
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Workflow ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false, destructiveHint=false and openWorldHint=false. The description adds nothing beyond them: it does not say whether disabling is reversible, whether it affects in-flight runs or jobs (cf. workflows_jobs), or whether it requires ownership/admin rights. With annotations present the bar is lower, but zero added context leaves the call semantics ambiguous.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single terse sentence with no waste and the operation front-loaded. It is efficient, though arguably under-specified rather than optimally concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter toggle with no output schema, the description is minimally adequate, and annotations cover the safety profile. It still omits what disabling means operationally (reversibility, effect on runs/jobs, required permissions), which an agent invoking a mutating toggle would benefit from knowing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% — the single 'id' parameter is fully documented as 'Workflow ID' — so the description carries no extra burden. It adds no format hints or constraints, which matches the baseline 3 for fully covered schemas.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb+resource ('Disable a workflow'), so the agent knows exactly what operation is performed. It does not, however, distinguish this from siblings like workflows_enable or workflows_delete, which operate on the same resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to disable versus delete or update a workflow, and no mention of the obvious complementary tool workflows_enable. The agent must infer usage entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workflows_enableWorkflows: enableCInspect
Enable a workflow
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Workflow ID |
TDQS
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 safety profile is covered. The description adds no behavioral context whatsoever: it does not say whether enabling is idempotent, whether it fails on an already-enabled workflow, or what side effects (job scheduling, triggers) it starts.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is two words with zero waste, but the brevity is under-specification rather than disciplined concision. Nothing is front-loaded because nothing is said.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a state-mutating tool in a large workflow family (create, update, disable, delete, trigger, steps, jobs), a two-word description leaves the agent without the state-transition semantics it needs to invoke this correctly. No output schema exists to compensate, and the description does not fill that gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter has 100% schema description coverage ('Workflow ID'), so the schema carries the meaning. The description adds nothing beyond it, which is the expected baseline when schema coverage is high.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description is a verbatim restatement of the tool name and title ('workflows_enable' / 'Workflows: enable'), adding no scope, target, or distinction from siblings. It does not differentiate this tool from workflows_disable, workflows_trigger, or integrations_enable, which all act on similar resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance is present: the description never says when an agent should enable a workflow or what preconditions exist (e.g., whether the workflow must be exported/paused first). The natural alternative, workflows_disable, is not mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workflows_exportWorkflows: exportADestructiveInspect
Export an existing workflow to JSON (round-trippable with seed)
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Workflow ID to export | |
| output | No | Write to FILE instead of stdout |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false and destructiveHint=true, yet the description explains none of that: it never says that providing 'output' writes/overwrites a file, nor why an 'export' is considered destructive. It does add one real behavioral trait beyond the annotations, the round-trip fidelity guarantee with workflows_seed, which is why this is not lower.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the essential action and output format come first and the round-trip property is a compact qualifier.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 usefully characterize the return payload ('to JSON', round-trippable), which is the key thing an agent needs for a 2-parameter tool. It is close to complete, missing only the file-overwrite behavior implied by the optional output parameter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters (id, output) are already documented in the schema; the description adds no syntax, format, or default details beyond that. Baseline 3 is correct when the schema does all the parameter work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (export an existing workflow) plus the output format (JSON). The parenthetical '(round-trippable with seed)' implicitly distinguishes it from retrieval siblings like workflows_get by pointing at the import counterpart, but does not explicitly name that sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: an agent can infer it exports a workflow given an id, and the seed reference hints the output can be re-imported. There is no explicit when-to-use vs workflows_get / workflows_list guidance, and no when-not conditions.
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 addCInspect
Add a FileHandler step with named flags (no hand-written params JSON)
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Step display name (defaults to the step key) | |
| field | No | Field name on the record to link the file to (required, snake_case) | |
| start | No | Set as start step | |
| entity | No | Target entity name (required) | |
| enabled | No | Enable step immediately | |
| step_key | Yes | Step key (unique identifier, snake_case) | |
| file_name | No | Filename to store the uploaded file as (templatable) | |
| folder_id | No | Folder ID to upload the file into (optional, templatable) | |
| is_public | No | Mark the uploaded file as public | |
| link_mode | No | How to link to the field: set (single value) or add (append to multi-value). Default: set | |
| operation | No | FileHandler operation: fetch_and_link, link_existing, detach | |
| record_id | No | Target record ID, typically '{{ $anythink.trigger.id }}' (required) | |
| on_failure | No | Step ID to execute on failure | |
| on_success | No | Step ID to execute on success | |
| source_url | No | URL to fetch the file from (required for fetch_and_link; supports templating) | |
| workflow_id | Yes | Workflow ID | |
| existing_file_id | No | Existing file ID (required for link_existing operation; templatable) | |
| overwrite_if_present | No | Re-process even if the field already has a value (idempotency override) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare the safety profile (readOnlyHint=false, destructiveHint=false, openWorldHint=false). Beyond that, the description adds nothing: it does not say this mutates workflow state, which params are conditionally required per operation (source_url for fetch_and_link, existing_file_id for link_existing), or anything about idempotency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence with the core action front-loaded and zero filler. Its brevity is appropriate structurally, though the missing depth is penalized under other dimensions rather than here.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 100% schema coverage the parameters are discoverable, but for an 18-param, operation-driven mutation step with no output schema the description says nothing about operation-conditional requirements, step ordering within a workflow, or what is returned. Adequate but clearly incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% across all 18 parameters, so the schema carries the load and baseline 3 applies. The only description-side addition is the "named flags" phrasing, indicating flat named arguments rather than a JSON blob.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Add a FileHandler step") and implies the parent workflow context, so it is distinguishable from the generic workflows_step_add. It stops short of explicitly contrasting itself with that sibling, so not a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The parenthetical "no hand-written params JSON" hints this is the preferred path over raw params JSON, but there is no explicit when-to-use, no mention of when to prefer workflows_step_add, and no guidance on choosing among the three FileHandler operations.
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 exampleBRead-onlyInspect
Print a copy-paste-ready FileHandler params JSON
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true and openWorldHint=false already tell the agent this is a safe, non-network read, so the description only needs to add the output's nature. Saying the result is a 'copy-paste-ready' params JSON does add that it is a static template rather than live workflow state, but no further behavioral context is given.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence that tells the agent exactly what comes back, with no filler. It is arguably terse to the point of omitting routing guidance, but there is no wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter helper with no output schema, the description does the one thing that matters: it characterizes the returned value as a ready-to-paste params JSON. What is missing is the pipeline context (which tool consumes that JSON), which the sibling list implies but the description never states.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 disambiguate and the empty schema is fully documented at 100% coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Print') and a specific resource ('FileHandler params JSON'), which is enough to separate it from mutation siblings like workflows_file_handler_add. It does not, however, name the sibling it complements, so the distinction is inferred rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use guidance, no statement that this is a discovery/helper step to run before workflows_file_handler_add, and no exclusions. The use case is only implied by the name and the word 'example'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workflows_getWorkflows: getCRead-onlyInspect
Get workflow details and steps
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Workflow ID |
TDQS
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 that the response includes both workflow details and steps, which is useful since there is no output schema, but it says nothing about behavior for a missing/invalid ID or what 'details' comprises.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with zero filler and the core action front-loaded. It is efficient, though its brevity is close to under-specification rather than disciplined concision.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read tool with full schema coverage and read-only annotations, the description is close to adequate. The remaining gap is sibling disambiguation against workflows_list and workflows_step_get, and the lack of an output schema makes the thin 'details and steps' phrasing less informative than it could be.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single 'id' parameter with 100% schema description coverage, so the schema already carries the semantics. The description adds nothing about the identifier's origin or format, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear verb+resource (get a workflow) and adds that steps are included, but 'details' is vague and no sibling is named. With workflows_list and workflows_step_get in the set, an agent could reasonably wonder whether this overlaps with those, and the description does nothing to resolve that.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites, and no mention of alternatives such as workflows_list for enumeration or workflows_step_get for a single step. The agent must infer routing purely from the name.
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 addBInspect
Add an Integration step (Claude, OpenAI, Slack…) with named flags (no hand-written params JSON)
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Step display name (defaults to the step key) | |
| input | No | Operation input as key=value (repeatable; values support {{templating}}) | |
| model | No | Convenience shortcut for the 'model' input (AI providers) | |
| start | No | Set as start step | |
| inputs | No | Operation inputs as a JSON object (merged with --input flags) | |
| enabled | No | Enable step immediately | |
| provider | No | Integration provider key (e.g. claude, openai, slack). Required. | |
| step_key | Yes | Step key (unique identifier, snake_case) | |
| operation | No | Operation key (see 'integrations get <provider>'). Required. | |
| on_failure | No | Step ID to execute on failure | |
| on_success | No | Step ID to execute on success | |
| workflow_id | Yes | Workflow ID | |
| connection_id | No | Connection ID (required when --credential-source is 'connection'; templatable) | |
| credential_field | No | Credential field path (required when --credential-source is 'entity_field') | |
| credential_source | No | system | current_user | connection | entity_field (default: system) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safety profile (readOnlyHint=false, destructiveHint=false, openWorldHint=false), so the mutation semantics are covered structurally. The description adds only the 'named flags, no params JSON' convenience and provider examples; it omits any note on auth/credential needs or that it modifies an existing workflow.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler, and the core action leads. It is efficient, though for a 15-parameter tool the extreme brevity edges toward underspecification rather than true conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 15-parameter mutation tool with no output schema, the description is far too thin: it does not cover credential-source variants, the required provider/operation inputs, or what happens on success. An agent gets almost no help beyond the schema it must already read.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all 15 parameters are already documented in the schema, establishing the baseline of 3. The description alludes to the input/inputs/model parameters via 'named flags' but adds no syntax or format detail beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Add an Integration step') and grounds it with concrete provider examples (Claude, OpenAI, Slack), so an agent knows exactly the operation type. However, it never distinguishes itself from the closely-named sibling workflows_step_add, leaving the reader to infer that this variant is integration-specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites (e.g. that provider and operation are required), and no reference to the obvious alternative workflows_step_add. The parenthetical about avoiding hand-written JSON is a value prop, not routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workflows_jobsWorkflows: jobsBRead-onlyInspect
View job history for a workflow
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Workflow ID |
TDQS
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 nature is covered. The description adds no further behavioral context such as pagination, result ordering, authentication requirements, or what the job history contains, so it does not go beyond the structured annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. It conveys the core action and target resource directly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with one documented parameter and no output schema, the description is minimally viable. However, it omits useful context such as pagination, ordering, or the relationship to other workflow tools, leaving some gaps for an agent to infer.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 100% description coverage for the single 'id' parameter ('Workflow ID'), so the schema already documents the parameter meaning. The description does not add format, constraints, or examples beyond what the schema provides, making the baseline score of 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb ('View') and resource ('job history for a workflow'), making the tool's purpose immediately understandable. It does not explicitly distinguish itself from sibling workflow tools such as workflows_get or workflows_list, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives like workflows_get or workflows_list. The purpose implies viewing job history, but no when-to-use conditions, prerequisites, or exclusions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workflows_listWorkflows: listCRead-onlyInspect
List all workflows
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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 nothing beyond that: no pagination behavior, no result cap, no note about what 'all' means in a multi-tenant or permission-scoped context. For a list endpoint with no output schema, a small amount of behavioral context would have been cheap and valuable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short, front-loaded sentence with zero filler or redundancy. It is efficient, though its brevity is also the source of its other gaps rather than a virtue earned by careful editing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations covering scope or pagination, the description is the only place an agent could learn what the returned list contains and how it is bounded. It says none of that, and it also fails to differentiate from the many sibling workflow tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and 100% schema coverage, so there are no parameter semantics for the description to explain. Baseline 4 applies; nothing is missing on this dimension.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a verb+resource ('List all workflows'), which is clear enough as a basic purpose, but it does nothing to separate itself from closely named siblings such as workflows_get, workflows_jobs, or workflows_export. With roughly a dozen workflow siblings in the tool list, the lack of any scoping phrase leaves the agent to infer which one returns the full collection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no mention of alternatives, no prerequisites. The agent must guess whether this returns every workflow across the account or only those it owns, and whether workflows_get is the narrower alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workflows_seedWorkflows: seedBInspect
Create a workflow and its steps from a JSON file
| Name | Required | Description | Default |
|---|---|---|---|
| var | No | Substitute {{KEY}} placeholders in the JSON. Repeatable. | |
| file | Yes | Path to a workflow JSON file (use `workflows export` to produce one) | |
| enabled | No | Override the workflow's enabled flag to true |
TDQS
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 safety profile is covered. The description adds no behavioral context beyond that: it does not say whether seeding is idempotent, what happens if the workflow already exists, whether existing steps are replaced, or how {{KEY}} substitution failures are handled.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no wasted words. It is efficient, though arguably too terse for a mutation tool with three parameters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Annotations cover the mutation safety profile and the schema fully documents parameters, so the core is covered. But for a create/seed operation the description omits overwrite/idempotency behavior and sibling differentiation, which an agent needs to call it confidently versus workflows_create.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (var substitution, file path, enabled override all documented in the schema), so the baseline is 3. The description contributes nothing beyond the schema about parameter meaning or interaction.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Create a workflow and its steps') plus the input source ('from a JSON file'), which is more than a restatement of the name. It does not, however, explicitly set itself apart from the sibling workflows_create, leaving the agent to infer the distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'from a JSON file' phrasing implies usage (when you already have an exported definition), and the schema hints at pairing with workflows export, but the description never states when to prefer this over workflows_create or workflows_step_add. Usage is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workflows_step_addWorkflows: step addCInspect
Add a step to a workflow
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Step key (unique identifier) | |
| name | No | Step display name | |
| start | No | Set as start step | |
| action | No | Action type: ReadData, CreateData, UpdateData, UpsertData, DeleteData, CallAnApi, RunScript, Condition, SendAnEmail, SendACommand, SendPushNotification, FileHandler, Integration (for Integration, prefer 'integration-add') | |
| params | No | Step parameters as JSON | |
| enabled | No | Enable step immediately | |
| workflow_id | Yes | Workflow ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is a non-read-only, non-destructive, closed-world mutation, so safety is covered structurally. The description adds nothing beyond that — no word on ordering/start-step semantics, key uniqueness, idempotency, or whether the addition takes effect immediately.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence, zero waste and fully front-loaded. It is appropriately terse, though the terseness borders on under-specification at only four words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 full schema coverage and safety annotations, the essentials are technically present across the structured fields. Still, a step-ordering concept like 'start' and the key-uniqueness contract are behavioral details an agent would benefit from seeing called out in prose.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter — including key, name, start, action, params, enabled — is already documented in the schema with useful detail. The description contributes no additional parameter meaning, 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Add a step to a workflow'), making the operation immediately identifiable. It does not, however, distinguish this tool from closely related siblings such as workflows_step_update, workflows_step_link, workflows_step_get, or workflows_integration_add.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this versus updating, linking, or deleting a step, nor on prerequisites (a workflow must already exist, a step key must be unique). The only routing hint in the whole definition lives in the schema's 'action' field description, not the description itself.
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 deleteADestructiveInspect
Delete a step from a workflow (warns if other steps link to it)
| Name | Required | Description | Default |
|---|---|---|---|
| step_id | Yes | Step ID to delete | |
| workflow_id | Yes | Workflow ID |
TDQS
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 by structured data. The description adds a non-obvious behavioral trait beyond that: the tool warns when other steps link to the deleted step, which signals a reference-integrity risk the agent should anticipate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with the destructive action first and the caveat in a compact parenthetical. Every word earns its place with no preamble or restatement of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Annotations carry the destructive profile, so the description need not re-explain safety. However, for a destructive mutation the ambiguity of 'warns' matters: it is unclear whether the warning aborts the delete or is advisory only, and whether link references are orphaned. That gap leaves an agent needing to probe behavior at call time.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both parameters (workflow_id, step_id) are documented in the schema itself. The description adds no syntax, format, or constraint information 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.
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'), which an agent can immediately separate from the sibling step operations workflows_step_add, workflows_step_update and workflows_step_get. It does not explicitly name any sibling, so it lands at clear-but-not-routing rather than a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this tool versus the alternatives, no prerequisites (e.g. must the workflow be disabled first?), and no when-not-to-use guidance. The only hint is the parenthetical about linked steps, which is a behavioral note rather than usage direction.
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 getBRead-onlyInspect
View step details including parameters
| Name | Required | Description | Default |
|---|---|---|---|
| step_id | Yes | Step ID | |
| workflow_id | Yes | Workflow ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safe-read profile is covered. The description adds only a small hint about returned content ('including parameters'), but does not disclose what a step record contains or how it relates to workflow_id.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short, front-loaded phrase with no wasted words. It is efficient, though its terseness borders on under-specification rather than disciplined conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter read tool with full schema coverage and safety annotations, the definition is minimally adequate. It lacks any output shape description and does not clarify the parent/child relationship between workflow_id and step_id.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both workflow_id and step_id are already documented in the schema. The description adds no syntax or relationship semantics beyond what the schema provides, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (View) and resource (step details), and mentions return scope ('including parameters'). However, it does not distinguish itself from related siblings like workflows_get or workflows_step_update, leaving the agent to infer the difference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites, and no mention of alternatives (e.g., workflows_get or workflows_list). The usage is only implied by the verb 'View'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workflows_step_linkWorkflows: step linkCDestructiveInspect
Link workflow steps together (set on-success/on-failure)
| Name | Required | Description | Default |
|---|---|---|---|
| step_id | Yes | Step ID to update | |
| on_failure | No | Step ID to execute on failure | |
| on_success | No | Step ID to execute on success | |
| workflow_id | Yes | Workflow ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare a non-read-only, destructive write with no open-world access, so the description's remaining burden is to explain consequences. It does not say whether linking overwrites existing on-success/on-failure links, whether it can orphan steps, or whether it requires the workflow to be paused — the exact context a destructiveHint=true tool needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single compact sentence with the action and its parameters front-loaded and no wasted words. It is efficient, though arguably too terse given the mutation's destructive nature.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With full schema coverage and annotations carrying the safety profile, the essentials are present and no output schema is needed. However, for a destructive linking operation the description omits whether existing links are replaced and what constraints apply to the target step IDs, leaving a real gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters (workflow_id, step_id, on_success, on_failure) are already documented in the schema. The parenthetical restates the two link parameters but adds no format, validation, or default details beyond structured data, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ("Link") and resource ("workflow steps") and clarifies the operation as setting on-success/on-failure targets, which separates it reasonably well from siblings like workflows_step_update or workflows_step_add. It is clear on its own, though it does not explicitly contrast itself with the closest sibling (workflows_step_update).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no mention of prerequisites (e.g. the referenced step IDs must already exist, or whether the workflow must be disabled), and no reference to the alternative workflows_step_update. The agent must infer usage entirely from the name and parenthetical.
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 updateCDestructiveInspect
Update step parameters and properties
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Step name | |
| params | No | Step parameters as JSON | |
| enabled | No | Enable this step | |
| step_id | Yes | Step ID | |
| workflow_id | Yes | Workflow ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=true, so the safety profile is covered. The description adds nothing beyond that: it doesn't disclose what is overwritten, whether the update is partial or full, or any permission requirements, so it repeats rather than enriches the structured data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero waste. It is efficient, though its brevity tips into under-specification rather than just conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 omits partial-vs-full update semantics, what 'properties' is limited to, and required workflow_id/step_id context. Given the destructive annotation, an agent needs more than this.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 5 parameters, and the description adds no format or syntax detail (e.g. how 'params' JSON is merged). Baseline 3 applies 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.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear verb ('Update') and resource ('step'), plus the target fields ('parameters and properties'). It does not distinguish itself from close siblings like workflows_step_add, workflows_step_get, or workflows_step_delete, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no mention of prerequisites (workflow_id and step_id are required), and no routing to alternatives. The agent must infer the entire usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workflows_triggerWorkflows: triggerCInspect
Manually trigger a workflow
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Workflow ID | |
| entity | No | Entity name for the trigger (required for Manual-trigger workflows) | |
| payload | No | Optional JSON record to pass to the workflow (available as $anythink.trigger.data) | |
| entity_id | No | Optional entity/record id to associate with the trigger |
TDQS
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 side-effect profile is partly covered. The description adds only the word "manually"; it says nothing about whether execution is synchronous or async, whether a job id is returned, cost/rate implications, or the conditional entity requirement noted in the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The single short sentence is front-loaded with the verb and contains no filler, which is good. But four words is undersized for a four-parameter, open-world mutation tool, so the terseness reflects under-specification rather than disciplined conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a non-read-only, open-world trigger operation with no output schema, the description should explain the minimum an agent needs before calling: when triggering is valid, what an entity value should be, and what the caller receives back. All of that is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 id, entity, payload, and entity_id, including the Manual-trigger conditional for entity. The description adds no syntax, format, or conditional 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb+resource (trigger a workflow) and the qualifier "manually" distinguishes manual invocation from event- or schedule-driven runs, which is information beyond the title. However, it offers no differentiation from close siblings such as workflows_enable, workflows_disable, or workflows_create, and reads partly as a restatement of the tool name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no exclusions, and no mention of alternatives among the many workflows_* siblings. An agent is not told how to discover an eligible workflow, whether the workflow must be enabled or Manual-trigger type before this call, or what happens after triggering.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workflows_updateWorkflows: updateBDestructiveInspect
Update a workflow's name or description
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Workflow ID | |
| name | No | New workflow name | |
| description | No | New workflow description |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=true, and openWorldHint=false, so the mutation/safety profile is covered. The description adds one useful constraint — that only name and description are mutable via this tool — but says nothing about permissions, reversibility, or whether unspecified fields are left untouched.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with zero filler, front-loading the verb and resource. It is efficient, though its brevity is partly the source of its informational gaps.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 3-parameter update tool with full schema coverage and annotations, the description is minimally viable. It omits the required-id requirement, partial-update behavior, and any note on the response, but no output schema exists to carry that burden.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so id, name, and description are already documented in the schema. The description merely restates the two optional fields without adding format, validation, or 'at least one field required' semantics; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Update') and resource ('a workflow') and narrows the mutable surface to name and description. It does not explicitly name a sibling, but the 'workflows_' prefix and the two-field scope make it distinguishable from workflows_get, workflows_delete, and workflows_step_update.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites, and no pointer to alternatives such as workflows_get (to read) or workflows_delete (to remove). The agent must infer usage entirely from the name and schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
102 tool updates
v0.2.27- Changed
accounts_create2 fields changed- removed
Input schema / descriptionRemoved 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." - removed
Input schema / titleRemoved value: -"accounts_create"
- Changed
accounts_list2 fields changed- removed
Input schema / descriptionRemoved 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." - removed
Input schema / titleRemoved value: -"accounts_list"
- Changed
accounts_use2 fields changed- removed
Input schema / descriptionRemoved 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." - removed
Input schema / titleRemoved value: -"accounts_use"
- Added
api - Added
api_keys_create - Added
api_keys_list - Added
api_keys_revoke - Changed
cli2 fields changed- removed
Input schema / descriptionRemoved 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." - removed
Input schema / titleRemoved value: -"cli"
- Changed
config_remove2 fields changed- removed
Input schema / descriptionRemoved 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." - removed
Input schema / titleRemoved value: -"config_remove"
- Changed
config_show2 fields changed- removed
Input schema / descriptionRemoved 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." - removed
Input schema / titleRemoved value: -"config_show"
- Changed
config_use2 fields changed- removed
Input schema / descriptionRemoved 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." - removed
Input schema / titleRemoved value: -"config_use"
- Added
data_create - Added
data_delete - Added
data_get - Added
data_list - Added
data_rls - Added
data_update - Added
docs - Added
entities_create - Added
entities_delete - Added
entities_get - Added
entities_list - Added
entities_update - Added
fetch - Added
fields_add - Added
fields_delete - Added
fields_get - Added
fields_list - Added
fields_update - Added
files_delete - Added
files_get - Added
files_list - Added
files_upload - Added
integrations_connect - Added
integrations_connections_list - Added
integrations_disable - Added
integrations_disconnect - Added
integrations_enable - Added
integrations_execute - Added
integrations_get - Added
integrations_list - Added
integrations_oauth_callback_url - Added
integrations_oauth_configure - Added
integrations_oauth_connect - Added
integrations_oauth_status - Added
integrations_test - Changed
login2 fields changed- removed
Input schema / descriptionRemoved 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." - removed
Input schema / titleRemoved value: -"login"
- Changed
login_direct6 fields changed- removed
Input schema / descriptionRemoved 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." - changed
Input schema / properties / apiKey / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Input schema / properties / baseUrl / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Input schema / properties / profile / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Input schema / properties / token / typePrevious value: -"string"New value: +[ + "string", + "null" +] - removed
Input schema / titleRemoved value: -"login_direct"
- Changed
login_google2 fields changed- removed
Input schema / descriptionRemoved 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)." - removed
Input schema / titleRemoved value: -"login_google"
- Changed
logout3 fields changed- removed
Input schema / descriptionRemoved 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." - changed
Input schema / properties / profile / typePrevious value: -"string"New value: +[ + "string", + "null" +] - removed
Input schema / titleRemoved value: -"logout"
- Added
menus_add_item - Added
menus_list - Added
oauth_google_configure - Added
oauth_google_status - Added
pay_connect - Added
pay_methods - Added
pay_payments - Added
pay_status - Changed
projects_create4 fields changed- removed
Input schema / descriptionRemoved 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'." - changed
Input schema / properties / accountId / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Input schema / properties / description / typePrevious value: -"string"New value: +[ + "string", + "null" +] - removed
Input schema / titleRemoved value: -"projects_create"
- Changed
projects_delete3 fields changed- removed
Input schema / descriptionRemoved 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." - changed
Input schema / properties / accountId / typePrevious value: -"string"New value: +[ + "string", + "null" +] - removed
Input schema / titleRemoved value: -"projects_delete"
- Changed
projects_list3 fields changed- removed
Input schema / descriptionRemoved 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'." - changed
Input schema / properties / accountId / typePrevious value: -"string"New value: +[ + "string", + "null" +] - removed
Input schema / titleRemoved value: -"projects_list"
- Changed
projects_use4 fields changed- removed
Input schema / descriptionRemoved 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." - changed
Input schema / properties / accountId / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Input schema / properties / apiKey / typePrevious value: -"string"New value: +[ + "string", + "null" +] - removed
Input schema / titleRemoved value: -"projects_use"
- Added
roles_create - Added
roles_delete - Added
roles_list - Added
roles_permissions_add - Added
roles_permissions_list - Added
roles_permissions_remove - Added
search_audit - Added
search_purge - Added
search_query - Added
search_rehydrate - Added
search_similar - Added
secrets_create - Added
secrets_delete - Added
secrets_list - Added
secrets_update - Changed
signup3 fields changed- removed
Input schema / descriptionRemoved 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'." - changed
Input schema / properties / referralCode / typePrevious value: -"string"New value: +[ + "string", + "null" +] - removed
Input schema / titleRemoved value: -"signup"
- Added
users_delete - Added
users_get - Added
users_invite - Added
users_list - Added
users_me - Added
workflows_create - Added
workflows_delete - Added
workflows_disable - Added
workflows_enable - Added
workflows_export - Added
workflows_file_handler_add - Added
workflows_file_handler_example - Added
workflows_get - Added
workflows_integration_add - Added
workflows_jobs - Added
workflows_list - Added
workflows_seed - Added
workflows_step_add - Added
workflows_step_delete - Added
workflows_step_get - Added
workflows_step_link - Added
workflows_step_update - Added
workflows_trigger - Added
workflows_update
14 tool updates
v0.2.21- Changed
accounts_create4 fields changed- changed
Input schema / descriptionPrevious 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." - changed
Input schema / properties / currency / descriptionPrevious 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." - changed
Input schema / properties / email / descriptionPrevious value: -"Billing email address"New value: +"Billing email address that receives invoices and receipts" - changed
Input schema / properties / name / descriptionPrevious value: -"Organization name"New value: +"Organization name, e.g. 'Acme Inc' — shown on invoices and in the dashboard"
- Changed
accounts_list1 field changed- changed
Input schema / descriptionPrevious 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."
- Changed
accounts_use2 fields changed- changed
Input schema / descriptionPrevious 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." - changed
Input schema / properties / id / descriptionPrevious 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'."
- Changed
config_remove2 fields changed- changed
Input schema / descriptionPrevious 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." - changed
Input schema / properties / profile / descriptionPrevious value: -"Profile name to remove"New value: +"Name of the profile to remove from local config. See 'config_show' for valid names."
- Changed
config_show1 field changed- changed
Input schema / descriptionPrevious 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."
- Changed
config_use2 fields changed- changed
Input schema / descriptionPrevious 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." - changed
Input schema / properties / profile / descriptionPrevious value: -"Profile name to activate"New value: +"Name of an existing profile to make active. See 'config_show' for valid names."
- Changed
login1 field changed- changed
Input schema / descriptionPrevious 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."
- Added
login_google - Changed
logout2 fields changed- changed
Input schema / descriptionPrevious 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." - changed
Input schema / properties / profile / descriptionPrevious 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."
- Changed
projects_create6 fields changed- changed
Input schema / descriptionPrevious 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'." - changed
Input schema / properties / accountId / descriptionPrevious 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'." - changed
Input schema / properties / description / descriptionPrevious value: -"Project description (optional)"New value: +"Optional free-text description shown in the dashboard" - changed
Input schema / properties / name / descriptionPrevious value: -"Project name"New value: +"Human-readable project name, e.g. 'production' or 'my-app'" - changed
Input schema / properties / planId / descriptionPrevious 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." - changed
Input schema / properties / region / descriptionPrevious value: -"Deployment region (e.g. lon1)"New value: +"Deployment region slug, e.g. 'lon1'. Defaults to 'lon1'. Choose the region closest to your users."
- Changed
projects_delete3 fields changed- changed
Input schema / descriptionPrevious 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." - changed
Input schema / properties / accountId / descriptionPrevious 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'." - changed
Input schema / properties / id / descriptionPrevious 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'."
- Changed
projects_list2 fields changed- changed
Input schema / descriptionPrevious 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'." - changed
Input schema / properties / accountId / descriptionPrevious 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'."
- Changed
projects_use4 fields changed- changed
Input schema / descriptionPrevious 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." - changed
Input schema / properties / accountId / descriptionPrevious 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'." - changed
Input schema / properties / apiKey / descriptionPrevious 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." - changed
Input schema / properties / id / descriptionPrevious 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'."
- Changed
signup6 fields changed- changed
Input schema / descriptionPrevious 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'." - changed
Input schema / properties / email / descriptionPrevious value: -"Email address"New value: +"Email address — becomes the login identifier and must be unique" - changed
Input schema / properties / firstName / descriptionPrevious value: -"First name"New value: +"User's first name" - changed
Input schema / properties / lastName / descriptionPrevious value: -"Last name"New value: +"User's last name" - changed
Input schema / properties / password / descriptionPrevious value: -"Password"New value: +"Password for the new account; choose a strong value" - changed
Input schema / properties / referralCode / descriptionPrevious value: -"Referral code (optional)"New value: +"Optional referral code, if the user was invited by another customer"
15 tool updates
v0.2.6- First observed
accounts_create - First observed
accounts_list - First observed
accounts_use - First observed
cli - First observed
config_remove - First observed
config_show - First observed
config_use - First observed
login - First observed
login_direct - First observed
logout - First observed
projects_create - First observed
projects_delete - First observed
projects_list - First observed
projects_use - First observed
signup
TDQS
Scored across 102 tools
Many tools are clearly scoped by resource and action, but the 102-tool surface creates overlap: `cli`, `fetch`, and `api` can all be used for API access, while `integrations_connect` vs `integrations_oauth_connect` and several workflow helper tools require careful selection. Descriptions help, but the sheer number increases misselection risk.
Names predominantly follow a consistent snake_case resource_action pattern (e.g., `entities_create`, `fields_update`, `workflows_step_add`). A few bare commands like `fetch`, `docs`, `api`, `cli`, `login`, `logout`, and `signup` are minor deviations from that pattern.
With 102 tools, this far exceeds the normal 3-15 range and the 50+ extreme-mismatch threshold. A generic `cli` and `fetch` already cover broad functionality, so many individual tools are over-provisioned rather than essential.
The surface covers most domain lifecycle areas: auth, billing, projects, entities, fields, data, files, search, workflows, integrations, secrets, roles, users, API keys, and payments. Some resource-specific gaps remain (e.g., user update, menu item management), but the generic `cli`/`fetch` tools provide workarounds.
Maintenance
Related MCP Connectors
Build and publish full-stack apps from your coding agent: models, rules, pages, auth, per-app MCP.
Build multi-tenant apps over MCP. Schemas, CRUD, deploys — access control enforced server-side.
Build, deploy, and host full-stack web apps from any MCP client. DB, auth, storage, cron included.
Backend platform for AI agents: one agentstack.execute tool runs batched steps over +700 actions (hosting, storage, auth, payments, CRM, app builder).
Related MCP Servers
- AlicenseNot gradedqualityNot gradedmaintenanceAn MCP server that provides tools for interacting with Supabase databases, storage, and edge functions.45MIT
- AlicenseNot gradedqualityCmaintenanceThe 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.21,341 npm1,949-
- AlicenseNot gradedqualityNot gradedmaintenanceA Model Context Protocol server that helps users migrate subscription businesses from RevenueCat to Adapty through natural language interactions with LLMs like Claude Desktop.MIT
- AlicenseAqualityCmaintenanceEnables 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.2014 npmMIT