Skip to main content
Glama

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_history

CRM (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 project

  • personal - visible only to the user whose FOUNDERS_OS_USER_ID matches

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

openai (default)

text-embedding-3-small

1536

OPENAI_API_KEY

bedrock

amazon.nova-2-multimodal-embeddings-v1:0

1024

AWS credential chain

ollama

nomic-embed-text

768

OLLAMA_BASE_URL

Set EMBEDDING_DIM to match the model before running 002_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

get_session_start

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.

get_entity_card

Complete picture of any entity (customer, contact, transaction, project) with open tasks, recent interactions, and linked records in one call.

get_weekly_retro

Completed-task retrospective grouped by tag with completion notes. Can format as a LinkedIn-ready draft.

get_stuck_list

Surfaces stuck, stale, and overdue tasks that need triage, with days-stale counts and suggested actions.

checkpoint

End-of-session bookend to get_session_start. Returns the ordered wrap-up procedure (summarize, capture repo changes as commit links, store the record, propose follow-up tasks, write the handoff doc), the exact memory call to make, and the previous checkpoint so open items carry forward. Rides memory - no new entity, no migration.

get_project_history

Chronological, newest-first timeline of a project's checkpoints; the "what happened, in order" companion to semantic memory recall. Pass kind: 'all' for every memory, not just checkpoints.


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

ping

Connectivity test. Embeds an update notice if a newer package version is available.

get_version

Running package version, rendering contract version, and the latest npm-published version.

get_usage_guide

On-demand reference covering modules, conventions, and common workflows.

show_capabilities

Friendly overview with example prompts for each module.

list_demos

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:

  1. Server instructions field at MCP registration - loaded at connect. All spec-compliant MCP clients.

  2. get_session_start.rendering_contract - full ladder text on session orientation. All clients.

  3. Per-response rendering_contract reminder - 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:11434

Development

# Clone
git clone https://github.com/ourthinktank/founders-os.git
cd founders-os

# Install
npm install

# Build
npm run build

# Watch
npm run dev

Project 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.md

Local 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 tools
add_accountAdd AccountA

Create a capital account (e.g. bank account, credit card, wallet).

NameRequiredDescriptionDefault
nameYesAccount name (must be unique within the company).
tagsNoTags for categorization and cleanup, e.g. ['demo-financial'].
initial_balanceNoStarting balance. Must be 0 or greater. Default 0.

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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

States a specific verb and resource ("Create a 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.

Usage Guidelines3/5

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.

NameRequiredDescriptionDefault
nameYesCategory name (must be unique within the company).
tagsNoTags for categorization and cleanup, e.g. ['demo-financial'].
typeYesCategory type.

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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

For a simple creation tool with 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.

Parameters3/5

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

Schema description coverage is 100%, so all three parameters are already documented 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.

Purpose4/5

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.

Usage Guidelines2/5

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.

NameRequiredDescriptionDefault
roleNoRole at the organization, e.g. 'CEO', 'CTO', 'Head of Sales'
emailNoEmail address
phoneNoPhone number
last_nameYesContact's last name
first_nameYesContact's first name
is_primaryNoWhether this is the primary contact for the organization
customer_idYesCustomer UUID this contact belongs to

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare this is a non-read-only, non-destructive, 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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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

The description states a specific verb and resource ("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.

Usage Guidelines2/5

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

There is no guidance on when to use this 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.

NameRequiredDescriptionDefault
zipNoZIP code
cityNoCity
tagsNoTags for categorization, e.g. ['saas', 'enterprise']
notesNoGeneral notes about this customer
stateNo2-letter state code
websiteNoWebsite URL
address_line1NoStreet address
address_line2NoSuite, building, etc.
customer_typeNoType of customerother
customer_phaseNoLifecycle phase: prospect, lead, opportunity, customer, renewal, churned, or inactiveprospect
organization_nameYesName of the company, organization, or individual
skip_duplicate_checkNoSet true after conflict resolution to skip duplicate detection and create the customer.

TDQS

A3.7/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all 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.

Purpose4/5

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.

Usage Guidelines3/5

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.

NameRequiredDescriptionDefault
user_idYesThe user_id for the new member — must match the FOUNDERS_OS_USER_ID they will set in their MCP config.
display_nameNoHuman-readable name (improves audit log legibility).
financial_accessNoFinancial access level. Defaults to 'none'.

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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

Schema description coverage is 100%, so all three parameters are already documented, including the 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.

Purpose5/5

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

States a specific verb and resource ("Add a 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.

Usage Guidelines4/5

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.

NameRequiredDescriptionDefault
typeYes'native_task' creates a task in Founders OS. 'external_action' emits instructions for the AI to execute.
titleYesStep title. Supports {{placeholders}} like {{customer.name}}.
actionNoFor external_action: the action to perform, e.g. 'create_repo', 'create_channel'.
paramsNoFor external_action: connector-specific parameters. Supports {{placeholders}}. Example: { template: 'ourthinktank/web-template', name: '{{customer.slug}}-{{playbook.start_year}}' }
assigneeNoDeprecated: use `assigned_to`.
priorityNoFor native_task: priority. Defaults to 'medium'.
connectorNoFor external_action: the MCP connector to use, e.g. 'github', 'slack', 'calendar'.
due_offsetNoFor native_task: due date offset in days from the playbook start_date. Omit for no due date.
assigned_toNoFor native_task: who to assign to. Use FOUNDERS_OS_USER_ID, '@claude', or '@gpt'.
descriptionNoAdditional context. Supports {{placeholders}}.
order_indexYesPosition in the step sequence. Lower numbers run first.
playbook_idYesPlaybook UUID.
fallback_taskNoFor external_action: task title to create if the connector is unavailable at run time. Always provide this so the playbook degrades gracefully.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare this as a non-readonly, non-idempotent 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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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

Schema coverage is 100%, so the schema already documents 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.

Purpose5/5

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

The description states a specific verb and resource ('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.

Usage Guidelines4/5

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.

NameRequiredDescriptionDefault
noteYesThe note content.
task_idYesTask UUID.

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, 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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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

States a specific verb and resource (add a 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.

Usage Guidelines4/5

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.

NameRequiredDescriptionDefault
dateYesTransaction date in YYYY-MM-DD format.
tagsNoTags for categorization and cleanup, e.g. ['demo-financial'].
amountYesTransaction amount (positive number — sign is derived from category type).
account_idYesUUID of the capital account to debit/credit.
category_idYesUUID of the category (income or expense).
customer_idNoUUID of the customer this transaction is attributed to (e.g. a client payment). Optional.
descriptionYesDescription of the transaction.
exclude_from_reportsNoSet true to exclude from P&L reports (e.g. owner draws). Default false.

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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

For an 8-parameter mutation tool with 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.

Parameters3/5

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.

Purpose4/5

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

The description opens with a specific verb and resource: '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.

Usage Guidelines3/5

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 TaskA
Idempotent

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.

NameRequiredDescriptionDefault
task_idYesTask UUID.
resolutionNoConflict resolution when a personal task would be assigned to another person: 'make_org' saves it as an org task, 'cancel' aborts.
assigned_toYesUser ID, '@claude', '@gpt', or empty string to unassign. Replaces the single accountable owner; one assignee per task by design.

TDQS

A4.6/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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

With no output schema, the description compensates by 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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

NameRequiredDescriptionDefault
feed_urlYesURL of the feed containing the item
item_indexYes1-based item number from the get_feed_items list

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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

Schema coverage is 100% and both parameters are 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.

Purpose4/5

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.

Usage Guidelines3/5

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.

NameRequiredDescriptionDefault
scopeNoScope to store the checkpoint under. Defaults to 'org' (team-visible).
authorNoWhose 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.
projectNoProject tag for this session (e.g. 'founders-os'). Omit only if unknown - then ask the user.
timezoneNoIANA timezone (e.g. 'America/New_York') for the handoff-doc date.

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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

There is no output schema, and the description compensates by enumerating the returned 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.

Parameters3/5

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

Schema coverage is 100% and the schema already 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.

Purpose5/5

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.

Usage Guidelines5/5

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 TaskA
Idempotent

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.

NameRequiredDescriptionDefault
forceNoDeprecated: use `resolution: "confirm"`. Set true to skip the blocker check.
task_idYesTask UUID to complete.
resolutionNoConflict resolution: 'confirm' completes despite the blocker, 'cancel' aborts.
memory_projectNoProject tag for the memory entry. Only used when store_as_memory is true.
completion_noteNoSummary of what was done. AI agents should always provide this.
store_as_memoryNoIf 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

A3.9/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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

With no output schema, the description usefully 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.

Parameters3/5

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

Schema coverage is 100%, so the baseline is 3 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.

Purpose5/5

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.

Usage Guidelines3/5

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.

NameRequiredDescriptionDefault
nameYesHuman-readable name, e.g. 'New Web Project'.
slugYesURL-safe unique identifier, e.g. 'new-web-project'. Must be unique per company.
descriptionNoWhat this playbook is for and when to use it.

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, 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.

Conciseness5/5

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.

Completeness4/5

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

For a simple three-parameter 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.

Parameters3/5

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.

Purpose4/5

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

States a specific verb and resource ("Create a new 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.

Usage Guidelines3/5

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.

NameRequiredDescriptionDefault
nameYesDisplay name for the project (e.g. 'Founders OS', 'Series A').
statusNoProject status. Defaults to 'active'.
descriptionNoWhat this project is about.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare the mutation/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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description 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.

Purpose4/5

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.

Usage Guidelines5/5

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.

NameRequiredDescriptionDefault
nameYesDisplay name for the tag (e.g. 'Q2 2026', 'Fundraising').
colorNoHex color for UI rendering (e.g. '#4A90D9'). Optional.
scopeNoTag scope. Defaults to 'org'.
descriptionNoWhat this tag means or when to use it.

TDQS

A3.9/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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

Schema description coverage is 100%, so all four parameters (name, 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.

Purpose5/5

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

The description opens with a specific verb and resource ('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.

Usage Guidelines3/5

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.

NameRequiredDescriptionDefault
tagsNoTags for filtering and grouping (e.g. ['Q2', 'fundraising']).
linksNoEntities to link this task to at creation time.
scopeNo'org' (default) for team-visible; 'personal' for private. A personal task can be assigned only to you, an AI agent, or nobody.
titleYesWhat needs to be done.
statusNoTask status. Defaults to 'todo'.
due_dateNoDue date (YYYY-MM-DD).
priorityNoPriority level. Defaults to 'medium'.
resolutionNoConflict resolution when a personal task would be assigned to another person: 'make_org' saves it as an org task, 'cancel' aborts.
assigned_toNoWho 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).
descriptionNoAdditional details or context.
due_date_dayNoExpected 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_reasonNoRequired context when status is 'blocked'.
blocked_by_task_idNoUUID of a task that blocks this one. Sets status to 'blocked' automatically if not already set.

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness3/5

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.

Completeness4/5

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

For a 13-parameter mutation tool with 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.

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3; the description still adds meaning 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.

Purpose5/5

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

Opens with a specific verb+resource ('Create a new 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.

Usage Guidelines4/5

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 LogA
Read-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.

NameRequiredDescriptionDefault
limitNoMax results (default 50).
scopeNo'all' returns all company entries (owner-only). 'mine' returns only your own actions (any member). Defaults to 'all' for owners, 'mine' for non-owners.
actionNoFilter by exact action name (e.g. 'add_transaction', 'run_playbook').
domainNoFilter 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_dateNoReturn entries on or before this date (YYYY-MM-DD).
actor_idNoFilter by the user_id who performed the action.
entity_idNoFilter by the affected record UUID (e.g. a specific account_id or customer_id).
from_dateNoReturn entries on or after this date (YYYY-MM-DD).
entity_typeNoFilter by entity type (e.g. 'financial_transaction', 'customer').

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, 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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 CustomerA
Read-onlyIdempotent

Get a single customer with their contacts, recent interactions, and open tasks.

NameRequiredDescriptionDefault
customer_idYesCustomer UUID

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=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.

Conciseness5/5

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.

Completeness4/5

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

For a single-parameter read tool with full annotation coverage and 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.

Parameters3/5

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

Schema coverage is 100% and the single parameter is 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.

Purpose4/5

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

The description uses a specific verb and resource ('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.

Usage Guidelines3/5

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 DashboardA
Read-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.

NameRequiredDescriptionDefault
daysNoWindow for upcoming tasks in days (7, 14, or 30). Defaults to 7.
timezoneNoIANA timezone string (e.g. 'America/New_York'). Used for timezone-aware date calculations.

TDQS

A4/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, 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.

Conciseness5/5

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.

Completeness4/5

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

With no output schema, the description does 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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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 CardA
Read-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?'

NameRequiredDescriptionDefault
entity_idYesUUID of the entity.
entity_typeYesType of entity: customer | contact | transaction

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, 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.

Conciseness5/5

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.

Completeness4/5

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

With no output schema, the description correctly 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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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 BriefingA
Read-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.

NameRequiredDescriptionDefault
max_headlinesNoMax headlines to return (default: 8)

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, 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.

Conciseness5/5

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.

Completeness4/5

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

With no output schema, the description does 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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 ItemsA
Read-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.

NameRequiredDescriptionDefault
tagNoFilter feeds by tag
limitNoMax items to return (default: 25)
feed_idNoUUID of a specific feed. Omit to fetch across all feeds.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so safety is covered; the description adds 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.

Conciseness4/5

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.

Completeness5/5

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

With no output schema, the description correctly 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.

Parameters3/5

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

Schema coverage is 100%, so all three parameters 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.

Purpose5/5

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.

Usage Guidelines4/5

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 AccessA
Read-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.

NameRequiredDescriptionDefault
target_user_idNoThe user_id to check. Omit to check your own access level.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, 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.

Conciseness4/5

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.

Completeness4/5

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

For a one-parameter, read-only 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.

Parameters3/5

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

Schema description coverage is 100% and the single parameter already 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.

Purpose4/5

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.

Usage Guidelines4/5

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 SummaryA
Read-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.

NameRequiredDescriptionDefault
timezoneNoIANA 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

A3.6/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, so the safety profile is covered. The description adds genuinely 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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

There is no when-to-use guidance, no 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 CheckpointA
Read-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.

NameRequiredDescriptionDefault
limitNoMax ranked candidates to return (1-10). Defaults to 5.
authorNoWhose 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'.
intentNo'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.
projectNoProject 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

A4.4/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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

The description begins with a specific verb and resource: '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.

Usage Guidelines5/5

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 PlaybookA
Read-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.

NameRequiredDescriptionDefault
playbook_idYesPlaybook UUID or slug.

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, 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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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

Only one parameter and schema description coverage is 100%, 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.

Purpose4/5

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.

Usage Guidelines4/5

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 RunB
Read-onlyIdempotent

Fetch the execution log and status of a specific playbook run.

NameRequiredDescriptionDefault
run_idYesPlaybook run UUID.

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=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.

Conciseness4/5

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.

Completeness3/5

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

With no output schema, the description must 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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 ReportA
Read-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.

NameRequiredDescriptionDefault
to_dateYesEnd date (YYYY-MM-DD, inclusive).
from_dateYesStart date (YYYY-MM-DD, inclusive).
customer_idNoOptional. Restrict the report to transactions attributed to this customer.
group_by_customerNoOptional. When true, include a `by_customer` rollup with per-customer income, expenses, and net. Transactions without a customer attribution bucket as 'Unattributed'.

TDQS

A4/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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

There is no output schema, 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.

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3, 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.

Purpose4/5

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.

Usage Guidelines4/5

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 ProjectA
Read-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.

NameRequiredDescriptionDefault
project_idYesProject UUID.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, 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.

Conciseness5/5

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.

Completeness4/5

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

With no output schema, the description carries 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.

Parameters3/5

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

Schema coverage is 100% with a single required 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.

Purpose4/5

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

States a specific verb and resource ("Get a 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.

Usage Guidelines3/5

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 HistoryA
Read-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.

NameRequiredDescriptionDefault
kindNoFilter by memory kind stored in metadata.kind. Defaults to 'checkpoint'. Pass 'all' to return every memory for the project regardless of kind.
limitNoMax entries to return (1-50). Defaults to 20.
scopeNoWhich memories to include: 'org', 'personal', or 'both' (default).
authorNoWhose 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.
projectYesProject tag to load history for (e.g. 'founders-os', 'marching-maestro').
to_dateNoISO 8601 timestamp. Only entries created on or before this date.
from_dateNoISO 8601 timestamp. Only entries created on or after this date.

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 StartA
Read-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.

NameRequiredDescriptionDefault
timezoneNoIANA 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_capabilitiesNoDeclare 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_versionNoThe 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

A4/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness5/5

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

There is no output schema, and the description compensates by naming 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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 ListA
Read-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.

NameRequiredDescriptionDefault
scopeNoFilter by scope. Omit for combined view.
timezoneNoIANA timezone (e.g. 'America/New_York'). Used for accurate 'today' calculation.
max_age_daysNoDays of inactivity that qualify as 'stale' for in_progress tasks. Defaults to 7.

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so the 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.

Conciseness5/5

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.

Completeness4/5

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

With no output schema, the description carries 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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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 TaskA
Read-onlyIdempotent

Fetch a single task by ID, including all linked entities and notes.

NameRequiredDescriptionDefault
task_idYesTask UUID.

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so 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.

Conciseness5/5

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.

Completeness4/5

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

For a one-parameter read tool with 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.

Parameters3/5

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

There is a single parameter with 100% schema 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.

Purpose4/5

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.

Usage Guidelines3/5

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 SummaryA
Read-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.

NameRequiredDescriptionDefault
daysNoUpcoming window in days (7, 14, or 30). Defaults to 7.
scopeNoLimit summary to one scope. Omit for combined view.
timezoneNoIANA 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

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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

With no output schema, the description 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.

Parameters3/5

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

Schema description coverage is 100%, and the schema already 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.

Purpose4/5

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.

Usage Guidelines4/5

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 GuideA
Read-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.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare 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.

Conciseness5/5

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.

Completeness4/5

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

For a zero-parameter tool with no output schema 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.

Parameters4/5

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

The tool takes zero parameters, so there is 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.

Purpose4/5

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.

Usage Guidelines4/5

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 VersionA
Read-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.

NameRequiredDescriptionDefault
check_latestNoIf true, also query the registry for the latest version (default: true)

TDQS

A3.5/5.0
Behavior1/5

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.

Conciseness3/5

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.

Completeness5/5

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

With no output schema, the description carries the 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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 RetroA
Read-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.

NameRequiredDescriptionDefault
scopeNoFilter by scope. Omit for combined view.
formatNo'structured' (default) returns grouped data. 'linkedin' returns a ready-to-post draft.
timezoneNoIANA 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_offsetNo0 = current week, 1 = last week, 2 = two weeks ago, etc. Defaults to 0.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), 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.

Conciseness4/5

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.

Completeness4/5

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

With no output schema the description carries 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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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 FeedsA
Idempotent

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.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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

The tool has zero parameters, so the schema 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.

Purpose4/5

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.

Usage Guidelines3/5

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

No explicit when-to-use or when-not-to-use guidance 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.

list_accountsList AccountsB
Read-onlyIdempotent

List all capital accounts with their current balances.

NameRequiredDescriptionDefault
tagNoConvenience filter for a single tag. Use `tags` for multiple.
tagsNoFilter to items carrying these tags. Combined per `tag_match` (default 'all': the item must carry every listed tag).
tag_matchNoHow to combine `tags`: 'all' (item has every tag, default) or 'any' (item has at least one of them).
include_archivedNoInclude archived accounts. Default false.

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, 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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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

States a specific verb and resource ('List all 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.

Usage Guidelines2/5

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

There is no guidance on when to 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 BookmarksA
Read-onlyIdempotent

List saved feed item bookmarks, newest first. Returns title, summary, source feed, and link for each bookmark.

NameRequiredDescriptionDefault
limitNoMax bookmarks to return (default: 25)
offsetNoPagination offset

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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

States a specific verb ('List') and resource ('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.

Usage Guidelines3/5

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 CategoriesB
Read-onlyIdempotent

List all financial categories, optionally filtered by type.

NameRequiredDescriptionDefault
tagNoConvenience filter for a single tag. Use `tags` for multiple.
tagsNoFilter to items carrying these tags. Combined per `tag_match` (default 'all': the item must carry every listed tag).
typeNoFilter by category type. Omit to return all.
tag_matchNoHow to combine `tags`: 'all' (item has every tag, default) or 'any' (item has at least one of them).
include_archivedNoInclude archived categories. Default false.

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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

Schema description coverage is 100%, so all five parameters (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.

Purpose4/5

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.

Usage Guidelines2/5

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 CustomersB
Read-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.

NameRequiredDescriptionDefault
tagNoConvenience filter for a single tag. Use `tags` for multiple.
tagsNoFilter to items carrying these tags. Combined per `tag_match` (default 'all': the item must carry every listed tag).
limitNoMax results
stateNoFilter by 2-letter state code
offsetNoOffset for pagination
tag_matchNoHow to combine `tags`: 'all' (item has every tag, default) or 'any' (item has at least one of them).
customer_typeNoFilter by customer type
customer_phaseNoFilter by lifecycle phase
has_open_follow_upsNoIf true, only return customers with open tasks

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, 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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose4/5

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

States a specific verb and resource ('List 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.

Usage Guidelines2/5

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

There is no when-to-use 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 ItemsA
Read-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.

NameRequiredDescriptionDefault
daysNoLook-back window in days. Defaults to 7.
limitNoMax items to return. Defaults to 100.
entity_typeNoFilter to a single entity type. Omit for all types.
include_demoNoInclude leftover demo (demorun-) fixtures. Defaults to false.

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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

There is no output schema, so the description carries the 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.

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3; the description 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.

Purpose5/5

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.

Usage Guidelines5/5

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 DemosA
Read-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.

NameRequiredDescriptionDefault
nameNoDemo name to load (e.g. 'conflict-resolution-walkthrough'). Omit to list all available demos.

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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

The description gives a specific verb and resource ('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.

Usage Guidelines4/5

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 TasksB
Read-onlyIdempotent

Get all tasks linked to a specific entity (customer, contact, transaction, etc.).

NameRequiredDescriptionDefault
limitNoMax results. Defaults to 50.
statusNoFilter by status. Omit to return all non-done tasks.
entity_idYesUUID of the entity.
entity_typeYesEntity type: customer | contact | interaction | transaction | contract | memory

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all 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.

Purpose4/5

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

The description gives a specific verb and resource ('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.

Usage Guidelines3/5

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 FeedsA
Read-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.

NameRequiredDescriptionDefault
tagNoFilter by tag (e.g. 'tech', 'news')
pinned_onlyNoOnly show pinned feeds. Default: false

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive 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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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

The description gives a specific verb and resource ('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.

Usage Guidelines3/5

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 InteractionsB
Read-onlyIdempotent

Get interaction history for a customer, with optional date range and type filter.

NameRequiredDescriptionDefault
limitNoMax results
sinceNoDeprecated: use `from_date`.
untilNoDeprecated: use `to_date`.
to_dateNoOnly show interactions on or before this date (ISO 8601)
from_dateNoOnly show interactions on or after this date (ISO 8601)
customer_idYesCustomer UUID
interaction_typeNoFilter by interaction type

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, 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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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 MembersA
Read-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.

NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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

There are zero parameters, so the baseline is 4; 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.

Purpose5/5

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

The description gives a specific verb and resource ('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.

Usage Guidelines3/5

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 RunsB
Read-onlyIdempotent

List playbook execution history. Optionally filter by playbook or customer.

NameRequiredDescriptionDefault
limitNoMax results. Defaults to 25.
customer_idNoFilter to runs for a specific customer.
playbook_idNoFilter to runs of a specific playbook.

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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

The description gives a specific verb and resource: '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.

Usage Guidelines3/5

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 PlaybooksA
Read-onlyIdempotent

List all defined playbooks for this company. Returns name, slug, description, and step count. Archived playbooks are hidden by default.

NameRequiredDescriptionDefault
include_archivedNoSet true to include archived playbooks. Defaults to false.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so 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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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

Schema description coverage is 100% and the single 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.

Purpose4/5

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

The description opens with a specific verb+resource ('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.

Usage Guidelines3/5

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 ProjectsA
Read-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.

NameRequiredDescriptionDefault
statusNoFilter by status. Omit to return active projects only.
include_allNoSet true to return projects in all statuses.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, 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.

Conciseness5/5

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.

Completeness4/5

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

With no output schema, the description carries 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.

Parameters3/5

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.

Purpose4/5

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

The description states a specific verb and resource ('List 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.

Usage Guidelines3/5

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 TagsA
Read-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.

NameRequiredDescriptionDefault
scopeNoFilter by scope. Omit to return all tags.
include_archivedNoSet true to include archived tags. Defaults to false.

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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

Schema description coverage is 100%, and both parameters (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.

Purpose4/5

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

States a specific verb and resource ("List all 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.

Usage Guidelines3/5

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 TasksA
Read-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.

NameRequiredDescriptionDefault
tagNoConvenience filter for a single tag. Use `tags` for multiple.
tagsNoFilter to items carrying these tags. Combined per `tag_match` (default 'all': the item must carry every listed tag).
limitNoMax results. Defaults to 50.
scopeNoFilter by scope. Omit to return both org and caller's personal tasks.
statusNoFilter by status.
priorityNoFilter by priority.
timezoneNoIANA 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_afterNoReturn tasks due on or after this date (YYYY-MM-DD).
entity_idNoFilter to tasks linked to this entity ID. Requires entity_type.
tag_matchNoHow to combine `tags`: 'all' (item has every tag, default) or 'any' (item has at least one of them).
created_byNoFilter by creator user ID.
due_beforeNoReturn tasks due on or before this date (YYYY-MM-DD).
assigned_toNoFilter by assignee. Use a user ID, '@claude', '@gpt', or 'unassigned'.
entity_typeNoFilter to tasks linked to this entity type.
overdue_onlyNoIf true, only return tasks past their due date that are not done.

TDQS

A3.7/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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

States a specific verb and resource ("List 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.

Usage Guidelines3/5

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 TransactionsA
Read-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.

NameRequiredDescriptionDefault
tagNoConvenience filter for a single tag. Use `tags` for multiple.
tagsNoFilter to items carrying these tags. Combined per `tag_match` (default 'all': the item must carry every listed tag).
limitNoMax results (default 100).
to_dateNoEnd date (YYYY-MM-DD, inclusive).
from_dateNoStart date (YYYY-MM-DD, inclusive).
tag_matchNoHow to combine `tags`: 'all' (item has every tag, default) or 'any' (item has at least one of them).
account_idNoFilter by account UUID.
category_idNoFilter by category UUID.
customer_idNoFilter by customer UUID.

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, 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.

Conciseness5/5

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.

Completeness4/5

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

With no output schema and no 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.

Parameters3/5

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.

Purpose4/5

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

States a specific verb and resource ('List 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.

Usage Guidelines3/5

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).

NameRequiredDescriptionDefault
bodyNoFull details, notes, or transcript of the interaction
subjectNoBrief subject or title for this interaction
contact_idNoOptional: specific contact this interaction was with
customer_idYesCustomer UUID
interaction_dateNoWhen it happened (ISO 8601). Defaults to now if omitted.
interaction_typeYesType of interaction

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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 ForgetA
DestructiveIdempotent

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.

NameRequiredDescriptionDefault
confirmNoDeprecated: use `resolution: "confirm"`. Set true to delete immediately.
memory_idYesThe UUID of the memory to delete.
resolutionNoConflict resolution: 'confirm' deletes, 'cancel' aborts.

TDQS

A4.7/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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

The description clearly states the action ('Delete'), 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.

Usage Guidelines5/5

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 RecallA
Read-onlyIdempotent

Semantically search stored memories and return the most relevant results. Call at the start of any project session to load prior context.

NameRequiredDescriptionDefault
limitNoMax results to return (default 10).
queryYesNatural language description of what to recall.
scopeNoScope to search: 'personal' for your own memories, 'org' for shared team memories, 'both' (or omit) for all accessible memories.
offsetNoNumber of results to skip for pagination (default 0). Use with limit to page through results: page 1 = offset 0, page 2 = offset 10, etc.
projectNoOptional project filter.
to_dateNoISO 8601 timestamp. Only return memories created on or before this date (e.g. '2026-05-01T00:00:00Z').
from_dateNoISO 8601 timestamp. Only return memories created on or after this date (e.g. '2026-04-01T00:00:00Z').
min_scoreNoMinimum similarity score (0-1) to include in results (default 0.35). Increase to filter noise, decrease to cast a wider net.
source_toolNoFilter by originating tool (e.g. 'complete_task', 'memory_summarize_and_store', 'cowork'). Only memories created by this tool are returned.
created_afterNoDeprecated: use `from_date`.
created_beforeNoDeprecated: use `to_date`.

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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.

NameRequiredDescriptionDefault
kindNoOptional classifier stored in metadata.kind (e.g. 'checkpoint', 'decision', 'fact'). Used by get_project_history to build a typed timeline.
forceNoDeprecated: use `resolution: "confirm"`. Set true to skip near-duplicate detection.
scopeYes'org' for team-wide visibility, 'personal' for caller only.
contentYesThe information to remember (max 20,000 characters).
projectNoOptional project tag (e.g. 'founders-os', 'client-acme').
resolutionNoConflict resolution after a near-duplicate is found: 'confirm' stores anyway, 'cancel' skips.
handoff_docNoOptional 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_toolNoOptional label for the originating tool or surface.

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, 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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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

The description opens with a specific verb+resource ('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.

Usage Guidelines3/5

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.

NameRequiredDescriptionDefault
kindNoOptional classifier stored in metadata.kind. Pass 'checkpoint' for end-of-session checkpoints so get_project_history can build the project timeline.
forceNoDeprecated: use `resolution: "confirm"`. Set true to skip near-duplicate detection.
scopeYes'org' to share with the whole team, 'personal' for private notes.
projectNoOptional project tag.
resolutionNoConflict resolution after a near-duplicate is found: 'confirm' stores anyway, 'cancel' skips.
handoff_docNoPath 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_summaryYesA narrative description of the session to memorize. Include decisions made, context established, and anything useful for future sessions (max 20,000 characters).

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, 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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 UpdateA
Idempotent

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.

NameRequiredDescriptionDefault
confirmNoDeprecated: use `resolution: "confirm"`. Set true to apply the update.
contentYesThe new content to replace the existing memory with (max 20,000 characters).
projectNoOptional: update the project tag. Omit to keep the existing tag.
memory_idYesThe UUID of the memory to update.
resolutionNoConflict resolution: 'confirm' applies the update, 'cancel' aborts.
change_reasonNoWhy 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

A3.6/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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

Schema coverage is 100%, so baseline is 3 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.

Purpose4/5

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

The first sentence gives a specific verb and resource ('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.

Usage Guidelines4/5

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 FeedA
Idempotent

Pin a feed so it appears in the morning briefing. Pinned feeds are fetched during session start to generate headline summaries.

NameRequiredDescriptionDefault
feed_idYesUUID of the feed to pin/unpin

TDQS

A3.9/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

pingPingC
Read-onlyIdempotent

Test tool — returns pong. Update available: running v0.14.0, latest v1.9.0. Restart with @latest to update.

NameRequiredDescriptionDefault
messageNoOptional message to echo back

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness3/5

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.

Parameters3/5

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

Schema description coverage is 100% and the single 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.

Purpose4/5

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.

Usage Guidelines2/5

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 TagsA
Read-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.

NameRequiredDescriptionDefault
tagsYesTag names to check, e.g. ['Alex', 'needs-review'].

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is 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.

Conciseness4/5

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.

Completeness5/5

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

There is no output schema, and the description compensates by naming the 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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 ItemA
DestructiveIdempotent

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.

NameRequiredDescriptionDefault
entity_idYesUUID of the soft-deleted entity.
resolutionNoPass "confirm" to permanently delete after the user agrees; "cancel" to abort. Omit on the first call to receive a confirmation prompt.
entity_typeYesType of soft-deleted entity to purge.

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and idempotentHint=true, so 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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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

States a specific verb and resource ('permanently 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.

Usage Guidelines5/5

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 ItemsA
DestructiveIdempotent

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.

NameRequiredDescriptionDefault
allNoFilter: every recoverable item in the trash. Use with care.
daysNoFilter look-back window in days. Defaults to 30.
itemsNoExplicit items to purge. Provide this OR filters.
only_demoNoFilter: only leftover demo / test fixtures.
resolutionNoPass "confirm" after the user agrees, "cancel" to abort. Omit on the first call to get a confirmation prompt.
entity_typeNoFilter: only this entity type.
older_than_daysNoFilter: only items deleted more than N days ago.

TDQS

A5/5.0
Behavior5/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, and the description 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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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

The first sentence gives a specific verb, 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.

Usage Guidelines5/5

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 ItemA
Read-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.

NameRequiredDescriptionDefault
feed_urlYesURL of the feed containing the item
item_indexYes1-based item number from the get_feed_items list

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, 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.

Conciseness5/5

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.

Completeness4/5

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

With no output schema, the description usefully 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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 FeedsA
Idempotent

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.

NameRequiredDescriptionDefault
feed_idNoRefresh a specific feed, or all if omitted

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, idempotentHint=true, and 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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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

Schema coverage is 100% and the schema already 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.

Purpose4/5

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.

Usage Guidelines3/5

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 AccountA
DestructiveIdempotent

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.

NameRequiredDescriptionDefault
modeNoDeprecated: use `resolution`. 'archive' / 'delete' / 'cancel'.
account_idYesAccount UUID to remove.
resolutionNoResolution after the removal conflict: 'confirm' deletes (recoverable for 30 days), 'archive' hides it (recoverable), 'cancel' aborts.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and 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.

Conciseness4/5

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.

Completeness4/5

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

With no output schema, the description correctly 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.

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents 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.

Purpose5/5

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

The description opens with a specific verb+resource ('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.

Usage Guidelines4/5

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 BookmarkC
DestructiveIdempotent

Remove a saved bookmark by its ID.

NameRequiredDescriptionDefault
bookmark_idYesUUID of the bookmark to remove

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare destructiveHint=true and idempotentHint=true, so the safety profile is covered. The description adds 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.

Conciseness4/5

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.

Completeness3/5

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

For a one-parameter tool with 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.

Parameters3/5

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

Schema coverage is 100% and the single parameter is fully documented 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.

Purpose4/5

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.

Usage Guidelines2/5

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 CategoryA
DestructiveIdempotent

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.

NameRequiredDescriptionDefault
modeNoDeprecated: use `resolution`. 'archive' / 'delete' / 'cancel'.
resolutionNoResolution after the removal conflict: 'confirm' deletes (recoverable for 30 days), 'archive' hides it (recoverable), 'cancel' aborts.
category_idYesCategory UUID to remove.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already flag destructiveHint=true and 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.

Conciseness4/5

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.

Completeness4/5

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

With no output schema, the description correctly compensates by describing the 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.

Parameters3/5

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.

Purpose5/5

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

States a specific verb (remove) and resource (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.

Usage Guidelines4/5

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 ContactA
DestructiveIdempotent

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.

NameRequiredDescriptionDefault
modeNoDeprecated: use `resolution`. 'archive' / 'delete' / 'cancel'.
contact_idYesContact UUID to remove.
resolutionNoResolution after the removal conflict: 'confirm' deletes (recoverable for 30 days), 'archive' hides it (recoverable), 'cancel' aborts.

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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

With no output schema, the description correctly 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.

Parameters2/5

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.

Purpose5/5

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

States a specific verb and resource ("Remove 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.

Usage Guidelines4/5

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 CustomerA
DestructiveIdempotent

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.

NameRequiredDescriptionDefault
modeNoDeprecated: use `resolution`. 'archive' / 'delete' / 'cancel'.
resolutionNoResolution after the removal conflict: 'confirm' deletes (recoverable for 30 days), 'archive' hides it (recoverable), 'cancel' aborts.
customer_idYesCustomer UUID to remove.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and idempotentHint=true, 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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3, and the 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.

Purpose5/5

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

States a specific verb and resource ('Remove 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.

Usage Guidelines4/5

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 InteractionA
DestructiveIdempotent

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.

NameRequiredDescriptionDefault
modeNoDeprecated: use `resolution`. 'delete' / 'cancel'.
resolutionNoResolution: 'confirm' soft-deletes (recoverable 30 days), 'cancel' aborts.
interaction_idYesInteraction UUID to remove.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and idempotentHint=true, so the 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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose5/5

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

The first sentence names a specific verb and resource ('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.

Usage Guidelines4/5

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 MemberA
DestructiveIdempotent

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.

NameRequiredDescriptionDefault
target_user_idYesThe user_id of the member to remove.

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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

For a one-parameter destructive tool with no output schema, the description covers 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.

Parameters3/5

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

Schema coverage is 100% and the single parameter 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.

Purpose5/5

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

States a specific verb and resource ('Remove 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.

Usage Guidelines4/5

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 PlaybookA
DestructiveIdempotent

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.

NameRequiredDescriptionDefault
modeNoDeprecated: use `resolution`. 'archive' / 'delete' / 'cancel'.
resolutionNoResolution after the removal conflict: 'confirm' deletes (recoverable for 30 days), 'archive' hides it (recoverable), 'cancel' aborts.
playbook_idYesPlaybook UUID or slug.

TDQS

A3.9/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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

Schema coverage is 100%, so the baseline is 3. The description does 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.

Purpose5/5

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.

Usage Guidelines3/5

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 StepA
DestructiveIdempotent

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.

NameRequiredDescriptionDefault
modeNoDeprecated: use `resolution`. 'archive' / 'delete' / 'cancel'.
step_idYesPlaybook step UUID to remove.
resolutionNoResolution after the removal conflict: 'confirm' deletes (recoverable for 30 days), 'archive' hides it (recoverable), 'cancel' aborts.

TDQS

A4/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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

The description covers the essential 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.

Parameters2/5

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

Schema coverage is 100%, so baseline is 3, but the description 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.

Purpose5/5

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

States a specific verb and resource (remove 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.

Usage Guidelines4/5

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 ProjectA
DestructiveIdempotent

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.

NameRequiredDescriptionDefault
modeNoDeprecated: use `resolution`. 'archive' / 'delete' / 'cancel'.
project_idYesProject UUID to remove.
resolutionNoResolution after the removal conflict: 'confirm' deletes (recoverable for 30 days), 'archive' hides it (recoverable), 'cancel' aborts.

TDQS

A4.5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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

Schema coverage is 100%, so the baseline is 3. The description does 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.

Purpose5/5

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.

Usage Guidelines4/5

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 TagA
DestructiveIdempotent

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.

NameRequiredDescriptionDefault
modeNoDeprecated: use `resolution`. 'archive' / 'delete' / 'cancel'.
tag_idYesTag registry UUID to remove.
cascadeNoWhen 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).
resolutionNoResolution after the removal conflict: 'confirm' deletes (recoverable for 30 days), 'archive' hides it (recoverable), 'cancel' aborts.
clean_itemsNoDeprecated: use `cascade`.

TDQS

A4.5/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness4/5

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

With no output schema, the description correctly 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.

Parameters3/5

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.

Purpose5/5

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

Opens with a specific verb and resource ("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.

Usage Guidelines5/5

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 TaskA
DestructiveIdempotent

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.

NameRequiredDescriptionDefault
modeNoDeprecated: use `resolution`. 'archive' / 'delete' / 'cancel'.
task_idYesTask UUID to remove.
resolutionNoResolution after the removal conflict: 'confirm' deletes (recoverable for 30 days), 'archive' hides it (recoverable), 'cancel' aborts.

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already flag destructiveHint=true and idempotentHint=true, but the description 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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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

Schema coverage is 100%, so the schema already documents all 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.

Purpose4/5

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.

Usage Guidelines3/5

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 TransactionA
DestructiveIdempotent

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.

NameRequiredDescriptionDefault
modeNoDeprecated: use `resolution`. 'archive' / 'delete' / 'cancel'.
force_modeNoDeprecated: confirming a transfer-leg deletion now deletes both legs automatically. 'delete_both' is still accepted.
resolutionNoResolution after the removal conflict: 'confirm' deletes (recoverable for 30 days), 'archive' hides it (recoverable), 'cancel' aborts.
transaction_idYesUUID of the transaction to remove.

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all 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.

Purpose5/5

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

The description states a specific verb and resource ('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.

Usage Guidelines4/5

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

The description gives clear usage context 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 TagB
Idempotent

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.

NameRequiredDescriptionDefault
tag_idYesTag registry UUID.
cascadeNoIf 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_nameYesNew display name for the tag.
propagateNoDeprecated: use `cascade`.

TDQS

B3.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false and idempotentHint=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.

Conciseness3/5

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.

Completeness3/5

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

For a mutation tool with no output schema, 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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 ItemA
Idempotent

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.

NameRequiredDescriptionDefault
entity_idYesUUID of the archived or soft-deleted entity.
entity_typeYesType of entity to restore.

TDQS

A3.9/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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

For a two-parameter mutation tool with 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.

Parameters3/5

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.

Purpose4/5

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

The first sentence states a specific verb and resource ('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.

Usage Guidelines4/5

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 ItemsA
Idempotent

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.

NameRequiredDescriptionDefault
allNoFilter: every recoverable item in the trash.
daysNoFilter look-back window in days. Defaults to 30.
itemsNoExplicit items to restore. Provide this OR filters.
entity_typeNoFilter: only this entity type.
older_than_daysNoFilter: only items deleted more than N days ago.

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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

For a mutation tool with no 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.

Parameters3/5

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

Schema coverage is 100%, so the baseline is 3, 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.

Purpose5/5

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

The description opens with a specific verb and resource — "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.

Usage Guidelines5/5

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.

NameRequiredDescriptionDefault
notesNoOptional context note logged with the run.
start_dateYesAnchor date (YYYY-MM-DD) for due_offset calculations and {{playbook.start_date}} placeholders.
customer_idNoCustomer UUID to run this playbook for. Strongly recommended — enables placeholder resolution.
playbook_idYesPlaybook UUID or slug.
preflight_onlyNoIf true, return connector requirements and a step summary WITHOUT executing. Use this to check what the playbook needs before committing to a run.

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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

With no output schema, the description carries the return-value burden and does so: it explains 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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 ContactsA
Read-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.

NameRequiredDescriptionDefault
limitNoMax results to return
queryYesSearch text (searches first name, last name, email, phone, role)

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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

For a two-parameter read-only 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.

Parameters3/5

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

Schema description coverage is 100%, so both parameters are already documented, 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.

Purpose4/5

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.

Usage Guidelines3/5

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 CustomersA
Read-onlyIdempotent

Search customers by name, notes, city, state, or tags. Returns matching customers with summary info.

NameRequiredDescriptionDefault
tagNoConvenience filter for a single tag. Use `tags` for multiple.
tagsNoFilter to items carrying these tags. Combined per `tag_match` (default 'all': the item must carry every listed tag).
limitNoMax results to return
queryYesSearch text (searches organization name, notes, city, state)
tag_matchNoHow to combine `tags`: 'all' (item has every tag, default) or 'any' (item has at least one of them).
customer_typeNoFilter by customer type
customer_phaseNoFilter by lifecycle phase

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 AccessA
DestructiveIdempotent

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.

NameRequiredDescriptionDefault
levelYesThe financial access level to assign.
target_user_idYesThe user_id of the team member to update (matches FOUNDERS_OS_USER_ID).

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare destructiveHint=true 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.

Conciseness5/5

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.

Completeness5/5

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

For a two-parameter mutation with 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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 OwnerA
DestructiveIdempotent

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.

NameRequiredDescriptionDefault
is_ownerYestrue = promote to owner, false = demote from owner.
target_user_idYesThe user_id of the member to update.

TDQS

A4.6/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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

The description opens with a specific verb 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.

Usage Guidelines4/5

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

It states the precondition ('Requires owner 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 CustomerA
Idempotent

Attribute an existing transaction to a customer, or detach it. Pass a customer_id to attribute the transaction, or null to clear the attribution.

NameRequiredDescriptionDefault
customer_idYesUUID of the customer to attribute, or null to detach.
transaction_idYesUUID of the transaction to update.

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 CapabilitiesA
Read-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.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, 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.

Conciseness5/5

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.

Completeness5/5

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

For a zero-parameter, read-only 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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 FeedA
Idempotent

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.

NameRequiredDescriptionDefault
urlYesThe RSS, Atom, or JSON Feed URL
tagsNoTags to classify this feed (e.g. ['tech', 'ai']). Default: ['other']
pinnedNoPin this feed so it appears in the morning briefing. Default: false

TDQS

A3.9/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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

For a simple three-parameter, 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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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 AccountsA
Destructive

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.

NameRequiredDescriptionDefault
dateYesTransfer date in YYYY-MM-DD format.
amountYesAmount to transfer (positive number).
category_idYesCategory to assign (typically a 'Transfer' income/expense category).
descriptionYesDescription of the transfer.
to_account_idYesAccount to transfer to.
from_account_idYesAccount to transfer from.

TDQS

A3.9/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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

Schema coverage is 100%, and the schema already documents 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.

Purpose4/5

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

The description opens with a specific verb and resource ('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.

Usage Guidelines3/5

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.

unpin_feedUnpin FeedA
Idempotent

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.

NameRequiredDescriptionDefault
feed_idYesUUID of the feed to pin/unpin

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, idempotentHint=true, and destructiveHint=false, so the safety profile is 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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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

The description gives a specific verb and resource (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.

Usage Guidelines4/5

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 FeedA
DestructiveIdempotent

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.

NameRequiredDescriptionDefault
feed_idYesUUID of the feed subscription to remove

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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

The description opens with a specific verb+resource ("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.

Usage Guidelines3/5

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 ContactD
Idempotent

Update a contact's details.

NameRequiredDescriptionDefault
roleNo
emailNo
phoneNo
last_nameNo
contact_idYesContact UUID
first_nameNo
is_primaryNo

TDQS

D1.9/5.0
Behavior2/5

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.

Conciseness2/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose2/5

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.

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus alternatives 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 CustomerC
Idempotent

Update fields on an existing customer record.

NameRequiredDescriptionDefault
zipNo
cityNo
tagsNo
notesNo
stateNo
websiteNo
customer_idYesCustomer UUID
address_line1No
address_line2No
customer_typeNo
customer_phaseNoLifecycle phase
organization_nameNo

TDQS

C2.6/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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 PlaybookA
Idempotent

Update a playbook's name, slug, or description. Only provided fields are changed. Steps are not affected — use update_playbook_step for those.

NameRequiredDescriptionDefault
nameNoNew human-readable name.
slugNoNew slug. Must be unique per company.
descriptionNoNew description.
playbook_idYesPlaybook UUID or slug.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, idempotentHint=true and destructiveHint=false, so the safety profile is covered. The description adds 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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 StepA
Idempotent

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.

NameRequiredDescriptionDefault
titleNoUpdated title. Supports {{placeholders}}.
actionNo
paramsNoUpdated connector params.
step_idYesPlaybook step UUID.
assigneeNoDeprecated: use `assigned_to`.
priorityNo
connectorNo
due_offsetNoUpdated due offset in days. Pass -1 to clear.
assigned_toNoUpdated assignee for native_task steps.
descriptionNoUpdated description.
order_indexNoNew position in step sequence.
fallback_taskNoUpdated fallback task title.

TDQS

A3.6/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 ProjectA
Idempotent

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.

NameRequiredDescriptionDefault
nameNoNew display name.
statusNoNew status.
cascadeNoOn rename: true also renames the tag on all tasks/customers; false updates only the registry.
project_idYesProject UUID.
resolutionNoResolution for the open-tasks guard: 'confirm' archives/completes anyway, 'cancel' aborts.
descriptionNoNew description.
confirm_archiveNoDeprecated: use `resolution: "confirm"`. Proceed with completing/archiving despite open tasks.
propagate_renameNoDeprecated: use `cascade`. Propagate or skip the tag rename on tasks/customers.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare this as a non-readonly, 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.

Conciseness5/5

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.

Completeness4/5

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

For an 8-parameter mutation 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.

Parameters3/5

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.

Purpose4/5

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

The description states a specific verb (update) and 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.

Usage Guidelines3/5

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 TaskA
Idempotent

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.

NameRequiredDescriptionDefault
tagsNo
scopeNo
titleNo
statusNoNew status.
task_idYesTask UUID.
due_dateNoYYYY-MM-DD. Pass empty string to clear.
priorityNo
resolutionNoConflict resolution when a personal task would be assigned to another person: 'make_org' saves it as an org task, 'cancel' aborts.
assigned_toNoUser ID or '@claude' / '@gpt'. Pass empty string to unassign.
descriptionNo
due_date_dayNoExpected 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_reasonNo
blocked_by_task_idNoUUID of a blocking task. Pass empty string to clear the dependency.

TDQS

A3.5/5.0
Behavior4/5

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.

Conciseness3/5

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.

Completeness3/5

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

For a 13-parameter mutation tool with 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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

  1. 4 tool updatesv1.9.0
    • Changedassign_task1 field changed
      • addedInput schema / properties / resolution
        Added 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"
        +}
    • Changedcomplete_task1 field changed
      • changedInput schema / properties / store_as_memory / description
        Previous 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."
    • Changedcreate_task2 fields changed
      • addedInput schema / properties / resolution
        Added 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"
        +}
      • changedInput schema / properties / scope / description
        Previous 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."
    • Changedupdate_task1 field changed
      • addedInput schema / properties / resolution
        Added 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"
        +}
  2. 3 tool updatesv1.6.0
    • Addedget_last_checkpoint
    • Changedmemory_store1 field changed
      • addedInput schema / properties / handoff_doc
        Added 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"
        +}
    • Changedmemory_summarize_and_store1 field changed
      • addedInput schema / properties / handoff_doc
        Added 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"
        +}
  3. 101 tool updatesv1.4.0
    • First observedadd_account
    • First observedadd_category
    • First observedadd_contact
    • First observedadd_customer
    • First observedadd_member
    • First observedadd_playbook_step
    • First observedadd_task_note
    • First observedadd_transaction
    • First observedassign_task
    • First observedbookmark_item
    • First observedcheckpoint
    • First observedcomplete_task
    • First observedcreate_playbook
    • First observedcreate_project
    • First observedcreate_tag
    • First observedcreate_task
    • First observedget_audit_log
    • First observedget_customer
    • First observedget_dashboard
    • First observedget_entity_card
    • First observedget_feed_briefing
    • First observedget_feed_items
    • First observedget_financial_access
    • First observedget_financial_summary
    • First observedget_pl_report
    • First observedget_playbook
    • First observedget_playbook_run
    • First observedget_project
    • First observedget_project_history
    • First observedget_session_start
    • First observedget_stuck_list
    • First observedget_task
    • First observedget_task_summary
    • First observedget_usage_guide
    • First observedget_version
    • First observedget_weekly_retro
    • First observedimport_starter_feeds
    • First observedlink_task
    • First observedlist_accounts
    • First observedlist_bookmarks
    • First observedlist_categories
    • First observedlist_customers
    • First observedlist_deleted
    • First observedlist_demos
    • First observedlist_entity_tasks
    • First observedlist_feeds
    • First observedlist_interactions
    • First observedlist_members
    • First observedlist_playbook_runs
    • First observedlist_playbooks
    • First observedlist_projects
    • First observedlist_tags
    • First observedlist_tasks
    • First observedlist_transactions
    • First observedlog_interaction
    • First observedmemory_forget
    • First observedmemory_recall
    • First observedmemory_store
    • First observedmemory_summarize_and_store
    • First observedmemory_update
    • First observedpin_feed
    • First observedping
    • First observedpreview_tags
    • First observedpurge_item
    • First observedpurge_items
    • First observedread_feed_item
    • First observedrefresh_feeds
    • First observedremove_account
    • First observedremove_bookmark
    • First observedremove_category
    • First observedremove_contact
    • First observedremove_customer
    • First observedremove_interaction
    • First observedremove_member
    • First observedremove_playbook
    • First observedremove_playbook_step
    • First observedremove_project
    • First observedremove_tag
    • First observedremove_task
    • First observedremove_transaction
    • First observedrename_tag
    • First observedrestore_item
    • First observedrestore_items
    • First observedrun_playbook
    • First observedsearch_contacts
    • First observedsearch_customers
    • First observedset_financial_access
    • First observedset_member_owner
    • First observedset_transaction_customer
    • First observedshow_capabilities
    • First observedsubscribe_feed
    • First observedtransfer_between_accounts
    • First observedunlink_task
    • First observedunpin_feed
    • First observedunsubscribe_feed
    • First observedupdate_contact
    • First observedupdate_customer
    • First observedupdate_playbook
    • First observedupdate_playbook_step
    • First observedupdate_project
    • First observedupdate_task

TDQS

B3/5.0

Scored across 102 tools

Disambiguation3/5

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.

Naming Consistency4/5

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.

Tool Count1/5

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.

Completeness4/5

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

ActivityMaintained
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    Self-hosted MCP server giving AI agents persistent memory for personalization and context across conversations.
    152 PyPI
    281
    Apache 2.0
  • A
    license
    Not graded
    quality
    C
    maintenance
    Persistent memory with semantic search for Claude and MCP-compatible clients, storing context that survives conversations and can be retrieved intelligently.
    1
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    A 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.
    3
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    A 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.
    3
    Apache 2.0