FoundersOS
Allows creating GitHub repositories as part of playbooks, with external actions that can create repos and other GitHub resources.
Provides a built-in feed reader that supports RSS, Atom, and JSON Feed subscriptions, with tools for subscribing, briefing, searching, bookmarking, and pinning feeds.
Allows posting messages to Slack as part of playbooks, enabling notifications and updates to be sent to Slack channels.
Founders OS
Open-source MCP server for startup and small business founders.
Founders OS gives you a complete business context - CRM, projects, tasks, finances, feeds, memory, playbooks - accessible from Claude, Cursor, or any MCP-compatible AI client. One connection, your entire business.
Built by OurThinkTank. Marketing site at foundersmcp.com.
New to AI tools, or handing this to someone who is? Start with Read This First - a plain-language intro to what FoundersOS is and isn't, what AI assistants can and can't do, and the habits that keep them honest.
What's Included
Module | Tools | Description |
CRM | 13 | Customers, contacts, interactions, pipeline dashboard |
Tasks | 12 | Tasks with entity linking, AI assignment, dependencies, progress notes |
Projects | 5 | First-class project records anchored on a project tag, with task rollups |
Playbooks | 11 | Reusable orchestration templates that fan out to tasks and external MCP actions |
Tags | 4 | Shared tag registry with soft validation and auto-registration |
Financial | 14 | Double-entry ledger, P&L, multi-company, per-user access control |
Feeds | 13 | RSS/Atom/JSON reader, briefings, bookmarks, pins |
Memory | 5 | Semantic memory with personal + org scopes, pgvector, dedup, metadata filters |
Surfaces | 6 | Cross-domain reads: session start, entity cards, weekly retro, stuck list, session checkpoints, project history |
Members | 4 | Org membership directory, owner designation |
Audit + Restore | 2 | Full audit log; soft-delete recovery |
Diagnostic | 5 | Ping, version, usage guide, capability explorer, demos |
94 tools total across 12 modules.
Related MCP server: semantic-memory
Quick Start
You need a Supabase project, an embedding API key (OpenAI by default), and an MCP-capable AI client.
1. Set up Supabase
Create a Supabase project, then in the SQL Editor run supabase/setup.sql. This single file sets up the full schema from scratch — extensions (vector, uuid-ossp, pg_trgm), all tables, indexes, RLS policies, functions, views, maintenance jobs, and the Data API grants required for compatibility with Supabase's removal of automatic default privileges for projects created on or after 2026-05-30. The wizard at foundersmcp.com/setup prints the same SQL with the embedding dimension already matched to your provider — prefer it if you are not using the default dimension.
2. Connect your AI client
The Founders OS MCP server runs through npx. Every client - Claude Desktop, Cowork, Cursor, Continue.dev, Zed, or any spec-compliant MCP client - uses the same configuration.
The quickest way is the wizard at foundersmcp.com/setup: enter your Supabase and embedding credentials and it generates a filled-in config for you to copy or download. Your credentials never leave the browser. You can also paste the block below by hand.
Drop this into your client's mcp.json (in Claude Desktop, this is the MCP servers section of your config):
{
"mcpServers": {
"founders-os": {
"command": "npx",
"args": ["-y", "@ourthinktank/founders-os@latest"],
"env": {
"SUPABASE_URL": "https://your-project.supabase.co",
"SUPABASE_SECRET_KEY": "sb_secret_...",
"FOUNDERS_OS_COMPANY_ID": "your-company",
"FOUNDERS_OS_USER_ID": "your-name",
"FOUNDERS_OS_TIMEZONE": "America/Los_Angeles",
"EMBEDDING_PROVIDER": "openai",
"EMBEDDING_MODEL": "text-embedding-3-small",
"EMBEDDING_DIM": "1536",
"OPENAI_API_KEY": "sk-..."
}
}
}
}See Environment variables for the full list and provider options.
3. Try it
What can you do? -> show_capabilities
Catch me up -> get_session_start
Add Acme Corp as a new prospect -> add_customer
Log a call with Sarah at Acme - discussed pricing -> log_interaction
Create a task to send the proposal by Friday -> create_task + link_task
What's stuck or overdue? -> get_stuck_list
Show me everything about Acme Corp -> get_entity_card
Remember for the org: targeting SMB fintech in Q3 -> memory_store
Show me OTT's P&L for Q1 -> get_pl_report
Run the customer-onboarding playbook for Acme -> run_playbook
Give me my weekly retro for LinkedIn -> get_weekly_retro
Let's checkpoint - wrap up this session -> checkpoint
What's happened on founders-os lately? -> get_project_historyCRM (13 tools)
Pipeline management for customer organizations and the contacts inside them. Customers are organizations; contacts are people - always separate records, so you can move a contact between customers without losing history.
Customers: add_customer, get_customer, update_customer, remove_customer, search_customers, list_customers
Contacts: add_contact, update_contact, remove_contact, search_contacts
Interactions: log_interaction, list_interactions
Dashboard: get_dashboard
Pipeline phases: prospect -> lead -> opportunity -> customer -> renewal (plus churned, inactive).
Tasks (12 tools)
Unified task management with org and personal scopes, entity linking, AI assignment, task dependencies, progress notes, and a task-to-memory bridge.
create_task, get_task, update_task, complete_task, remove_task, list_tasks, link_task, unlink_task, list_entity_tasks, add_task_note, assign_task, get_task_summary
Scopes: org (team-visible, default) and personal (private to creator).
AI assignment: Use @claude or @gpt as the assignee. get_task_summary surfaces a dedicated AI work queue. list_tasks(assigned_to='@claude') filters to AI-assigned work.
Dependencies: Set blocked_by_task_id on a task. Completing the blocker surfaces unblocked_tasks in the response.
Task-to-memory bridge: When completing a task, set store_as_memory=true to persist the completion note as an org-scoped memory entry.
Entity linking: Tasks can link to customers, contacts, interactions, transactions, projects, playbooks, memories, or any other entity type via the task_links junction table. Link at creation time or later with link_task.
Projects (5 tools)
Projects are first-class records anchored on a project tag (e.g. #acme-rebuild). get_project returns the project card with status, the linked tag, recent tasks grouped by status, and any customers tagged into it.
create_project, get_project, update_project, remove_project, list_projects
list_projects also flags any #-prefixed tags in the registry that don't yet have a project record, so the registry and the projects directory stay in sync.
Playbooks (11 tools)
Named, reusable orchestration templates. A playbook is defined once and run against a customer (or other subject) to spin up a complete project: it creates native Founders OS tasks AND, when connected MCP tools are present, fires external actions like creating a GitHub repo, posting to Slack, or scheduling a calendar event. If a connector is not available, the step gracefully falls back to a tagged [manual] task so the playbook still works.
create_playbook, get_playbook, update_playbook, remove_playbook, list_playbooks, add_playbook_step, update_playbook_step, remove_playbook_step, run_playbook, get_playbook_run, list_playbook_runs
Step types: native_task (Founders OS task) or external_action (MCP tool call). External steps carry a connector, an action, and a params object with placeholders.
Placeholders: {{customer.name}}, {{customer.slug}}, {{playbook.start_date}}, {{playbook.start_date+Nd}}, {{contact.primary.name}}, {{memory:key}} resolved at runtime.
Run log: get_playbook_run returns the full execution log; list_playbook_runs shows history per playbook.
Tags (4 tools)
Shared tag registry with soft validation. Tags are advisory: unrecognized tags warn but never block operations, and new tags auto-register on first use.
list_tags, create_tag, rename_tag, remove_tag
Conventions: #project-name for projects, @person for people, !state for meta-states (e.g. !needs-review). Simple category words like bug or release are fine unprefixed.
Validation checks: typo detection against existing tags, known-contact detection (nudges toward @), known-customer detection (nudges toward entity linking), and state-word detection (nudges toward !).
Financial (14 tools)
Simple double-entry ledger scoped by FOUNDERS_OS_COMPANY_ID, with per-user access control so company books can be opened to specific teammates only.
add_transaction, list_transactions, remove_transaction, add_category, list_categories, remove_category, add_account, list_accounts, remove_account, transfer_between_accounts, get_pl_report, get_financial_summary, get_financial_access, set_financial_access
Multi-company: Set a different FOUNDERS_OS_COMPANY_ID per instance to keep books separate.
Access control: set_financial_access grants or revokes a member's access to a company's financial tools. get_financial_access reports the current grants. By default the owner of a FOUNDERS_OS_COMPANY_ID has access; everyone else is locked out until explicitly granted.
Feeds (13 tools)
Built-in feed reader (RSS, Atom, JSON Feed) with a Postgres-backed store. Subscribe, brief, search, bookmark, pin.
Subscriptions: subscribe_feed, unsubscribe_feed, list_feeds, refresh_feeds, import_starter_feeds, pin_feed, unpin_feed
Items: get_feed_items, read_feed_item, get_feed_briefing
Bookmarks: bookmark_item, remove_bookmark, list_bookmarks
Categories: tech, startups, business, finance, product, design, engineering, ai, crypto, science, news, personal, other.
Memory (5 tools)
Semantic memory backed by pgvector with personal and org scopes, near-duplicate detection, metadata filters, and pagination.
memory_store, memory_recall, memory_update, memory_forget, memory_summarize_and_store
Scopes:
org- visible to all team members pointing at the same Supabase projectpersonal- visible only to the user whoseFOUNDERS_OS_USER_IDmatches
Filters on memory_recall: min_score, source_tool, created_after, created_before, offset, limit, project, scope.
Dedup: memory_store and memory_summarize_and_store check for existing memories with cosine similarity >= 0.92 and surface a conflict with options to force-store or skip.
Embedding providers (set via EMBEDDING_PROVIDER):
Provider | Default model | Dims | Credentials |
|
| 1536 |
|
|
| 1024 | AWS credential chain |
|
| 768 |
|
Set
EMBEDDING_DIMto match the model before running002_memory_schema.sql. The dimension is permanent - changing providers later requires re-embedding the memory table.
Surfaces (6 tools)
Cross-domain read views that compose data from tasks, CRM, finance, and feeds into ready-to-render dashboards for AI agents.
Tool | What it returns |
| Orientation dashboard: task signals, AI queue, finance pulse, CRM activity, feed unread counts, suggested actions, first-run flag, and the four-tier rendering contract. Call at the start of every session. |
| Complete picture of any entity (customer, contact, transaction, project) with open tasks, recent interactions, and linked records in one call. |
| Completed-task retrospective grouped by tag with completion notes. Can format as a LinkedIn-ready draft. |
| Surfaces stuck, stale, and overdue tasks that need triage, with days-stale counts and suggested actions. |
| End-of-session bookend to |
| Chronological, newest-first timeline of a project's checkpoints; the "what happened, in order" companion to semantic memory recall. Pass |
Members (4 tools)
Org membership directory. Maps FOUNDERS_OS_USER_ID slugs to display names, marks the owner of a company, and supports adding or removing members.
add_member, list_members, remove_member, set_member_owner
The owner of FOUNDERS_OS_COMPANY_ID is the default holder of financial access; others get access via set_financial_access.
Audit and Restore (2 tools)
get_audit_log returns the structured audit trail across all domains (creates, updates, deletes, restores, financial access changes, playbook runs).
restore_item reverses a soft delete on any soft-deleted record type, returning the record to its previous state. Use the audit log to find the original delete event and the entity ID to restore.
Diagnostic and Meta (5 tools)
Tool | Description |
| Connectivity test. Embeds an update notice if a newer package version is available. |
| Running package version, rendering contract version, and the latest npm-published version. |
| On-demand reference covering modules, conventions, and common workflows. |
| Friendly overview with example prompts for each module. |
| Lists or runs the bundled interactive walkthroughs (welcome tour, conflict resolution, run-my-week, etc.). |
Rendering contract
Render-bearing tools include a render field with a four-tier ladder so the AI client picks the most visual output it supports: visual primitive tool (artifact/widget/canvas), inline rich output (HTML/SVG/JSX), markdown table, then prose. The contract ships in three channels in attention-strength order:
Server
instructionsfield at MCP registration - loaded at connect. All spec-compliant MCP clients.get_session_start.rendering_contract- full ladder text on session orientation. All clients.Per-response
rendering_contractreminder - self-contained short form. Cold-start safety net.
The canonical source lives in packages/mcp-server/src/contract.ts, so every MCP client gets rich rendering through these channels with no plugin required. (A Claude plugin that mirrors the contract at system-prompt position, for stronger adherence in long sessions, is planned for a later release and is not part of this one.) Current contract_version is 4; a mismatch surfaces as contract_version_warning on get_session_start and get_version.
First-run onboarding
When the database is empty, tools attach onboarding hints to their responses. get_session_start detects a fresh install and suggests a guided walkthrough: add a first customer, create a first task, and optionally set up finance accounts. This keeps the experience conversational rather than dumping all 92 tools at once.
For a guided tour of a specific feature, ask the AI to "run the welcome demo" or "show me the conflict-resolution walkthrough" - list_demos returns the bundled interactive scripts.
Environment variables
# Supabase (required)
SUPABASE_URL=https://your-project.supabase.co
SUPABASE_SECRET_KEY=sb_secret_...
# Identity - set distinct values per teammate so personal memory scopes work
FOUNDERS_OS_USER_ID=your-name # defaults to "default"
FOUNDERS_OS_COMPANY_ID=your-company # defaults to "default"
FOUNDERS_OS_TIMEZONE=America/Los_Angeles # used by date-aware tools and YTD math
# Embedding provider for memory tools
EMBEDDING_PROVIDER=openai # openai | bedrock | ollama
EMBEDDING_MODEL=text-embedding-3-small # provider default used if omitted
EMBEDDING_DIM=1536 # MUST match the vector() size in 002_memory_schema.sql
# OpenAI (required if EMBEDDING_PROVIDER=openai)
OPENAI_API_KEY=sk-...
# Bedrock (uses AWS credential chain - no key needed on AWS with IAM role)
# AWS_DEFAULT_REGION=us-east-1
# AWS_ACCESS_KEY_ID=...
# AWS_SECRET_ACCESS_KEY=...
# Ollama (required if EMBEDDING_PROVIDER=ollama)
# OLLAMA_BASE_URL=http://localhost:11434Development
# Clone
git clone https://github.com/ourthinktank/founders-os.git
cd founders-os
# Install
npm install
# Build
npm run build
# Watch
npm run devProject structure
founders-os/
├── packages/
│ ├── mcp-server/ # @ourthinktank/founders-os npm package
│ │ ├── src/
│ │ │ ├── index.ts # Entry point (stdio transport)
│ │ │ ├── supabase.ts # Database client
│ │ │ ├── contract.ts # Canonical rendering contract
│ │ │ └── tools/
│ │ │ ├── crm/ # Customers, contacts, interactions, dashboard
│ │ │ ├── tasks/ # Task management
│ │ │ ├── projects/ # Project records
│ │ │ ├── playbooks/ # Reusable orchestration templates
│ │ │ ├── tags/ # Shared tag registry
│ │ │ ├── financial/ # Ledger + access control
│ │ │ ├── rss/ # Feed reader
│ │ │ ├── memory/ # Semantic memory
│ │ │ ├── surfaces/ # Cross-domain reads
│ │ │ ├── members/ # Org directory
│ │ │ ├── audit.ts # Audit log
│ │ │ ├── restore.ts # Soft-delete recovery
│ │ │ ├── diagnostic.ts # Ping + version
│ │ │ ├── meta.ts # Usage guide + capabilities + demos
│ │ │ ├── first-run.ts # Empty-database hints
│ │ │ ├── dates.ts # Date/timezone helpers
│ │ │ └── permissions.ts # Financial access checks
│ │ └── demos/ # Interactive walkthrough scripts
├── integrations/
│ └── setup-page/ # Config wizard hosted at foundersmcp.com/setup
├── supabase/
│ ├── setup.sql # Complete schema for fresh installs (run once)
│ └── migrations/ # Future schema changes (currently empty)
├── docs/ # Specs and design docs
└── README.mdLocal install for testing
Build, then point your MCP client at the local entry instead of npx:
{
"mcpServers": {
"founders-os": {
"command": "node",
"args": ["/absolute/path/to/founders-os/packages/mcp-server/dist/index.js"],
"env": {
"SUPABASE_URL": "https://your-project.supabase.co",
"SUPABASE_SECRET_KEY": "sb_secret_...",
"FOUNDERS_OS_USER_ID": "your-name",
"FOUNDERS_OS_COMPANY_ID": "your-company",
"EMBEDDING_PROVIDER": "openai",
"EMBEDDING_DIM": "1536",
"OPENAI_API_KEY": "sk-..."
}
}
}
}Contributing
Founders OS is open source under the MIT license. Outside contributions are not being accepted yet - that's coming soon. In the meantime, issue reports are welcome and very much encouraged: please file them on GitHub. See CONTRIBUTING.md for how to file a good report, and our Code of Conduct. Security issues should go through SECURITY.md, not public issues.
License
MIT - see LICENSE.
Available Tools
102 toolsadd_accountAdd AccountA
Create a capital account (e.g. bank account, credit card, wallet).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Account name (must be unique within the company). | |
| tags | No | Tags for categorization and cleanup, e.g. ['demo-financial']. | |
| initial_balance | No | Starting balance. Must be 0 or greater. Default 0. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already disclose write, non-idempotent, non-destructive, closed-world behavior, so the safety profile is covered. The description adds only the domain framing of what counts as an account; it does not mention that names must be unique (only in the schema), what happens on duplicate names, or that creation is a prerequisite for other financial tools.
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 verb first and a parenthetical that earns its place by defining the resource's scope. Nothing extraneous and nothing 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 simple three-parameter creation tool with full schema documentation and annotations, the definition is minimally adequate. It stops short of explaining the account's role in the broader financial model (transactions, transfers, balance reports), which is the main thing an agent would need beyond structured fields.
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 each of the three parameters has its own description, including the uniqueness constraint and the balance minimum. 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?
States a specific verb and resource ("Create a capital account") and clarifies the resource with concrete examples (bank account, credit card, wallet), which distinguishes it from sibling add_transaction (a transaction, not an account). It does not explicitly contrast with list_accounts/remove_account, but the verb makes the distinction obvious.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the agent can infer this is the creation step before adding transactions or transferring funds, but the description never says when to use it versus alternatives, nor any prerequisites (e.g. does a transaction require an existing account?). No exclusions or sequencing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_categoryAdd CategoryB
Create an income or expense category.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Category name (must be unique within the company). | |
| tags | No | Tags for categorization and cleanup, e.g. ['demo-financial']. | |
| type | Yes | Category type. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already state readOnlyHint=false, idempotentHint=false, and destructiveHint=false, so the safety profile is covered. The description adds no behavioral context beyond the annotations, such as what happens on duplicate names, whether a category must exist before adding transactions, or permission requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no unnecessary wording. It is appropriately sized for a simple creation tool whose parameters are fully documented in 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 simple creation tool with complete schema coverage and useful annotations, the description is minimally adequate. It still omits practical context an agent might need, such as how category creation relates to sibling tools and what happens when a duplicate name is supplied.
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 are already documented in the input schema. The description mentions the income/expense distinction, but this is already captured by the type enum and adds no meaning 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 uses a clear verb-resource pair, "Create ... category," and specifies that the category type is income or expense. It distinguishes creation from sibling tools like list_categories and remove_category, 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?
The description gives no explicit when-to-use guidance, no prerequisites, and no comparison to alternatives such as list_categories or remove_category. Usage is only implied by the verb "Create."
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_contactAdd ContactC
Add a contact person to a customer organization. Contacts are individuals you interact with at that company.
| Name | Required | Description | Default |
|---|---|---|---|
| role | No | Role at the organization, e.g. 'CEO', 'CTO', 'Head of Sales' | |
| No | Email address | ||
| phone | No | Phone number | |
| last_name | Yes | Contact's last name | |
| first_name | Yes | Contact's first name | |
| is_primary | No | Whether this is the primary contact for the organization | |
| customer_id | Yes | Customer UUID this contact belongs to |
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, non-idempotent write, so the safety profile is covered. The description adds nothing beyond that: it does not say whether duplicate contacts are allowed, what happens when is_primary is true and a primary already exists, what is returned (new contact ID), or whether missing optional fields can be filled later via update_contact.
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. The second sentence is definitional and mildly redundant with the first, but it does help an agent understand the resource type without cost.
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 with no output schema, the description is thin: it omits the return value, duplicate handling, and the relationship to update_contact/remove_contact. It is enough to call the tool correctly given full schema coverage, but not enough to use it well within the contact lifecycle.
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 role, is_primary, and customer_id is documented in the schema. The description adds no parameter-level meaning such as format expectations or the interaction between is_primary and existing contacts, 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 and resource ("Add a contact person to a customer organization") and clarifies what a contact is. It does not distinguish this from the closely related siblings update_contact, add_customer, or search_contacts, so an agent gets the action but not 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 use this instead of update_contact (for existing contacts) or when a contact should instead be captured via add_customer. No prerequisites, no mention that customer_id must reference an existing customer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_customerAdd CustomerA
Create a new customer record. Customers are organizations or individuals that your business works with or is pursuing. If similar customers already exist, a conflict response is returned with options to use an existing record or create a new one. Pass skip_duplicate_check=true to bypass this on retry.
| Name | Required | Description | Default |
|---|---|---|---|
| zip | No | ZIP code | |
| city | No | City | |
| tags | No | Tags for categorization, e.g. ['saas', 'enterprise'] | |
| notes | No | General notes about this customer | |
| state | No | 2-letter state code | |
| website | No | Website URL | |
| address_line1 | No | Street address | |
| address_line2 | No | Suite, building, etc. | |
| customer_type | No | Type of customer | other |
| customer_phase | No | Lifecycle phase: prospect, lead, opportunity, customer, renewal, churned, or inactive | prospect |
| organization_name | Yes | Name of the company, organization, or individual | |
| skip_duplicate_check | No | Set true after conflict resolution to skip duplicate detection and create the customer. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare the generic write profile (not read-only, not idempotent, not destructive); the description adds the genuinely non-obvious fact that duplicate detection runs and can return a `conflict` payload with resolution options. It does not describe the successful return shape, but that is a modest gap for a create 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 the action, then domain framing, then the edge-case behavior. The middle sentence defining customers is mild padding but supplies useful domain context; nothing else 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 12-parameter mutation with no output schema, the description covers what is created and the one surprising response path (conflict + bypass). The remaining incompleteness is the success-response shape and where the new record's identifier comes from, which the agent cannot infer 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 description coverage is 100%, so the schema already documents all 12 fields including skip_duplicate_check. The description restates that flag's purpose in the retry context but adds no other field-level meaning, 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?
Names a specific verb and resource ('Create a new customer record') and defines what a customer is, so the agent knows exactly what entity is produced. It does not explicitly differentiate itself from siblings like update_customer or add_contact, but the create semantics are 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?
Provides conditional guidance for the duplicate-conflict path ('If similar customers already exist...') and the retry procedure via skip_duplicate_check. It stops short of telling the agent when to reach for search_customers or update_customer instead, leaving the create-vs-update choice implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_memberAdd MemberA
Add a team member to the company. Creates their company_members row with default access (no financial access, not an owner). Use set_financial_access to grant financial access, and set_member_owner to grant owner status. Requires owner role.
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | Yes | The user_id for the new member — must match the FOUNDERS_OS_USER_ID they will set in their MCP config. | |
| display_name | No | Human-readable name (improves audit log legibility). | |
| financial_access | No | Financial access level. Defaults to 'none'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is a non-readonly, non-destructive, non-idempotent write, and the description adds real context beyond them: what row is created, what default privileges are applied, and the owner-role authorization requirement. It stops short of stating what happens if the user is already a member, which matters given idempotentHint=false.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, front-loaded with the action and its side effect, followed by routing guidance and the authorization requirement. No redundant restatement of the tool name or 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?
Covers the auth prerequisite, creation semantics, and defaults for a simple three-parameter mutation with no output schema. The only gap is the absence of any statement about the outcome when the user is already a member or what the caller receives on success.
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 are already documented, including the enum for financial_access and the FOUNDERS_OS_USER_ID matching constraint. The description reinforces the default privilege state but 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?
States a specific verb and resource ("Add a team member to the company") and immediately clarifies the side effect ("Creates their company_members row"). It explicitly distinguishes itself from siblings set_financial_access and set_member_owner, so an agent can route correctly without opening other schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the two alternative tools and the conditions that select them (granting financial access, granting owner status), plus the prerequisite "Requires owner role." Minor friction: it says to use set_financial_access to grant financial access while the schema also exposes a financial_access parameter, leaving the agent to infer which path to prefer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_playbook_stepAdd Playbook StepA
Add an ordered step to a playbook. Steps are either 'native_task' (created in Founders OS when the playbook runs) or 'external_action' (instructions returned for the AI to execute via connected MCP tools like GitHub or Slack). All text fields support {{placeholder}} syntax. Steps are ordered by order_index; append by using a value higher than existing steps.
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | 'native_task' creates a task in Founders OS. 'external_action' emits instructions for the AI to execute. | |
| title | Yes | Step title. Supports {{placeholders}} like {{customer.name}}. | |
| action | No | For external_action: the action to perform, e.g. 'create_repo', 'create_channel'. | |
| params | No | For external_action: connector-specific parameters. Supports {{placeholders}}. Example: { template: 'ourthinktank/web-template', name: '{{customer.slug}}-{{playbook.start_year}}' } | |
| assignee | No | Deprecated: use `assigned_to`. | |
| priority | No | For native_task: priority. Defaults to 'medium'. | |
| connector | No | For external_action: the MCP connector to use, e.g. 'github', 'slack', 'calendar'. | |
| due_offset | No | For native_task: due date offset in days from the playbook start_date. Omit for no due date. | |
| assigned_to | No | For native_task: who to assign to. Use FOUNDERS_OS_USER_ID, '@claude', or '@gpt'. | |
| description | No | Additional context. Supports {{placeholders}}. | |
| order_index | Yes | Position in the step sequence. Lower numbers run first. | |
| playbook_id | Yes | Playbook UUID. | |
| fallback_task | No | For external_action: task title to create if the connector is unavailable at run time. Always provide this so the playbook degrades gracefully. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this as a non-readonly, non-idempotent mutation, and the description adds meaningful behavior beyond them: external_action steps emit instructions for the AI to execute via connectors, while native_task steps create tasks in Founders OS. It does not warn about duplicate or re-run behavior, which leaves some mutation risk 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?
Four sentences, front-loaded with the core action and step-type distinction, with no wasted wording. The append instruction is placed where an agent needs it when filling order_index.
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 13 parameters, a nested params object, and no output schema, the description covers the essential model of step types, placeholders, and ordering. It could say more about the response or the relationship to sibling step-management tools, but the schema carries the per-field detail.
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 the 13 parameters. The description adds useful cross-parameter semantics: all text fields support {{placeholder}} syntax and the ordering model is driven by order_index.
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 an ordered step to a playbook') and immediately distinguishes the two step types, 'native_task' and 'external_action', so an agent knows exactly what the tool creates.
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?
It gives clear operational guidance for appending steps via a higher order_index, but does not explicitly contrast this with update_playbook_step or remove_playbook_step, nor does it state prerequisites such as the playbook already existing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_task_noteAdd Task NoteA
Add a progress note to a task without changing its status. Useful for logging updates, blockers, or partial progress mid-task.
| Name | Required | Description | Default |
|---|---|---|---|
| note | Yes | The note content. | |
| task_id | Yes | Task UUID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false and idempotentHint=false, so the safety profile is covered. The description usefully adds that task status is left untouched, but it does not warn that repeated calls with the same note will create duplicate notes, which matters given idempotentHint=false.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, the key constraint front-loaded, and no redundant restatement of the tool name or parameter list.
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?
A simple two-parameter mutation tool with full schema coverage and annotations that carry the safety profile; the description covers purpose and the main behavioral caveat. Only the duplicate-note consequence of non-idempotency is left unstated.
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 task_id and note are already fully documented in the schema. The description adds no format, length, or content guidance 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?
States a specific verb and resource (add a note to a task) and adds a scoping clause, 'without changing its status,' which separates it from update_task and complete_task. It stops short of naming those siblings explicitly, so it is clear but not fully 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?
Gives concrete usage contexts: logging updates, blockers, or partial progress mid-task. The status-isolation clause implicitly rules out using it for status transitions, but no alternative tool is named for those cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_transactionAdd TransactionA
Record an income or expense transaction. Automatically updates the account balance. Provide a positive amount — the sign is applied based on the category type.
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | Transaction date in YYYY-MM-DD format. | |
| tags | No | Tags for categorization and cleanup, e.g. ['demo-financial']. | |
| amount | Yes | Transaction amount (positive number — sign is derived from category type). | |
| account_id | Yes | UUID of the capital account to debit/credit. | |
| category_id | Yes | UUID of the category (income or expense). | |
| customer_id | No | UUID of the customer this transaction is attributed to (e.g. a client payment). Optional. | |
| description | Yes | Description of the transaction. | |
| exclude_from_reports | No | Set true to exclude from P&L reports (e.g. owner draws). Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish that this is a non-read-only, non-idempotent, non-destructive write. The description adds genuinely useful behavior beyond that: it discloses the side effect ('Automatically updates the account balance') and the sign-derivation rule. It does not warn that retries can duplicate entries despite idempotentHint=false, which is the main remaining 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 short sentences, each carrying distinct information: what is recorded, the balance side effect, and the amount-sign rule. The most important constraints are front-loaded 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?
For an 8-parameter mutation tool with full schema coverage and no output schema, the description covers purpose, side effect, and the trickiest input rule. It leaves out duplicate/retry behavior and whether the account balance update is transactional with the insert, which 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?
Schema description coverage is 100%, so every parameter is already documented, including the positive-amount and sign-derived-from-category rules. The description's 'Provide a positive amount' restates the schema rather than adding new meaning. A 3 baseline is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Record an income or expense transaction.' This clearly separates the tool from list_transactions, remove_transaction, and transfer_between_accounts in the sibling set. It does not explicitly name an alternative, 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?
Usage is implied by 'Record an income or expense transaction' and by the note that the account balance is updated automatically, but there is no explicit when-to-use or when-not-to-use guidance. Nothing tells the agent when to prefer transfer_between_accounts or how to handle an already-recorded transaction (remove vs re-add).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
assign_taskAssign TaskAIdempotent
Assign or reassign a task to a team member or AI agent. Use a FOUNDERS_OS_USER_ID for humans, '@claude' or '@gpt' for AI agents, or pass an empty string to unassign. A task has exactly one assignee by design - the single accountable owner ('one neck to grab') - so assigning replaces the current owner rather than adding a second. For others who are involved, name them in the task description or use @person tags. A personal task can be assigned only to you, an AI agent, or nobody. If the response contains a conflict field, the task was NOT assigned; present the options and retry with the chosen resolution.
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes | Task UUID. | |
| resolution | No | Conflict resolution when a personal task would be assigned to another person: 'make_org' saves it as an org task, 'cancel' aborts. | |
| assigned_to | Yes | User ID, '@claude', '@gpt', or empty string to unassign. Replaces the single accountable owner; one assignee per task by design. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond annotations by disclosing the key semantic trait: exactly one assignee, so assigning replaces rather than adds. It also documents the personal-task constraint and, critically, the failure mode – a `conflict` field means the task was NOT assigned and must be retried with a resolution. That is exactly the kind of post-call behavior an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and the single-owner rule, then the value formats, then the conflict-handling note. Dense but each sentence carries information; the parenthesis idiom ('one neck to grab') is mildly expendable but clarifies 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?
With no output schema, the description compensates by explaining the `conflict` response field and the retry path. Combined with the personal-task rule and the required resolution parameter, an agent has everything needed to call and recover 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?
Schema coverage is already 100%, but the description still adds real meaning: accepted value forms (user ID, '@claude'/'@gpt', empty string), what empty string means (unassign), and the personal-task restriction on assigned_to. Adds value over the schema rather than restating it.
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 ('Assign or reassign') and resource ('a task to a team member or AI agent'), and immediately distinguishes this from a mere field update by explaining that assignment replaces the single accountable owner. An agent can tell this apart from update_task, create_task, or link_task without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete when-to-use guidance: how to specify human vs AI vs unassign, what to do for additional involved people (@person tags or description text), and the personal-task restriction. It stops short of explicitly naming sibling tools like update_task as the alternative for editing other fields, so not a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bookmark_itemBookmark Feed ItemB
Save a feed item for later. Snapshots the item content so it persists beyond the cache. Use the feed_url and item index number from get_feed_items.
| Name | Required | Description | Default |
|---|---|---|---|
| feed_url | Yes | URL of the feed containing the item | |
| item_index | Yes | 1-based item number from the get_feed_items list |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare a non-read-only, non-idempotent, non-destructive write. The description usefully adds that content is snapshotted and outlives the cache, which is real behavior beyond the annotations. However, given idempotentHint=false, it never warns that repeated calls likely create duplicate bookmarks or state 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?
Three short sentences, front-loaded with purpose, then mechanism, then parameter sourcing. The final sentence duplicates schema text, which is the only wasted line but is small enough not to hurt readability.
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 write with no output schema and full annotation coverage, the description covers the essential workflow and persistence semantics. It stops short of describing the return value (bookmark identifier or confirmation) and duplicate handling, which an agent would need to chain calls 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?
Schema coverage is 100% and both parameters are fully documented, including the 1-based indexing and the get_feed_items origin. The description's sentence about feed_url and item index largely restates the schema, so it adds little beyond the baseline.
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 ("Save a feed item for later") and adds the mechanism ("Snapshots the item content so it persists beyond the cache"), which makes the effect concrete. It does not distinguish itself from neighbors like read_feed_item, list_bookmarks, or remove_bookmark, so an agent must infer the contrast rather than read it.
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?
"Save a feed item for later" implies the use case, and the reference to get_feed_items establishes the ordering dependency (fetch items, then bookmark one). There is no guidance on when NOT to use it, e.g. re-bookmarking an already-bookmarked item or reading instead of saving, so 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.
checkpointCheckpointA
End-of-session bookend to get_session_start. Call when the user says 'checkpoint', 'let's checkpoint', or 'wrap up this session'. Returns the ordered checkpoint procedure for the agent to execute (summarize, capture repo changes as commit links, store the record, propose task candidates, write the handoff doc) plus the exact memory call to make and the previous checkpoint for continuity. This tool does not write anything itself - the agent performs the steps. Pass the project tag so the previous checkpoint can be loaded; if omitted, ask the user which project before storing.
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | Scope to store the checkpoint under. Defaults to 'org' (team-visible). | |
| author | No | Whose previous checkpoint to carry forward. 'me' (default) returns your own last checkpoint for this project - the right choice for resuming your own thread on a shared team project, so a teammate's session is not picked up by accident. 'anyone' returns the team's most recent checkpoint. The handoff -NN sequence is always counted team-wide regardless of this setting, so shared-repo filenames never collide. | |
| project | No | Project tag for this session (e.g. 'founders-os'). Omit only if unknown - then ask the user. | |
| timezone | No | IANA timezone (e.g. 'America/New_York') for the handoff-doc date. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations by disclosing what is returned (ordered procedure, exact memory call, previous checkpoint for continuity) and that the tool itself performs no writes while the agent executes the steps. That clarification is valuable given readOnlyHint=false, though the surface tension between 'does not write anything itself' and a non-read-only hint is left for the agent to reconcile rather than resolved explicitly. No rate limits, error modes, or side effects of the downstream writes are described.
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 trigger phrases and the identity as a bookend, then moves to return contents and the no-write caveat. Efficient overall, but the closing sentence about the project tag repeats the schema's own wording and could be trimmed.
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 enumerating the returned artifacts (procedure steps, memory call, previous checkpoint) and the sequence of actions the agent must take. For a zero-required-parameter orchestration tool, an agent has everything needed to call it and act on the result.
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 already explains all four parameters, including the project tag and the 'ask the user if unknown' rule, so the description largely restates structured data. It adds only marginal meaning, mainly reinforcing why the project tag matters (loading the previous checkpoint) and noting the storing step happens after project confirmation. Baseline 3 is appropriate when the schema carries the parameter 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 role (end-of-session bookend to get_session_start) and a concrete deliverable (the ordered checkpoint procedure plus the exact memory call and prior checkpoint). The verb/resource pairing is unambiguous and distinguishes it from get_last_checkpoint and get_session_start by naming the counterpart 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?
Gives explicit invocation triggers ('checkpoint', 'let's checkpoint', 'wrap up this session') and states the prerequisite behavior when the project tag is missing ('ask the user which project before storing'). The alternative, get_session_start, is identified as the paired bookend, so the agent knows which of the two to call at each end of a session.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
complete_taskComplete TaskAIdempotent
Mark a task as done. Optionally log a completion note. Set store_as_memory=true to persist the completion as a memory (org-scoped for an org task, personal for a personal task). Returns unblocked_tasks if completing this task unblocks dependent tasks. If the task is blocked by an incomplete task, a conflict response is returned. Pass force=true to complete anyway after conflict resolution.
| Name | Required | Description | Default |
|---|---|---|---|
| force | No | Deprecated: use `resolution: "confirm"`. Set true to skip the blocker check. | |
| task_id | Yes | Task UUID to complete. | |
| resolution | No | Conflict resolution: 'confirm' completes despite the blocker, 'cancel' aborts. | |
| memory_project | No | Project tag for the memory entry. Only used when store_as_memory is true. | |
| completion_note | No | Summary of what was done. AI agents should always provide this. | |
| store_as_memory | No | If true and completion_note is provided, stores the completion as a memory: org-scoped for an org task, personal to the task's creator for a personal task. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only establish that this is a non-destructive, idempotent write; the description adds substantive behavior beyond that — the conflict on an incomplete blocker, the unblocked_tasks side effect, and the scoping rule for persisted memories. Its weakness is that the force guidance is stale relative to the schema's deprecation note, which could steer an agent wrong.
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-loaded with the core action, then layered side effects and edge cases in descending priority; almost no filler. The closing force sentence is the one element that does not earn its place, since it duplicates and contradicts the schema's deprecation note.
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 usefully covers the return surface — unblocked_tasks and the conflict payload — which an agent otherwise could not anticipate. It falls short only on the resolution/force discrepancy, leaving the correct recovery path ambiguous.
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 baseline is 3 and the schema already documents all six parameters including the confirm/cancel enum. The description reinforces store_as_memory and the conflict flow, but its only parameter-directive sentence endorses the deprecated force flag and never explains the enum it implies.
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+resource ("Mark a task as done") that is unambiguously distinct from siblings like update_task, remove_task, and add_task_note. The follow-on sentences about memory persistence and dependency unblocking further pin down what state change occurs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a real branching rule for the blocked case (conflict response, then complete anyway), which is the main decision point. But it never says when to prefer this over status-change siblings such as update_task, and it points agents at force=true without mentioning the preferred resolution:"confirm" path.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_playbookCreate PlaybookA
Create a new reusable playbook template. A playbook is an ordered set of steps run against a customer to automate project setup. Add steps with add_playbook_step after creation.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Human-readable name, e.g. 'New Web Project'. | |
| slug | Yes | URL-safe unique identifier, e.g. 'new-web-project'. Must be unique per company. | |
| description | No | What this playbook is for and when to use it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false, and openWorldHint=false, so the agent knows this is a non-destructive, local, non-idempotent write. The description adds useful context that the created object is an empty container to be populated later. It does not disclose that slug uniqueness is enforced per company (a likely failure mode) or what the caller receives on success, both of which would be valuable for a 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?
Two short sentences with zero redundancy: the second defines the object before the agent must reason about it, and the third gives the follow-up action. Front-loaded with the action and nothing an agent must skip past.
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 three-parameter create tool with full schema coverage and adequate annotations, the description covers what the object is and how to continue building it. The remaining gap is that no output schema exists, so the agent has no way to know whether the response returns the new playbook's id (needed to call add_playbook_step), and the uniqueness-failure behavior is unmentioned.
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 three properties documented including examples and the slug uniqueness constraint, so the description need not repeat them. The description adds no parameter-level meaning beyond the schema; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 reusable playbook template") and defines the domain object as "an ordered set of steps run against a customer to automate project setup," which an agent could not infer from the name alone. The verb clearly separates it from update_playbook, remove_playbook, and list_playbooks, though those siblings are never named.
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 closing sentence gives a concrete workflow cue ("Add steps with add_playbook_step after creation"), which tells the agent this is step one of a multi-call sequence. However, there is no guidance on when a playbook is the right structure versus creating tasks or projects directly, and no exclusion conditions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_projectCreate ProjectA
Register a new project. Auto-creates a #-prefixed tag in the tag registry. Returns a conflict if a project with the same slug already exists. If the user mentions starting or working on a project that doesn't exist in the registry, suggest creating it. Example triggers: 'I'm starting a new project called X', 'working on project X', 'let's kick off X.' Always confirm before creating.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Display name for the project (e.g. 'Founders OS', 'Series A'). | |
| status | No | Project status. Defaults to 'active'. | |
| description | No | What this project is about. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the mutation/duplicate-sensitive profile (readOnly=false, idempotent=false). The description adds real value beyond that: the tag-registry side effect and the conflict-on-duplicate-slug behavior, neither of which is derivable from schema or annotations. It stops short of describing permissions or what the returned object contains.
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-loaded with the action and side effect, then error behavior, then usage guidance, then the confirmation rule. The list of example triggers is slightly padded but each clause carries navigational value.
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 mutation with no output schema, the description covers the primary action, side effects, failure mode, and usage guardrails. Nothing an agent needs to call it safely is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds no parameter-level guidance and introduces a 'slug' concept that is not a parameter, leaving the agent to infer that slug is derived from name.
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+resource ("Register a new project") and immediately discloses the side effect of auto-creating a #-prefixed tag. It does not explicitly distinguish itself from siblings like update_project or list_projects, but the creation framing makes the distinction obvious.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit trigger conditions with quoted example utterances, states the proactive-suggestion case (user mentions a project not in the registry), and adds a gating rule ("Always confirm before creating"). This is as close to unambiguous routing as a description gets.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_tagCreate TagA
Register a new tag in the tag registry. The slug (lowercase, hyphenated form) must be unique per company. Returns an error if a tag with the same slug already exists.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Display name for the tag (e.g. 'Q2 2026', 'Fundraising'). | |
| color | No | Hex color for UI rendering (e.g. '#4A90D9'). Optional. | |
| scope | No | Tag scope. Defaults to 'org'. | |
| description | No | What this tag means or when to use it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false and a closed-world scope, so the description only needs to add context. It does: it discloses a failure mode ('Returns an error if a tag with the same slug already exists') and the uniqueness constraint that is not derivable from annotations, which directly explains the non-idempotent hint.
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: purpose first, then the constraint, then the error behavior. Minor redundancy in 'tag ... in the tag registry', but nothing that costs the agent comprehension.
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 four-parameter create tool with full schema coverage and a defined annotation profile, the description covers what the tool does, the uniqueness rule, and duplicate handling. The only gap is the success return shape (no output schema, and nothing says what a created tag looks like), which is a small omission for a tool this simple.
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 (name, color, scope, description) are already documented, and the enum/default for scope is in the schema. The description's only extra semantic content is that the slug is a lowercase hyphenated derivative of the name rather than a supplied parameter — a modest but real addition.
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 opens with a specific verb and resource ('Register a new tag in the tag registry'), which is unambiguous against siblings like list_tags, rename_tag, remove_tag, and preview_tags. An agent can tell this is the creation path 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?
Usage is only implied by the verb 'Register' — the description never states when to create versus rename an existing tag or how this relates to preview_tags/list_tags. It does supply one genuine precondition (slug uniqueness per company), which helps, but there is no explicit when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_taskCreate TaskA
Create a new task. Scope 'org' (default) is visible to all team members; 'personal' is private to the creator. Use assigned_to with a FOUNDERS_OS_USER_ID for human assignment, or '@claude' / '@gpt' for AI assignment. Optionally link to any FounderOS entity (customer, contact, transaction, etc.) at creation time. If the response contains a conflict field, the task was NOT created. Present all options to the user using an interactive chooser (AskUserQuestion) if available, then retry with the selected date.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Tags for filtering and grouping (e.g. ['Q2', 'fundraising']). | |
| links | No | Entities to link this task to at creation time. | |
| scope | No | 'org' (default) for team-visible; 'personal' for private. A personal task can be assigned only to you, an AI agent, or nobody. | |
| title | Yes | What needs to be done. | |
| status | No | Task status. Defaults to 'todo'. | |
| due_date | No | Due date (YYYY-MM-DD). | |
| priority | No | Priority level. Defaults to 'medium'. | |
| resolution | No | Conflict resolution when a personal task would be assigned to another person: 'make_org' saves it as an org task, 'cancel' aborts. | |
| assigned_to | No | Who to assign this to. Use a FOUNDERS_OS_USER_ID for a human, or '@claude' / '@gpt' for AI. A task takes exactly one assignee by design: the single accountable owner, the 'one neck to grab' (ONTG). This is deliberate, not a limitation - work split across several names tends to get done by no one. If several people are involved, still set one owner here and name the others in the description (or tag people you are waiting on with an @person tag). | |
| description | No | Additional details or context. | |
| due_date_day | No | Expected day of the week for due_date. If provided, the server validates it matches. Catches errors when converting 'due Thursday' to a date. Mismatch returns the correct day and nearby alternatives. | |
| blocked_reason | No | Required context when status is 'blocked'. | |
| blocked_by_task_id | No | UUID of a task that blocks this one. Sets status to 'blocked' automatically if not already set. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the read/write, idempotency, and open-world profile, but the description adds genuinely new behavior: visibility semantics per scope, the fact that a `conflict` field means the task was NOT created, and the single-assignee design rationale. The final retry sentence is muddled — it talks about 'the selected date' in a paragraph that began with an assignment conflict, leaving the recovery path 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?
The first three sentences are tight and front-loaded, but the closing conflict/retry instruction is compressed to the point of confusion and mixes an assignment conflict with a due-date retry. That single sentence is doing too much work and is the least parseable part of an otherwise efficient description.
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 13-parameter mutation tool with no output schema, the definition covers the critical decisions: scope visibility, assignment format, entity linking, and failure signaling. It leaves out what a successful response looks like and does not tie resolution='make_org'/'cancel' to the conflict-detection instructions, which an agent will need to connect on its own.
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 baseline is 3; the description still adds meaning by explaining what scope visibility actually implies for teammates and by justifying why assigned_to accepts exactly one owner rather than a list. It does not clarify how resolution interacts with the returned conflict payload, which is the one parameter pairing where intent could be misread.
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+resource ('Create a new task') and immediately differentiates the tool's main axis of variation (org vs personal scope). An agent can distinguish it from update_task, assign_task, and complete_task 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?
Gives clear in-context guidance: default scope is org, personal tasks restrict assignment, and links can be attached at creation time. It also routes the agent through a conflict path (do not assume creation succeeded; ask the user, then retry). The gap is that it never explicitly says when to prefer create_task over sibling flows like create_playbook or when to use assign_task afterward rather than assigned_to.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_audit_logGet Audit LogARead-onlyIdempotent
Read the immutable audit log for this company. Owners can read all entries (scope='all'). Any member can read their own entries (scope='mine'). Covers financial transactions, CRM deletes, org memory changes, playbook runs, access management, and member changes. Records cannot be modified or deleted.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results (default 50). | |
| scope | No | 'all' returns all company entries (owner-only). 'mine' returns only your own actions (any member). Defaults to 'all' for owners, 'mine' for non-owners. | |
| action | No | Filter by exact action name (e.g. 'add_transaction', 'run_playbook'). | |
| domain | No | Filter by domain group. 'financial' = transactions, accounts, categories. 'crm' = customer and tag deletes. 'memory' = org-scoped memory store/forget. 'playbooks' = playbook runs. 'access' = financial access changes. 'members' = member add/remove/promote. | |
| to_date | No | Return entries on or before this date (YYYY-MM-DD). | |
| actor_id | No | Filter by the user_id who performed the action. | |
| entity_id | No | Filter by the affected record UUID (e.g. a specific account_id or customer_id). | |
| from_date | No | Return entries on or after this date (YYYY-MM-DD). | |
| entity_type | No | Filter by entity type (e.g. 'financial_transaction', 'customer'). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so safety is covered structurally. The description adds genuinely new behavioral facts: the log is immutable, records cannot be modified or deleted, and visibility is permission-gated. It omits ordering/pagination behavior for a potentially large result set.
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 short sentences, front-loaded with the resource and the access rule. The domain list is somewhat duplicative of the domain parameter's enum description, but it still serves the purpose of telling the agent what kinds of events exist.
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 nine-parameter, zero-required read tool with full schema coverage and annotations present, the description covers access model, scope, and content domains well. The remaining gap is return-value shape — there is no output schema, so the agent learns nothing about the fields of an audit entry or result ordering.
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 detailed per-parameter descriptions including enum meanings and date formats, so the baseline is 3. The description restates the scope semantics ('all' = owner-only, 'mine' = any member) and maps domains, but adds no filtering semantics beyond what the schema already documents.
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 ('Read the immutable audit log for this company') and immediately scopes it by role. No sibling tool offers audit history, and the enumeration of covered domains (financial, CRM, memory, playbooks, access, members) makes the resource boundary 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?
Gives explicit role-based routing: owners use scope='all', any member uses scope='mine'. The description clarifies when to use this tool versus the deletion/history siblings. It does not name alternative tools for narrower lookups (e.g. list_deleted, get_project_history), so it falls short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_customerGet CustomerARead-onlyIdempotent
Get a single customer with their contacts, recent interactions, and open tasks.
| Name | Required | Description | Default |
|---|---|---|---|
| customer_id | Yes | Customer UUID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered. The description adds genuine value by disclosing that the result is an aggregate including contacts, recent interactions, and open tasks — a trait not visible in the schema. It does not define how far back 'recent' reaches or what happens when the customer is not found, leaving those behaviors opaque for a tool with no output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, front-loaded with the verb and resource, with the payload contents following immediately. Every clause carries information and there is no filler or repetition 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?
For a single-parameter read tool with full annotation coverage and full schema coverage, the description supplies the one thing structured data cannot: what the response contains. The remaining gap is minor — undefined recency windows and no not-found behavior — but not enough to prevent correct 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?
Schema coverage is 100% and the single parameter is documented in the schema as 'Customer UUID' with a uuid format. The description adds no further meaning about the identifier (e.g., where to obtain it or whether it accepts external IDs), 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 uses a specific verb and resource ('Get a single customer') and the word 'single' implicitly contrasts with the list_customers and search_customers siblings. It stops short of naming those siblings explicitly, so an agent must infer the distinction rather than being routed to the right tool 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?
Usage is only implied: 'a single customer' suggests a known customer_id lookup rather than a browse/search operation, which is consistent with the required UUID parameter. There is no explicit statement of when to prefer this over search_customers or list_customers, and no guidance on what to do when the ID is unknown.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_dashboardGet DashboardARead-onlyIdempotent
Get a CRM dashboard summary: total customers by type and phase, overdue tasks, recent interactions, and upcoming tasks within a 7/14/30-day window. Response includes a render field with tiered rendering guidance - check it before composing your reply.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Window for upcoming tasks in days (7, 14, or 30). Defaults to 7. | |
| timezone | No | IANA timezone string (e.g. 'America/New_York'). Used for timezone-aware date calculations. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, closed-world), so the description's added value is the disclosure that the response carries a 'render' field with tiered rendering guidance that must be consulted before replying — non-obvious information with no output schema to convey it. It stops short of describing the shape or size of the summary payload.
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 sentences, front-loaded with the resource and its contents, followed by the actionable caveat about the render field. No filler or redundant restatement of the tool name.
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 the necessary work of summarizing the returned sections and flagging the render-field obligation. It leaves ambiguity around what 'phase' means and how the tiering behaves, but nothing required to invoke the tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both parameters are fully documented in the schema. The description restates the 7/14/30-day window and usefully scopes it to 'upcoming tasks', but adds no format or timezone 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 names a specific verb and resource ('Get a CRM dashboard summary') and then enumerates the exact contents: customers by type and phase, overdue tasks, recent interactions, upcoming tasks. That content list also differentiates it from siblings like get_task_summary and get_financial_summary without needing to name them.
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 only directive is 'check [the render field] before composing your reply', which concerns post-call behavior rather than when to choose this tool. There is no explicit guidance on when to prefer it over get_task_summary, get_financial_summary, or get_entity_card, so usage is only implied by the content list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_entity_cardGet Entity CardARead-onlyIdempotent
Get a complete picture of any entity: the record itself, all open tasks linked to it, recent interactions, and any linked transactions. Replaces multiple separate calls when you need to answer 'what's going on with X?'
| Name | Required | Description | Default |
|---|---|---|---|
| entity_id | Yes | UUID of the entity. | |
| entity_type | Yes | Type of entity: customer | contact | transaction |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is fully covered. The description usefully adds that this is a fan-out/aggregate read spanning four data classes, but says nothing about how many tasks or interactions are returned, any caps, or cost relative to the individual calls it replaces.
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 sentences, both earning their place: the first front-loads what is returned, the second front-loads when to reach for it. No filler, no restatement of the name or title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 carries the burden of sketching the return contents at a high level, which it does. It is nearly complete for a two-parameter read tool, with minor gaps around result limits and the fact that the entity types are restricted.
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%: both parameters are documented and entity_type carries an enum, so the baseline is 3. The description adds no meaning beyond the schema — it never explains that entity_type must be one of the three types or how the response shape differs by type.
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 and resource ("Get a complete picture of any entity") and enumerates exactly what the composite response contains: the record, open tasks, recent interactions, and linked transactions. Sibling differentiation is only generic ("Replaces multiple separate calls") rather than naming get_customer, list_entity_tasks, list_interactions, or list_transactions, and "any entity" slightly overstates scope versus the customer/contact/transaction enum.
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 context is stated concretely with the motivating question "what's going on with X?", which tells an agent this is the aggregate-context tool rather than a single-record fetch. It also hints at the alternative pattern (multiple separate calls). It stops short of naming when NOT to use it — e.g., when only the raw record is needed, get_customer is cheaper.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_feed_briefingGet Feed BriefingARead-onlyIdempotent
Generate a compact headline briefing from pinned feeds for the morning dashboard. Returns one headline per tag, capped at 8 total. Designed to be included in get_session_start without slowing it down. Only fetches pinned feeds. Response includes a render field with tiered rendering guidance - check it before composing your reply.
| Name | Required | Description | Default |
|---|---|---|---|
| max_headlines | No | Max headlines to return (default: 8) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, and the description adds genuinely new behavior: output shape (one headline per tag, 8 cap), source restriction (pinned only), and a directive to read the 'render' field for tiered rendering guidance before replying. It stops short of describing behavior with zero pinned feeds or truncation semantics.
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 distinct information—purpose, output shape, integration role, source scope, and a pre-composition instruction—with the essential scope constraint front-loaded and 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?
With no output schema, the description does the work of describing the return ('one headline per tag, capped at 8' plus a 'render' field), which is sufficient for an agent to use the result; minor gaps remain around empty-state and error 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 coverage is 100% with a single optional parameter, so the schema already documents max_headlines and its default. The description's 'capped at 8 total' is consistent but adds nothing about the number-or-string union type or how strings are parsed, 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 and resource ('Generate a compact headline briefing from pinned feeds') plus scope ('Only fetches pinned feeds') and output shape ('one headline per tag, capped at 8'), which clearly separates it from siblings like get_feed_items and get_dashboard.
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 context for use ('for the morning dashboard', 'Designed to be included in get_session_start without slowing it down') and a scope constraint (pinned feeds only), but never names an explicit alternative such as get_feed_items for full unpinned content, leaving the when-not choice to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_feed_itemsGet Feed ItemsARead-onlyIdempotent
Fetch the latest items from subscribed feeds. Returns a numbered summary list with title, author, date, and whether full content is available. Use read_feed_item with the item number to get full content. Filter by feed_id for a specific feed, or by tag for a topic.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | Filter feeds by tag | |
| limit | No | Max items to return (default: 25) | |
| feed_id | No | UUID of a specific feed. Omit to fetch across all feeds. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so safety is covered; the description adds real value by disclosing the return shape (a numbered summary list with title, author, date, and content-availability flag) and the fact that items are numbered specifically so they can be passed to read_feed_item. It leaves ordering/freshness and limit behavior implicit, 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?
Four short sentences, front-loaded with purpose and return shape before the hand-off instruction and filters; almost every sentence earns its place. The final filter sentence is somewhat redundant with the schema descriptions, costing it a point.
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 spends words on what comes back and how to consume it (numbered summaries → read_feed_item). For a zero-required-parameter read tool with fully documented params and clear annotations, nothing essential 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 all three parameters already carry descriptions, and the description largely restates them (feed_id for a specific feed, tag for a topic) without adding format, default, or semantics beyond the schema. 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?
The description names a specific verb and resource ('Fetch the latest items from subscribed feeds') and immediately scopes it by contrast: this returns summaries, while read_feed_item returns full content. An agent can distinguish it from siblings like list_feeds or get_feed_briefing 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?
It explicitly routes the agent to the correct follow-up tool ('Use read_feed_item with the item number to get full content') and explains the two filtering modes (feed_id for one feed, tag for a topic). It does not mention when to prefer list_feeds or refresh_feeds instead, so there is no complete exclusion set, but the primary usage path is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_financial_accessGet Financial AccessARead-onlyIdempotent
Check a user's financial access level. Any user can check their own access. Owners can check any user by passing target_user_id.
| Name | Required | Description | Default |
|---|---|---|---|
| target_user_id | No | The user_id to check. Omit to check your own access level. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and no destructiveness, so the safety profile is covered. The description adds the important non-obvious behavior beyond that: an ownership-based authorization rule governing whose access level can be read, which the agent could not infer from the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with the core action front-loaded and the permission rules following immediately; nothing is redundant or padded. It could have been tightened into two sentences, but there is no wasted content.
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 tool with full schema coverage and no output schema, the description supplies the action, the default behavior, and the authorization model. Only the failure behavior for unauthorized cross-user checks is unstated, which is a minor omission at this complexity 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?
Schema description coverage is 100% and the single parameter already states "Omit to check your own access level," so the schema carries the parameter semantics. The description restates the authorization meaning of target_user_id but adds no format or validation detail beyond the schema, making 3 the appropriate baseline.
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?
"Check a user's financial access level" gives a specific verb (check) and resource (financial access level), which cleanly separates it from the sibling set_financial_access (which mutates that level). It does not explicitly name the sibling, so the differentiation is implied by the read-only wording 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?
The description gives clear conditional guidance: omit target_user_id to check your own access, or be an owner and pass target_user_id to check someone else. It states the permission condition that selects each mode, though it does not say what happens if a non-owner supplies a target_user_id (error vs. denial), leaving one gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_financial_summaryGet Financial SummaryARead-onlyIdempotent
Return a snapshot of the company's financial position: total assets across all accounts, plus year-to-date income and expenses. Response includes a render field with tiered rendering guidance - check it before composing your reply.
| Name | Required | Description | Default |
|---|---|---|---|
| timezone | No | IANA timezone string (e.g. 'America/New_York'). When provided, the YTD start is computed in the user's local timezone rather than UTC. Affects ytdStart. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, so the safety profile is covered. The description adds genuinely new behavioral information that the structured fields do not carry: the response contains a 'render' field with tiered rendering guidance that should be consulted before replying — a non-obvious output contract worth flagging, especially since no output schema exists. It stops short of describing the shape of the asset/income/expense values themselves.
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 sentences, both front-loaded with the highest-value fact first: what the snapshot contains, then the render-field contract. No filler, no restatement of the title, nothing that could be cut without losing information.
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-required-parameter read tool with no output schema, the description covers what is returned at a useful level and warns about the render field. The remaining gap is access scoping — sibling tools set_financial_access and get_financial_access imply the result may be permission-limited, and the description says nothing about what happens when financial access is unset.
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 optional 'timezone' parameter is fully documented in the schema, including that it shifts ytdStart. The description's phrase 'year-to-date' hints at the same concept but adds no syntax, format, or default behavior 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 ('Return a snapshot') and resource ('company's financial position') and enumerates the components: total assets across all accounts, year-to-date income and expenses. That content list implicitly separates it from siblings like get_pl_report or list_accounts, but it never names an alternative explicitly, so the differentiation is inferential 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 when-to-use guidance, no exclusion, and no reference to the obvious neighbor tools (get_pl_report, list_accounts, list_transactions) that overlap this data. The only directive — 'check it before composing your reply' — governs output handling, not tool selection, so the agent must guess whether a summary or a detailed report is the right call.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_last_checkpointGet Last CheckpointARead-onlyIdempotent
Retrieve the caller's most recent checkpoint to show it or resume from it. Call when the user asks to see or pick up their last checkpoint (e.g. 'what was my last checkpoint', 'show me where I left off', 'pick up from my last checkpoint'). Pass project ONLY when there is resolvable context (an active project, a #tag, or a project unambiguously named in the conversation); omit it to search across ALL projects - do not infer a project to fill the gap. author defaults to 'me' (created_by = you); pass 'anyone' only on explicit team wording. intent defaults to 'show' (return the checkpoint to display); pass intent='resume' to pick up the work - on resume into a genuinely ambiguous target the tool returns a conflict to disambiguate rather than guessing. Response includes a render field with tiered rendering guidance - check it before composing your reply.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max ranked candidates to return (1-10). Defaults to 5. | |
| author | No | Whose checkpoints to consider. 'me' (default) = your own (created_by = you). 'anyone' = the whole team's; use only on explicit team wording ('the team', 'org', 'me and Doug', a named teammate). 'we'/'us' said to you stay 'me'. | |
| intent | No | 'show' (default) returns the checkpoint to display. 'resume' returns it to pick up work, but returns a disambiguation conflict when the target is ambiguous. Read the user's verb: 'show me'/'what is/was' = show; 'pick up'/'continue'/'resume'/'where do I start' = resume. | |
| project | No | Project tag (e.g. 'founders-os'). Pass ONLY with resolvable context; omit for a global, cross-project search. Never infer a project to fill a gap. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish this as a safe read-only, idempotent lookup. The description adds useful behavior beyond them: resume with an ambiguous target returns a disambiguation conflict rather than guessing, and the response includes a render field that should be checked before replying. It does not describe pagination or ranking details, but the key behavioral traits are covered.
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 dense but front-loaded and organized around purpose, triggers, parameter rules, intent behavior, and response handling. It is somewhat long and repeats schema guidance, but every sentence provides actionable 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 four-optional-parameter lookup tool with no output schema, the description covers when to call it, how to scope project and author, how intent changes behavior, and what to do with the response's render field. Nothing critical to correct invocation 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 description largely repeats the schema's parameter guidance for project, author, and intent rather than adding new syntax or constraints. Baseline 3 is appropriate when the schema already carries the parameter semantics.
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 begins with a specific verb and resource: 'Retrieve the caller's most recent checkpoint to show it or resume from it.' It clearly distinguishes this read/lookup tool from a checkpoint-creation sibling by focusing on retrieval and explicitly naming the two supported intents.
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?
It gives explicit trigger phrases ('what was my last checkpoint', 'show me where I left off', 'pick up from my last checkpoint') and clear rules for the tricky project and author parameters, including when to omit project and when to use author='anyone'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_playbookGet PlaybookARead-onlyIdempotent
Fetch a single playbook with its full ordered step list and connector requirements. Use before running to inspect what the playbook will do and which connectors it needs.
| Name | Required | Description | Default |
|---|---|---|---|
| playbook_id | Yes | Playbook UUID or slug. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint=false and destructiveHint=false, so the safety profile is covered. The description adds that the response includes the ordered step list and connector requirements, which is useful shape information in the absence of an output schema, but says nothing about error behavior for missing or invalid playbook IDs.
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 sentences, no filler, with the return contents front-loaded and the usage note second. Every clause carries information an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read tool with rich annotations and no output schema, the description covers what is returned and when to reach for it. Only minor gaps remain: behavior on a nonexistent playbook and how connector requirements are represented.
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 and schema description coverage is 100%, with the schema itself noting 'Playbook UUID or slug.' The description adds no additional meaning about the identifier format or resolution rules, so 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 (fetch) and resource (a single playbook) plus what is returned: the full ordered step list and connector requirements. The word 'single' implicitly distinguishes it from list_playbooks, though no sibling is named 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?
Gives a clear trigger: 'Use before running to inspect what the playbook will do and which connectors it needs,' which points to the run_playbook workflow. It lacks explicit exclusions (e.g., use list_playbooks when you don't have an ID), so it falls short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_playbook_runGet Playbook RunBRead-onlyIdempotent
Fetch the execution log and status of a specific playbook run.
| Name | Required | Description | Default |
|---|---|---|---|
| run_id | Yes | Playbook run UUID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so safety is fully covered structurally. The description adds what the call returns (execution log and status), which is mild extra context but nothing about behavior for missing/unknown run IDs or retention.
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. It is efficient but so terse that the verb 'Fetch' carries nearly all of the semantic load.
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 must convey what comes back, and it does so minimally ('execution log and status'). For a one-parameter read tool that is adequate, but it leaves the shape of the log and status undefined.
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 run_id parameter is already documented as a playbook run UUID. The description adds no meaning beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Fetch) and resource (execution log and status of a playbook run), and the word "specific" distinguishes it from the sibling list_playbook_runs, which returns many runs. It does not explicitly name that sibling, 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?
Usage is only implied: 'a specific playbook run' suggests it is the single-run counterpart to list_playbook_runs, but no condition, prerequisite, or alternative is stated. An agent can infer the routing but is not told it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pl_reportGet P&L ReportARead-onlyIdempotent
Return a profit & loss summary grouped by category for a given date range. Excludes transactions marked exclude_from_reports. Pass customer_id to scope the report to a single attributed customer, or group_by_customer: true to include a per-customer rollup alongside the category breakdown. Transactions with no customer attribution bucket as 'Unattributed' in the rollup. Response includes a render field with tiered rendering guidance - check it before composing your reply.
| Name | Required | Description | Default |
|---|---|---|---|
| to_date | Yes | End date (YYYY-MM-DD, inclusive). | |
| from_date | Yes | Start date (YYYY-MM-DD, inclusive). | |
| customer_id | No | Optional. Restrict the report to transactions attributed to this customer. | |
| group_by_customer | No | Optional. When true, include a `by_customer` rollup with per-customer income, expenses, and net. Transactions without a customer attribution bucket as 'Unattributed'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, closed-world behavior, so the safety profile is covered. The description adds real behavioral detail beyond that: transactions flagged exclude_from_reports are omitted, and unattributed transactions are bucketed as 'Unattributed' in the rollup. Missing is any note on aggregation semantics (e.g., how refunds or transfers are treated), which would have pushed this higher.
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 short sentences, front-loaded with the core operation, then optional modes, then an edge case, then a response-handling instruction. Every sentence carries information; the only mild redundancy is the Unattributed rule appearing both here and in 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?
There is no output schema, so the description usefully discloses that the response contains a render field with tiered rendering guidance — an important instruction the agent could not otherwise know. Combined with the exclusion rule and rollup semantics, this covers what an agent needs for a read-only reporting tool, though aggregation edge cases remain unstated.
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 baseline is 3, and the description earns a bump by explaining the interaction between the optional parameters rather than merely restating them — `group_by_customer` produces a rollup 'alongside the category breakdown' while `customer_id` restricts the whole report. The Unattributed bucketing is repeated from the schema, which limits the added value.
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 ('Return a profit & loss summary grouped by category') plus the scoping dimension (date range), which is enough for an agent to distinguish it from generic summary tools. It stops short of naming the closest sibling (get_financial_summary) or explaining how the two differ, so differentiation is inferred 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?
Gives concrete selection guidance for the two optional parameters: use `customer_id` to scope to one attributed customer, or `group_by_customer: true` to get a per-customer rollup alongside the category breakdown. It also instructs the agent to check the render field before replying, which is actionable context. It does not state when to prefer this over get_financial_summary or when not to use it at all.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_projectGet ProjectARead-onlyIdempotent
Get a full project card: project details, associated tag, and all tasks/customers carrying the project's tag. Tasks are grouped by status with recent items shown.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project UUID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so safety is covered. The description adds real behavior beyond that: results are grouped by status and only "recent items shown," which warns the agent that the task list may be truncated rather than exhaustive. It stops short of quantifying that truncation or describing ordering rules.
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 sentence, front-loaded with the verb and the object, followed by the concrete contents of the response. There is no filler, hedging, or repetition 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 no output schema, the description carries the return-value burden and does so by naming the three payload parts and the grouping/recency behavior. A minor gap remains: "recent items shown" is unquantified, and non-fatal cases (e.g., a project with no tag or no tasks) are not described, though annotations cover the safety profile.
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 required parameter (project_id, UUID, format-annotated), so the schema already carries the full parameter burden. The description adds nothing about the identifier beyond what the schema states, 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 and resource ("Get a full project card") and enumerates the payload: project details, associated tag, and all tasks/customers carrying the tag. That is more informative than a bare name restatement, but it never distinguishes itself from close siblings like get_project_history, get_entity_card, or list_projects, so an agent must 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?
Usage is only implied: the phrase "full project card" suggests fetching everything about one project, which implies it is the tool for a single-project deep look rather than list_projects. There is no explicit when-to-use, no mention of get_project_history as the alternative for historical data, and no prerequisites (e.g., a valid project must exist).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_project_historyGet Project HistoryARead-onlyIdempotent
Chronological timeline of stored memories for a single project. Use to review how a project has progressed over time, to answer 'where did we leave off', or to assemble a project narrative. Defaults to checkpoint entries (kind='checkpoint'); pass kind='all' to include every memory for the project. Ordered newest-first. This is the chronological companion to memory_recall, which is semantic and ranked. Response includes a render field with tiered rendering guidance - check it before composing your reply.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | Filter by memory kind stored in metadata.kind. Defaults to 'checkpoint'. Pass 'all' to return every memory for the project regardless of kind. | |
| limit | No | Max entries to return (1-50). Defaults to 20. | |
| scope | No | Which memories to include: 'org', 'personal', or 'both' (default). | |
| author | No | Whose entries to include. 'me' (default) returns only entries you authored (created_by = you), so on a shared team project you resume your own thread rather than a teammate's. 'anyone' returns the whole team's entries for the project. | |
| project | Yes | Project tag to load history for (e.g. 'founders-os', 'marching-maestro'). | |
| to_date | No | ISO 8601 timestamp. Only entries created on or before this date. | |
| from_date | No | ISO 8601 timestamp. Only entries created on or after this date. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish this as a safe, idempotent, read-only, closed-world operation, so the description's additions sit on top of that: default filtering to checkpoint entries, newest-first ordering, and a render field with tiered rendering guidance that the agent should consult before replying. That last detail is genuinely useful behavioral context not present in the schema or annotations, though nothing is said about empty results or how deep the default limit reaches.
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-loaded with the core concept, then use cases, then the discriminator against memory_recall, then defaults and response guidance. Every sentence has a job, with only mild redundancy in re-specifying the checkpoint default that the schema already states.
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 seven-parameter read tool with no output schema, the description covers purpose, default narrowing, ordering, and a pointer to the render field in the response. Combined with a fully documented schema, an agent has enough to call it correctly; only edge-case behavior (empty history, limit interplay) 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 coverage is 100% and every parameter carries its own description, including defaults for kind, limit, scope, and author. The description only restates the kind default and the 'all' escape hatch, which the schema already documents at more length, so it adds little semantic value beyond the schema baseline.
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?
Names a specific resource and shape: a chronological timeline of stored memories for a single project. It explicitly separates itself from memory_recall by calling itself the 'chronological companion,' which is semantic and ranked, so an agent can pick between the two without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete when-to-use cases ('where did we leave off', assembling a project narrative) and names the alternative tool plus the axis that distinguishes it (chronological vs semantic/ranked). The kind='all' instruction tells the agent how to widen scope when the default is too narrow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_session_startGet Session StartARead-onlyIdempotent
Session orientation pointer. Returns today's date and a list of tools to call in parallel for a complete morning briefing. Does not fetch data itself - call the listed tools to get the actual content. Use this at the start of every session or when the user says 'start my day', 'catch me up', or similar. The response includes a rendering_contract field that defines the four-tier render ladder used across every founders-os tool for the rest of the session - read it before composing any founders-os output. Response includes a render field with tiered rendering guidance - check it before composing your reply.
| Name | Required | Description | Default |
|---|---|---|---|
| timezone | No | IANA timezone string (e.g. 'America/New_York'). Passed through to the tools you call so dates are computed in the user's local timezone. | |
| client_capabilities | No | Declare the highest rendering tier this client supports so the agent can skip the per-response ladder evaluation. Values mirror the four-tier ladder in the rendering_contract field. Omit to default to 'visual_primitive_tool' (a warning fires on the response when omitted). Reflects the plugin's intended target, not a runtime probe. | |
| expected_contract_version | No | The rendering contract version the caller expects (typically declared by the cowork plugin's CLAUDE.md). When provided, the server compares against its own RENDERING_CONTRACT_VERSION and emits a contract_version_warning on mismatch. Omit when calling without the cowork plugin; no comparison happens and no warning fires. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, non-destructive and closed-world, so the safety profile is covered. The description adds genuinely useful behavioral context beyond that: it is a pointer rather than a fetcher, and it carries the session-scoped rendering_contract that governs all later founders-os output. However, the two closing sentences about rendering_contract and the render field overlap heavily rather than adding distinct disclosure.
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 definition is front-loaded with the core pointer semantics before the usage triggers and contract notes. The last sentence substantially restates the rendering_contract sentence before it, which is the one clear piece of waste in an otherwise tight description.
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 what comes back: the date, a parallel tool list, rendering_contract and render fields. Combined with full schema coverage and a complete annotation set, an agent has everything needed to call this correctly at session start.
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 timezone, client_capabilities and expected_contract_version are already fully documented in the schema, including enum values and defaults. 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 role (session orientation pointer) and precisely what is returned: today's date plus a list of tools to call in parallel. It also explicitly negates a plausible misreading with 'Does not fetch data itself', which separates it cleanly from every data-fetching sibling such as get_feed_briefing or get_dashboard.
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 pinned to concrete triggers: 'at the start of every session' and user phrasings like 'start my day' or 'catch me up'. It lacks an explicit when-not clause or a named alternative, but with no comparable orientation tool among the siblings there is little ambiguity to resolve.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_stuck_listGet Stuck ListARead-onlyIdempotent
Surface stuck, stale, and overdue tasks that need triage. Returns in_progress tasks untouched for N days, blocked tasks, and overdue tasks (todo or in_progress with past due date). Each row includes days_stale and a suggested triage action. Response includes a render field with tiered rendering guidance - check it before composing your reply.
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | Filter by scope. Omit for combined view. | |
| timezone | No | IANA timezone (e.g. 'America/New_York'). Used for accurate 'today' calculation. | |
| max_age_days | No | Days of inactivity that qualify as 'stale' for in_progress tasks. Defaults to 7. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the description's contribution is the return shape: each row carries days_stale and a suggested triage action, and the response embeds a render field with tiered rendering guidance the agent should read first. That is genuine behavioral context beyond the annotations, though it omits result volume, ordering, and any cap.
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, zero filler, with the core purpose front-loaded and the qualifying criteria immediately after. The closing render-field instruction earns its place because no output schema exists to convey 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, the description carries the return-value burden and does so reasonably by naming the row fields and the embedded render guidance. It stops short of describing result limits, sorting, or what an empty list means, which leaves a small gap for an agent planning its reply.
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 scope, timezone, and max_age_days are already fully documented in the schema. The description's 'N days' phrasing loosely echoes max_age_days but adds no format, default, or interaction detail beyond what structured fields provide, 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 and resource ('Surface stuck, stale, and overdue tasks') and then enumerates the exact qualifying conditions: in_progress untouched for N days, blocked, and overdue todo/in_progress. This distinguishes it from the plain list_tasks/get_task_summary siblings without needing to open any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The triage framing implies the context ('that need triage') and the render-field note implies a conversational workflow, but it never explicitly says when to reach for this versus list_tasks, list_entity_tasks, or get_task_summary, nor does it state any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_taskGet TaskARead-onlyIdempotent
Fetch a single task by ID, including all linked entities and notes.
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes | Task UUID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so safety is covered. The description adds the meaningful payload detail that linked entities and notes are included, which implies a potentially large response. It says nothing about behavior for an unknown/invalid ID or about response size, so it is an incremental rather than rich contribution.
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 sentence, front-loaded with the verb and resource, with the notable payload scope ('including all linked entities and notes') placed at the end. 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 read tool with no output schema, the description does the necessary work by telling the agent what comes back (task plus linked entities and notes). Given the absence of an output schema, a brief note on error behavior for an unknown ID would have completed 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?
There is a single parameter with 100% schema coverage (task_id documented as 'Task UUID' with uuid format), so the schema carries the semantics. The description's 'by ID' restates the schema rather than adding format or origin details, 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+resource ('Fetch a single task') and the lookup key ('by ID'), which clearly separates it from list_tasks and create_task. It does not explicitly differentiate itself from get_task_summary or get_entity_card, so an agent must infer that this is the full-detail 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?
The description implies usage (you need a task ID to retrieve one task in full), but never states when to prefer it over get_task_summary, list_tasks, or list_entity_tasks. No exclusions or prerequisites are given, leaving routing to inference from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_task_summaryGet Task SummaryARead-onlyIdempotent
Dashboard-style summary of the task queue: overdue, due today, upcoming, counts by status, by assignee, and a dedicated AI tasks section for tasks assigned to @-prefixed agents. Call at session start to orient on what needs attention. Response includes a render field with tiered rendering guidance - check it before composing your reply.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Upcoming window in days (7, 14, or 30). Defaults to 7. | |
| scope | No | Limit summary to one scope. Omit for combined view. | |
| timezone | No | IANA timezone string (e.g. 'America/New_York'). When provided, 'today' is computed in the user's local timezone rather than UTC, preventing off-by-one date errors for users in western-hemisphere timezones after ~7 pm UTC. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this as a read-only, idempotent, non-destructive, closed-world operation, so the safety profile is covered. Beyond that, the description discloses a non-obvious response trait: the payload carries a render field with tiered rendering guidance that the agent should consult before replying — genuinely useful behavioral context the schema does not reveal. It does not discuss aggregation cost, data freshness, or empty-state 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?
Three tight sentences, no redundancy: the content inventory comes first, then the usage trigger, then the response-handling instruction. Each sentence carries distinct information an agent would otherwise have to guess.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description takes on the job of describing the return value, and it does so by enumerating the summary sections plus the render field. Between that and the fully documented three-parameter schema, an agent has enough to call it correctly. Minor gaps remain around empty-queue behavior and response size.
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 already explains the days enum, the scope enum, and the timezone rationale (off-by-one protection after ~7pm UTC). The description contributes no additional parameter meaning, which is acceptable given the schema carries the load — 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 artifact — a dashboard-style summary of the task queue — and enumerates its sections (overdue, due today, upcoming, counts by status/assignee, AI tasks for @-prefixed agents). That content breakdown lets an agent distinguish it from the plain listing siblings like list_tasks or list_entity_tasks without opening a schema. It stops short of naming the alternative tools explicitly, so it falls just short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Call at session start to orient on what needs attention" gives a concrete trigger, and the closing sentence prescribes a follow-up behavior (check the render field before composing a reply). There are no explicit exclusions, e.g. it never says when to prefer list_tasks or get_dashboard instead, so the routing guidance is directional rather than complete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_usage_guideUsage GuideARead-onlyIdempotent
Returns a detailed guide on how to use Founders OS - covering all six domains (CRM, Tasks, Tags, Finance, Feeds, Memory), surface tools, search protocols, common workflows, and tips. Call this when uncertain about how to approach a task.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds value by disclosing the breadth and content of the returned guide, which is the main unknown for a no-parameter tool; it does not state size, format or whether the guide is static documentation.
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 sentences, front-loaded with what is returned, followed by the usage trigger. Nothing is redundant, and the domain enumeration is compact rather than 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 zero-parameter tool with no output schema and full annotation coverage, the description supplies the key missing information: the contents of the guide. The only gap is its relationship to sibling orientation tools such as show_capabilities and get_session_start.
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 to explain and the baseline of 4 applies. The description correctly implies it is called with no arguments.
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 and resource ('Returns a detailed guide on how to use Founders OS') and enumerates the six domains plus surface tools, search protocols, workflows and tips, so the agent knows exactly what comes back. It stops short of distinguishing this from the related sibling show_capabilities, which likely overlaps in 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?
'Call this when uncertain about how to approach a task' gives an explicit, actionable trigger condition rather than leaving usage implied. It does not name exclusions or point to alternatives such as get_session_start or show_capabilities when those might be the better first call.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_versionGet VersionARead-onlyIdempotent
Returns the running version of @ourthinktank/founders-os, the rendering contract version (used to detect plugin/server drift), how the connector was launched (launchMethod: npx | global | local | unknown) with a tailored howToUpdate string, the release channel (channel: stable | prerelease), the published head of that channel, and the database schema status (dbSchemaStatus: current | behind | ahead | untracked | unknown) with a howToUpdateDb step when action is needed. Version comparison is semver-aware and channel-aware: stable builds compare against the latest tag, prerelease builds against the next tag, so a prerelease that is ahead of stable is NOT reported as an update. versionStatus is one of current | update-available | ahead | unknown; updateAvailable is true only when a genuinely newer version exists on your channel (with updateTo naming it). Call at session start; if updateAvailable is true relay current vs updateTo and the howToUpdate step, and if dbSchemaStatus is behind or untracked relay the howToUpdateDb step.
| Name | Required | Description | Default |
|---|---|---|---|
| check_latest | No | If true, also query the registry for the latest version (default: true) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations declare openWorldHint=false, but the description says the tool can 'query the registry for the latest version' and reports the 'published head of that channel' — external network behavior. This contradicts the annotation. Otherwise the description is behaviorally rich, but the contradiction forces a 1.
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 content is front-loaded and every clause conveys useful information, but it is packed into two very long, dense sentences with multiple statuses and conditional instructions. It is informative but hard to scan; structured bullets would improve 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, the description carries the full burden of explaining return values, and it does so thoroughly: semver-aware and channel-aware comparison logic, versionStatus values, updateAvailable semantics, dbSchemaStatus values, and follow-up relay instructions. Nothing essential is missing for correct interpretation.
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 only one parameter, check_latest, and schema description coverage is 100%; the schema already documents it with its default. The description does not add meaning beyond the schema for this parameter, 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?
The description states a precise verb and resource ('Returns the running version of @ourthinktank/founders-os') and enumerates the exact diagnostic fields returned: rendering contract version, launchMethod, channel, channel head, dbSchemaStatus, versionStatus, and updateAvailable. No sibling tool covers this same package/version/schema-drift scope, so an agent can identify it immediately.
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?
It gives clear timing guidance: 'Call at session start,' plus conditional follow-up instructions for updateAvailable and dbSchemaStatus. It does not explicitly state when not to call it or name alternatives, but the usage context is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_weekly_retroGet Weekly RetroARead-onlyIdempotent
Completed-task retrospective for a given week. Groups done tasks by their first tag, includes completion notes as quotes, and optionally formats as a LinkedIn-ready draft. Useful for weekly reviews, standup prep, and public updates. Response includes a render field with tiered rendering guidance - check it before composing your reply.
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | Filter by scope. Omit for combined view. | |
| format | No | 'structured' (default) returns grouped data. 'linkedin' returns a ready-to-post draft. | |
| timezone | No | IANA timezone (e.g. 'America/New_York'). When provided, the Monday-to-Sunday week boundary is computed in the caller's local calendar instead of the server's timezone. Matches the pattern in get_stuck_list / get_task_summary. | |
| week_offset | No | 0 = current week, 1 = last week, 2 = two weeks ago, etc. Defaults to 0. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive), and the description adds real value on top: it explains the aggregation logic, the quote treatment of notes, and—most usefully—that the response carries a 'render' field with tiered guidance the agent must consult before composing a reply. It does not discuss pagination or size limits, but the pre-call guidance is strong.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three compact sentences, front-loaded with what the tool returns before moving to use cases and the render-field instruction. No filler or repetition of the title beyond the necessary subject.
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 carries the return-value burden, and it does so reasonably: grouping key, quote treatment, format variant, and the render field are all mentioned. Slightly more on response structure or empty-week behavior would make it fully 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?
Schema description coverage is 100% and enums are documented, so the baseline is 3. The description restates the 'linkedin' format option but adds no semantics (e.g., how scope interacts with tag grouping, or what the LinkedIn draft contains) beyond what the schema already spells out.
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 ('completed-task retrospective for a given week') and even describes the aggregation shape (grouped by first tag, notes as quotes, optional LinkedIn draft). It does not, however, name or contrast with the nearest siblings such as get_task_summary or get_project_history, so sibling differentiation is left implicit.
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 usage context ('weekly reviews, standup prep, and public updates') which is enough to know when to reach for it, but there are no exclusions or explicit routing rules telling the agent when to prefer get_task_summary or get_project_history instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
import_starter_feedsImport Starter FeedsAIdempotent
Import a curated starter feed list covering tech, AI, business, news, crypto, engineering, and more. Skips any feeds you're already subscribed to. A subset of feeds are pinned by default for the morning briefing.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare non-read-only, open-world, idempotent, and non-destructive behavior. The description adds useful domain behavior: existing subscriptions are skipped and a subset of feeds is pinned by default for the morning briefing, an important side effect; it still omits scale, undo behavior, and return 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?
Three short sentences, front-loaded with the action and scope. The category list is compact, and each sentence adds distinct value: scope, existing-subscription handling, and default pinning.
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 bulk action with annotations covering safety and idempotence and no output schema, the description is mostly complete. It covers scope, skip-existing behavior, and default pinning, though scale and undo/briefing impact could be clearer.
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, so the schema is complete and the baseline is 4. The description correctly implies there are no input choices rather than inventing parameter details.
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 ('Import') and resource ('curated starter feed list'), plus the content categories it covers. This distinguishes it from single-feed siblings like subscribe_feed, though it does not explicitly name the alternative.
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, and no alternative tool is named. Usage is implied as onboarding or bulk setup versus individual subscriptions via subscribe_feed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
link_taskLink TaskA
Link a task to any FounderOS entity: customer, contact, transaction, contract, memory, or interaction. A task can have multiple links. Duplicate links are silently ignored.
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes | Task UUID. | |
| entity_id | Yes | UUID of the entity to link. | |
| entity_type | Yes | Entity type: customer | contact | interaction | transaction | contract | memory |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare this is a non-destructive, non-open-world mutation, so the safety profile is covered. The description adds one genuinely useful behavioral fact — duplicate links are silently ignored, so the agent knows repeats will not error — but it does not say what happens if the task or entity id is invalid, nor what the call returns. There's also a mild tension with idempotentHint=false, since dedupe-on-repeat reads as idempotent-like behavior, though this refers to the link record rather than the whole 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 short sentences with the core action and supported entity types front-loaded; every sentence carries information (scope, multiplicity, duplicate behavior) 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?
For a simple three-parameter mutation with full annotation coverage and no output schema, the description covers purpose, scope, and duplicate handling adequately. The only real gap is failure behavior for invalid ids, which an agent would reasonably want before calling.
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 are required, so the schema already documents task_id, entity_id, and the entity_type enum. The description restates the entity types but adds no format, ordering, or constraint 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 (Link) and resource (a task) plus the full set of supported link targets (customer, contact, transaction, contract, memory, interaction). That enumeration makes it easy to separate from siblings such as unlink_task, list_entity_tasks, and get_entity_card 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?
Usage is implied by the alternate-sounding siblings (unlink_task, list_entity_tasks), but the description never states when to prefer this tool, what prerequisites exist (e.g., whether the task and target entity must already exist), or any when-not condition. It only clarifies that a task may hold multiple links, which is useful but not full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_accountsList AccountsBRead-onlyIdempotent
List all capital accounts with their current balances.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | Convenience filter for a single tag. Use `tags` for multiple. | |
| tags | No | Filter to items carrying these tags. Combined per `tag_match` (default 'all': the item must carry every listed tag). | |
| tag_match | No | How to combine `tags`: 'all' (item has every tag, default) or 'any' (item has at least one of them). | |
| include_archived | No | Include archived accounts. Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, non-destructive and closed-world, so the safety profile is fully covered. The description adds one genuinely useful behavioral fact — that balances are computed and returned — but says nothing about default exclusion of archived accounts or how tag filters combine, which are the only non-obvious behaviors 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 no filler; every word earns its place. It is arguably too spare given four filter parameters, but there is no bloat 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 four-optional-parameter read-only list tool there is no output schema, so the description's note that balances are returned is valuable and the annotations cover safety. Still, an agent gets no statement about default result scope (archived excluded) or relationship to the add/remove/transfer siblings, leaving gaps for a tool in a crowded financial namespace.
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 tag vs tags, tag_match semantics and include_archived is already documented in the structured data. The description adds no additional meaning about filtering behavior, 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 and resource ('List all capital accounts') and adds scope detail ('with their current balances'), which distinguishes it from mutation siblings like add_account, remove_account and transfer_between_accounts. It does not, however, explicitly contrast with adjacent listing tools such as list_transactions or mention the tag/archived filtering the schema supports.
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 reach for this tool versus siblings — no mention of how to narrow results by tag, whether archived accounts are excluded, or that add_account/remove_account manage the same resource. Usage is only inferable from the name and the schema properties.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_bookmarksList BookmarksARead-onlyIdempotent
List saved feed item bookmarks, newest first. Returns title, summary, source feed, and link for each bookmark.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max bookmarks to return (default: 25) | |
| offset | No | Pagination offset |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, non-destructive, and closed-world, so safety is covered. The description adds the meaningful behavioral trait that results are ordered newest first, but says nothing about pagination behavior or result caps beyond what the schema shows.
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 core action and ordering front-loaded, then the return fields. No filler, though the return-field sentence is somewhat enumerative and could be trimmed if an output schema existed.
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-optional-parameter list tool with full annotation coverage and no output schema, the description covers what the tool does, the ordering, and the shape of each returned item. Only a note on pagination behavior is missing, and the schema largely supplies that.
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 both parameters (limit, offset) carry descriptions, so baseline is 3. The 'newest first' ordering does add useful framing for how offset paging behaves, but the description adds no detail about limit/offset syntax or defaults.
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 feed item bookmarks') plus the ordering ('newest first'), which is enough to distinguish it from bookmark_item and remove_bookmark. It does not explicitly differentiate from the broader get_feed_items sibling, 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?
The description implies usage (retrieving previously saved bookmarks) but never says when to prefer this over get_feed_items for all items, or points to bookmark_item/remove_bookmark. An agent can infer the intended use from the name and text, but there are no explicit alternatives or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_categoriesList CategoriesBRead-onlyIdempotent
List all financial categories, optionally filtered by type.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | Convenience filter for a single tag. Use `tags` for multiple. | |
| tags | No | Filter to items carrying these tags. Combined per `tag_match` (default 'all': the item must carry every listed tag). | |
| type | No | Filter by category type. Omit to return all. | |
| tag_match | No | How to combine `tags`: 'all' (item has every tag, default) or 'any' (item has at least one of them). | |
| include_archived | No | Include archived categories. Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered by structured data. Beyond that the description adds only the domain word 'financial', and it omits any note that archived categories are excluded by default (that fact lives only 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?
A single short sentence with the core purpose front-loaded and zero filler. It is efficient, though it is arguably undersized given the five filtering parameters available.
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, non-destructive read tool with full schema coverage, rich annotations, and no output schema, the description plus structured fields give an agent everything needed to call it. Only soft gaps remain, such as the default exclusion of archived categories being documented solely in the 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%, so all five parameters (tag, tags, type, tag_match, include_archived) are already documented in detail, including enum semantics and the all/any tag combination rule. The description mentions only the type filter, adding nothing beyond the schema; 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 and resource ('List all financial categories'), which clearly distinguishes it from the mutation siblings add_category and remove_category. It stops short of naming those siblings explicitly, so the differentiation 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?
The only usage cue is the phrase 'optionally filtered by type', which hints at filtering but never says when to call this versus add_category, list_tags, or other listing tools. There are no exclusions, prerequisites, or alternative routing hints.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_customersList CustomersBRead-onlyIdempotent
List customers with optional filters. Returns paginated results with summary info. Response includes a render field with tiered rendering guidance - check it before composing your reply.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | Convenience filter for a single tag. Use `tags` for multiple. | |
| tags | No | Filter to items carrying these tags. Combined per `tag_match` (default 'all': the item must carry every listed tag). | |
| limit | No | Max results | |
| state | No | Filter by 2-letter state code | |
| offset | No | Offset for pagination | |
| tag_match | No | How to combine `tags`: 'all' (item has every tag, default) or 'any' (item has at least one of them). | |
| customer_type | No | Filter by customer type | |
| customer_phase | No | Filter by lifecycle phase | |
| has_open_follow_ups | No | If true, only return customers with open tasks |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered elsewhere. The description adds genuinely non-obvious behavior beyond that: results are paginated, responses carry summary info, and a 'render' field with tiered rendering guidance must be consulted before replying. It stops short of explaining pagination limits or how to detect the end of results, which is what would push this higher.
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 the operation and then the return shape, with no filler wording. The final sentence about the render field is the one piece of information an agent could not obtain from schema or annotations, so it 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 nine-parameter read tool with no output schema, the description covers the essentials: what is returned (paginated, summary info) and the one non-standard response element (the render field) that requires action. Combined with 100% schema coverage and complete read-only annotations, an agent has enough to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with all nine parameters documented including enum values, defaults, and the tag/tags/tag_match interaction, so the baseline of 3 applies. The description only says 'optional filters' generically and adds no filter-selection strategy or combination advice 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 specific verb and resource ('List customers') plus the scope ('with optional filters'), so the agent knows exactly what entity is being read. It does not, however, distinguish itself from the sibling search_customers, leaving the agent to guess which list/query tool 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 when-to-use or when-not-to-use guidance and no reference to alternatives such as search_customers or get_customer for single-record retrieval. The line about checking the render field is a response-handling instruction, not usage routing, so an agent gets no help choosing between this and its closest sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_deletedList Deleted ItemsARead-onlyIdempotent
List recently soft-deleted items (the recoverable trash) for the current company so the user can pick one to restore or permanently delete. Returns each item's type, a human-readable label, when it was deleted, and the date it will be auto-purged. Defaults to the last 7 days with leftover demo fixtures hidden; pass days to widen the window, entity_type to filter, or include_demo to show demo data. Each item carries entity_id for use with restore_item or purge_item - present items to the user by label, never by id. Response includes a render field with tiered rendering guidance - check it before composing your reply.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Look-back window in days. Defaults to 7. | |
| limit | No | Max items to return. Defaults to 100. | |
| entity_type | No | Filter to a single entity type. Omit for all types. | |
| include_demo | No | Include leftover demo (demorun-) fixtures. Defaults to false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, non-destructive, closed-world behavior, so the description's job is to add context, and it does: soft-deleted-only scope, 7-day default window, demo fixtures hidden by default, per-item auto-purge dates, and an instruction to consult the render field before replying. It stops short of describing pagination behavior or what happens at the limit boundary, which is the main remaining 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?
Purpose is front-loaded in the first sentence, followed by return contents, parameter overrides, and the id/label rule in a logical order. It runs four dense sentences, and the final note about the render field is useful but slightly meta, keeping it below a perfect score.
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 explaining return values and does: item type, human-readable label, deletion time, auto-purge date, plus the entity_id and render field. Combined with annotations covering the safety profile, an agent has everything needed to call and interpret this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3; the description earns a point by framing intent ('pass days to widen the window', 'include_demo to show demo data') rather than merely restating the schema's type and default. It does not add syntax or format detail the schema lacks, which is why it is not a 5.
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?
Names a specific verb and resource with scope: 'List recently soft-deleted items (the recoverable trash) for the current company.' The parenthetical and the stated follow-up goal ('so the user can pick one to restore or permanently delete') separate it cleanly from list_demos, restore_item, purge_item, and the other list_* 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?
Explicitly states the use case (choosing an item to restore or purge), names the follow-up tools restore_item and purge_item and the entity_id that links to them, and documents the defaults and when to override them (days to widen the window, entity_type to filter, include_demo to surface demo data). It also adds a usage rule for the agent's reply: present by label, never by id.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_demosList DemosARead-onlyIdempotent
Returns available interactive demo walkthroughs bundled with Founders OS. When called without a name, returns a summary list of available demos. When called with a demo name, returns the full script (with shared presentation rules prepended) so the AI agent can run it directly. Call this when a user asks about demos, wants to explore features, or is onboarding.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Demo name to load (e.g. 'conflict-resolution-walkthrough'). Omit to list all available demos. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already establish read-only, idempotent, non-destructive, closed-world behavior, so the bar is lower, and the description still adds real value: it discloses the dual return shape (summary list vs. full script) and that the full script has shared presentation rules prepended so the agent can run it directly. It does not cover what happens if an unknown demo name is supplied, nor how large the script payload is.
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 what the tool returns, then the two modes, then the usage trigger. Every sentence contributes a distinct fact and there is no filler or repetition.
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-optional-parameter, read-only tool with full annotation coverage and no output schema, the description covers both invocation modes and what each returns, which is close to sufficient. The remaining gap is edge behavior for an unrecognized demo name and the shape of the summary list, which an agent would have to discover by calling.
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 optional parameter already documents both the example value and the 'omit to list all' semantics, so the schema carries the load. The description only reinforces the mode split and adds that the loaded script is directly runnable, which is a marginal increment rather than new parameter-level 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?
The description gives a specific verb and resource ('Returns available interactive demo walkthroughs bundled with Founders OS') and immediately splits the behavior into two modes, so an agent knows exactly what the tool yields. It stops short of distinguishing itself from adjacent discovery tools in the sibling list such as show_capabilities or get_usage_guide, which serve a similar exploratory 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?
It states clear triggering conditions: 'when a user asks about demos, wants to explore features, or is onboarding.' That is concrete context for invocation. However, it never names an alternative tool or says when NOT to use it, even though show_capabilities and get_usage_guide are plausible competitors for 'explore features' requests.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_entity_tasksList Entity TasksBRead-onlyIdempotent
Get all tasks linked to a specific entity (customer, contact, transaction, etc.).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results. Defaults to 50. | |
| status | No | Filter by status. Omit to return all non-done tasks. | |
| entity_id | Yes | UUID of the entity. | |
| entity_type | Yes | Entity type: customer | contact | interaction | transaction | contract | memory |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, non-destructive and closed-world, so the safety profile is fully covered. The description adds little beyond that - notably it never mentions that results default to excluding done tasks, a behavioral trait only found in the status parameter's schema text.
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. It is appropriately sized for a simple read tool, though it spends its limited words on redundant enum examples rather than differentiating sibling tools.
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 read-only list tool with full schema coverage and clear annotations, the description is adequate but thin: it omits the default exclusion of done tasks and does not position itself against list_tasks, leaving the agent to infer selection.
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 four parameters including enums and the default status filtering. The description's parenthetical entity examples merely restate part of the entity_type enum and add no format or 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?
The description gives a specific verb and resource ('Get all tasks') plus the scoping condition ('linked to a specific entity') with examples of entity types. It is clear what the tool returns, though it does not distinguish itself from the sibling list_tasks, which the agent must guess at.
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 implied: use it when you know an entity and want its tasks. There is no explicit guidance on when to prefer this over list_tasks or list_interactions, and no exclusions or prerequisites are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_feedsList FeedsARead-onlyIdempotent
List all subscribed RSS feeds, optionally filtered by tag or pinned status. Returns feed metadata from the shared catalog along with per-user tags and pinned status.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | Filter by tag (e.g. 'tech', 'news') | |
| pinned_only | No | Only show pinned feeds. Default: false |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds genuine value beyond them by describing what is returned: feed metadata from the shared catalog plus per-user tags and pinned status — important since no output schema exists. It omits ordering and pagination behavior, which keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero filler: the first states the operation and filters, the second states the return composition. Scope is front-loaded and nothing is repeated.
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, zero-required read tool with full schema coverage and annotations, the description covers purpose, filtering, and return shape. Only ordering/pagination of the feed list is left undefined, a minor gap given no output schema exists.
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%, including an example for 'tag' and a stated default for 'pinned_only', so the schema does the heavy lifting. The description only restates that filtering is by tag or pinned status, adding no syntax or edge-case meaning 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 gives a specific verb and resource ('List all subscribed RSS feeds') plus the optional filter dimensions. It implicitly distinguishes itself from siblings like get_feed_items (items, not feeds) and subscribe_feed/unsubscribe_feed, though it never names them 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?
Usage is implied by the description ('subscribed feeds', optional tag/pinned filters), but there is no explicit when-to-use guidance, no statement of when-not-to-use, and no pointer to alternatives such as get_feed_items or preview_tags. An agent must infer the routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_interactionsList InteractionsBRead-onlyIdempotent
Get interaction history for a customer, with optional date range and type filter.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results | |
| since | No | Deprecated: use `from_date`. | |
| until | No | Deprecated: use `to_date`. | |
| to_date | No | Only show interactions on or before this date (ISO 8601) | |
| from_date | No | Only show interactions on or after this date (ISO 8601) | |
| customer_id | Yes | Customer UUID | |
| interaction_type | No | Filter by interaction type |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, non-destructive, and closed-world, so the safety profile is fully covered. The description adds only the customer-scoping and filter behavior; it says nothing about pagination behavior (default 50, capped at 100), result ordering, or the presence of deprecated since/until fields that an agent might otherwise reach for.
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, leading with the core verb and resource before the optional filters. It is efficient, though its brevity is partly under-specification rather than deliberate compression.
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 read-only, idempotent safety profile and the schema fully documents all seven parameters, so the description's short scope statement is close to sufficient for a filtered list tool. The missing pieces are pagination expectations (limit default 50, max 100) and, absent an output schema, any hint of the returned record 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?
Schema description coverage is 100%, including ISO 8601 formats, the enum of interaction types, and the deprecation notes on since/until, so the schema carries the parameter burden. The description merely echoes the date-range and type filters and omits limit entirely, adding no syntax or semantic 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 ("Get interaction history") scoped to a customer, so an agent knows exactly what data comes back. It does not, however, distinguish itself from nearby siblings such as log_interaction, remove_interaction, or list_demos, leaving that separation to inference.
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 never says when to use this tool versus log_interaction or remove_interaction, nor does it state prerequisites such as the customer needing to exist. Usage is only implied by the phrase "for a customer" and the filter mention, with no exclusions or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_membersList MembersARead-onlyIdempotent
List all team members in this company with their owner status and financial access level. Any member can call this — you don't need to be an owner to see the roster.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint=false, so safety is covered. The description adds a genuinely useful authorization detail (no owner role required to view), but says nothing about result volume, pagination, or ordering for large rosters.
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 what is returned, followed by the permission clarification. Nothing is wasted and nothing 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 no-parameter, no-output-schema, read-only listing tool, the definition covers what it returns and who may call it. It would be complete with a note on roster size or ordering, but the essentials are 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?
There are zero parameters, so the baseline is 4; the description correctly conveys that the call is unscoped and takes no filters, meaning the full company roster is returned.
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 ('List all team members in this company') and names the attributes surfaced (owner status, financial access level), which distinguishes it from siblings like add_member, set_member_owner, and remove_member.
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?
It states a permission-related usage fact — any member can call it without being an owner — which implies this is the read-side roster tool versus the mutation siblings. However, it never explicitly says when to prefer it over, say, get_financial_access or get_entity_card, so routing guidance is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_playbook_runsList Playbook RunsBRead-onlyIdempotent
List playbook execution history. Optionally filter by playbook or customer.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results. Defaults to 25. | |
| customer_id | No | Filter to runs for a specific customer. | |
| playbook_id | No | Filter to runs of a specific playbook. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and closed-world scope, so the safety profile needs no restating. The description adds nothing beyond that: it doesn't say what the history contains (running vs completed vs failed runs), the default ordering, or whether results are paginated.
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 no filler; the purpose is front-loaded and the filtering note follows. Nothing is redundant, though the phrasing is terse enough that it borders on 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?
For a no-required-parameter read-only list tool with fully documented params and no output schema, the core is covered. What an agent still lacks is any sense of result ordering, pagination beyond 'limit', or what fields a run record exposes.
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 all three parameters carry their own descriptions, so the schema does the heavy lifting. The description merely mirrors the two filter parameters and omits the limit parameter, adding 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?
The description gives a specific verb and resource: 'List playbook execution history.' This clearly separates it from get_playbook_run (singular) and run_playbook, though it 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?
'Optionally filter by playbook or customer' implies when the filters apply, but there is no guidance on when to use this list tool versus get_playbook_run for a single run, or list_playbooks for definitions. Usage is inferable, not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_playbooksList PlaybooksARead-onlyIdempotent
List all defined playbooks for this company. Returns name, slug, description, and step count. Archived playbooks are hidden by default.
| Name | Required | Description | Default |
|---|---|---|---|
| include_archived | No | Set true to include archived playbooks. Defaults to false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds real value beyond them by naming the returned fields (name, slug, description, step count) and disclosing the default filtering of archived playbooks, which an agent would otherwise only discover after calling.
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 scope, then return shape, then default filtering behavior. No filler and nothing an agent must read past to find the essentials.
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 one optional parameter, no output schema, and full annotation coverage, the description supplies what is needed: scope, return fields, and the archived default. Minor gaps such as ordering or result limits are unlikely to mislead for a simple enumerating 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% and the single include_archived parameter is fully documented there, so the baseline is 3. The description's 'Archived playbooks are hidden by default' largely restates what the schema already says, adding only mild emphasis rather than new 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?
The description opens with a specific verb+resource ('List all defined playbooks for this company') and is clearly distinguishable from get_playbook, create_playbook, and list_playbook_runs. It stops short of naming a sibling or explicitly contrasting with detail-oriented retrieval, which keeps it from 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?
Usage is only implied by the list semantics; there is no explicit 'use this when you need an overview, use get_playbook for a single playbook's full steps' routing. The one guidance offered is the archived-visibility default, which is genuinely useful but narrow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_projectsList ProjectsARead-onlyIdempotent
List registered projects. Defaults to active projects only. Returns task counts per project (queried by tag). Also flags any #-prefixed tags in the registry that don't have a corresponding project record.
| Name | Required | Description | Default |
|---|---|---|---|
| status | No | Filter by status. Omit to return active projects only. | |
| include_all | No | Set true to return projects in all statuses. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, closed-world, so the safety profile is covered. The description adds genuinely new behavioral context beyond that: results are enriched with per-project task counts computed via tag lookup, and the call has a side-effect-free auditing purpose (surfacing #-tags with no project record). Missing only ordering or result-size expectations.
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 with the resource, the default scope, and the return payload presented in that order. No filler, no restatement of the tool name, and the least obvious behavior (the tag-flagging audit) is placed last where it does not crowd the core purpose.
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 carries the return-value burden and does so by naming task counts and orphan-tag flags. For a two-optional-parameter read tool this is nearly complete; the only unaddressed points are result ordering and how status and include_all combine.
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 status and include_all are already documented, including the omit-for-active default. The description restates that default but adds nothing about the interaction between status and include_all (e.g., which wins if both are supplied), so it does not exceed 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 and resource ('List registered projects') and immediately pins down scope ('Defaults to active projects only'), which separates it from the singular get_project. It also names what comes back (task counts per project, orphaned #-tags), so an agent knows this is a batch-listing tool rather than a detail 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?
The default-to-active behavior is stated, and the schema's include_all parameter makes the alternative path discoverable. However, there is no explicit when-to-use guidance — it never says to prefer get_project for a single project's details, nor when the orphan-tag audit is the reason to call this.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tagsList TagsARead-onlyIdempotent
List all registered tags for the current company. Returns name, slug, color, and description for each tag. Use this to see what tags are available before tagging tasks or customers.
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | Filter by scope. Omit to return all tags. | |
| include_archived | No | Set true to include archived tags. Defaults to false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint=false, so safety is covered by structured data. The description still adds value beyond that by enumerating the returned fields (name, slug, color, description) — useful since no output schema exists — and by scoping results to the current company. It omits pagination/limits and the default exclusion of archived tags, which keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, each earning its place: purpose and scope first, return shape second, usage context third. No hedging, no redundant 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?
For a two-optional-parameter read-only listing tool with full annotation coverage, the description supplies what the structure cannot: the result shape and a reason to call it. The only meaningful gap is not distinguishing itself from preview_tags, which could lead an agent to pick the wrong listing 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%, and both parameters (scope enum, include_archived) are fully documented in the schema with their defaults and semantics. The description never mentions either parameter, so it adds no meaning beyond the structured fields — 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 ("List all registered tags") plus the scope ("for the current company"), which is more than a name restatement. It does not distinguish itself from the sibling preview_tags, so an agent must guess which listing variant it wants.
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?
"Use this to see what tags are available before tagging tasks or customers" gives a concrete use case, which is better than nothing. However, there is no when-not guidance, no mention of scope/archived filtering choices, and no differentiation from preview_tags or the create/rename/remove siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tasksList TasksARead-onlyIdempotent
List tasks with rich filtering. Omitting scope returns both org tasks and the caller's personal tasks. Filter by entity_type + entity_id to see tasks linked to a specific customer, transaction, etc. Use assigned_to='@claude' to surface the AI work queue. Response includes a render field with tiered rendering guidance - check it before composing your reply.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | Convenience filter for a single tag. Use `tags` for multiple. | |
| tags | No | Filter to items carrying these tags. Combined per `tag_match` (default 'all': the item must carry every listed tag). | |
| limit | No | Max results. Defaults to 50. | |
| scope | No | Filter by scope. Omit to return both org and caller's personal tasks. | |
| status | No | Filter by status. | |
| priority | No | Filter by priority. | |
| timezone | No | IANA timezone string (e.g. 'America/New_York'). When provided, 'today' is computed in the user's local timezone rather than UTC. Affects overdue_only filter. | |
| due_after | No | Return tasks due on or after this date (YYYY-MM-DD). | |
| entity_id | No | Filter to tasks linked to this entity ID. Requires entity_type. | |
| tag_match | No | How to combine `tags`: 'all' (item has every tag, default) or 'any' (item has at least one of them). | |
| created_by | No | Filter by creator user ID. | |
| due_before | No | Return tasks due on or before this date (YYYY-MM-DD). | |
| assigned_to | No | Filter by assignee. Use a user ID, '@claude', '@gpt', or 'unassigned'. | |
| entity_type | No | Filter to tasks linked to this entity type. | |
| overdue_only | No | If true, only return tasks past their due date that are not done. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly/idempotent/non-destructive, so the description's job is to add context — and it does: the non-obvious default that omitting scope returns BOTH org and the caller's personal tasks, plus the disclosure that the response carries a 'render' field with tiered rendering guidance that should be checked before replying. That return-shape warning is genuinely useful since no output schema exists.
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, front-loaded with the core purpose and then progressively more specific usage. No filler, though the last sentence about the render field is a behavioral note sitting in a usage-guidance slot rather than being grouped with other response expectations.
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, zero-required list tool with full schema coverage and no output schema, the description covers the highest-risk ambiguities: default scope behavior, entity linkage, AI queue assignment, and the shape of the return payload. Minor gaps remain around pagination/limit behavior and how it relates to list_entity_tasks.
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 15 well-documented parameters, so the schema carries the semantics. The description reinforces a few high-value ones (scope omission, entity_type+entity_id pairing, assigned_to='@claude' as the AI queue) but adds little beyond what the schema already spells out, and says nothing about tags/tag_match, timezone, overdue_only, or limit defaults.
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 ("List tasks") plus the distinguishing capability ("rich filtering"), and names concrete filter dimensions (scope, entity linkage, assignee). It does not differentiate from the overlapping sibling list_entity_tasks, which also retrieves entity-linked tasks, so an agent must infer which one to reach for.
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?
Offers situational cues: omit scope for combined org+personal results, use entity_type + entity_id for entity-linked tasks, use assigned_to='@claude' for the AI work queue. These are really parameter-usage hints rather than when-to-use guidance — no alternative tool is named (list_entity_tasks, get_task_summary, get_stuck_list all overlap), and no exclusions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_transactionsList TransactionsARead-onlyIdempotent
List financial transactions with optional date range and account filters. Response includes a render field with tiered rendering guidance - check it before composing your reply.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | Convenience filter for a single tag. Use `tags` for multiple. | |
| tags | No | Filter to items carrying these tags. Combined per `tag_match` (default 'all': the item must carry every listed tag). | |
| limit | No | Max results (default 100). | |
| to_date | No | End date (YYYY-MM-DD, inclusive). | |
| from_date | No | Start date (YYYY-MM-DD, inclusive). | |
| tag_match | No | How to combine `tags`: 'all' (item has every tag, default) or 'any' (item has at least one of them). | |
| account_id | No | Filter by account UUID. | |
| category_id | No | Filter by category UUID. | |
| customer_id | No | Filter by customer UUID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is fully covered. The description adds genuinely new behavioral context in the render field with tiered rendering guidance, but says nothing about pagination limits, default result size, or ordering for a list tool with 9 parameters.
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 sentences, front-loaded with the core action and scope, and the second sentence delivers a non-obvious operational instruction. No filler or repetition of annotation data.
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 required parameters, the description is nearly sufficient; it flags the render field the agent must consult. It falls slightly short by not conveying the overall response shape (list of transactions plus metadata) for a read tool whose output the agent will need to relay.
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 tag/tags/tag_match interplay, date formats, and limits is already documented in the schema. The description only echoes 'date range and account filters', adding no syntax or semantics beyond the 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?
States a specific verb and resource ('List financial transactions') plus the primary filtering dimensions (date range, account). An agent can distinguish it from mutation siblings like add_transaction or remove_transaction and from aggregate siblings like get_financial_summary, though the latter distinction is not made 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?
Usage is implied by the filters and by the instruction to check the render field before replying, but there is no explicit when-to-use guidance, no statement of when to prefer get_financial_summary or list_categories instead, and no mention of prerequisites such as an account existing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
log_interactionLog InteractionC
Record an interaction with a customer (email, call, meeting, demo, support ticket, event, or general note).
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | Full details, notes, or transcript of the interaction | |
| subject | No | Brief subject or title for this interaction | |
| contact_id | No | Optional: specific contact this interaction was with | |
| customer_id | Yes | Customer UUID | |
| interaction_date | No | When it happened (ISO 8601). Defaults to now if omitted. | |
| interaction_type | Yes | Type of interaction |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false and idempotentHint=false, so the safety profile is covered elsewhere. The description adds nothing behavioral beyond that: it does not say whether duplicate logs are deduplicated, that customer_id must reference an existing customer, or what is returned on success. With non-idempotent mutation semantics, the absence of any repeat-call guidance is a real 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?
A single front-loaded sentence with no filler, and the parenthetical enumeration is compact. It is efficient, though it spends its only words restating the enum rather than on differentiating information.
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 covers all six parameters, so the definition is callable as written. What is missing is sibling positioning and any statement about linking the interaction to a customer versus an optional contact, which matters for a six-parameter mutation with 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%, so every parameter including the interaction_type enum is already documented in the schema. The description's parenthetical list merely echoes the enum values and adds no format, default, or relationship 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 (Record) and resource (interaction with a customer) and enumerates the interaction kinds covered, so an agent understands what gets created. It does not distinguish itself from siblings like list_interactions or remove_interaction, but the create-versus-read distinction is strongly implied by 'Record'.
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 mention of alternatives such as list_interactions for retrieval. The only implied guidance is that this is for logging a new interaction, which an agent must infer from the verb.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_forgetMemory ForgetADestructiveIdempotent
Delete a specific memory entry by its ID. For org-scoped memories, a conflict response is returned with a preview so the user can confirm. Pass confirm=true to skip the preview on retry.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | Deprecated: use `resolution: "confirm"`. Set true to delete immediately. | |
| memory_id | Yes | The UUID of the memory to delete. | |
| resolution | No | Conflict resolution: 'confirm' deletes, 'cancel' aborts. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description provides operational context beyond the annotations, specifically detailing the introduction of a 'conflict' response mechanism for org-scoped memories. This guides the agent on expected runtime system behavior rather than just stating the tool is 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?
The definition is extremely dense and efficient. Both sentences serve distinct, critical instructional or explanatory purposes without any superfluous language, providing a high density of useful information.
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 definition covers all critical failure modes, workflow conditions (preview vs. no preview), and scope limitations. For a complex mutation tool, the description is comprehensive and leaves no major operational gaps for the AI agent.
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?
Given that parameter schema coverage is 100%, the description still adds value by explaining the functional meaning of the 'confirm' parameter (skipping the preview) and the conditions under which the 'conflict' state arises.
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 clearly states the action ('Delete'), the resource ('specific memory entry'), and the requirement ('by its ID'). This is precise and immediately identifiable among memory-related sibling 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?
It offers specific guidance on how the tool reacts to different scenarios, particularly 'org-scoped memories,' and provides an explicit parameter instruction ('confirm=true') to override default workflow behavior.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_recallMemory RecallARead-onlyIdempotent
Semantically search stored memories and return the most relevant results. Call at the start of any project session to load prior context.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results to return (default 10). | |
| query | Yes | Natural language description of what to recall. | |
| scope | No | Scope to search: 'personal' for your own memories, 'org' for shared team memories, 'both' (or omit) for all accessible memories. | |
| offset | No | Number of results to skip for pagination (default 0). Use with limit to page through results: page 1 = offset 0, page 2 = offset 10, etc. | |
| project | No | Optional project filter. | |
| to_date | No | ISO 8601 timestamp. Only return memories created on or before this date (e.g. '2026-05-01T00:00:00Z'). | |
| from_date | No | ISO 8601 timestamp. Only return memories created on or after this date (e.g. '2026-04-01T00:00:00Z'). | |
| min_score | No | Minimum similarity score (0-1) to include in results (default 0.35). Increase to filter noise, decrease to cast a wider net. | |
| source_tool | No | Filter by originating tool (e.g. 'complete_task', 'memory_summarize_and_store', 'cowork'). Only memories created by this tool are returned. | |
| created_after | No | Deprecated: use `from_date`. | |
| created_before | No | Deprecated: use `to_date`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, closed-world behavior, so the safety profile is covered. The description adds that results are semantically ranked by relevance, but says nothing about what happens on zero matches, result shape, or ranking/score semantics — modest added value only.
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 purpose first and the usage trigger second. Nothing is repeated from the schema and there is 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?
For an 11-parameter search tool with exhaustive schema documentation, the definition covers what the tool does and when to reach for it. The remaining gap is the return shape (no output schema, and the description only says 'most relevant results'), which is a minor omission given how much the schema already carries.
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 11 parameters, so scope, min_score, date filters, pagination, and deprecated aliases are already fully documented. The description contributes no additional parameter meaning, 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 ('Semantically search stored memories') plus the nature of the response (most relevant results). It is clearly distinguishable from siblings like memory_store, memory_forget, and memory_update, though it never names an alternative 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?
'Call at the start of any project session to load prior context' gives a concrete trigger condition. There are no exclusions or explicit pointers to sibling tools (e.g. use memory_summarize_and_store instead when...), which keeps it short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_storeMemory StoreA
Store a specific memory entry. Use scope='org' for team-wide visibility, 'personal' for caller only. Call this whenever you learn something worth remembering across sessions.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | Optional classifier stored in metadata.kind (e.g. 'checkpoint', 'decision', 'fact'). Used by get_project_history to build a typed timeline. | |
| force | No | Deprecated: use `resolution: "confirm"`. Set true to skip near-duplicate detection. | |
| scope | Yes | 'org' for team-wide visibility, 'personal' for caller only. | |
| content | Yes | The information to remember (max 20,000 characters). | |
| project | No | Optional project tag (e.g. 'founders-os', 'client-acme'). | |
| resolution | No | Conflict resolution after a near-duplicate is found: 'confirm' stores anyway, 'cancel' skips. | |
| handoff_doc | No | Optional path to a session handoff doc, stored in metadata.handoff_doc (e.g. 'handoffs/<project>-session-handoff-YYYY-MM-DD-NN.md'). Pass it with a checkpoint so get_last_checkpoint returns the pointer without parsing it out of the body. | |
| source_tool | No | Optional label for the originating tool or surface. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=false and destructiveHint=false, so the safety profile is supplied structurally. The description adds the important visibility semantics of 'org' versus 'personal', but says nothing about near-duplicate detection — a behavior explicitly signposted by the force and resolution parameters — which is the least obvious thing about this write 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 short sentences, front-loaded with the action and then the two highest-value facts (scope semantics, invocation trigger). No filler, though the scope sentence is pure duplication 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 write tool whose annotations carry the safety profile and whose schema is fully described, the description covers action, scope and trigger adequately. The near-duplicate/confirmation flow is left to the schema, which does document it, so this is a minor gap rather than a blocking one; with no output schema, some note on what is returned would help.
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 eight parameters are already documented, including the deprecated force flag and the resolution flow. The description merely restates the scope enum's own wording verbatim, adding no meaning beyond the schema; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource ('Store a specific memory entry'), which clearly separates it from memory_recall, memory_forget and memory_update. It does not distinguish it from memory_summarize_and_store or checkpoint, which also persist content, so differentiation from all siblings is incomplete.
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?
'Call this whenever you learn something worth remembering across sessions' gives a real trigger condition, but there is no guidance on when NOT to use it and no reference to alternatives like memory_summarize_and_store or checkpoint. The scope guidance is the only routing rule offered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_summarize_and_storeMemory Summarize & StoreA
Distill a session summary into a memory entry and store it. Pass a full narrative description of what happened — the more detail the better. Call at the end of meaningful sessions.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | Optional classifier stored in metadata.kind. Pass 'checkpoint' for end-of-session checkpoints so get_project_history can build the project timeline. | |
| force | No | Deprecated: use `resolution: "confirm"`. Set true to skip near-duplicate detection. | |
| scope | Yes | 'org' to share with the whole team, 'personal' for private notes. | |
| project | No | Optional project tag. | |
| resolution | No | Conflict resolution after a near-duplicate is found: 'confirm' stores anyway, 'cancel' skips. | |
| handoff_doc | No | Path to the session handoff doc, stored in metadata.handoff_doc. When storing a checkpoint, pass the final reconciled handoff path (e.g. 'handoffs/<project>-session-handoff-YYYY-MM-DD-NN.md') so get_last_checkpoint returns it without parsing the body. | |
| session_summary | Yes | A narrative description of the session to memorize. Include decisions made, context established, and anything useful for future sessions (max 20,000 characters). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, and idempotentHint=false, so the mutation profile is covered. The description adds the behavioral cue that richer narratives are preferred and that timing should be session-end, but says nothing about near-duplicate detection or the confirm/cancel conflict flow, which is the one genuinely surprising behavior of this 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 with the action front-loaded, then the input expectation, then the timing trigger. Nothing is redundant and nothing 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 7-parameter write tool with no output schema, the description covers the core action, the input shape expectation, and the invocation timing. The untold parts — duplicate-resolution loop, checkpoint/handoff reconciliation — are adequately handled inside the schema property descriptions, so the description is nearly complete without being padded.
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 kind, resolution, and handoff_doc is already documented in the schema. The description only adds emphasis ('the more detail the better') to session_summary, which is a marginal contribution; baseline 3 applies when the schema carries the 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 names a specific verb pair and resource: 'Distill a session summary into a memory entry and store it.' That is clearly distinct from memory_recall/memory_forget. It does not, however, differentiate itself from the sibling memory_store or from checkpoint, which an agent could plausibly confuse it with.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Call at the end of meaningful sessions' gives a genuine triggering condition, which is more than most definitions offer. But there is no when-not guidance and no explicit routing against memory_store or checkpoint, so an agent must infer which memory-writing tool to pick.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_updateMemory UpdateAIdempotent
Update an existing memory's content in place. Re-embeds the new content for accurate future recall. For org-scoped memories, returns a conflict preview showing the before/after change for user confirmation. Pass confirm=true to apply after reviewing.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | Deprecated: use `resolution: "confirm"`. Set true to apply the update. | |
| content | Yes | The new content to replace the existing memory with (max 20,000 characters). | |
| project | No | Optional: update the project tag. Omit to keep the existing tag. | |
| memory_id | Yes | The UUID of the memory to update. | |
| resolution | No | Conflict resolution: 'confirm' applies the update, 'cancel' aborts. | |
| change_reason | No | Why this memory is changing - the cause you investigated (e.g. 'the project was renamed', 'the old value was superseded'). For org-scoped memories this is recorded in the audit log, preserving why it changed, not just the new value. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description usefully discloses non-obvious behavior beyond the annotations: re-embedding of content and a conflict-preview return for org-scoped memories. However, it instructs the agent to 'Pass confirm=true,' while the schema marks that parameter Deprecated in favor of resolution: 'confirm' — guidance that could steer an agent to the wrong field.
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 the core action and then the conditional conflict flow. Nothing is padded, though the final sentence carries the deprecated-parameter misdirection rather than useful guidance.
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 six-parameter mutation tool with no output schema, the description covers the important surprises: re-embedding side effect and the conflict-preview return value. It omits any statement about how the update interacts with the audit log or project tag, but the schema covers those fields adequately.
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 baseline is 3 and the schema already documents memory_id, content, project, resolution, and change_reason in detail. The description's only parameter statement is the confirm=true instruction, which is both redundant and out of step with the deprecated flag.
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 first sentence gives a specific verb and resource ('Update an existing memory's content in place') and adds the consequence of re-embedding for future recall. It implicitly distinguishes this from memory_store by saying 'existing,' but never names the sibling it replaces, so differentiation relies on inference.
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?
It clearly describes the two-step flow for org-scoped memories: receive a conflict preview, review it, then apply. It does not state when to use this versus memory_store or memory_forget, nor when org-scoping applies, so exclusions are left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pin_feedPin FeedAIdempotent
Pin a feed so it appears in the morning briefing. Pinned feeds are fetched during session start to generate headline summaries.
| Name | Required | Description | Default |
|---|---|---|---|
| feed_id | Yes | UUID of the feed to pin/unpin |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safety profile (not read-only, idempotent, non-destructive), so the bar is lower. The description earns credit by disclosing downstream behavior the annotations cannot: pinned feeds are fetched at session start and turned into headline summaries, which is meaningful consequence context. It doesn't mention scope limits (e.g. max pinned feeds) or what the response looks like.
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, effect first and mechanism second, with no filler. Everything stated contributes to selection or understanding.
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 idempotent mutation with full schema coverage and annotations covering safety, the description supplies the essential missing piece: what pinning actually changes. No output schema is needed since nothing is returned of consequence, and there are no parameters 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?
There is a single parameter with full schema description coverage, so the schema already documents feed_id as a UUID. The description adds no additional meaning about the parameter (no format hints, no constraints on which feeds can be pinned). Baseline 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Pin a feed') plus the effect ('appears in the morning briefing'), which clearly separates it from the sibling unpin_feed. The only shortfall is that it doesn't name the inverse tool explicitly, so an agent must infer the pairing from names.
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 context is implied rather than stated: the description explains the outcome (briefing inclusion, session-start fetching) which hints at when someone would want to pin. There is no explicit when-to-use/when-not or a named alternative such as unpin_feed, so guidance stays at the 'implied' level.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pingPingCRead-onlyIdempotent
Test tool — returns pong. Update available: running v0.14.0, latest v1.9.0. Restart with @latest to update.
| Name | Required | Description | Default |
|---|---|---|---|
| message | No | Optional message to echo back |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered externally; the description adds only the trivial "returns pong" outcome. The remainder of the text is an unrelated release/restart notice that discloses nothing about this tool's behavior and could mislead an agent into thinking some action is required of it.
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 first sentence is front-loaded and wastes nothing. The second sentence is operational/marketing noise about package versions and restarting with @latest, which does not earn its place in a tool definition and dilutes the signal.
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-required-parameter echo tool with full annotation coverage, schema coverage and no output schema, very little is needed and the core behavior is stated. However, the description never tells the agent what a call is useful for nor that it is a safe no-op, and the version notice occupies half the text without completing any 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% and the single optional `message` parameter is documented there as "Optional message to echo back". The description does not mention the parameter at all, so it adds no meaning beyond the schema; baseline 3 applies when the schema carries the documentation 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?
"Test tool — returns pong" states a specific, verifiable behavior (a connectivity/health check) that no sibling tool provides, so an agent can distinguish it from the domain tools in the list. It is clear but terse, and the second sentence shifts attention to version information rather than elaborating the 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?
The label "Test tool" only implies when to use it; the description never says to call it to verify server reachability, that it takes no required arguments, or that it is a no-op safe to call at any time. There are no sibling alternatives to route against, but the guidance remains inferential rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
preview_tagsPreview TagsARead-onlyIdempotent
Validate tag names and return the same warnings tagging would produce (bare contact name, customer/org match, missing ! or # prefix, typo) WITHOUT registering anything. Read-only - nothing is persisted. Call when you want to show how a tag name would be classified before committing it. Returns { warnings, auto_registered: [] }; auto_registered is always empty.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | Yes | Tag names to check, e.g. ['Alex', 'needs-review']. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is pre-supplied. The description reinforces this ('nothing is persisted') and adds genuinely new behavior: the specific warning categories emitted and the fact that auto_registered is always empty. It does not cover rate limits or whether validation is server-side, so it is solid but not exhaustive 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?
Front-loaded with the core distinction and structured around outcome, then usage, then return shape. Slight redundancy between 'WITHOUT registering anything', 'Read-only - nothing is persisted', and 'auto_registered is always empty' repeats the same no-side-effect idea three times.
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 return shape ({ warnings, auto_registered: [] }) and explaining the empty array. For a single-parameter read-only preview tool, nothing an agent needs in order 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% with a concrete example array, so the baseline is 3. The description earns an extra point by revealing that prefix presence (missing ! or #) and bare contact/customer names are what the input is checked against, which tells the agent how to shape candidate tag strings.
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 (validate/preview) and resource (tag names) plus a precise scope qualifier: it returns the warnings tagging would produce WITHOUT registering anything. That dry-run framing lets an agent distinguish it from create_tag or list_tags 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?
Gives an explicit trigger: 'Call when you want to show how a tag name would be classified before committing it,' which clearly implies create_tag is the committing alternative. It stops short of naming that sibling or stating when not to bother (e.g. when you are already going to write).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
purge_itemPermanently Delete ItemADestructiveIdempotent
Permanently and irreversibly delete a soft-deleted item (purge it from the trash, skipping the 30-day recovery window). Only operates on items that are already soft-deleted - it refuses items that are still active. On the first call it returns a confirmation conflict; pass resolution: "confirm" only after the user explicitly agrees, or "cancel" to abort. Cascades to child rows the database cascades (e.g. a customer's contacts and interactions). To recover an item instead of destroying it, use restore_item.
| Name | Required | Description | Default |
|---|---|---|---|
| entity_id | Yes | UUID of the soft-deleted entity. | |
| resolution | No | Pass "confirm" to permanently delete after the user agrees; "cancel" to abort. Omit on the first call to receive a confirmation prompt. | |
| entity_type | Yes | Type of soft-deleted entity to purge. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, so the description goes beyond them with genuinely new information: irreversibility, skipped recovery window, refusal of active items, the first-call-returns-a-conflict two-step flow, and cascade behavior to child rows. The only gap is the response shape after a successful purge, which is minor since the description does describe the conflict return.
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 destructive nature and the soft-delete precondition, then the confirmation sequence, then the cascade caveat, then the alternate tool. Every sentence carries a distinct constraint; nothing is repeated from the schema or annotations verbatim.
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 tool with no output schema, it covers preconditions, irreversibility, cascade scope, and the confirmation handshake, which is nearly everything an agent needs. It stops short of saying what a successful purge returns or how to verify the cascade, a small remaining 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 coverage is 100%, so the baseline would be 3, but the description adds workflow meaning to 'resolution' that the schema alone states more tersely: confirm only after explicit user agreement, cancel to abort, omit on first call. That sequencing context is the main thing an agent can get wrong, and the description covers it.
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 ('permanently and irreversibly delete a soft-deleted item, skipping the 30-day recovery window') and explicitly scopes it to trash items only. It also names the sibling it is not ('To recover an item instead of destroying it, use restore_item'), so an agent can route between purge_item, restore_item, purge_items, and the remove_* family without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit precondition ('only operates on items that are already soft-deleted - it refuses items that are still active') and an explicit alternative for the non-destructive path (restore_item). It also spells out the confirmation protocol, so the agent knows the correct call sequence rather than guessing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
purge_itemsBatch Permanently Delete ItemsADestructiveIdempotent
Permanently and irreversibly delete many soft-deleted items at once (batch purge from the trash). Provide either an explicit items list (entity_type + entity_id pairs, e.g. gathered from list_deleted) OR filters: entity_type, older_than_days, only_demo (leftover demo/test fixtures), or all. On the first call it returns a confirmation conflict summarizing how many items of each type will be destroyed; pass resolution: "confirm" only after the user explicitly agrees. Only ever touches already-soft-deleted items; cascades to child rows the database cascades. Use restore_items to recover instead.
| Name | Required | Description | Default |
|---|---|---|---|
| all | No | Filter: every recoverable item in the trash. Use with care. | |
| days | No | Filter look-back window in days. Defaults to 30. | |
| items | No | Explicit items to purge. Provide this OR filters. | |
| only_demo | No | Filter: only leftover demo / test fixtures. | |
| resolution | No | Pass "confirm" after the user agrees, "cancel" to abort. Omit on the first call to get a confirmation prompt. | |
| entity_type | No | Filter: only this entity type. | |
| older_than_days | No | Filter: only items deleted more than N days ago. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, and the description adds context beyond them: it explains what is destroyed (soft-deleted items only, never live rows), that deletion cascades to database child rows, and that a confirmation conflict precedes any destruction. That is unusually rich disclosure of a destructive operation's real-world effect.
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 with no filler: purpose first, then input options, then the confirmation protocol, then scope and the recovery alternative. Every sentence carries decision-relevant information, and the most consequential facts (irreversible, confirm gate) appear early.
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, parameter-rich tool with no output schema, the description covers what an agent needs: what it destroys, what it never touches, the cascade behavior, the two-phase confirmation flow, and the recovery alternative. The only omission is return-shape detail beyond the confirmation summary, which is acceptable given the description already sketches the first-call 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 coverage is 100%, so the schema already carries the field-level meaning; the description still adds value by explaining the items shape (entity_type + entity_id pairs, typically from list_deleted), clarifying only_demo as leftover demo/test fixtures, and framing `all` as a caution-worthy catch-all. One small discrepancy exists: it references an `older_than_days` filter while the schema names the parameter `days`, but the intent remains unambiguous.
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 first sentence gives a specific verb, resource, and scope: 'Permanently and irreversibly delete many soft-deleted items at once (batch purge from the trash).' The word 'many'/'batch' implicitly separates it from the singular sibling purge_item, and the closing line 'Use restore_items to recover instead' names the opposite operation, so an agent can pick correctly without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states explicit alternatives: provide either an `items` list or filters (entity_type, older_than_days, only_demo, all), and it names restore_items as the recovery path. It also spells out the two-phase rule – the first call returns a confirmation conflict and `resolution: "confirm"` may only be passed after the user explicitly agrees – which is exactly the guidance an agent needs to avoid accidental destruction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_feed_itemRead Feed ItemARead-onlyIdempotent
Read the full content of a feed item by its index number (from get_feed_items). If the feed provides full article content, it is returned as HTML. If only a summary is available, the link to the original article is returned instead.
| Name | Required | Description | Default |
|---|---|---|---|
| feed_url | Yes | URL of the feed containing the item | |
| item_index | Yes | 1-based item number from the get_feed_items list |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, open-world, so the safety profile is covered. The description adds genuinely new behavioral detail: the return payload branches between inline HTML article content and a fallback link to the original article when only a summary exists.
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 sentences, front-loaded with the action and scope, then the return behavior. No redundant phrasing 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?
With no output schema, the description usefully explains the two possible return shapes. It stops short of covering failure modes (out-of-range index, unreachable feed) or whether HTML should be treated as raw versus rendered, which would matter for a downstream agent.
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 both parameters (feed_url, item_index) are already documented with 1-based indexing semantics. The description restates the index origin but adds no type, format, or edge-case guidance 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 ('Read the full content of a feed item') and scopes it to lookup by index, which distinguishes it from get_feed_items and bookmark_item in the sibling 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?
Explicitly ties invocation to a preceding get_feed_items call ('by its index number (from get_feed_items)'), giving the agent clear sequencing context. It doesn't state exclusions or what to do if the item is already bookmarked or the index is invalid, so no 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
refresh_feedsRefresh FeedsAIdempotent
Force-refresh feed data by clearing the cache. Optionally refresh a specific feed and update its catalog metadata. If no feed_id is given, clears the entire cache.
| Name | Required | Description | Default |
|---|---|---|---|
| feed_id | No | Refresh a specific feed, or all if omitted |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true, and openWorldHint=true, so the safety profile is partly covered; the description adds the key side effect beyond them — that cached data is cleared wholesale when feed_id is omitted, and that catalog metadata is updated. Worth noting the mild tension between a bulk cache clear and destructiveHint=false, but since no user data is lost this is not a contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the action and followed by scope and the no-argument case. The third sentence partially repeats the first ('clearing the cache') and the schema's 'or all if omitted', so it is efficient but not perfectly tight.
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 optional parameter, non-read-only tool with annotations present and no output schema, the description covers action, scope, and side effects adequately. It stops short of noting what the caller gets back or any cost/implications of invalidating the whole cache, which would have made it fully 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 coverage is 100% and the schema already says 'Refresh a specific feed, or all if omitted', so the baseline is 3; the description earns one more by making the global-cache-clear consequence and the catalog-metadata update explicit rather than merely restating the field.
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: force-refresh feed data by clearing the cache, with the optional single-feed vs global scope spelled out. It is clearly distinguishable from read-oriented siblings like get_feed_items or list_feeds, though it never names an alternative 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?
The description gives conditional usage guidance for the parameter ('If no feed_id is given, clears the entire cache'), which tells the agent the consequence of omission. It does not say when to prefer this over siblings such as get_feed_items (read fresh vs cached) or subscribe_feed, nor any exclusion — usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_accountRemove AccountADestructiveIdempotent
Remove a financial account by archiving (hides from active views, recoverable) or permanently deleting. On first call, returns a conflict with ARCHIVE / DELETE / CANCEL. Accounts with active (non-deleted) transactions cannot be deleted - the delete option becomes available once the account has no live transactions.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Deprecated: use `resolution`. 'archive' / 'delete' / 'cancel'. | |
| account_id | Yes | Account UUID to remove. | |
| resolution | No | Resolution after the removal conflict: 'confirm' deletes (recoverable for 30 days), 'archive' hides it (recoverable), 'cancel' aborts. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, so the description's job is to add specifics, which it does: archive hides but is recoverable, the first call is non-committal and returns a resolution conflict, and deletion is gated on live transactions. The one soft spot is the word 'permanently deleting,' which sits uneasily beside the schema's note that 'confirm' is recoverable for 30 days — a mild internal inconsistency, though not a contradiction of 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?
Three tight sentences, front-loaded with the action and the archive/delete distinction before the flow detail. The final sentence about transaction gating is slightly convoluted but every sentence carries information an agent needs.
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 takes on the burden of describing the conflict response and the resolution options, which it does. It stops short of describing what a successful (non-conflict) call returns, leaving the agent to infer the outcome of a confirmed archive or delete.
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 account_id, mode (deprecated), and resolution. The description adds real value by explaining the interactive conflict flow, but it labels the options ARCHIVE / DELETE / CANCEL while the actual enum is confirm / archive / cancel — the 'DELETE' vs 'confirm' mismatch forces the agent to reconcile the two, and the deprecated `mode` parameter is never addressed.
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 opens with a specific verb+resource ('Remove a financial account') and immediately disambiguates the two removal semantics (archive vs. delete) that the tool supports. An agent can distinguish this from siblings like remove_transaction or remove_category 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?
It gives a clear conditional rule: deletion is blocked while the account has active (non-deleted) transactions, and archive remains available. The two-step conflict flow (first call returns ARCHIVE / DELETE / CANCEL) tells the agent how to proceed after the initial call. It does not, however, point to related siblings such as restore_item or purge_item for recovery/cleanup paths.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_bookmarkRemove BookmarkCDestructiveIdempotent
Remove a saved bookmark by its ID.
| Name | Required | Description | Default |
|---|---|---|---|
| bookmark_id | Yes | UUID of the bookmark to remove |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, so the safety profile is covered. The description adds nothing beyond that — it does not say whether removal is permanent or recoverable via restore_item, nor what happens if the UUID does not exist.
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 its brevity is part of why behavioral context is 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 one-parameter tool with annotations covering destructiveness and idempotency, the essentials are present. However, the presence of restore_item and list_deleted siblings makes the missing note on recoverability and non-existent-ID behavior a meaningful 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 coverage is 100% and the single parameter is fully documented as a UUID, so the schema carries the semantics. The description's 'by its ID' restates the schema without adding format or constraint detail, 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 ('Remove') and resource ('a saved bookmark') plus the lookup key, so the operation is unambiguous. It does not reference siblings like list_bookmarks, bookmark_item, or restore_item, so differentiation from those is left to inference.
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 when-to-use guidance, no prerequisites, and no mention of alternatives such as restore_item for undo. An agent must infer entirely from the tool name when removal is appropriate versus when to list or restore bookmarks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_categoryRemove CategoryADestructiveIdempotent
Remove a financial category by archiving (hides from active views, recoverable) or permanently deleting. On first call, returns a conflict with ARCHIVE / DELETE / CANCEL. Categories with active (non-deleted) transactions cannot be deleted.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Deprecated: use `resolution`. 'archive' / 'delete' / 'cancel'. | |
| resolution | No | Resolution after the removal conflict: 'confirm' deletes (recoverable for 30 days), 'archive' hides it (recoverable), 'cancel' aborts. | |
| category_id | Yes | Category UUID to remove. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and idempotentHint=true, so the description's added value is the recoverability model and the conflict/confirmation protocol, which it does provide. One flaw: it calls deletion 'permanent' while the schema's own resolution field says confirm deletes are 'recoverable for 30 days' — an internal inconsistency that could mislead an agent about irreversibility.
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 the archive-vs-delete distinction, followed by the interaction protocol and the blocking constraint. No filler, though the 'permanently deleting' phrasing wastes credibility given the 30-day recovery window stated elsewhere.
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 compensates by describing the conflict return payload and its resolution options. Combined with the deletion precondition, an agent has enough to drive both calls, though the recoverability contradiction and the unmentioned deprecated `mode` leave small gaps.
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 both enums are documented in-schema, so the schema already carries the parameter burden. The description reinforces the conflict options but does not explain the required first-call-without-resolution vs second-call-with-resolution sequence, nor does it mention that `mode` is deprecated — details that would materially help parameter choice.
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 (financial category) and immediately disambiguates the two removal semantics: archiving (hides, recoverable) vs permanent deletion. An agent can distinguish this from siblings like remove_transaction or remove_account 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?
Explains the two-phase interaction ('on first call, returns a conflict with ARCHIVE / DELETE / CANCEL') and a hard precondition ('categories with active (non-deleted) transactions cannot be deleted'). It stops short of naming when to prefer archiving over deleting, leaving that judgement to the caller.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_contactRemove ContactADestructiveIdempotent
Remove a contact by archiving (marks as inactive, recoverable) or permanently deleting. On first call, returns a conflict with ARCHIVE / DELETE / CANCEL options. Pass mode after the user decides. Interaction history referencing this contact is preserved on archive.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Deprecated: use `resolution`. 'archive' / 'delete' / 'cancel'. | |
| contact_id | Yes | Contact UUID to remove. | |
| resolution | No | Resolution after the removal conflict: 'confirm' deletes (recoverable for 30 days), 'archive' hides it (recoverable), 'cancel' aborts. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial context beyond destructiveHint=true and idempotentHint=true: the confirmation/conflict protocol, recoverability of archive, and preservation of interaction history. The one blemish is calling delete "permanently deleting" when the schema says deletions are recoverable for 30 days, which understates the safety window.
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: behavior, protocol, and consequence are front-loaded with no filler. The only cost is that the compact option list is what introduces the naming mismatch with the schema enum.
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 takes on the burden of describing the return shape (a conflict carrying ARCHIVE / DELETE / CANCEL options) and the side effects on related interaction records. That is the essential information an agent needs before invoking a destructive, two-phase 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%, so baseline would be 3, but the description actively misroutes the agent: it says "Pass mode after the user decides" although `mode` is marked Deprecated in the schema in favor of `resolution`. It also presents the options as ARCHIVE / DELETE / CANCEL, whereas the live enum is confirm / archive / cancel, so an agent following the prose could pass an invalid combination.
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 a contact") and immediately disambiguates the two removal semantics (archiving = inactive/recoverable vs. permanent delete). An agent can distinguish it from add_contact, update_contact, and from generic removers like remove_customer 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?
Explains the two-step interaction model clearly: first call surfaces a conflict, the agent must get the user's decision, then re-invoke with the chosen option. It does not mention adjacent siblings for undoing/restoring (restore_item, list_deleted, purge_item), which would complete the guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_customerRemove CustomerADestructiveIdempotent
Remove a customer by archiving (sets phase to inactive, recoverable) or permanently deleting. On first call, returns a conflict with ARCHIVE / DELETE / CANCEL options. Pass mode after the user decides. Contacts cascade on delete; history is preserved on archive.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Deprecated: use `resolution`. 'archive' / 'delete' / 'cancel'. | |
| resolution | No | Resolution after the removal conflict: 'confirm' deletes (recoverable for 30 days), 'archive' hides it (recoverable), 'cancel' aborts. | |
| customer_id | Yes | Customer UUID to remove. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, and the description adds genuinely new behavior: contacts cascade on delete, history is preserved on archive, and the first call is non-committal, returning a conflict before any mutation happens. The one flaw is that it calls delete 'permanent' while the schema documents a 30-day recovery window, which understates recoverability.
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 carrying distinct information (semantics, interaction protocol, blast radius), with the action and its two forms front-loaded. No filler or restatement of the tool name.
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 tool with no output schema, it covers the essentials: what is destroyed, what cascades, what survives, and that the first call is a confirmation gate returning a conflict payload. It is only weakened by the 'permanently deleting' claim, which conflicts with the documented 30-day recovery and leaves the agent's risk framing slightly wrong.
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 baseline is 3, and the description does add real meaning about ordering: the resolution is supplied only on the second call after the conflict. However, it tells the agent to 'pass mode', which the schema marks as deprecated in favor of `resolution`, so the parameter guidance is partially stale and could steer an agent to the wrong field.
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 a customer') and immediately distinguishes the two possible semantics, archive vs delete, including what each does to the record. An agent can tell this apart from siblings like update_customer or remove_contact 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?
Explains the two-step protocol clearly: the first call surfaces a conflict with ARCHIVE / DELETE / CANCEL, and the mode is supplied only after the user decides. It also gives the selection criterion (recoverable archive vs permanent delete). It does not compare against sibling alternatives such as update_customer for a soft phase change, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_interactionRemove InteractionADestructiveIdempotent
Soft-delete a logged interaction (email, call, meeting, etc.) by its UUID. Interactions are append-only touchpoint history, so there is no archive state - removal is a soft-delete, recoverable for 30 days, then purged. On first call returns a conflict with DELETE / CANCEL options; pass mode after the user decides.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Deprecated: use `resolution`. 'delete' / 'cancel'. | |
| resolution | No | Resolution: 'confirm' soft-deletes (recoverable 30 days), 'cancel' aborts. | |
| interaction_id | Yes | Interaction UUID to remove. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, so the description's added value is the recoverability model: soft-delete, no archive state, 30-day recovery window, then purge. That is genuinely useful context beyond the annotations, though it omits permission requirements and what happens to dependent records or task links.
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 behavior, then the confirmation flow — no filler. The only blemish is the stray 'etc.' and the ambiguous use of 'mode', which reads as a generic noun but collides with a real parameter name.
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 single-target tool with full schema coverage and no output schema, the description covers the deletion semantics and the confirmation handshake well. The gap is the parameter naming mismatch between 'mode' and 'resolution', which is exactly the detail an agent needs to call this correctly on the second turn.
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 baseline would be 3, but the description actively degrades it by telling the agent to 'pass mode after the user decides' while the schema marks `mode` as deprecated in favor of `resolution`. It never mentions the `resolution` parameter with its confirm/cancel values, so an agent following the description would reach for the wrong (deprecated) field.
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 first sentence names a specific verb and resource ('Soft-delete a logged interaction'), scopes the resource with examples ('email, call, meeting, etc.'), and names the addressing key ('by its UUID'). An agent can distinguish this from remove_contact, remove_task, or purge_item 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?
It gives an explicit operational protocol: the first call returns a conflict with DELETE/CANCEL options and the agent should only proceed after the user decides, which tells the agent how to sequence the call. It stops short of naming alternatives (e.g., restore_item/list_deleted for recovery, purge_item for immediate hard deletion) or stating when-not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_memberRemove MemberADestructiveIdempotent
Remove a team member from the company. Deletes their company_members row, revoking all financial access. Their historical data (tasks, interactions, transactions) is preserved. Cannot remove the last owner. Requires owner role.
| Name | Required | Description | Default |
|---|---|---|---|
| target_user_id | Yes | The user_id of the member to remove. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and idempotentHint=true, so the description's job is to add specifics — and it does: the exact row deleted, the access consequence, and the preservation of historical tasks/interactions/transactions. It stops short of saying whether the deletion is soft/recoverable (restore_item and list_deleted exist as siblings) or whether it is audited via get_audit_log.
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 short sentences, front-loaded with the action and consequence, then the data-retention caveat, then the permission constraints. No filler and nothing that merely restates 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?
For a one-parameter destructive tool with no output schema, the description covers effect, side effects on data, and the two failure conditions — enough to call it safely. The remaining gap is recoverability: an agent cannot tell from this text whether a removed member can be restored 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?
Schema coverage is 100% and the single parameter target_user_id is fully documented in the schema, so the baseline of 3 applies. The description adds no format, lookup path, or disambiguation detail (e.g., how to obtain a user_id) beyond what the schema 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 specific verb and resource ('Remove a team member from the company') and immediately clarifies the scope of the effect: it deletes the company_members row, not the person's history. This clearly separates it from add_member, set_member_owner, and the remove_customer/remove_contact 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?
Gives explicit preconditions ('Requires owner role') and an exclusion ('Cannot remove the last owner'), so an agent knows when the call will fail. It does not, however, route the agent to the obvious alternative for the narrower case — set_financial_access exists as a sibling for revoking financial access alone without removing the member.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_playbookRemove PlaybookADestructiveIdempotent
Remove a playbook by archiving (hides from active views, recoverable) or permanently deleting. On first call, returns a conflict with ARCHIVE / DELETE / CANCEL options. Pass mode after the user decides. Run history is preserved in both cases. Tasks already created by previous runs are not affected.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Deprecated: use `resolution`. 'archive' / 'delete' / 'cancel'. | |
| resolution | No | Resolution after the removal conflict: 'confirm' deletes (recoverable for 30 days), 'archive' hides it (recoverable), 'cancel' aborts. | |
| playbook_id | Yes | Playbook UUID or slug. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (destructiveHint=true, idempotentHint=true), the description discloses real behavioral consequences: archiving hides from active views but stays recoverable, run history survives both paths, and previously created tasks are untouched. The one blemish is calling the delete path "permanently deleting," which conflicts with the schema's note that `resolution: confirm` is recoverable for 30 days.
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 destructive semantics and the recovery guarantee before the conflict-flow mechanics. Nearly every sentence carries distinct information; only the mode/resolution wording adds noise rather than value.
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-idempotent-looking operation with no output schema, the description covers reversibility, side effects on downstream artifacts, and the required interaction sequence. The residual gap is the unresolved naming mismatch between the prose's `mode` values and the schema's `resolution` values, which is exactly the detail a caller needs to complete the second 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 coverage is 100%, so the baseline is 3. The description does add meaning about what each choice does behaviorally, but it enumerates the conflict options as ARCHIVE / DELETE / CANCEL, which does not match the actual `resolution` enum (confirm / archive / cancel) — an agent following the prose could pass an invalid value or use the deprecated `mode` field.
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 opening sentence gives a specific verb and resource ("Remove a playbook") and immediately distinguishes the two semantics — archive vs. permanent delete — which separates it from siblings like remove_playbook_step, update_playbook, and purge_item. An agent can identify the tool from the first clause 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?
It usefully describes a two-phase protocol (first call surfaces a conflict, second call resolves it), which is genuine when-to-use guidance. However, it never points to alternatives such as restore_item for recovering an archived playbook, and it tells the caller to "pass mode" while the schema deprecates `mode` in favor of `resolution`, muddying the operative instruction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_playbook_stepRemove Playbook StepADestructiveIdempotent
Remove a step from a playbook by archiving (hides from step list, recoverable) or permanently deleting. On first call, returns a conflict with ARCHIVE / DELETE / CANCEL options. Pass mode after the user decides. Tasks already created by previous runs are not affected.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Deprecated: use `resolution`. 'archive' / 'delete' / 'cancel'. | |
| step_id | Yes | Playbook step UUID to remove. | |
| resolution | No | Resolution after the removal conflict: 'confirm' deletes (recoverable for 30 days), 'archive' hides it (recoverable), 'cancel' aborts. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructive=true and idempotent=true, and the description adds genuinely non-obvious behavior: archive hides the step but is recoverable, and previously created tasks are unaffected by removal. The main flaw is that it calls delete 'permanent' while the schema documents 'confirm' as recoverable for 30 days, which could lead an agent to misstate irreversibility to a user.
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 short sentences, front-loaded with the reversible-vs-permanent distinction and then the interaction flow. No filler, though the deprecated-parameter sentence consumes space with guidance that is now wrong.
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 description covers the essential non-obvious aspect of this tool, the two-phase conflict/resolution flow, which the schema alone does not convey, and there is no output schema to explain. It stops short of clarifying that 'cancel' aborts and leaves the step intact, but the critical behavior 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%, so baseline is 3, but the description actively works against the schema: it instructs the agent to 'pass mode', which the schema marks Deprecated in favor of 'resolution'. It also names the options ARCHIVE / DELETE / CANCEL while the resolution enum is confirm / archive / cancel, so the mapping (DELETE -> confirm) is left for the agent to guess wrong.
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 a step from a playbook) and immediately explains the two mechanisms available (archive vs. permanent delete). It is clearly distinct from siblings like update_playbook_step and remove_playbook, and an agent can identify the operation without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives strong procedural guidance: the first call yields a conflict with options and the resolution is passed afterward once the user decides. It does not, however, address when to choose this tool over update_playbook_step (moving/replacing a step) or remove_playbook (dropping the whole playbook), leaving that routing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_projectRemove ProjectADestructiveIdempotent
Remove a project by archiving (sets status to 'archived', recoverable) or permanently deleting. On first call, returns a conflict with ARCHIVE / DELETE / CANCEL options. Pass mode after the user decides. The project's tag is kept in the registry on archive. On delete, the project record and its registry tag are removed but tasks/customers keep the tag string in their arrays (orphaned). Run history referencing this project is preserved.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Deprecated: use `resolution`. 'archive' / 'delete' / 'cancel'. | |
| project_id | Yes | Project UUID to remove. | |
| resolution | No | Resolution after the removal conflict: 'confirm' deletes (recoverable for 30 days), 'archive' hides it (recoverable), 'cancel' aborts. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even with destructiveHint=true already supplied, the description goes well beyond the annotations: archive is recoverable and keeps the registry tag, delete removes the project record and its registry tag but leaves orphaned tag strings in tasks/customers, and run history is preserved either way. That is precisely the consequence information an agent needs before advising a human on a destructive choice.
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 tight sentences, front-loaded with the core action and its two variants, then the interaction protocol, then side effects in descending order of severity. No filler and nothing that could be cut without losing consequence information.
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 multi-step, destructive, human-in-the-loop operation with no output schema, and the description covers the conflict protocol, the recoverability window, and exactly what data survives or becomes orphaned. Very little an agent needs in order to call it safely is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description does add the two-phase conflict flow that explains why a mode/resolution argument is needed at all, but it introduces confusion by consistently talking about 'mode' while the schema marks 'mode' as deprecated in favor of 'resolution', and it labels the options ARCHIVE/DELETE/CANCEL while the resolution enum is confirm/archive/cancel.
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 the verb (remove) and the resource (project) and immediately disambiguates it into two distinct behaviors — archiving (status set to 'archived') versus permanent deletion. This is clearly separable from siblings like restore_item, purge_item, and list_deleted, which handle adjacent lifecycle operations.
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?
It gives explicit sequencing guidance: the first call returns a conflict with ARCHIVE / DELETE / CANCEL, and the mode is passed only after the user decides. That is real usage instruction, but it stops short of naming alternatives (e.g., why not call purge_item or restore_item instead) or stating preconditions such as required permissions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_tagRemove TagADestructiveIdempotent
Remove a tag by archiving (hides from active views, recoverable) or permanently deleting. On first call, returns a conflict with ARCHIVE / DELETE / CANCEL options. Pass mode after the user decides. If the tag is owned by a project, the tool suggests removing the project instead. On delete, pass clean_items=true to also strip the tag from all tasks and customers that use it.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Deprecated: use `resolution`. 'archive' / 'delete' / 'cancel'. | |
| tag_id | Yes | Tag registry UUID to remove. | |
| cascade | No | When deleting, also remove this tag from all tasks, customers, and financial records that use it. If false, the registry entry is deleted but items keep the tag text (orphaned). | |
| resolution | No | Resolution after the removal conflict: 'confirm' deletes (recoverable for 30 days), 'archive' hides it (recoverable), 'cancel' aborts. | |
| clean_items | No | Deprecated: use `cascade`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the destructive/idempotent annotations: archive hides from active views but is recoverable, delete strips the tag from all tasks and customers when clean_items=true, and owned tags trigger a project-removal suggestion. This is exactly the mutation-consequence context the annotations cannot express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four tight sentences, front-loaded with what the tool does before the interaction flow. Slight ambiguity comes from switching between the description's option names and the schema's parameter names, but there is 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?
With no output schema, the description correctly describes the notable return case (the first-call conflict and its options), which is the key thing an agent cannot guess. What happens on a successful archive/delete is not stated, and the deprecated-vs-current parameter naming is left unresolved.
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 description does explain the intent of the resolution step, which the schema alone does not convey. However, it steers the agent to `mode` and `clean_items`, both of which the schema explicitly marks Deprecated in favor of `resolution` and `cascade`, and the ARCHIVE/DELETE/CANCEL wording does not match the `resolution` enum (confirm/archive/cancel). With 100% schema coverage the baseline is 3, and the stale naming keeps it there rather than raising it.
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 ("Remove a tag") and immediately scopes it into the two removal variants (archive vs. permanent delete). An agent can distinguish this from siblings like rename_tag, create_tag, or list_tags 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 describes the two-step flow: first call returns a conflict with ARCHIVE/DELETE/CANCEL, and the mode is passed only after the user decides. It also states the escalation condition (project-owned tag → suggest removing the project) and when to use clean_items, which is real when-to guidance rather than inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_taskRemove TaskADestructiveIdempotent
Remove a task by archiving (hides from active views, recoverable) or permanently deleting. On first call, returns a conflict with ARCHIVE / DELETE / CANCEL options. Pass mode after the user decides. Delete removes the task and all its links and notes permanently. Archive sets archived_at and preserves everything.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Deprecated: use `resolution`. 'archive' / 'delete' / 'cancel'. | |
| task_id | Yes | Task UUID to remove. | |
| resolution | No | Resolution after the removal conflict: 'confirm' deletes (recoverable for 30 days), 'archive' hides it (recoverable), 'cancel' aborts. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and idempotentHint=true, but the description adds real value beyond them: it discloses the non-obvious first-call conflict response, that archive sets archived_at and preserves everything, and that delete also wipes links and notes. The one weak point is the claim that delete is 'permanently' destructive, which conflicts with the schema note that 'confirm' is recoverable for 30 days.
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 short sentences, front-loaded with the what and the two modes, then the two-step flow, then the per-mode consequences. Little waste, though the recoverability point is stated twice in slightly inconsistent form.
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?
Covers the key thing an agent needs that structured fields cannot convey — the conflict-then-resolve interaction pattern — and no output schema exists to carry it. But it does not reconcile the deprecated `mode` field versus `resolution`, nor the 'permanently' versus 'recoverable for 30 days' discrepancy, which are exactly the ambiguities that would cause a wrong 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 coverage is 100%, so the schema already documents all three parameters and both enums, making 3 the baseline. The description adds the sequencing meaning of the choice (decide after the conflict) but muddies semantics by referring to `mode`/DELETE where the live parameter is `resolution`/confirm.
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 a task) and immediately names the two removal semantics: archiving versus permanent deletion. It is clear what the tool does, though it never contrasts itself with adjacent siblings such as complete_task or purge_item, which also touch task/removal lifecycles.
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 genuinely useful procedural guidance: the first call returns a conflict with options, and the mode is supplied only after the user decides. However, it tells the agent to 'Pass mode' while the schema marks `mode` deprecated in favor of `resolution`, and it labels the options ARCHIVE / DELETE / CANCEL while the `resolution` enum is confirm / archive / cancel — leaving the agent unsure which field and which literal to send.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_transactionRemove TransactionADestructiveIdempotent
Remove a transaction by archiving (hides from views and reports, recoverable) or permanently deleting (reverses the balance effect). On first call, returns a conflict with confirm / archive / cancel. If the transaction is one leg of a transfer, confirming the deletion removes both legs together to keep the books balanced.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Deprecated: use `resolution`. 'archive' / 'delete' / 'cancel'. | |
| force_mode | No | Deprecated: confirming a transfer-leg deletion now deletes both legs automatically. 'delete_both' is still accepted. | |
| resolution | No | Resolution after the removal conflict: 'confirm' deletes (recoverable for 30 days), 'archive' hides it (recoverable), 'cancel' aborts. | |
| transaction_id | Yes | UUID of the transaction to remove. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare destructiveHint=true and idempotentHint=true. The description adds valuable behavior beyond that: archive hides but is recoverable, delete reverses the balance effect, the first call returns a conflict, and confirming a transfer-leg deletion removes both legs. It is slightly imprecise by calling deletion permanent without noting the schema's 30-day recoverability.
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 three tightly packed sentences with no wasted wording. The key distinction between archive and delete is front-loaded, followed by the conflict flow and transfer edge case.
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 financial transaction tool with conflict resolution and transfer coupling, the description covers the essential invocation behavior and the most important edge case. It omits access requirements and explicit recovery alternatives, but annotations and schema already carry some of 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 the schema already documents all parameters including the deprecated mode and force_mode fields. The description adds workflow context around resolution, but it does not add parameter-specific meaning beyond what the schema provides, so a 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 specific verb and resource ('Remove a transaction') and clearly distinguishes the two removal modes: archive versus delete. It also explains the conflict workflow and transfer-leg behavior, so an agent can understand the operation without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear usage context for choosing archive versus delete and explains the confirm/archive/cancel resolution flow. However, it does not explicitly name alternatives such as restore_item or list_deleted for recovery, nor does it state when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rename_tagRename TagBIdempotent
Rename a registered tag. Updates the display name and slug. If the tag is in use and propagate is not explicitly set, a conflict response is returned asking whether to propagate the rename. Set propagate=true or propagate=false to skip the conflict.
| Name | Required | Description | Default |
|---|---|---|---|
| tag_id | Yes | Tag registry UUID. | |
| cascade | No | If true, rename the tag on all tasks/customers/financial records that use it. If false, rename only the registry entry. If omitted and the tag is in use, a conflict is returned asking the user to decide. | |
| new_name | Yes | New display name for the tag. | |
| propagate | No | Deprecated: use `cascade`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false and idempotentHint=true, so the safety profile is covered. The description adds genuinely non-obvious behavior — a two-step conflict response when the tag is in use, and that the slug is also rewritten — but it attributes the conflict to `propagate` when the schema says `cascade` controls it and that `propagate` is deprecated, so the behavioral disclosure is partly stale.
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 text is short and the purpose is front-loaded, but two of the three sentences are devoted to a deprecated parameter, so a large share of the description's real estate argues for the wrong control. The conflict behavior itself is stated efficiently.
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 no output schema, fully documented parameters and decent annotations, the description should establish the conflict round-trip correctly. It conveys that a conflict can occur and must be resolved by an explicit boolean, but it never mentions `cascade`, which is the current and non-deprecated way to resolve it, leaving the agent with incomplete and partly incorrect operating instructions.
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%, which normally sets a baseline of 3, but the description does not merely omit parameter meaning — it actively misdirects. It instructs the agent to "Set propagate=true or propagate=false to skip the conflict," while the schema documents `propagate` as "Deprecated: use `cascade`" and defines `cascade` as the real propagation switch. An agent following the description would use the wrong 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?
"Rename a registered tag" is a specific verb+resource, and the second sentence clarifies the scope of the mutation (both display name and slug change). It is unambiguous against siblings like create_tag/remove_tag/list_tags, though it never states that distinction 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?
It explains one important invocation branch: if the tag is in use and no propagation flag is given, the call returns a `conflict` rather than completing, and the agent must re-call with an explicit boolean. That is useful when-to-use context, but there are no exclusions or alternatives, and the guidance is attached to a parameter the schema marks deprecated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
restore_itemRestore Archived or Deleted ItemAIdempotent
Restore a previously archived or soft-deleted item back to active state. Works for any entity type that supports archiving or deletion: customer, contact, task, tag, playbook, playbook_step, project, financial_account, financial_category, financial_transaction. Soft-deleted items are automatically purged after 30 days - restore before then to recover. Permission rules: org-scoped items can be restored by any company member; personal-scoped items (tasks) can only be restored by the creator.
| Name | Required | Description | Default |
|---|---|---|---|
| entity_id | Yes | UUID of the archived or soft-deleted entity. | |
| entity_type | Yes | Type of entity to restore. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is a non-destructive, idempotent, non-open-world mutation, so the safety profile is covered. The description goes beyond them by disclosing the 30-day retention/purge window and a two-tier permission model (any company member for org-scoped, creator-only for personal-scoped tasks), which are exactly the kind of operational constraints an agent cannot infer from the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the core action and then the retention rule and permission rule in descending order of importance; nothing is padded. The long inline entity enumeration is dense but functional, since it doubles as the applicability list.
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 tool with no output schema, the description covers action, applicability, retention window, and authorization, which is most of what an agent needs. It leaves unstated what happens when the target is not archived/deleted or when the caller lacks permission (error versus no-op), which an agent reasoning about failure paths 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 coverage is 100%, so both parameters are already documented and the enum is fully enumerated, making the baseline a 3. The description adds useful nuance by tying 'task' to personal-scope restore permissions, but its own entity-type list omits 'interaction', which is present in the schema enum - a small inconsistency that slightly undercuts the added value.
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 first sentence states a specific verb and resource ('Restore a previously archived or soft-deleted item back to active state') and the second enumerates the supported entity types, so the agent knows exactly what the tool acts on. It does not, however, distinguish itself from the sibling bulk tool 'restore_items' or from 'purge_item', which share the same domain and could be confused at selection time.
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?
It gives a concrete temporal condition ('soft-deleted items are automatically purged after 30 days - restore before then to recover') that tells the agent when this tool must be used rather than deferring. It also spells out who may invoke it for org-scoped versus personal-scoped items, but never explicitly routes multi-item recovery to the sibling 'restore_items'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
restore_itemsBatch Restore ItemsAIdempotent
Restore many soft-deleted items at once (batch recover from the trash). Provide either an explicit items list (entity_type + entity_id pairs) OR filters: entity_type, older_than_days, or all. Restores are reversible - you can delete the items again - so this executes directly and returns a summary of what was recovered. Use purge_items to permanently delete instead.
| Name | Required | Description | Default |
|---|---|---|---|
| all | No | Filter: every recoverable item in the trash. | |
| days | No | Filter look-back window in days. Defaults to 30. | |
| items | No | Explicit items to restore. Provide this OR filters. | |
| entity_type | No | Filter: only this entity type. | |
| older_than_days | No | Filter: only items deleted more than N days ago. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=false and idempotentHint=true, and the description reinforces this with the genuinely additive claim that "Restores are reversible - you can delete the items again - so this executes directly," which explains why no confirmation step exists. It also discloses the return shape ("returns a summary of what was recovered"). It stops short of describing rate limits, batch-size caps, or what happens to items that fail mid-batch.
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, zero filler: purpose first, then the input-mode contract, then the safety/reversibility note and the sibling pointer. Parenthetical glosses like "(batch recover from the trash)" add meaning rather than 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 mutation tool with no required parameters, no output schema, and full annotation coverage, this is close to sufficient: it covers reversibility, direct execution, and the summary return. The remaining gaps are the omitted `days` filter and the unstated question of whether filter conditions combine with AND, which an agent would need to know before calling with multiple filters.
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 baseline is 3, and the description does add real value by spelling out that `items` is a list of entity_type + entity_id pairs and that items and filters are alternatives. However, it lists the filters as "entity_type, older_than_days, or all" and never mentions the `days` parameter that the schema documents, leaving the relationship between `days` and `older_than_days` unexplained and making the filter description incomplete rather than clarifying.
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 opens with a specific verb and resource — "Restore many soft-deleted items at once (batch recover from the trash)" — and immediately distinguishes batch recovery from the singular `restore_item` sibling by emphasizing "many" and "at once". It also names `purge_items` as the permanent-delete counterpart, so an agent can route correctly without reading 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?
It states the two mutually exclusive input modes explicitly ("Provide either an explicit `items` list ... OR filters") and gives a clear when-not via "Use purge_items to permanently delete instead." The only minor omission is that it never points to `restore_item` for single-item recovery, but the batch-vs-singular distinction is legible from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_playbookRun PlaybookA
Execute a playbook against a customer. Set preflight_only: true to inspect connector requirements and step breakdown WITHOUT executing — use this to check what's needed before committing to a run. In normal mode: creates all native_task steps as Founders OS tasks (linked to the customer) and returns external_action steps as structured instructions. IMPORTANT: After this tool returns in normal mode, check external_actions and execute each one using the appropriate connected MCP tools. If a connector is unavailable, create a native task using the fallback_task field from that step instead. The response always includes connector_requirements so you know what to check before executing.
| Name | Required | Description | Default |
|---|---|---|---|
| notes | No | Optional context note logged with the run. | |
| start_date | Yes | Anchor date (YYYY-MM-DD) for due_offset calculations and {{playbook.start_date}} placeholders. | |
| customer_id | No | Customer UUID to run this playbook for. Strongly recommended — enables placeholder resolution. | |
| playbook_id | Yes | Playbook UUID or slug. | |
| preflight_only | No | If true, return connector requirements and a step summary WITHOUT executing. Use this to check what the playbook needs before committing to a run. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=false, destructiveHint=false, idempotentHint=false), the description discloses the concrete side effects: native_task steps become Founders OS tasks linked to the customer, while external_action steps are returned as instructions. It stops short of noting that a non-idempotent re-run would create duplicate tasks or that a run record is persisted, which are the remaining behavioral 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?
The description is front-loaded with the execution mode distinction, followed by side effects and then the required follow-up actions, so the ordering matches how an agent would reason. Slight redundancy exists between the preflight sentences and the schema's own preflight_only description, 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?
With no output schema, the description carries the return-value burden and does so: it explains the external_actions list, the connector_requirements field, and the fallback_task field. Combined with the annotations, an agent has everything needed to call it and act on the result.
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 all five parameters, including preflight_only, are already documented in the schema. The description reinforces the preflight_only gate with intent-level framing but adds no format or syntax detail beyond what the schema supplies; 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 opening sentence gives a specific verb and resource (execute a playbook against a customer), and the body immediately distinguishes the two modes of operation. It is clearly separable from siblings such as create_playbook, get_playbook, and list_playbook_runs.
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?
It states explicitly when to use preflight_only (to inspect connector requirements before committing) versus normal mode, and it prescribes post-call behavior when connectors are missing via fallback_task. The decision path is fully spelled out rather than implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_contactsSearch ContactsARead-onlyIdempotent
Search for contacts by name, email, phone, or role. Returns matching contacts with their customer/organization info. Use this when someone asks about a person by name.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results to return | |
| query | Yes | Search text (searches first name, last name, email, phone, role) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, and closed-world, so the safety profile is covered. The description adds the return shape (contacts plus customer/organization info), which is valuable given there is no output schema, but silent on matching semantics (prefix vs substring), ordering, and what a truncated result looks like.
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 the verb and searchable fields, then the return value, then the usage cue. No filler, though the usage sentence could be folded into the first to tighten the block.
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-only search with full annotation coverage and no output schema, the definition covers what it searches, what comes back, and when to reach for it. Remaining gaps (matching behavior, result ordering) are minor for a simple lookup.
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 are already documented, including the exact field list for query. The description's field list merely restates the schema and adds nothing about limit, default 10, or the 50 maximum. 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 (Search) and resource (contacts) plus the fields searched, and notes that results carry customer/organization info, which distinguishes it from search_customers without naming that sibling. Clear enough to pick between them, though the customer-side sibling is never explicitly contrasted.
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?
"Use this when someone asks about a person by name" gives a concrete trigger, but no when-not guidance and no mention of the obvious alternatives (search_customers for companies, get_customer, add_contact). The trigger also narrows to names while the tool itself covers email, phone, and role.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_customersSearch CustomersARead-onlyIdempotent
Search customers by name, notes, city, state, or tags. Returns matching customers with summary info.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | Convenience filter for a single tag. Use `tags` for multiple. | |
| tags | No | Filter to items carrying these tags. Combined per `tag_match` (default 'all': the item must carry every listed tag). | |
| limit | No | Max results to return | |
| query | Yes | Search text (searches organization name, notes, city, state) | |
| tag_match | No | How to combine `tags`: 'all' (item has every tag, default) or 'any' (item has at least one of them). | |
| customer_type | No | Filter by customer type | |
| customer_phase | No | Filter by lifecycle phase |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, and closed-world, so the safety profile is covered. The description's one addition is that it returns 'summary info' rather than full records, hinting at get_customer for detail, but it says nothing about result caps, truncation, or what happens when no matches are found.
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 search surface and followed by the return shape. No filler wording 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 7-parameter read-only search tool with full schema coverage, complete annotations, and no output schema, the description covers purpose and rough return shape adequately. It is slightly thin on pagination and on the type/phase filters, but nothing essential to invoking 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%, including enum values and tag_match semantics, so the schema carries parameters fully. The description only restates the query field's searchable surface and adds no meaning beyond it for tag, limit, customer_type, or customer_phase. 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 (search) and resource (customers) plus the searchable fields (name, notes, city, state, tags), which is enough to distinguish it from get_customer or add_customer. It stops short of naming list_customers as the unfiltered alternative, so the boundary with that sibling is left implicit.
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 implied by the word 'search' and the enumerated matchable fields, so an agent can infer this is the lookup-by-text tool. There is no explicit when-to-use vs. list_customers/search_contacts guidance and no statement of exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_financial_accessSet Financial AccessADestructiveIdempotent
Grant or restrict a team member's access to financial tools. Requires owner role. Access levels: 'none' = no financial tools; 'read' = view only (balances, transactions, reports); 'write' = full access including add, edit, and delete. Owners cannot set their own access to 'none' or 'read' if they are the last owner — this would lock the company out of financial management.
| Name | Required | Description | Default |
|---|---|---|---|
| level | Yes | The financial access level to assign. | |
| target_user_id | Yes | The user_id of the team member to update (matches FOUNDERS_OS_USER_ID). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, so the bar is lower, yet the description still adds the authorization requirement and a non-obvious guardrail: the last owner cannot be demoted to 'none' or 'read' because it would lock the company out. That is exactly the kind of failure mode an agent needs before invoking 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 tight sentences, front-loaded with the action and the permission gate, then the enum semantics, then the edge case. Nothing is repeated from the title or schema, and no sentence could be dropped without losing information.
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 with rich annotations and no output schema, the description covers purpose, authorization, value semantics, and the single dangerous edge case. There is no output contract to explain and no nested structure to unpack, so nothing material 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%, but the schema only says 'The financial access level to assign' for the enum. The description expands each of the three values into concrete capabilities (view balances/transactions/reports vs add/edit/delete), which is genuine meaning beyond the schema and directly affects the choice of value.
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 ('Grant or restrict') plus the exact resource ('a team member's access to financial tools'), which cleanly separates it from the read-only sibling get_financial_access and from set_member_owner. An agent knows both the action and the target 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?
Gives a real precondition ('Requires owner role') and defines what each access level grants, which implies when to pick 'read' vs 'write'. It stops short of naming alternatives (e.g. get_financial_access to inspect current levels before changing them), so it is clear context without explicit routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_member_ownerSet Member OwnerADestructiveIdempotent
Promote or demote a team member's owner status. Owners can manage financial access, add/remove members, and read the audit log. Promoting automatically grants 'write' financial access. You cannot demote the last remaining owner — add another owner first. Requires owner role.
| Name | Required | Description | Default |
|---|---|---|---|
| is_owner | Yes | true = promote to owner, false = demote from owner. | |
| target_user_id | Yes | The user_id of the member to update. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only flag destructiveHint and idempotentHint; the description adds the substantive behavior: the side effect that promotion auto-grants 'write' financial access, the owner-capability surface, the last-owner guard, and the calling role requirement. This is exactly the context annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, front-loaded with the action and then the consequences and constraints. Nothing is padded or repeated from the name or 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 two-parameter destructive mutation with no output schema, it covers preconditions, side effects, and the hard guard. The one meaningful gap is demotion behavior: it does not say whether an existing 'write' financial access grant is revoked when is_owner is set to false.
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 both parameters are already documented, and the description correctly mirrors the boolean semantics. It goes beyond the schema by attaching a consequence to is_owner=true (automatic 'write' financial access grant), which the schema does not mention.
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 opens with a specific verb pair and resource: 'Promote or demote a team member's owner status.' This is distinguishable from siblings like set_financial_access and add_member without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the precondition ('Requires owner role') and an explicit when-not ('You cannot demote the last remaining owner — add another owner first'), which effectively routes the agent to add_member as the prerequisite action. No alternative tool is named directly, which keeps it just below a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_transaction_customerSet Transaction CustomerAIdempotent
Attribute an existing transaction to a customer, or detach it. Pass a customer_id to attribute the transaction, or null to clear the attribution.
| Name | Required | Description | Default |
|---|---|---|---|
| customer_id | Yes | UUID of the customer to attribute, or null to detach. | |
| transaction_id | Yes | UUID of the transaction to update. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already disclose mutation, idempotency, non-destructiveness, and closed-world behavior. The description adds that this applies to an existing transaction and that null clears attribution, but it does not cover permissions, side effects, or error conditions.
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 are front-loaded with the operation and then explain the parameter mode. The second sentence partly repeats the schema, but the text remains efficient and free of 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?
This is a simple two-parameter mutation with full schema coverage and annotations covering safety and idempotency. The description provides enough operational meaning to invoke it correctly, though it omits prerequisite and error-condition details.
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 UUID parameters are already documented in the schema. The description echoes the customer_id=null detach behavior without adding format, constraints, or further semantics for transaction_id.
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 uses specific verbs ('attribute'/'detach') and clearly identifies the resource as an existing transaction linked to a customer. It is distinguishable from transaction creation/removal siblings, though it does not explicitly name 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?
It explains the two modes, attribute versus detach, through the customer_id value. However, it does not state when to use this tool versus alternatives or mention prerequisites such as the customer needing to exist.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
show_capabilitiesShow CapabilitiesARead-onlyIdempotent
Returns example prompts and workflows organized by domain (CRM, Tasks, Finance, Feeds, Memory, Surfaces). Call this when a user asks 'what can you do?', 'show me what I can do', 'help me get started', or wants to explore what Founders OS offers. Lighter than the full usage guide - focused on natural-language examples rather than technical reference.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and closed-world, so safety is covered. The description adds real behavioral value beyond them by characterizing the payload as example prompts/workflows grouped by domain, and by contrasting depth with the full usage guide. It stops short of describing the actual response format or size, which keeps it off a 5 with no output schema present.
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 with distinct jobs: what it returns, when to call it, and how it differs from the sibling. Nothing is repeated from the annotations or the title, and the routing information is 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 zero-parameter, read-only discovery tool with no output schema, the description covers everything an agent needs: purpose, domain organization of the result, invocation triggers, and the boundary against get_usage_guide.
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 implicitly makes clear there is nothing to supply, so no parameter semantics are needed. Baseline for a 0-param tool is 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 and resource ('Returns example prompts and workflows') plus the organizing dimension ('organized by domain (CRM, Tasks, Finance, Feeds, Memory, Surfaces)'). It also explicitly positions itself against the sibling get_usage_guide, so an agent can pick between them without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete trigger utterances ('what can you do?', 'help me get started') and a general condition ('wants to explore what Founders OS offers'). It also names the alternative and the selection rule: use get_usage_guide when a technical reference is wanted instead of natural-language examples.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
subscribe_feedSubscribe to FeedAIdempotent
Subscribe to an RSS, Atom, or JSON Feed. Fetches once to populate metadata if this is the first subscription to this URL in the company. Tags classify the feed (e.g. ['tech', 'ai']). Set pinned=true to include in morning briefing.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The RSS, Atom, or JSON Feed URL | |
| tags | No | Tags to classify this feed (e.g. ['tech', 'ai']). Default: ['other'] | |
| pinned | No | Pin this feed so it appears in the morning briefing. Default: false |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare it is a non-read-only, idempotent, open-world mutation, and the description adds genuinely new context: that a remote fetch occurs once to populate metadata when the URL is new to the company. That explains the network dependency and the potential latency/side effect of the first call, which annotations alone do not convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the core action, followed by behavior and parameter hints. No filler, though the tag example and pinned note partially duplicate the schema text and could be trimmed or replaced with the missing sibling guidance.
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 three-parameter, single-required mutation with no output schema and full annotation coverage, the description covers the key non-obvious behavior (first-fetch metadata population) and the pinning side effect. The main omission is what happens on re-subscribing to an already-subscribed URL and how it interacts with pin_feed.
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 url, tags and pinned are already fully documented including their defaults. The description restates the tag example and the briefing effect of pinned without adding format constraints or edge-case behavior, so it earns only the baseline for a fully documented 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?
Opens with a specific verb ('Subscribe to') and a precisely scoped resource ('an RSS, Atom, or JSON Feed'), which immediately separates it from unsubscribe_feed, list_feeds, refresh_feeds and get_feed_items. An agent can identify the action without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains what happens on a first subscription and how the pinned flag routes into the morning briefing, which implies usage context. However, it never states when to use this versus siblings such as import_starter_feeds or the separate pin_feed tool, so the agent has to infer that relationship on its own.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
transfer_between_accountsTransfer Between AccountsADestructive
Record a transfer of funds between two capital accounts. Both legs are marked exclude_from_reports=true so they don't skew P&L. If the inflow leg fails after the outflow succeeds, the outflow is automatically reversed to keep account balances consistent. For full atomicity, a future migration will wrap both legs in a single DB transaction.
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | Transfer date in YYYY-MM-DD format. | |
| amount | Yes | Amount to transfer (positive number). | |
| category_id | Yes | Category to assign (typically a 'Transfer' income/expense category). | |
| description | Yes | Description of the transfer. | |
| to_account_id | Yes | Account to transfer to. | |
| from_account_id | Yes | Account to transfer from. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (destructiveHint=true, idempotentHint=false), the description discloses high-value behavior: both legs are forced to exclude_from_reports=true so P&L is unaffected, and a failed inflow leg triggers an automatic reversal of the outflow. It also honestly flags that the two legs are not yet wrapped in a single DB transaction, which tells the agent exactly how partial failure is 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?
Three sentences, front-loaded with the action and then the two most decision-relevant facts (report exclusion, reversal-on-failure). The closing sentence about a future migration is forward-looking rather than actionable, but it is short and does inform the agent about current non-atomicity.
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 6-required-parameter mutation tool with no output schema, the description covers the critical failure-mode behavior and reporting side effects. It omits what the tool returns on success and any permission requirements, but the essential calling context 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 schema already documents every parameter including the date pattern, positive amount constraint, and the 'typically a Transfer category' hint for category_id. The description adds only the implicit exclude_from_reports behavior, which is not a parameter, so it does not meaningfully extend parameter meaning 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 opens with a specific verb and resource ('Record a transfer of funds between two capital accounts'), which is clearly distinct from the sibling add_transaction / list_transactions tools. It does not explicitly name the nearest alternative (add_transaction), so it stops short of full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the phrase 'between two capital accounts' – an agent can infer this is the tool for moving funds rather than recording ordinary income/expense. However, there is no explicit statement of when to prefer this over add_transaction or what prerequisites (both accounts must exist, category should be a Transfer category) are required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unlink_taskUnlink TaskCDestructiveIdempotent
Remove a specific entity link from a task.
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes | Task UUID. | |
| entity_id | Yes | Entity UUID to unlink. | |
| entity_type | Yes | Entity type to unlink. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, so the safety profile is covered. The description adds nothing beyond that: it does not clarify that only the association is removed (the entity is not deleted), does not state behavior when the link does not exist, and gives no error or side-effect context 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?
A single short sentence, front-loaded with the verb and object, with no filler. It is efficient but so terse that it omits information a destructive tool arguably needs, which is an under-specification issue rather than verbosity.
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, non-reversible-looking mutation with no output schema, and the description supplies no reassurance about scope (unlink only, entity preserved), no behavior for missing links, and no differentiation from remove_task. For a destructive tool with three required identifiers, the definition is materially 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%, so task_id, entity_id, and the entity_type enum are fully documented in the schema. The description's phrase 'specific entity link' only loosely implies the entity_type/entity_id pairing and adds no format or constraint 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?
The description uses a specific verb ('Remove') and resource ('entity link from a task'), which is clearly distinguishable from sibling tools like link_task and remove_task. It does not explicitly name the inverse operation, but the action and object are 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 tool versus alternatives such as link_task (the inverse) or list_entity_tasks (to inspect existing links). The description also omits whether the entity itself survives the unlink, which is the key decision point for an agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unpin_feedUnpin FeedAIdempotent
Unpin a feed so it no longer appears in the morning briefing. The feed remains subscribed - you just won't see headlines in session start.
| Name | Required | Description | Default |
|---|---|---|---|
| feed_id | Yes | UUID of the feed to pin/unpin |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true, and destructiveHint=false, so the safety profile is partly covered. The description adds genuinely new behavioral context — the subscription survives the unpin and the effect is scoped to session-start/briefing visibility — which an agent could not infer from the annotations alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, both fully load-bearing: the first states the action and its effect, the second preempts the most likely misconception. No filler or repetition of schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter, non-destructive, idempotent toggle, the description covers the action, the scope of the effect, and the key side-effect guarantee. A note on behavior when the feed is not currently pinned would close the last gap, but the idempotentHint annotation largely covers that.
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 ('UUID of the feed to pin/unpin'), so the schema already carries the semantics. The description adds no syntax, format, or lookup guidance for feed_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 specific verb and resource (unpin a feed) plus the observable effect: it no longer appears in the morning briefing. It also implicitly distinguishes itself from unsubscribe_feed by stating the feed remains subscribed, though it never names the sibling tools (pin_feed, unsubscribe_feed) 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?
Clear context for when to reach for this tool: when you want headlines out of the morning briefing / session start without dropping the subscription. It lacks an explicit named alternative, but the 'remains subscribed' clause effectively rules out unsubscribe_feed as the wrong choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unsubscribe_feedUnsubscribe from FeedADestructiveIdempotent
Unsubscribe from a feed. Only removes your subscription - other team members and the shared catalog entry are not affected. Bookmarks from this feed are preserved.
| Name | Required | Description | Default |
|---|---|---|---|
| feed_id | Yes | UUID of the feed subscription to remove |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and idempotentHint=true, so the description correctly avoids repeating the safety profile. Instead it adds the genuinely useful boundary details the annotations cannot express: other team members and the shared catalog entry are untouched, and existing bookmarks survive. That scoping materially reduces the risk of an agent over-estimating the blast radius.
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 the action and followed immediately by the two scope constraints that matter. No redundancy with the title or annotations and nothing extraneous.
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, no-output-schema tool with rich annotations, the description covers what is destroyed, what survives, and whose data is affected – enough to invoke safely. Only the post-condition (what happens to pinned items or feed items after unsubscribing) is left unstated, a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single feed_id parameter is fully documented as the UUID of the subscription to remove. The description's phrase 'your subscription' reinforces that this is a subscription ID rather than a catalog feed ID, but that nuance is thin and 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 opens with a specific verb+resource ("Unsubscribe from a feed") that is clearly distinct from siblings like subscribe_feed, list_feeds, and remove_bookmark. It does not name those siblings explicitly, so it stops short of the top mark, but the operation is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the word 'unsubscribe' and the clarification that it only affects your own subscription, which helps a user decide against destructive alternatives. There is no explicit 'use this instead of X' routing or statement of prerequisites, leaving the when-to-use guidance implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_contactUpdate ContactDIdempotent
Update a contact's details.
| Name | Required | Description | Default |
|---|---|---|---|
| role | No | ||
| No | |||
| phone | No | ||
| last_name | No | ||
| contact_id | Yes | Contact UUID | |
| first_name | No | ||
| is_primary | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds nothing beyond that: it does not say whether omitted fields are preserved, whether partial updates are allowed, or what happens on an unknown contact_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?
The single sentence is front-loaded and wastes no words, but this is under-specification rather than conciseness. It is too thin to convey the update semantics an agent needs.
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 seven parameters, low schema coverage, and no output schema, so the description carries most of the burden and does not meet it. Only the annotations provide meaningful context; update semantics and field behavior are 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?
Schema description coverage is only 14% (only contact_id is documented), and the description compensates for none of the seven parameters. It does not clarify that first_name, last_name, email, phone, role, and is_primary are individually updatable, nor that contact_id identifies the target.
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 'Update a contact's details' essentially restates the name and title (update_contact / Update Contact) without adding scope. It does not distinguish this tool from siblings such as update_customer, add_contact, or remove_contact, so an agent learns nothing it could not infer from 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 like add_contact, update_customer, or remove_contact, and no prerequisites (e.g., whether the contact must already exist) are stated. 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.
update_customerUpdate CustomerCIdempotent
Update fields on an existing customer record.
| Name | Required | Description | Default |
|---|---|---|---|
| zip | No | ||
| city | No | ||
| tags | No | ||
| notes | No | ||
| state | No | ||
| website | No | ||
| customer_id | Yes | Customer UUID | |
| address_line1 | No | ||
| address_line2 | No | ||
| customer_type | No | ||
| customer_phase | No | Lifecycle phase | |
| organization_name | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the agent knows this is a safe, repeatable local mutation. The description contributes only the prerequisite that the record must already exist; it says nothing about partial-vs-full replacement semantics, required permissions, or what happens when customer_id is unknown.
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 or redundancy. It is efficient, though the brevity here reflects under-specification rather than disciplined tightness.
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 12-parameter mutation with no output schema and near-zero parameter documentation, one sentence is not enough to call this correctly. Annotations cover the safety profile, but an agent still cannot tell whether omitted fields are preserved or cleared, or how tags and customer_phase behave.
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 12 parameters and only 17% schema description coverage (customer_id and customer_phase documented), the description needs to carry the weight and adds nothing — 'fields' is a generic gesture with no mapping to zip, city, tags, notes, address lines, website, organization_name or customer_type. The two enums and the tags array in particular are left completely unexplained.
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 (update) and resource (an existing customer record), so an agent knows exactly what category of operation this is. It does not differentiate itself from neighbouring mutators such as update_contact or update_task, leaving the agent to infer the distinction from 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 explicit when-to-use, when-not-to-use, or alternative named. The phrase 'existing customer record' weakly implies add_customer is for creation and this is for modification, but the agent is left to infer that from the name and adjacent siblings rather than from stated guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_playbookUpdate PlaybookAIdempotent
Update a playbook's name, slug, or description. Only provided fields are changed. Steps are not affected — use update_playbook_step for those.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | New human-readable name. | |
| slug | No | New slug. Must be unique per company. | |
| description | No | New description. | |
| playbook_id | Yes | Playbook UUID or slug. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true and destructiveHint=false, so the safety profile is covered. The description adds genuinely new behavior: this is a partial/PATCH-style update where unmentioned fields are preserved, and the blast radius is limited to playbook metadata, not steps. It does not say whether permissions are required or what happens to a slug collision, but the slug uniqueness note lives 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?
Three short sentences, each earning its place: scope of fields, partial-update semantics, and the sibling redirect. The most important disambiguation is front-loaded and there is 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?
For a simple four-parameter metadata mutation with full schema coverage and annotations covering safety and idempotency, the description covers what to change and what not to touch. Minor gaps remain around required permissions and the response shape, though no output schema exists to lean on.
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 playbook_id (UUID or slug) and the slug uniqueness constraint is already documented in the schema. The description's field list largely restates schema property names; its only added semantic is the partial-update rule. Baseline 3 applies when the schema carries the parameter 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) plus resource (playbook) and enumerates the exact mutable fields (name, slug, description). It also explicitly distinguishes itself from the sibling update_playbook_step, so an agent can route without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes step edits to update_playbook_step, which is the most likely confusion given the sibling set. It lacks any guidance on prerequisites (e.g., ownership or permissions needed to modify a playbook) or on when an update should be avoided entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_playbook_stepUpdate Playbook StepAIdempotent
Update any fields on a playbook step. Only provided fields are changed. Use to refine a step's title, description, due_offset, assigned_to, or action params.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | Updated title. Supports {{placeholders}}. | |
| action | No | ||
| params | No | Updated connector params. | |
| step_id | Yes | Playbook step UUID. | |
| assignee | No | Deprecated: use `assigned_to`. | |
| priority | No | ||
| connector | No | ||
| due_offset | No | Updated due offset in days. Pass -1 to clear. | |
| assigned_to | No | Updated assignee for native_task steps. | |
| description | No | Updated description. | |
| order_index | No | New position in step sequence. | |
| fallback_task | No | Updated fallback task title. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare non-read-only, idempotent, non-destructive behavior, so the bar is lower. The description adds meaningful semantics beyond them: 'Only provided fields are changed' tells the agent this is a partial/PATCH-style update, which prevents accidental field clearing. It does not cover permissions or side effects on dependent tasks.
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 the operation stated first and the partial-update guarantee second. The final sentence partially repeats the first by listing fields, but it is tight enough not to be wasteful.
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 12 parameters, a nested params object, and no output schema, the definition is thinner than ideal. It does not explain how action, connector, and params interact, what priority or order_index do, or that assignee is deprecated in favor of assigned_to, leaving the agent to rely entirely on the schema for those decisions.
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 75%, so the schema already documents step_id, title, description, due_offset, assigned_to, params, order_index, and fallback_task. The description only enumerates a subset of those fields and adds no new meaning about the undocumented ones (action, connector, priority) or the action/params/connector relationship. 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 and resource ('Update any fields on a playbook step'), which distinguishes it from siblings like update_playbook, add_playbook_step, and remove_playbook_step by resource and operation. It stops short of explicitly naming those siblings or the boundary conditions that separate them.
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?
'Use to refine a step's title, description, due_offset, assigned_to, or action params' gives an implied usage context, but it is a restatement of editable fields rather than real selection guidance. There is no when-not-to-use, no mention of add_playbook_step for creation or update_playbook for parent-level edits.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_projectUpdate ProjectAIdempotent
Update a project's name, description, or status. Name changes trigger a tag rename with propagation conflict if the tag is in use. Status change to 'completed' or 'archived' triggers a conflict if tasks with the project's tag are still open.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | New display name. | |
| status | No | New status. | |
| cascade | No | On rename: true also renames the tag on all tasks/customers; false updates only the registry. | |
| project_id | Yes | Project UUID. | |
| resolution | No | Resolution for the open-tasks guard: 'confirm' archives/completes anyway, 'cancel' aborts. | |
| description | No | New description. | |
| confirm_archive | No | Deprecated: use `resolution: "confirm"`. Proceed with completing/archiving despite open tasks. | |
| propagate_rename | No | Deprecated: use `cascade`. Propagate or skip the tag rename on tasks/customers. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this as a non-readonly, idempotent, non-destructive mutation, so the description's real value is the conflict disclosure: tag rename propagation conflicts and open-tasks guards on completed/archived status. That is meaningful behavior the annotations do not convey. It falls short of a 5 because it does not say what happens on conflict (abort vs partial update) or that a resolution flag is required to proceed, and it leaves the deprecated parameters unexplained.
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 the mutation scope and then the two conditional hazards. Every sentence carries distinct information and no wording 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 an 8-parameter mutation with full schema coverage and no output schema, the description covers purpose and the non-obvious failure modes, which is the critical missing piece agents need. It does not explain the relationship between the deprecated flags and their replacements or what a successful update returns, but the schema covers the former.
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 eight parameters, including enums and deprecation notes, are already documented in the schema. The description adds only implicit context for resolution and cascade via the conflict discussion; it never names those parameters or explains the cascade/rename interaction. With the schema carrying the load, 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 specific verb (update) and a concrete resource (a project) plus the mutable fields: name, description, status. It is unambiguous against sibling tools like update_task or update_customer because the resource is named. It stops short of explicitly differentiating itself from near-neighbors such as rename_tag or create_project, which would earn a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is implied through the conflict conditions: renaming has propagation implications, and completing/archiving is blocked while tagged tasks are open. There is no explicit when-to-use versus when-not, and no pointer to alternatives such as rename_tag for pure tag renames. The agent can infer the guardrails but must read the schema to know how to resolve conflicts.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_taskUpdate TaskAIdempotent
Update any fields on a task. Only provided fields are changed. Setting status to 'done' automatically sets completed_at. If the response contains a conflict field, the update was NOT applied. Present all options to the user using an interactive chooser (AskUserQuestion) if available, then retry with the selected date.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | ||
| scope | No | ||
| title | No | ||
| status | No | New status. | |
| task_id | Yes | Task UUID. | |
| due_date | No | YYYY-MM-DD. Pass empty string to clear. | |
| priority | No | ||
| resolution | No | Conflict resolution when a personal task would be assigned to another person: 'make_org' saves it as an org task, 'cancel' aborts. | |
| assigned_to | No | User ID or '@claude' / '@gpt'. Pass empty string to unassign. | |
| description | No | ||
| due_date_day | No | Expected day of the week for due_date. If provided, the server validates it matches. Catches errors when converting 'due Thursday' to a date. Mismatch returns the correct day and nearby alternatives. | |
| blocked_reason | No | ||
| blocked_by_task_id | No | UUID of a blocking task. Pass empty string to clear the dependency. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (idempotent, non-destructive), the description discloses meaningful behavior: only supplied fields mutate, status 'done' auto-sets completed_at, and a `conflict` field in the response means the update was not applied. That conflict/failed-write signal is exactly the kind of context annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The first two sentences are well front-loaded and tight, and the conflict warning is valuable. The final sentence about presenting "all options" via AskUserQuestion and retrying "with the selected date" is vague and out of place, referencing choices and a date that were never introduced.
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 13-parameter mutation tool with no output schema, the description covers the partial-update model and the conflict outcome reasonably well. It still leaves permission/scope requirements, the full conflict response shape, and half the parameters undocumented, so an agent could call it correctly but not confidently interpret every result.
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 54%, and several parameters (tags, title, priority, description, blocked_reason, scope) have no schema descriptions at all. The description adds meaning only for status ('done' side effect) and obliquely for the conflict/resolution flow, leaving the remaining undocumented parameters uncovered.
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 any fields on a task" gives a specific verb and resource, and "Only provided fields are changed" communicates partial-update semantics precisely. It does not, however, distinguish itself from close siblings such as complete_task, assign_task, or update_project, which an agent must infer.
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 through conditional notes (what happens on a conflict, what to do when due_date_day mismatches), but it never states when to use update_task versus complete_task or assign_task, nor any prerequisites such as permissions or scope.
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.
4 tool updates
v1.9.0- Changed
assign_task1 field changed- added
Input schema / properties / resolutionAdded value: +{ + "description": "Conflict resolution when a personal task would be assigned to another person: 'make_org' saves it as an org task, 'cancel' aborts.", + "enum": [ + "make_org", + "cancel" + ], + "type": "string" +}
- Changed
complete_task1 field changed- changed
Input schema / properties / store_as_memory / descriptionPrevious value: -"If true and completion_note is provided, stores the completion as an org-scoped memory."New value: +"If true and completion_note is provided, stores the completion as a memory: org-scoped for an org task, personal to the task's creator for a personal task."
- Changed
create_task2 fields changed- added
Input schema / properties / resolutionAdded value: +{ + "description": "Conflict resolution when a personal task would be assigned to another person: 'make_org' saves it as an org task, 'cancel' aborts.", + "enum": [ + "make_org", + "cancel" + ], + "type": "string" +} - changed
Input schema / properties / scope / descriptionPrevious value: -"'org' (default) for team-visible; 'personal' for private."New value: +"'org' (default) for team-visible; 'personal' for private. A personal task can be assigned only to you, an AI agent, or nobody."
- Changed
update_task1 field changed- added
Input schema / properties / resolutionAdded value: +{ + "description": "Conflict resolution when a personal task would be assigned to another person: 'make_org' saves it as an org task, 'cancel' aborts.", + "enum": [ + "make_org", + "cancel" + ], + "type": "string" +}
3 tool updates
v1.6.0- Added
get_last_checkpoint - Changed
memory_store1 field changed- added
Input schema / properties / handoff_docAdded value: +{ + "description": "Optional path to a session handoff doc, stored in metadata.handoff_doc (e.g. 'handoffs/<project>-session-handoff-YYYY-MM-DD-NN.md'). Pass it with a checkpoint so get_last_checkpoint returns the pointer without parsing it out of the body.", + "type": "string" +}
- Changed
memory_summarize_and_store1 field changed- added
Input schema / properties / handoff_docAdded value: +{ + "description": "Path to the session handoff doc, stored in metadata.handoff_doc. When storing a checkpoint, pass the final reconciled handoff path (e.g. 'handoffs/<project>-session-handoff-YYYY-MM-DD-NN.md') so get_last_checkpoint returns it without parsing the body.", + "type": "string" +}
101 tool updates
v1.4.0- First observed
add_account - First observed
add_category - First observed
add_contact - First observed
add_customer - First observed
add_member - First observed
add_playbook_step - First observed
add_task_note - First observed
add_transaction - First observed
assign_task - First observed
bookmark_item - First observed
checkpoint - First observed
complete_task - First observed
create_playbook - First observed
create_project - First observed
create_tag - First observed
create_task - First observed
get_audit_log - First observed
get_customer - First observed
get_dashboard - First observed
get_entity_card - First observed
get_feed_briefing - First observed
get_feed_items - First observed
get_financial_access - First observed
get_financial_summary - First observed
get_pl_report - First observed
get_playbook - First observed
get_playbook_run - First observed
get_project - First observed
get_project_history - First observed
get_session_start - First observed
get_stuck_list - First observed
get_task - First observed
get_task_summary - First observed
get_usage_guide - First observed
get_version - First observed
get_weekly_retro - First observed
import_starter_feeds - First observed
link_task - First observed
list_accounts - First observed
list_bookmarks - First observed
list_categories - First observed
list_customers - First observed
list_deleted - First observed
list_demos - First observed
list_entity_tasks - First observed
list_feeds - First observed
list_interactions - First observed
list_members - First observed
list_playbook_runs - First observed
list_playbooks - First observed
list_projects - First observed
list_tags - First observed
list_tasks - First observed
list_transactions - First observed
log_interaction - First observed
memory_forget - First observed
memory_recall - First observed
memory_store - First observed
memory_summarize_and_store - First observed
memory_update - First observed
pin_feed - First observed
ping - First observed
preview_tags - First observed
purge_item - First observed
purge_items - First observed
read_feed_item - First observed
refresh_feeds - First observed
remove_account - First observed
remove_bookmark - First observed
remove_category - First observed
remove_contact - First observed
remove_customer - First observed
remove_interaction - First observed
remove_member - First observed
remove_playbook - First observed
remove_playbook_step - First observed
remove_project - First observed
remove_tag - First observed
remove_task - First observed
remove_transaction - First observed
rename_tag - First observed
restore_item - First observed
restore_items - First observed
run_playbook - First observed
search_contacts - First observed
search_customers - First observed
set_financial_access - First observed
set_member_owner - First observed
set_transaction_customer - First observed
show_capabilities - First observed
subscribe_feed - First observed
transfer_between_accounts - First observed
unlink_task - First observed
unpin_feed - First observed
unsubscribe_feed - First observed
update_contact - First observed
update_customer - First observed
update_playbook - First observed
update_playbook_step - First observed
update_project - First observed
update_task
TDQS
Scored across 102 tools
Most tools target distinct resources/actions, and detailed descriptions help separate similar-sounding functions. However, the 102-tool set includes many overlapping orientation/summary tools and paired lifecycle tools (remove/purge/restore), making selection harder than it should be.
The dominant pattern is snake_case verb_noun (e.g. add_customer, list_tasks, get_pl_report), which is consistently applied across most domains. Minor deviations exist, such as the memory_* noun_verb family and standalone tools like ping and checkpoint, but they remain readable and mostly predictable.
At 102 tools, the surface is far beyond a well-scoped set and exceeds the 50+ threshold for extreme tool-count mismatch. Even as a multi-domain OS, this volume creates substantial discovery and selection overhead for an agent.
Coverage is broad across CRM, tasks, tags, finance, feeds, memory, playbooks, projects, members, audit, and trash, with full lifecycle handling for most entities. Minor gaps remain, such as no direct update operations for transactions/accounts/categories, but agents can generally work around them.
Maintenance
Related MCP Connectors
Self-hosted AI workspace: semantic RAG document search, long-term memory, and AI chat via MCP.
API-first CRM for LLMs - contacts, companies, deals and activities over a native MCP server.
One shared context your team's AI tools read & write over MCP. No re-explaining. Free.
MCP server unifying ERPs, CRMs, APIs and knowledge base for Claude, ChatGPT and Gemini.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceSelf-hosted MCP server giving AI agents persistent memory for personalization and context across conversations.152 PyPI281Apache 2.0
- AlicenseNot gradedqualityCmaintenancePersistent memory with semantic search for Claude and MCP-compatible clients, storing context that survives conversations and can be retrieved intelligently.1MIT
- AlicenseNot gradedqualityCmaintenanceA self-hosted server providing shared memory, RAG document search, project maps, and role-based prompts for all AI agents via MCP and REST, enabling persistent context across devices and tools.3MIT
- AlicenseNot gradedqualityAmaintenanceA self-hosted MCP server that provides any LLM with a graph-backed memory layer of your life—tasks, email, finance, contacts, calendar—plus autonomous agent offices that act on your behalf.3Apache 2.0