Skip to main content
Glama
PaddleHQ

Paddle MCP Server

Official
by PaddleHQ

MCP Server for Paddle Billing

Paddle Billing is the developer-first merchant of record. We take care of payments, tax, subscriptions, and metrics with one unified API that does it all.

This is a Model Context Protocol (MCP) server that provides LLMs and AI agents with tools for interacting with the Paddle API.

Important: This MCP server works with Paddle Billing. It does not support Paddle Classic. To work with Paddle Classic, see: Paddle Classic API reference

Install in Cursor

Features

The MCP server has near parity with the Paddle API, allowing AI assistants and agents to:

  • Manage your full Paddle catalog

  • View customer, purchase, and provisioning information

  • Handle subscription, payment, and refund workflows

  • Debug billing and order management issues

  • Create and adjust transactions directly in conversation

  • Generate financial reports for financial and operational insights

  • Implement and test Paddle integrations faster

Related MCP server: PayPal MCP Server

Available tools

The MCP server can use the following tools to take actions with your Paddle account:

Operation

Tool

Non-destructive

Read only

List products

list_products

Create a product

create_product

Get a product

get_product

Update a product

update_product

Operation

Tool

Non-destructive

Read only

List prices

list_prices

Create a price

create_price

Get a price

get_price

Update a price

update_price

Preview prices

preview_prices

Operation

Tool

Non-destructive

Read only

List discounts

list_discounts

Create a discount

create_discount

Get a discount

get_discount

Update a discount

update_discount

Operation

Tool

Non-destructive

Read only

List discount groups

list_discount_groups

Create a discount group

create_discount_group

Get a discount group

get_discount_group

Update a discount group

update_discount_group

Archive a discount group

archive_discount_group

Operation

Tool

Non-destructive

Read only

List customers

list_customers

Create a customer

create_customer

Get a customer

get_customer

Update a customer

update_customer

List credit balances for a customer

list_credit_balances

Operation

Tool

Non-destructive

Read only

List addresses for a customer

list_addresses

Create an address for a customer

create_address

Get an address for a customer

get_address

Update an address for a customer

update_address

Operation

Tool

Non-destructive

Read only

List businesses for a customer

list_businesses

Create a business for a customer

create_business

Get a business for a customer

get_business

Update a business for a customer

update_business

Operation

Tool

Non-destructive

Read only

List transactions

list_transactions

Create a transaction

create_transaction

Get a transaction

get_transaction

Update a transaction

update_transaction

Preview a transaction

preview_transaction_create

Revise customer information on a billed or completed transaction

revise_transaction

Get a PDF invoice for a transaction

get_transaction_invoice

Operation

Tool

Non-destructive

Read only

List adjustments

list_adjustments

Create an adjustment

create_adjustment

Get a PDF credit note for an adjustment

get_adjustment_credit_note

Operation

Tool

Non-destructive

Read only

List subscriptions

list_subscriptions

Get a subscription

get_subscription

Update a subscription

update_subscription

Cancel a subscription

cancel_subscription

Pause a subscription

pause_subscription

Resume a paused subscription

resume_subscription

Activate a trialing subscription

activate_subscription

Preview an update to a subscription

preview_subscription_update

Create a one-time charge for a subscription

create_subscription_charge

Preview a one-time charge for a subscription

preview_subscription_charge

Operation

Tool

Non-destructive

Read only

List payment methods saved for a customer

list_saved_payment_methods

Get a payment method saved for a customer

get_saved_payment_method

Delete a payment method saved for a customer

delete_saved_payment_method

Operation

Tool

Non-destructive

Read only

Create a customer portal session

create_customer_portal_session

Operation

Tool

Non-destructive

Read only

List notification settings

list_notification_settings

Create a notification setting

create_notification_setting

Get a notification setting

get_notification_setting

Update a notification setting

update_notification_setting

Delete a notification setting

delete_notification_setting

Operation

Tool

Non-destructive

Read only

List events

list_events

Operation

Tool

Non-destructive

Read only

List notifications

list_notifications

Get a notification

get_notification

Replay a notification

replay_notification

Operation

Tool

Non-destructive

Read only

List logs for a notification

list_notification_logs

Operation

Tool

Non-destructive

Read only

List simulations

list_simulations

Create a simulation

create_simulation

Get a simulation

get_simulation

Update a simulation

update_simulation

Operation

Tool

Non-destructive

Read only

List runs for a simulation

list_simulation_runs

Create a run for a simulation

create_simulation_run

Get a run for a simulation

get_simulation_run

Operation

Tool

Non-destructive

Read only

List events for a simulation run

list_simulation_run_events

Get an event for a simulation run

get_simulation_run_event

Replay an event for a simulation run

replay_simulation_run_event

Operation

Tool

Non-destructive

Read only

List reports

list_reports

Create a report

create_report

Get a report

get_report

Get a CSV file for a report

get_report_csv

Operation

Tool

Non-destructive

Read only

List client-side tokens

list_client_side_tokens

Create a client-side token

create_client_side_token

Get a client-side token

get_client_side_token

Revoke a client-side token

revoke_client_side_token

Installation

To use the MCP server, you'll need an API key. You can create and manage API keys in Paddle > Developer tools > Authentication:

Adding the following to your MCP settings file will configure and run the Paddle MCP server in a client like Claude Desktop, Cursor or Windsurf:

Method 1: One-click installation in Cursor or VS Code

You can install the Paddle MCP server with a single click in Cursor or VS Code.

Install in Cursor

After installation, you'll need to update the configuration in your MCP settings file to replace your_api_key with your actual Paddle API key and adjust the environment and tools values as needed.

Add the following to the MCP settings or configuration file in the client you're using:

{
  "mcpServers": {
    "paddle": {
      "command": "npx",
      "args": [
        "-y",
        "@paddle/paddle-mcp",
        "--api-key=your_api_key",
        "--environment=sandbox",
        "--tools=non-destructive"
      ]
    }
  }
}

Replace your_api_key with your actual Paddle API key, set --environment to either sandbox or production, and set --tools to the tools which you want to be loaded and available to the MCP client.

Method 3: Using environment variables

Add the following to the MCP settings or configuration file in the client you're using:

{
  "mcpServers": {
    "paddle": {
      "command": "npx",
      "args": ["-y", "@paddle/paddle-mcp"],
      "env": {
        "PADDLE_API_KEY": "your_api_key",
        "PADDLE_ENVIRONMENT": "sandbox",
        "PADDLE_MCP_TOOLS": "non-destructive"
      }
    }
  }
}

Replace your_api_key with your actual Paddle API key, set PADDLE_ENVIRONMENT to either sandbox or production, and set PADDLE_MCP_TOOLS to the tools which you want to be loaded and available to the MCP client.

Filtering tools

You can filter which tools are loaded and available to the MCP client by passing the --tools argument (Method 2) or setting the PADDLE_MCP_TOOLS environment variable (Method 1 or 3). Accepted values are:

  • all - All tools are available

  • read-only - Only read operations are available

  • non-destructive - Read operations and safe write operations are available (default)

  • A comma-separated list of specific tool names (e.g., list_products,get_product,create_product)

For detailed setup guides, see:

Development

  1. Install dependencies:

    pnpm install
  2. Build the server:

    pnpm build
  3. Update client to use the local build:

    {
      "mcpServers": {
        "paddle": {
          "command": "node",
          "args": ["path/to/paddle-mcp-server/build/index.js"],
          "env": {
            "PADDLE_API_KEY": "your_api_key",
            "PADDLE_ENVIRONMENT": "sandbox",
            "PADDLE_MCP_TOOLS": "all"
          }
        }
      }
    }

    The PADDLE_MCP_TOOLS environment variable accepts the same values as the --tools argument: all, read-only, non-destructive, or a comma-separated list of tool names. If not set, defaults to non-destructive.

Debugging

To debug the MCP server, you can use the MCP Inspector tool:

  1. Run the server with the inspector:

    pnpm inspector
  2. Open the provided URL in your browser to view and debug the MCP requests and responses.

  3. Include the --api-key and --environment arguments.

Learn more

Available Tools

63 tools
create_addressA

This tool will create a new address for a customer in Paddle.

Address entities hold billing address information for a customer. Customers must have an address to make a purchase. A transaction can be created without an address, but it can't go past a status of draft until an address is added.

To make buying as frictionless as possible, Paddle only requires a country. For tax calculation, fraud prevention, and compliance purposes, postalCode is required when creating addresses for some countries, like ZIP codes in the USA and postcodes in the UK.

Ensure you have all the information needed before making the call. Don't fabricate, imagine, or infer details and parameter values unless explicitly asked to. If anything is ambiguous, unknown, or unclear, ask the user for clarification or details before you proceed.

If successful, the response includes a copy of the new address entity.

ParametersJSON Schema
NameRequiredDescriptionDefault
customerIdYesPaddle ID of the customer.
descriptionNoMemorable description for this address.
firstLineNoFirst line of this address.
secondLineNoSecond line of this address.
cityNoCity of this address.
postalCodeNoZIP or postal code of this address. Required for some countries.
regionNoState, county, or region of this address.
countryCodeYesTwo-letter ISO 3166-1 alpha-2 country code.
customDataNoAny structured custom key-value data needed outside of Paddle's standard fields. Occasionally used by third-parties.

TDQS

A4/5.0
Behavior4/5

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

Annotations indicate this is a mutation tool (readOnlyHint: false), and the description correctly describes it as a creation operation. It adds valuable behavioral context beyond annotations by explaining the business impact (addresses needed for purchases), requirements (country mandatory, postalCode sometimes required), and what happens on success (response includes new address entity). No contradiction with annotations exists.

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

Conciseness3/5

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

The description is appropriately front-loaded with purpose and context, but includes generic agent guidance ('Ensure you have all the information...', 'Don't fabricate...') that doesn't add tool-specific value. These sentences could be removed without losing essential tool understanding, making the description somewhat verbose for its 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?

For a mutation tool with no output schema, the description provides good context about what the tool does, when to use it, requirements, and success behavior. It covers the essential aspects given the annotations (which indicate it's non-destructive) and parameter coverage. The main gap is lack of explicit error handling or rate limit information, but overall it's fairly complete.

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

Parameters3/5

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

With 100% schema description coverage, the schema already documents all 9 parameters thoroughly. The description adds some semantic context about country and postalCode requirements (e.g., 'postalCode is required when creating addresses for some countries'), but doesn't provide significant additional meaning beyond what's in the schema descriptions. This meets the baseline for high schema coverage.

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

Purpose5/5

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

The description clearly states the tool's purpose with specific verb ('create') and resource ('address for a customer in Paddle'), and distinguishes it from siblings by explaining that addresses are needed for purchases and transactions. It provides context about address entities holding billing information, which differentiates it from other 'create_' tools like create_customer or create_transaction.

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

Usage Guidelines4/5

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

The description provides clear context about when addresses are needed ('Customers must have an address to make a purchase', 'transaction can't go past draft until an address is added'), and mentions country requirements for tax/fraud purposes. However, it doesn't explicitly state when NOT to use this tool or name specific alternatives among the sibling tools, such as when to use get_address or list_addresses instead.

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

create_adjustmentA

This tool will create an adjustment to refund or credit all or part of a transaction and its items.

Billed transactions are considered financial records for tax and legal purposes, so they can't be changed. Adjustments record actions that impact revenue for a transaction after it's been billed.

Don't use this tool without checking with the user first. Avoid using before gaining explicit approval.

The transaction ID and the IDs of any transaction items (details.lineItems[].id) are required to create a refund or credit.

An adjustment can have an action of credit or refund:

  • Refunds return an amount to a customer's original payment method. Create refund adjustments for transactions that are completed.

  • Credits reduce the amount that a customer has to pay for a transaction. Create credit adjustments for manually-collected transactions that are billed or past_due.

Most refunds for live accounts are created with the status of pending_approval until reviewed by Paddle, but some are automatically approved. For sandbox accounts, Paddle automatically approves refunds every ten minutes.

Other action types (chargeback, chargeback_reverse, chargeback_warning, chargeback_warning_reverse, credit_reverse) are automatically created by Paddle and can't be set manually.

Adjustments can apply to some or all items on a transaction by defining the type:

  • full: The grand total for the related transaction is adjusted.

  • partial: Some line items for the related transaction are adjusted. Requires items.

When selecting taxMode, choose the one that best describes how the tax should be calculated for the adjustment:

  • external: Amounts are exclusive of tax. Common in European countries.

  • internal: Amounts are inclusive of tax. Common in countries like the United States and Canada.

Creating an adjustment for a transaction that has a refund that's pending approval isn't possible.

Ensure you have all the information needed before making the call. Don't fabricate, imagine, or infer details and parameter values unless explicitly asked to. If anything is ambiguous, unknown, or unclear, ask the user for clarification or details before you proceed.

If successful, the response includes a copy of the new adjustment entity.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYesHow this adjustment impacts the related transaction.
typeNoType of adjustment. Use `full` to adjust the grand total for the related transaction. Include an `items` array when creating a `partial` adjustment. If omitted, defaults to `partial`.
taxModeNoWhether the amounts to be adjusted are inclusive or exclusive of tax. If `internal`, adjusted amounts are considered to be inclusive of tax. If `external`, Paddle calculates the tax and adds it to the amounts provided. Only valid for adjustments where the `type` is `partial`. If omitted, defaults to `internal`.
transactionIdYesPaddle ID of the transaction that this adjustment is for, prefixed with `txn_`. Automatically-collected transactions must be `completed`, and manually-collected transactions must be `billed` or `past_due`.
reasonYesWhy this adjustment was created. Appears in the Paddle dashboard. Retained for record-keeping purposes.
itemsYesList of transaction items to adjust. Required if `type` is not populated or set to `partial`.

TDQS

A4.2/5.0
Behavior4/5

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

The description adds valuable behavioral context beyond the annotations. While annotations indicate it's not read-only and not destructive, the description explains: 'Billed transactions are considered financial records for tax and legal purposes, so they can't be changed. Adjustments record actions that impact revenue for a transaction after it's been billed.' It also details approval workflows: 'Most refunds for live accounts are created with the status of pending_approval until reviewed by Paddle, but some are automatically approved. For sandbox accounts, Paddle automatically approves refunds every ten minutes.'

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

Conciseness3/5

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

The description is comprehensive but somewhat verbose at 18 sentences. While most content is valuable, some sections could be more concise (e.g., the repeated warnings about checking with users). The structure is logical but not optimally front-loaded, with usage guidelines appearing after technical explanations rather than immediately after the purpose statement.

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

Completeness4/5

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

Given the complexity of financial adjustments and the absence of an output schema, the description provides substantial context about the tool's behavior, constraints, and business logic. It explains the distinction between refunds and credits, approval workflows, tax modes, and transaction state requirements. However, it could provide more detail about the response structure since there's 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?

With 100% schema description coverage, the baseline is 3. The description adds some semantic context about parameters (e.g., explaining when to use 'refund' vs 'credit', 'full' vs 'partial' adjustments, and 'external' vs 'internal' tax modes), but most parameter details are already well-covered in the schema descriptions. The description doesn't add significant new parameter information beyond what the schema provides.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'create an adjustment to refund or credit all or part of a transaction and its items.' It distinguishes this from sibling tools like 'create_transaction' by focusing specifically on post-billing adjustments rather than initial transactions, and explains why adjustments are needed (billed transactions can't be changed).

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

Usage Guidelines5/5

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

The description provides explicit guidance on when to use this tool vs alternatives: 'Don't use this tool without checking with the user first. Avoid using before gaining explicit approval.' It also specifies prerequisites: 'Ensure you have all the information needed before making the call' and warns against creating adjustments when 'a transaction that has a refund that's pending approval.'

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

create_businessB

This tool will create a new business for a customer in Paddle.

Business entities hold business information for a customer when working with a business rather than an individual. Customers do not need to have a business to make a purchase, but should if working with a business.

Ensure you have all the information needed before making the call. Don't fabricate, imagine, or infer details and parameter values unless explicitly asked to. If anything is ambiguous, unknown, or unclear, ask the user for clarification or details before you proceed.

If successful, the response includes a copy of the new business entity.

ParametersJSON Schema
NameRequiredDescriptionDefault
customerIdYesPaddle ID of the customer.
nameYesFull name.
companyNumberNoCompany number for this business.
taxIdentifierNoTax or VAT Number for this business.
contactsNoList of contacts related to this business, typically used for sending invoices.
customDataNoAny structured custom key-value data needed outside of Paddle's standard fields. Occasionally used by third-parties.

TDQS

B3.3/5.0
Behavior3/5

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

Annotations indicate readOnlyHint=false and destructiveHint=false, confirming this is a non-destructive write operation. The description adds that it creates a new entity and includes a copy in the response if successful, which provides useful behavioral context beyond annotations. However, it doesn't detail error conditions, rate limits, or authentication requirements, leaving gaps in transparency.

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

Conciseness3/5

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

The description is front-loaded with the tool's purpose but includes verbose warnings about not fabricating details and asking for clarification, which are generic and could be condensed. It's moderately structured but has some redundancy, reducing efficiency.

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?

Given 6 parameters with 100% schema coverage, annotations covering safety, and no output schema, the description is adequate but not comprehensive. It explains the tool's purpose and success response but lacks details on failure modes, side effects, or integration with sibling tools, leaving room for improvement in context.

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

Parameters3/5

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

Schema description coverage is 100%, so parameters are well-documented in the schema. The description doesn't add any specific parameter semantics beyond implying that all information should be gathered before calling. This meets the baseline of 3 since the schema carries the burden, but no extra value is provided.

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

Purpose4/5

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

The description clearly states the tool creates a new business entity for a customer in Paddle and explains what business entities are. It distinguishes from individual customers but doesn't explicitly differentiate from sibling tools like create_customer or get_business beyond the name. The purpose is specific but lacks direct sibling comparison.

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

Usage Guidelines3/5

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

The description provides implied guidance: use when working with a business rather than an individual, and customers don't need a business to purchase. It warns against fabricating details and advises asking for clarification if ambiguous. However, it doesn't explicitly state when to use this vs. alternatives like create_customer or get_business, nor does it mention prerequisites beyond having information ready.

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

create_client_side_tokenA

This tool will create a new client-side token in Paddle.

Client-side tokens are needed to authenticate with Paddle.js. A token is provided when initializing Paddle.js.

When creating a client-side token, provide a descriptive name to help identify its purpose. Usually created for each application or environment that needs to authenticate with Paddle.js.

If successful, the response includes a copy of the new client-side token entity. The returned token field is the client-side token that needs to be provided when initializing Paddle.js. Can be exposed client-side safely. If it starts with:

  • test_: The token is a test token for a sandbox environment and shouldn't be used in production.

  • live_: The token is a live token for a production environment. It can be used to test too but Paddle.js checkouts require real cards.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesName of this client-side token.
descriptionNoShort description for this client-side token.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations indicate this is a non-destructive write operation (readOnlyHint: false, destructiveHint: false). The description adds valuable behavioral context beyond annotations: it explains the response format (includes the new token entity), safety considerations (can be exposed client-side safely), and environment-specific behaviors (test_ vs. live_ token prefixes and their implications).

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

Conciseness4/5

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

The description is well-structured and front-loaded with the core purpose, followed by usage context and behavioral details. Most sentences add value, though the explanation of token prefixes could be slightly more concise. Overall, it efficiently conveys necessary information without unnecessary verbosity.

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 creation tool with no output schema, the description does a good job covering key aspects: purpose, usage, parameters (via schema), behavioral traits, and response details. It could be more complete by explicitly mentioning error conditions or prerequisites, but it adequately addresses the tool's complexity given the available annotations and schema coverage.

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 input schema has 100% description coverage, so the schema already documents both parameters (name and description). The description adds some semantic context by advising to 'provide a descriptive name to help identify its purpose', but does not provide additional details beyond what the schema descriptions offer.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 specific action ('create a new client-side token in Paddle'), identifies the resource ('client-side token'), and distinguishes it from siblings by explaining its unique purpose for authenticating with Paddle.js. This goes beyond just restating the tool name.

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

Usage Guidelines4/5

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

The description provides clear context for when to use this tool ('needed to authenticate with Paddle.js', 'usually created for each application or environment'), but does not explicitly mention when not to use it or name specific alternatives among the sibling tools (e.g., get_client_side_token or list_client_side_tokens).

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

create_customerB

This tool will create a new customer in Paddle.

Customer entities hold information about the people and businesses that make purchases.

Customers have two sub-entities:

  • addresses: Customers require an address to make a purchase, which can be created through the create_address tool. Can have multiple addresses.

  • businesses: Customers can optionally be associated with businesses, which can be created through the create_business tool.

Ensure you have all the information needed before making the call. Don't fabricate, imagine, or infer details and parameter values unless explicitly asked to. If anything is ambiguous, unknown, or unclear, ask the user for clarification or details before you proceed.

If successful, the response includes a copy of the new customer entity.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoFull name of this customer. Required when creating transactions where `collectionMode` is `manual` (invoices).
emailYesEmail address for this customer.
customDataNoAny structured custom key-value data needed outside of Paddle's standard fields. Occasionally used by third-parties.
localeNoValid IETF BCP 47 short form locale tag. If omitted, defaults to `en`.

TDQS

B3.3/5.0
Behavior3/5

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

Annotations indicate readOnlyHint=false and destructiveHint=false, which the description doesn't contradict. The description adds context about sub-entities (addresses, businesses) and the response format ('includes a copy of the new customer entity'), which provides useful behavioral information beyond annotations. However, it doesn't cover aspects like rate limits, authentication needs, 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.

Conciseness3/5

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

The description is moderately concise but includes some redundant or overly general advice (e.g., 'Don't fabricate, imagine, or infer details'). The first two paragraphs are well-structured, but the latter part contains generic guidance that could be streamlined. It's front-loaded with purpose but could be more efficient.

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?

Given the tool's complexity (creation operation, 4 parameters, no output schema), the description provides basic context about sub-entities and response format. However, it lacks details on error handling, idempotency, or system-specific constraints. With annotations covering safety but no output schema, the description is adequate but not comprehensive.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all four parameters thoroughly. The description doesn't add any parameter-specific information beyond what's in the schema, such as explaining relationships between parameters or providing examples. This meets the baseline for high schema coverage.

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

Purpose4/5

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

The description clearly states the tool 'create a new customer in Paddle' and explains that 'Customer entities hold information about the people and businesses that make purchases.' This provides a specific verb+resource combination. However, it doesn't explicitly differentiate from sibling tools like 'create_business' or 'create_address' beyond mentioning their relationship.

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

Usage Guidelines3/5

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

The description provides some usage guidance with 'Ensure you have all the information needed before making the call' and mentions related sub-entities (addresses, businesses) that can be created through sibling tools. However, it doesn't explicitly state when to use this tool versus alternatives like 'get_customer' or 'list_customers,' nor does it provide clear exclusions or prerequisites beyond general caution.

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

create_customer_portal_sessionA

This tool will create a customer portal session for a customer in Paddle.

The customer portal is a secure, Paddle-hosted site that allows customers and authorized individuals to:

  • View transaction history

  • Download invoices

  • Update saved payment methods for future purchases

  • Update stored payment methods for subscriptions

  • Manage their subscriptions including cancellations

  • Revise details on completed transactions

Don't use this tool without checking with the user first. Avoid using before gaining explicit approval.

Authenticated links are returned which automatically sign in the customer. Ensure those creating a customer portal session are authorized to access the customer portal.

  • urls.general.overview: Allows the customer to view their account information, transactions, and subscriptions.

Provide subscriptionIds to return urls.subscriptions[] to manage one or more subscriptions directly:

  • urls.subscriptions[].updateSubscriptionPaymentMethod: Allows the customer to update the payment method for a subscription.

  • urls.subscriptions[].cancelSubscription: Allows the customer to cancel a subscription.

If subscriptions are paused or canceled, links open the overview page for a subscription.

If successful, the response includes a copy of the new customer portal session entity with the urls to open up the customer portal for access. Customer portal sessions are temporary and shouldn't be cached.

ParametersJSON Schema
NameRequiredDescriptionDefault
customerIdYesPaddle ID of the customer.
subscriptionIdsYesList of subscriptions to create authenticated customer portal deep links for.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations indicate readOnlyHint=false and destructiveHint=false, but the description adds valuable behavioral context beyond this: it explains that the tool returns authenticated links that automatically sign in the customer, specifies that sessions are temporary and shouldn't be cached, and details what happens for paused/canceled subscriptions. This enhances understanding of the tool's behavior without contradicting annotations.

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

Conciseness4/5

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

The description is well-structured with clear sections: purpose, portal capabilities, usage warnings, authorization notes, URL details, and behavioral notes. While comprehensive, some sentences could be more concise (e.g., the list of portal capabilities is lengthy but informative). Overall, it's front-loaded with key information and avoids redundancy.

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

Completeness4/5

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

Given the tool's complexity (creating authenticated sessions with security implications), the description provides substantial context: it covers purpose, usage guidelines, behavioral traits, and output details (URLs and session entity). However, without an output schema, it doesn't fully document the response structure (e.g., exact fields in the 'new customer portal session entity'). This minor gap prevents a perfect score.

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 clear documentation for both parameters (customerId and subscriptionIds). The description adds some semantic context by explaining that subscriptionIds create 'authenticated customer portal deep links' and affect the returned URLs, but this is marginal beyond what the schema already provides. The baseline score of 3 is appropriate given the high schema coverage.

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

Purpose5/5

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

The description clearly states the specific action ('create a customer portal session') and resource ('for a customer in Paddle'), distinguishing it from sibling tools like 'create_customer' or 'create_client_side_token' which perform different operations. It provides concrete examples of what the portal enables, making the purpose unambiguous.

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

Usage Guidelines5/5

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

The description explicitly states when to use this tool ('Don't use this tool without checking with the user first. Avoid using before gaining explicit approval') and provides prerequisites ('Ensure those creating a customer portal session are authorized to access the customer portal'). It also implies alternatives by specifying what the portal does, helping differentiate from direct API calls for individual actions like managing subscriptions.

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

create_discountA

This tool will create a new discount in Paddle.

Discounts reduce a transaction total. They're sometimes called coupons or promo codes.

Use discount codes to let customers apply discounts themselves at checkout, or apply discounts manually to transactions as part of the sales process.

Discounts can be added to a discount group to organize them. Only one discount group can be added at a time. List discounts by discount groups with the list_discount_groups tool to see which discounts are in which groups.

When selecting type, choose the one that best describes how to apply the discount to the total:

  • flat: Discounts a checkout or transaction by a flat amount, for example -$100. Requires currencyCode.

  • flat_per_seat: Discounts a checkout or transaction by a flat amount per unit, for example -$100 per user. Requires currencyCode.

  • percentage: Discounts a checkout or transaction by a percentage of the total, for example -10%. Maximum 100%.

When selecting mode, choose the one that best describes the use case:

  • standard: Standard discount. Can be considered part of the listed catalog and reused across transactions and subscriptions easily.

  • custom: Non-catalog discount. Custom, one-off discounts. Includes checkout recovery discounts. Not returned when listing or shown in the Paddle dashboard.

Ensure you have all the information needed before making the call. Don't fabricate, imagine, or infer details and parameter values unless explicitly asked to. If anything is ambiguous, unknown, or unclear, ask the user for clarification or details before you proceed.

If successful, the response includes a copy of the new discount entity. Discounts can be applied to transactions, subscriptions, or passed to checkout through Paddle.js.

ParametersJSON Schema
NameRequiredDescriptionDefault
descriptionYesShort description for this discount. Not shown to customers.
enabledForCheckoutNoWhether this discount can be redeemed by customers at checkout (`true`) or not (`false`).
codeNoUnique code that customers can use to redeem this discount at checkout. Use letters and numbers only, up to 32 characters. Not case-sensitive. If omitted and `enabledForCheckout` is `true`, Paddle generates a random 10-character code.
typeYesType of discount. Determines how this discount impacts the checkout or transaction total.
modeNoDiscount mode. Standard discounts are considered part of the listed catalog and are shown in the Paddle dashboard.
amountYesAmount to discount by. For `percentage` discounts, must be an amount between `0.01` and `100`. For `flat` and `flat_per_seat` discounts, amount in the lowest denomination for a currency.
currencyCodeNoSupported three-letter ISO 4217 currency code. Required where discount type is `flat` or `flat_per_seat`.
recurNoWhether this discount applies for multiple subscription billing periods (`true`) or not (`false`). If omitted, defaults to `false`.
maximumRecurringIntervalsNoNumber of subscription billing periods that this discount recurs for. Requires `recur`. `null` if this discount recurs forever. Subscription renewals, mid-cycle changes, and one-time charges billed to a subscription aren't considered a redemption. `timesUsed` is not incremented in these cases.
usageLimitNoMaximum number of times this discount can be redeemed. This is an overall limit for this discount, rather than a per-customer limit. `null` if this discount can be redeemed an unlimited amount of times. Paddle counts a usage as a redemption on a checkout, transaction, or the initial application against a subscription. Transactions created for subscription renewals, mid-cycle changes, and one-time charges aren't considered a redemption.
restrictToNoProduct or price IDs that this discount is for. When including a product ID, all prices for that product can be discounted. `null` if this discount applies to all products and prices.
expiresAtNoRFC 3339 datetime string of when this discount expires. Discount can no longer be redeemed after this date has elapsed. `null` if this discount can be redeemed forever. Expired discounts can't be redeemed against transactions or checkouts, but can be applied when updating subscriptions.
customDataNoAny structured custom key-value data needed outside of Paddle's standard fields. Occasionally used by third-parties.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations indicate this is a mutation tool (readOnlyHint=false, destructiveHint=false). The description adds valuable context beyond annotations: it explains what discounts do ('reduce a transaction total'), mentions successful response includes 'a copy of the new discount entity', and notes discounts can be applied to transactions/subscriptions/checkout. It doesn't cover rate limits or auth needs, but provides good behavioral insight.

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 appropriately sized and well-structured: it starts with purpose, then usage guidelines, parameter explanations, and implementation warnings. Most sentences earn their place, though the final paragraph about successful response could be more integrated. Some redundancy exists in explaining discount applications.

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 complex mutation tool with 13 parameters, 100% schema coverage, and no output schema, the description does well: it covers purpose, usage, key parameter semantics, and behavioral outcomes. It could better explain error cases or the full response structure, but provides sufficient context for an agent to use the tool effectively.

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

Parameters4/5

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

With 100% schema description coverage, the baseline is 3. The description adds significant value by explaining the semantic meaning of 'type' and 'mode' enums with examples and requirements (e.g., 'flat requires currencyCode'), and clarifies organizational context ('discounts can be added to a discount group'). This goes well beyond the schema's technical descriptions.

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

Purpose5/5

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

The description clearly states the tool's purpose with a specific verb ('create') and resource ('new discount in Paddle'), and distinguishes it from siblings by explaining what discounts are and their function. It explicitly differentiates from list_discount_groups for organization purposes.

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

Usage Guidelines5/5

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

The description provides explicit guidance on when to use this tool (for creating discounts for checkout or manual application) and when to use alternatives (list_discount_groups for viewing organization). It also includes prerequisites ('Ensure you have all the information needed') and warns against fabrication.

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

create_discount_groupB

This tool will create a new discount group in Paddle.

Discount groups are used to organize and manage related discounts under a group name. Create one when managing multiple discounts together, like for a campaign, promotion, or team.

Ensure you have all the information needed before making the call. Don't fabricate, imagine, or infer details and parameter values unless explicitly asked to. If anything is ambiguous, unknown, or unclear, ask the user for clarification or details before you proceed.

If successful, the response includes a copy of the new discount group entity.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesName of this discount group.

TDQS

B3.3/5.0
Behavior3/5

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

Annotations provide readOnlyHint=false and destructiveHint=false, indicating this is a non-destructive write operation. The description adds that 'If successful, the response includes a copy of the new discount group entity,' which provides useful behavioral context about the return value. However, it doesn't mention authentication requirements, rate limits, or potential side effects beyond what annotations already cover.

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

Conciseness3/5

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

The description is reasonably structured with purpose first, then usage context, then behavioral notes. However, the middle paragraph contains generic advice ('Don't fabricate, imagine, or infer details') that applies to all tools rather than being specific to this one, reducing efficiency. The core information could be conveyed more concisely without losing value.

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?

Given a single parameter with full schema coverage and annotations indicating a non-destructive write operation, the description provides adequate context about what the tool does and when to use it. However, without an output schema, the description only briefly mentions the response format. For a creation tool, more detail about what constitutes success/failure or the structure of the returned entity would be helpful.

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 input schema has 100% description coverage with a single 'name' parameter fully documented. The description doesn't add any parameter-specific information beyond what's in the schema, so it meets the baseline of 3. The general advice about 'Ensure you have all the information needed' doesn't provide specific parameter semantics.

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

Purpose4/5

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

The description clearly states the tool 'will create a new discount group in Paddle' and explains that discount groups 'are used to organize and manage related discounts under a group name.' This provides a specific verb (create) and resource (discount group) with context about its purpose. However, it doesn't explicitly differentiate from sibling tools like 'create_discount' or 'list_discount_groups' beyond mentioning the group concept.

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

Usage Guidelines3/5

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

The description provides implied usage guidance by stating 'Create one when managing multiple discounts together, like for a campaign, promotion, or team.' This gives context for when to use it but doesn't explicitly mention when NOT to use it or name alternatives (e.g., 'create_discount' for individual discounts). The additional text about ensuring information and not fabricating details is general advice rather than specific tool usage guidance.

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

create_notification_settingA

This tool will create a new notification setting (notification destination) in Paddle.

Create notification destinations to get notifications, like webhooks, for events that happen in Paddle. Paddle recommends handling the storage and provisioning of access after purchase and subscription using webhooks.

The type describes how and where the event should be sent:

  • email: Deliver to an email address. Add the email address to the destination parameter.

  • url: Deliver to a webhook endpoint. Add the full URL including the path to the destination parameter.

The destination URL must be publicly accessible. localhost is not a valid address. For local development, use a tunnelling service like ngrok or Hookdeck to generate a public URL.

Pass an array of event type names to subscribedEvents to say which events should be subscribed to. Paddle responds with the full event type object for each event type.

Provide the trafficSource to define if the notification destination should be sent real events and/or simulated test events:

  • platform: Deliver real platform events. These are sent when real events which are subscribed to take place.

  • simulation: Deliver simulated events. These are sent when simulations are run to test single events or scenarios, usually to verify implementations of Paddle.

  • all: Deliver both platform (real) and simulation (test) events.

Create notification destinations as many as needed, but only 10 can be active as per the active boolean parameter. Prompt users to toggle in the dashboard. Alternatively, use the list_notification_setting tool, verify which should be active, and use the update_notification_setting tool to toggle the boolean accordingly.

If successful, the response includes a copy of the new notification setting entity. The endpointSecretKey is returned for webhook signature verification, but is a secure value and should never be shared, never be made publicly-accessible, and should only be stored securely.

ParametersJSON Schema
NameRequiredDescriptionDefault
descriptionYesShort description for this notification destination. Shown in the Paddle Dashboard.
typeYesWhere notifications should be sent for this destination.
destinationYesWebhook endpoint URL or email address.
apiVersionNoMust be `1` as the only current valid Paddle API version. If omitted, defaults to `1`.
includeSensitiveFieldsNoWhether potentially sensitive fields should be sent to this notification destination. If omitted, defaults to `false`.
subscribedEventsYesSubscribed events for this notification destination. When creating or updating a notification destination, pass an array of event type names only.
trafficSourceNoWhether Paddle should deliver real platform events, simulation events or both to this notification destination. If omitted, defaults to `platform`.

TDQS

A4.4/5.0
Behavior4/5

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

The description adds valuable behavioral context beyond the annotations (readOnlyHint=false, destructiveHint=false). It explains that only 10 destinations can be active, recommends handling storage and provisioning, warns about endpointSecretKey security, and details trafficSource options (platform, simulation, all). This enriches the agent's understanding without contradicting annotations.

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

Conciseness3/5

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

The description is front-loaded with the core purpose but becomes verbose with detailed explanations of parameters and edge cases. While informative, some sentences (e.g., about Paddle recommendations and local development) could be trimmed for conciseness. It's structured but not optimally efficient.

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

Completeness4/5

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

Given the complexity (7 parameters, no output schema) and rich annotations, the description is largely complete: it covers purpose, usage, parameters, behavioral constraints (active limit, security), and response details. However, it lacks explicit error handling or rate limit information, which slightly reduces completeness for a creation 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?

With 100% schema description coverage, the baseline is 3, but the description adds meaningful semantics: it explains the 'type' parameter with email/url examples and destination requirements, clarifies 'subscribedEvents' returns full event type objects, details 'trafficSource' options with real vs. simulated events, and notes 'active' boolean limitations. This goes beyond the schema's enum and description fields.

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

Purpose5/5

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

The description clearly states the tool 'will create a new notification setting (notification destination) in Paddle' with specific details about what it creates. It distinguishes from siblings by focusing on notification settings rather than addresses, adjustments, customers, etc., and mentions related tools like list_notification_setting and update_notification_setting for context.

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

Usage Guidelines5/5

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

The description provides explicit guidance on when to use this tool: 'Create notification destinations to get notifications, like webhooks, for events that happen in Paddle.' It also mentions alternatives like using the dashboard or other tools (list_notification_setting, update_notification_setting) for toggling active status, and advises on local development with tunneling services.

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

create_priceA

This tool will create a new price in Paddle.

Prices describe how to charge for products. Always include a productId in the request to relate the price to a product.

If the quantity object is omitted, Paddle automatically sets a minimum of 1 and a maximum of 100. This means the most units that a customer can buy is 100. Set a quantity to offer a different amount.

When selecting type, choose the one that best describes the use case:

  • custom: Non-catalog item. Typically created for a specific transaction or subscription. Not returned when listing or shown in the Paddle dashboard.

  • standard: Standard item. Can be considered part of the catalog and reused across transactions and subscriptions easily.

When selecting taxMode, choose the one that best describes how the tax should be calculated for the price:

  • account_setting: Price uses the setting from the account. Default.

  • external: Price is exclusive of tax. Common in European countries.

  • internal: Price is inclusive of tax. Common in countries like the United States and Canada.

When using unitPriceOverrides:

  • Group countries based on purchasing power parity (PPP), not just currency zones

  • Create separate overrides for countries with different economic conditions even if they share the same currency (e.g., Greece and Ireland should have different price points)

  • Adjust prices relative to local economic conditions - higher in wealthy markets, lower in developing economies

  • For optimal conversion rates, set prices using local market research and willingness-to-pay data

  • Use local currencies where preferred by the customer

Example unitPriceOverrides structure: [ { "countryCodes": ["GB"], "unitPrice": { "amount": "8500", "currencyCode": "GBP" } }, { "countryCodes": ["IE"], "unitPrice": { "amount": "9500", "currencyCode": "EUR" } }, { "countryCodes": ["GR"], "unitPrice": { "amount": "6500", "currencyCode": "EUR" } }, { "countryCodes": ["IN"], "unitPrice": { "amount": "30000", "currencyCode": "INR" } }, { "countryCodes": ["CN"], "unitPrice": { "amount": "20000", "currencyCode": "CNY" } } ]

Ensure you have all the information needed before making the call. Don't fabricate, imagine, or infer details and parameter values unless explicitly asked to. If anything is ambiguous, unknown, or unclear, ask the user for clarification or details before you proceed.

If successful, the response includes a copy of the new price entity.

ParametersJSON Schema
NameRequiredDescriptionDefault
descriptionYesInternal description for this price, not shown to customers.
typeNoType of item. Standard items are considered part of the listed catalog and are shown in the Paddle dashboard.
nameNoName of this price, shown to customers at checkout and on invoices. Typically describes how often the related product bills.
productIdYesPaddle ID for the product that this price is for, prefixed with `pro_`.
billingCycleNoHow often this price should be charged. `null` if price is non-recurring (one-time). If omitted, defaults to `null`.
trialPeriodNoTrial period for the product related to this price. The billing cycle begins once the trial period is over. `null` for no trial period. Requires `billingCycle`. If omitted, defaults to `null`.
taxModeNoHow tax is calculated for this price.
unitPriceYesBase price. This price applies to all customers, except for customers located in countries where `unitPriceOverrides` are set.
unitPriceOverridesNoList of unit price overrides. Use to override the base price with a custom price and currency for a country or group of countries.
quantityNoLimits on how many times the related product can be purchased at this price. Useful for discount campaigns. If omitted, defaults to 1-100.
customDataNoAny structured custom key-value data needed outside of Paddle's standard fields. Occasionally used by third-parties.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations indicate readOnlyHint=false and destructiveHint=false, but the description adds valuable behavioral context beyond this. It explains default behaviors ('If the quantity object is omitted, Paddle automatically sets a minimum of 1 and a maximum of 100'), provides implementation guidance for unitPriceOverrides, and specifies the response format ('If successful, the response includes a copy of the new price entity'). This goes beyond what annotations provide without contradicting them.

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

Conciseness3/5

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

The description is comprehensive but lengthy, with multiple sections that could be more efficiently organized. While all content is relevant, the extensive example and implementation advice for unitPriceOverrides (7 bullet points plus a detailed example) makes it less concise than ideal. The core purpose is clear upfront, but the structure includes substantial implementation guidance that might be better placed elsewhere.

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

Completeness5/5

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

Given the tool's complexity (11 parameters, nested objects, no output schema), the description provides excellent contextual completeness. It covers required parameters, explains parameter implications, provides implementation guidance, specifies response format, and includes warnings about data requirements. This adequately compensates for the lack of output schema and provides comprehensive guidance for this creation 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?

With 100% schema description coverage, the baseline is 3. The description adds significant value by explaining the practical implications of parameter choices: it clarifies when to use 'custom' vs 'standard' types, explains taxMode options with regional examples, provides detailed guidance on unitPriceOverrides implementation strategies, and explains the default behavior when quantity is omitted. This adds meaningful context beyond the schema's technical definitions.

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

Purpose5/5

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

The description explicitly states 'create a new price in Paddle' and explains that 'Prices describe how to charge for products.' This provides a specific verb ('create') and resource ('price'), clearly distinguishing it from sibling tools like 'get_price' or 'list_prices' which are read operations rather than creation tools.

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

Usage Guidelines4/5

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

The description provides clear context about when to use this tool: 'Always include a productId in the request to relate the price to a product.' It also offers guidance on parameter selection (e.g., 'When selecting type, choose the one that best describes the use case'). However, it doesn't explicitly state when NOT to use this tool or name specific alternatives among siblings.

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

create_productA

This tool will create a new product in Paddle.

Product entities describe the items that customers can purchase. Products work with prices, which describe how much a product costs and how often it's billed.

For imageUrl, images must be hosted on an HTTPS server that's publicly accessible. Paddle doesn't upload product images to a CDN. It's recommended to use square images (1:1 ratio).

When selecting a taxCategory, choose the one that best describes the product:

  • digital-goods: Non-customizable digital files or media (not software) acquired with an up front payment that can be accessed without any physical product being delivered.

  • ebooks: Digital books and educational material which is sold with permanent rights for use by the customer.

  • implementation-services: Remote configuration, set-up, and integrating software on behalf of a customer.

  • professional-services: Services that involve the application of expertise and specialized knowledge of a software product.

  • saas: Products that allow users to connect to and use online or cloud-based applications over the Internet.

  • software-programming-services: Services that can be used to customize and white label software products.

  • standard: Software products that are pre-written and can be downloaded and installed onto a local device.

  • training-services: Training and education services related to software products.

  • website-hosting: Cloud storage service for personal or corporate information, assets, or intellectual property.

The tax category affects how taxes are calculated in different jurisdictions. Choose carefully as it impacts customers' tax rates. When using the standard tax category, remind the user to review the tax category in the Paddle dashboard.

Ensure you have all the information needed before making the call. Don't fabricate, imagine, or infer details and parameter values unless explicitly asked to. If anything is ambiguous, unknown, or unclear, ask the user for clarification or details before you proceed.

If successful, the response includes a copy of the new product entity. Once a product has been created, relate it to a price.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesName of this product.
descriptionNoShort description for this product.
typeNoType of item. Standard items are considered part of the listed catalog and are shown in the Paddle dashboard.
taxCategoryYesTax category for this product. Used for charging the correct rate of tax. Selected tax category must be enabled at account level or an error is returned.
imageUrlNoImage for this product. Included in the checkout and on some customer documents.
customDataNoAny structured custom key-value data needed outside of Paddle's standard fields. Occasionally used by third-parties.

TDQS

A4/5.0
Behavior4/5

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

Annotations indicate readOnlyHint=false and destructiveHint=false, covering basic safety. The description adds valuable behavioral context beyond annotations: it explains that image URLs must be publicly accessible HTTPS, Paddle doesn't upload images to a CDN, tax category selection impacts tax rates, and the response includes a copy of the new product entity. It also warns about tax category review for the 'standard' category. No contradiction with annotations.

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

Conciseness3/5

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

The description is front-loaded with the tool's purpose, but it includes extensive tax category explanations and general usage warnings that could be streamlined. While informative, some sentences (e.g., the detailed tax category list) are lengthy, and the final paragraph about not fabricating details is generic rather than tool-specific, reducing efficiency.

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

Completeness4/5

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

Given the tool's complexity (6 parameters, 2 required, nested objects) and lack of output schema, the description is mostly complete. It covers key behavioral aspects like image hosting, tax category implications, and response format. However, it could better address error handling or specific constraints for parameters like customData to fully compensate for the missing 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 parameters. The description adds meaning for taxCategory by listing and explaining each enum value in detail, and for imageUrl by specifying HTTPS requirements and image ratio recommendations. However, it does not provide additional context for other parameters like name, description, type, or customData beyond what the schema offers.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'create a new product in Paddle' with the specific verb 'create' and resource 'product'. It distinguishes from siblings by focusing on product creation rather than other entities like addresses, adjustments, or customers, and explains that 'Product entities describe the items that customers can purchase'.

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

Usage Guidelines4/5

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

The description provides clear context for when to use this tool: for creating products that work with prices and require tax categories. It includes guidance on prerequisites ('Ensure you have all the information needed before making the call') and post-creation steps ('Once a product has been created, relate it to a price'). However, it does not explicitly mention when not to use it or name specific alternatives among siblings.

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

create_reportA

This tool will create a new report in Paddle.

Use this tool when detailed financial data for analysis, reconciliation, or export to spreadsheet applications is needed. Use this tool over listTransactions when trying to gather larger amounts of data from Paddle.

Reports are generated asynchronously - a report ID will be returned that can be used to check status. Reports initially have 'pending' status, then move to 'ready' when available to download. Reports are available in CSV format and can be downloaded once ready using the get_report_csv tool. Reports expire after a certain period and are no longer available to download after they expire.

There are different report types available:

  • adjustments: For information about refunds, credits, and chargebacks

  • adjustment_line_items: For information about refunds, credits, and chargebacks, broken down by line item level

  • transactions: For information about revenue received, past due invoices, draft and issued invoices, and canceled transactions

  • transaction_line_items: For information about revenue received, past due invoices, draft and issued invoices, and canceled transactions, broken down by line item level

  • products_prices: For information about the products and prices. May include non-catalog products and prices.

  • discounts: For information about the product and checkout discounts

Each report type has different filters which can be used:

  • action: adjustments and adjustment_line_items. Pass an array of strings containing any of 'refund', 'credit', 'chargeback', 'chargeback_reverse', 'chargeback_warning', 'chargeback_warning_reverse', 'credit_reverse' as values.

  • collection_mode: transactions and transaction_line_items. Pass an array of strings containing any of 'automatic' and 'manual' as values.

  • currency_code: adjustments, adjustment_line_items, transactions, and transaction_line_items. Pass an array of strings containing any valid supported three-letter ISO 4217 currency code.

  • origin: transactions and transaction_line_items. Pass an array of strings containing any of 'api', 'subscription_charge', 'subscription_payment_method_change', 'subscription_recurring', 'subscription_update', and 'web' as values.

  • product_status: products_prices. Pass an array of strings containing any of 'active' and 'archived' as values.

  • price_status: products_prices. Pass an array of strings containing any of 'active' and 'archived' as values.

  • product_type: products_prices. Pass an array of strings containing any of 'custom' and 'standard' as values.

  • price_type: products_prices. Pass an array of strings containing any of 'custom' and 'standard' as values.

  • product_updated_at: products_prices. Pass an RFC 3339 datetime string.

  • price_updated_at: products_prices. Pass an RFC 3339 datetime string.

  • status: adjustments, adjustment_line_items, transactions, transaction_line_items, and discounts. Pass an array of strings containing any valid value for the status field against an adjustment, transaction, or discount.

  • type: discounts and products_prices. Pass an array of strings containing any of 'custom' and 'standard' as values.

  • updated_at: adjustments, adjustment_line_items, transactions, transaction_line_items, and discounts. Pass an RFC 3339 datetime string. Use the operator parameter to specify the operator to use when filtering.

If successful, the response includes a copy of the new report entity.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeYesType of report to create.
filtersNoFilter criteria for this report. If omitted, reports are filtered to include data updated in the last 30 days. This means `updated_at` is greater than or equal to (`gte`) the date 30 days ago from the time the report was generated.

TDQS

A4.6/5.0
Behavior4/5

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

The description adds significant behavioral context beyond the annotations: it explains the asynchronous nature of report generation, status transitions (pending→ready), CSV format, expiration behavior, and the need to use get_report_csv for downloading. While annotations indicate it's not read-only and not destructive, the description provides practical operational details that aren't captured in structured fields.

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

Conciseness3/5

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

The description is comprehensive but lengthy and could be more front-loaded. While all information is relevant, the detailed filter explanations (which are valuable) make it verbose. The structure moves from high-level purpose to detailed implementation specifics, which is logical but not optimally concise.

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

Completeness5/5

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

Given the tool's complexity (asynchronous operation, multiple report types, numerous filters) and lack of output schema, the description provides complete context. It explains the workflow, available report types, filtering options, response format, and integration with other tools, making it fully self-contained for agent understanding.

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?

Despite 100% schema description coverage, the description adds substantial value by explaining each report type's purpose and detailing all available filters with specific examples and constraints. It provides context about what each filter means and which report types they apply to, going well beyond the schema's basic parameter documentation.

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

Purpose5/5

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

The description clearly states the tool creates a new report in Paddle, specifying it's for detailed financial data analysis, reconciliation, or export to spreadsheets. It distinguishes from sibling tools by explicitly contrasting with listTransactions for larger data gathering.

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

Usage Guidelines5/5

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

The description provides explicit guidance on when to use this tool ('when detailed financial data for analysis, reconciliation, or export to spreadsheet applications is needed') and when to prefer it over alternatives ('Use this tool over listTransactions when trying to gather larger amounts of data'). It also mentions the asynchronous nature and follow-up tools needed.

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

create_simulationA

This tool will create a new simulation for a notification setting (notification destination) in Paddle.

Test webhooks can be sent through the webhook simulator in the dashboard or via the API by creating and running a simulation. Simulations configure which test webhooks are sent by Paddle when run. They can simulate the sending of single events or scenarios which send multiple events, like subscription renewals or cancellations. This is ideal for testing webhook implementations and validating data before sending real events. If implementing webhooks or making changes to an implementation, create and run a simulation prior to sending real events.

For scenario simulations (type of subscription_creation, subscription_renewal, subscription_pause, subscription_resume, subscription_cancellation), config objects can be provided. The config object contains a key matching the scenario type (e.g., for type "subscription_creation", use config.subscription_creation). This nested object can contain entities and options fields to control which webhooks are sent and populate payloads with real entity data. If provided, the config object must match the scenario type selected.

Option values for scenario simulations:

subscriptionCancellation and subscriptionPause:

  • options.effectiveFrom:

    • next_billing_period: Simulates as if the subscription cancels or pauses at the start of next billing period.

    • immediately: Simulates as if the subscription cancels or pauses immediately.

subscriptionResume and subscriptionRenewal:

  • options.paymentOutcome:

    • success: Simulates as if the payment for the subscription is successful.

    • recovered_existing_payment_method: Simulates as if the payment for the subscription fails initially and the payment is recovered when retrying the existing payment method.

    • recovered_updated_payment_method: Simulates as if the payment for the subscription fails initially and the customer updates their payment method to successfully pay.

    • failed: Simulates as if the payment for the subscription is unsuccessful after all payment recovery attempts are exhausted.

  • options.dunningExhaustedAction (only valid when paymentOutcome is "failed"):

    • subscription_paused: Simulates as if the subscription is paused after all payment recovery attempts are exhausted.

    • subscription_canceled: Simulates as if the subscription is canceled after all payment recovery attempts are exhausted.

subscriptionCreation:

  • options.customerSimulatedAs:

    • new: Simulates as if a new customer enters their details at checkout and Paddle creates a new customer.

    • existing_email_matched: Simulates as if an existing customer enters their details at checkout. Paddle matches it to an existing customer based on the email supplied and creates a new address for that customer.

    • existing_details_prefilled: Simulates as if existing customer details are prefilled at checkout by passing them to Paddle.js.

  • options.businessSimulatedAs:

    • not_provided: Simulates as if no business is provided.

    • new: Simulates as if a customer enters their business details at checkout and Paddle creates a new business.

    • existing_details_prefilled: Simulates as if an existing business is prefilled at checkout by passing it to Paddle.js.

  • options.discountSimulatedAs:

    • not_provided: Simulates as if no discount is entered.

    • prefilled: Simulates as if a discount is prefilled at checkout by passing it to Paddle.js. Requires entities.discountId.

    • entered_by_customer: Simulates as if a customer entered a discount at checkout. Requires entities.discountId.

If config.entities are not provided, simulated webhook payloads are populated with static demo examples.

If successful, the response includes a copy of the new simulation entity. The simulation can then be run to send the events to the notification destination with the create_simulation_run tool.

ParametersJSON Schema
NameRequiredDescriptionDefault
notificationSettingIdYesPaddle ID of the notification setting (destination) where this simulation is sent, prefixed with `ntfset_`.
nameYesName of this simulation to identify internally.
typeYesType of event sent by Paddle, in the format `entity.event_type`. Either single events (e.g. 'subscription.created') or scenarios for multiple events (e.g. 'subscription_creation').
payloadNoSimulation payload. Pass a JSON object that matches the schema for an event type to simulate a custom payload. If omitted, Paddle populates with a demo example. Only for single event simulations, not scenarios.
configNoConfiguration for this scenario simulation. Determines which granular flow is simulated and what entities are used to populate webhook payloads with.

TDQS

A4.4/5.0
Behavior4/5

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

The description adds valuable behavioral context beyond the annotations. While annotations indicate it's not read-only and not destructive, the description explains that simulations are for testing webhooks, populate payloads with demo examples if config.entities are not provided, and the response includes a copy of the new simulation entity. It also mentions the tool's purpose in validation before real events, which provides important usage context.

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

Conciseness3/5

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

The description is appropriately front-loaded with core purpose and usage, but becomes verbose with extensive option value explanations that might be better placed in parameter-specific documentation. While all content is relevant, the length could challenge quick comprehension, though it maintains a logical flow from general to specific details.

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

Completeness4/5

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

Given the tool's complexity (5 parameters, nested objects, no output schema), the description provides substantial context. It explains the tool's role in the testing workflow, distinguishes between event types, details configuration options, and mentions the response format. The main gap is lack of explicit error handling or permission requirements, but overall it's quite comprehensive for this complex 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?

With 100% schema description coverage, the baseline is 3, but the description adds significant semantic value. It explains the distinction between single events and scenarios, provides detailed option values for scenario simulations (e.g., paymentOutcome meanings), clarifies config object requirements, and explains what happens when config.entities are omitted. This goes well beyond the schema's technical documentation.

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

Purpose5/5

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

The description clearly states the tool creates a new simulation for a notification setting in Paddle, specifying it configures test webhooks for single events or scenarios. It distinguishes from sibling tools like 'create_simulation_run' by explaining this tool creates the simulation while the sibling runs it, and from other 'create_' tools by focusing on webhook testing rather than actual resource creation.

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

Usage Guidelines5/5

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

The description explicitly states when to use this tool: 'ideal for testing webhook implementations and validating data before sending real events' and 'create and run a simulation prior to sending real events.' It also provides clear alternatives by mentioning the webhook simulator in the dashboard and specifying that the 'create_simulation_run' tool is used after creation to send events.

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

create_simulation_runA

This tool will create a new simulation run for a simulation in Paddle.

Test webhooks can be sent through the webhook simulator in the dashboard or via the API by creating and running a simulation. Simulation runs are used to send the test webhook events to the notification destination once the simulation has been configured.

If successful, the response includes a copy of the new simulation run entity. All events sent by the simulation run can be seen using the list_simulations_events tool or including the 'events' parameter in the response when fetching the individual simulation run using the get_simulation_run tool.

ParametersJSON Schema
NameRequiredDescriptionDefault
simulationIdYesPaddle ID of the simulation to create a run for.

TDQS

A3.5/5.0
Behavior3/5

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

Annotations indicate this is a non-destructive write operation (readOnlyHint: false, destructiveHint: false), which the description aligns with by stating it 'creates' something. The description adds useful context beyond annotations: it mentions that successful responses include the new entity and that events can be viewed via other tools. However, it doesn't cover potential side effects, error conditions, or rate limits, leaving some behavioral aspects unclear.

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

Conciseness4/5

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

The description is well-structured and appropriately sized at three sentences. The first sentence states the purpose clearly, the second provides context about webhooks and simulations, and the third explains the response and related tools. There's minimal redundancy, and each sentence adds value, though it could be slightly more front-loaded with the core action.

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

Completeness4/5

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

Given the tool has one parameter with full schema coverage, non-destructive annotations, and no output schema, the description does a good job of providing context. It explains the tool's role in webhook testing, mentions the response format, and references related tools for event viewing. However, it could be more complete by explicitly stating prerequisites (e.g., simulation must exist) or error scenarios, which would help an agent use it correctly.

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

Parameters3/5

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

The input schema has 100% description coverage, with the single parameter 'simulationId' clearly documented as 'Paddle ID of the simulation to create a run for.' The description doesn't add any additional parameter details beyond what the schema provides, such as format examples or constraints. With high schema coverage, the baseline score of 3 is appropriate as the description doesn't compensate but doesn't need to.

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

Purpose4/5

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

The description clearly states the tool 'creates a new simulation run for a simulation in Paddle' and explains its purpose in the context of webhook testing. It distinguishes from sibling tools like 'create_simulation' (which creates the simulation itself) and 'get_simulation_run' (which retrieves one). However, it doesn't explicitly contrast with 'list_simulation_runs' or 'replay_simulation_run_event', leaving some sibling differentiation 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?

The description implies usage context by mentioning that simulation runs are used 'once the simulation has been configured' and for sending test webhook events. It suggests alternatives like 'list_simulations_events' or 'get_simulation_run' for viewing events, but doesn't explicitly state when to use this tool versus those alternatives or other siblings like 'create_simulation'. Guidance is present but not fully explicit.

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

create_subscription_chargeA

This tool will create a one-time charge for a subscription in Paddle. Use to bill non-recurring items to a subscription. Non-recurring items are price entities where the billingCycle is null.

Don't use this tool without checking with the user first. Avoid using before gaining explicit approval.

When selecting effectiveFrom, choose the one that best describes when the one-time charges should be billed:

  • next_billing_period: Bill for one-time charges on the next billing period. Paddle adds the charges to the transaction created when the subscription next renews.

  • immediately: Bill for one-time charges now. Paddle creates a transaction for them right away. For automatically-collected subscriptions, responses may take longer than usual while a payment attempt is processed.

When selecting onPaymentFailure, choose the one that best describes how Paddle should handle subscription updates when payment fails during one-time charges:

  • prevent_change: Prevent the change to the subscription from applying.

  • apply_change: Apply the change and update the subscription.

Once created, to get details of a one-time charge:

  • When created with effectiveFrom as next_billing_period, get the subscription the charge was billed to and use the include query parameter with the nextTransaction value.

  • When created with effectiveFrom as immediately, list transactions and use the subscriptionId query parameter with the subscription ID of the subscription the charge was billed to.

When an update results in an immediate charge, responses may take longer than usual while a payment attempt is processed.

Ensure you have all the information needed before making the call. Don't fabricate, imagine, or infer details and parameter values unless explicitly asked to. If anything is ambiguous, unknown, or unclear, ask the user for clarification or details before you proceed.

If successful, the response includes a copy of the updated subscription entity. However, one-time charges aren't held against the subscription entity, so the charges billed aren't returned in the response.

ParametersJSON Schema
NameRequiredDescriptionDefault
subscriptionIdYesPaddle ID of the subscription.
effectiveFromYesWhen one-time charges should be billed.
itemsYesList of one-time charges to bill for. Only prices where the `billingCycle` is `null` may be added. Charge for items that have been added to the catalog by passing the Paddle ID of an existing price entity, or charge for non-catalog items by passing a price object. Non-catalog items can be for existing products, or pass a product object as part of the price to charge for a non-catalog product.
onPaymentFailureNoHow Paddle should handle changes made to a subscription or its items if the payment fails during update. If omitted, defaults to `prevent_change`.

TDQS

A4.7/5.0
Behavior5/5

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

The description adds significant behavioral context beyond annotations. While annotations indicate it's not read-only and not destructive, the description details: payment processing delays ('responses may take longer than usual'), how to retrieve charge details post-creation, that charges aren't returned in the response, and specific handling of payment failures. This provides crucial operational context that annotations don't cover.

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

Conciseness3/5

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

The description is comprehensive but verbose at 15+ sentences. While all content is relevant, it could be more front-loaded with critical information. The warning about user approval appears early, but some operational details are buried. It's appropriately sized for the tool's complexity but not optimally structured.

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

Completeness5/5

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

For a mutation tool with no output schema, the description provides exceptional completeness. It covers: purpose, usage warnings, parameter implications, behavioral characteristics (processing delays, response limitations), and follow-up procedures. Given the tool's financial nature and complexity, this level of detail is appropriate and helpful for safe agent operation.

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

Parameters4/5

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

Despite 100% schema description coverage, the description adds valuable semantic context for parameters. It explains the practical implications of effectiveFrom choices ('next_billing_period' vs 'immediately'), clarifies onPaymentFailure behavior, and provides guidance on how to use the items parameter with catalog vs non-catalog items. This goes beyond the schema's technical definitions.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'create a one-time charge for a subscription in Paddle' and specifies it's for 'non-recurring items' where 'billingCycle is null'. It distinguishes from siblings by focusing on subscription charges rather than general creation tools like create_transaction or create_adjustment.

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

Usage Guidelines5/5

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

The description provides explicit guidance on when to use ('to bill non-recurring items to a subscription') and includes strong warnings: 'Don't use this tool without checking with the user first' and 'Avoid using before gaining explicit approval'. It also references sibling tools for follow-up actions (get_subscription, list_transactions).

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

create_transactionA

This tool will create a new transaction in Paddle.

Don't use this tool without checking with the user first. Avoid using before gaining explicit approval.

The collectionMode against a transaction determines how Paddle tries to collect for payment:

  • Manually-collected transactions are for sales-assisted billing. Paddle sends an invoice to the customer when a transaction is billed. Payment is often by wire transfer. Requires billingDetails, and an address which has country, postalCode, region, city, and firstLine.

  • Automatically-collected transactions are for payments collected automatically using a self-serve checkout where payment is collected using a checkout. Pass the transaction to a checkout or use the returned checkout.url to collect for payment. checkout.url is a unique Paddle payment link composed of the URL passed as checkout.url, or the default payment URL on the account, with ?_ptxn= and the Paddle ID for this transaction appended to the URL.

Transactions have a status. Set the status or omit it to have Paddle set it. It's only recommended to set the status manually if working with manually-collected transactions as part of an invoicing workflow. Options are:

  • billed: Marks as finalized and can't be updated, only canceled. This is essentially issuing an invoice. At this point, it becomes a legal record so it can't be changed. Paddle automatically assigns an invoice number, creates a related subscription, and sends it to the customer.

  • canceled: Canceled transactions are no longer due. This is only for record purposes on creation.

When status is omitted, transactions are initially created with the status of draft or ready:

  • Draft transactions have items against them, but don't have all of the required fields for billing. Paddle creates draft transactions automatically when a checkout is opened.

  • Paddle automatically marks transactions as ready when all of the required fields are present for billing. This includes customerId and addressId for automatically-collected transactions, and billingDetails for manually-collected transactions.

When a transaction has items which are recurring, and the transaction has a status of billed when manually-collected or completed when automatically-collected, Paddle automatically creates a related subscription for the items on the transaction. Use the returned subscriptionId to get the subscription entity.

Use the include parameter to include related entities in the response:

  • address: An object for the address entity related to this transaction. Only returned if an address is set against the transaction with addressId.

  • available_payment_methods: An array of payment methods that are available to use for this transaction.

  • business: An object for the business entity related to this transaction. Only returned if a business is set against the transaction with businessId.

  • customer: An object for the customer entity related to this transaction. Only returned if a customer is set against the transaction with customerId.

  • discount: An object for the discount entity related to this transaction. Only returned if a discount is set against the transaction with discount or discountId.

Ensure you have all the information needed before making the call. Don't fabricate, imagine, or infer details and parameter values unless explicitly asked to. If anything is ambiguous, unknown, or unclear, ask the user for clarification or details before you proceed.

Consider using the preview_transaction_create tool to preview and confirm the transaction before creating it.

If successful, the response includes a copy of the new transaction entity.

ParametersJSON Schema
NameRequiredDescriptionDefault
statusNoStatus of this transaction. Either set a transaction to `billed` or `canceled` when creating, or omit to let Paddle set the status. Transactions are created as `ready` if they have an `addressId`, `customerId`, and `items`, otherwise they are created as `draft`. Marking as `billed` when creating is typically used when working with manually-collected transactions as part of an invoicing workflow. Billed transactions cannot be updated, only canceled.
customerIdNoPaddle ID of the customer that this transaction is for, prefixed with `ctm_`. If omitted, transaction status is `draft`.
addressIdNoPaddle ID of the address that this transaction is for, prefixed with `add_`. Requires `customerId`. If omitted, transaction status is `draft`.
businessIdNoPaddle ID of the business that this transaction is for, prefixed with `biz_`. Requires `customerId`.
customDataNoAny structured custom key-value data needed outside of Paddle's standard fields. Occasionally used by third-parties.
currencyCodeNoSupported three-letter ISO 4217 currency code. Must be `USD`, `EUR`, or `GBP` if `collectionMode` is `manual`.
collectionModeNoHow payment is collected for this transaction. `automatic` for checkout, `manual` for invoices. If omitted, defaults to `automatic`.
discountIdNoPaddle ID of the discount applied to this transaction, prefixed with `dsc_`.
billingDetailsNoDetails for invoicing. Required if `collectionMode` is `manual`.
billingPeriodNoTime period that this transaction is for. Set automatically by Paddle for subscription renewals to describe the period that charges are for.
itemsYesList of items to charge for. Charge for items that have been added to the catalog by passing the Paddle ID of an existing price entity, or charge for non-catalog items by passing a price object. Non-catalog items can be for existing products, or pass a product object as part of the price to charge for a non-catalog product.
checkoutNoPaddle Checkout details for this transaction. Used for automatically-collected transactions, or when creating or updating a manually-collected transaction where `billingDetails.enableCheckout` is `true`.
includeNoInclude related entities in the response. Use a comma-separated list to specify multiple entities.

TDQS

A4.1/5.0
Behavior4/5

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

The description adds significant behavioral context beyond annotations. It explains collection modes (manual vs. automatic), status implications (billed transactions become legal records), subscription creation for recurring items, and response inclusion options. Annotations only indicate it's not read-only or destructive, so the description provides essential operational details.

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 description is excessively long (over 600 words) and poorly structured. It mixes usage warnings, parameter explanations, and behavioral details without clear organization. While informative, it lacks front-loading and contains repetitive elements, making it difficult for an agent to quickly extract key 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?

Given the tool's complexity (13 parameters, nested objects, no output schema), the description provides substantial context about behavior, usage scenarios, and implications. It covers collection modes, status handling, subscription creation, and response inclusions. However, it could better summarize the tool's overall workflow and error conditions.

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 some semantic context for parameters like 'collectionMode', 'status', and 'include', explaining their effects and usage scenarios, but doesn't provide extensive additional parameter details 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?

The description clearly states the tool's purpose: 'create a new transaction in Paddle.' It specifies the verb ('create') and resource ('transaction'), and distinguishes it from sibling tools like 'preview_transaction_create' and 'get_transaction' by emphasizing the creation action.

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

Usage Guidelines5/5

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

The description provides explicit guidance on when to use this tool: 'Don't use this tool without checking with the user first' and 'Consider using the preview_transaction_create tool to preview and confirm the transaction before creating it.' It also mentions alternatives like using checkouts for automatically-collected transactions.

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

get_addressB
Read-only

This tool will retrieve an address for a customer from Paddle using its ID and related customer ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
customerIdYesPaddle ID of the customer.
addressIdYesPaddle ID of the address.

TDQS

B3.3/5.0
Behavior3/5

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

Annotations indicate readOnlyHint=true, which the description aligns with by using 'retrieve' (a read operation). The description adds minimal context about the data source ('Paddle') but does not disclose additional behavioral traits such as error handling, authentication needs, or rate limits. With annotations covering safety, a baseline 3 is appropriate for the slight added value.

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

Conciseness5/5

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

The description is a single, efficient sentence with no wasted words. It front-loads the core action ('retrieve an address') and includes essential details (source, IDs), making it easy to parse quickly.

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?

Given the tool's low complexity (simple retrieval), 100% schema coverage, and read-only annotation, the description is minimally adequate. However, without an output schema, it lacks details on return values or format, and it misses sibling differentiation, leaving gaps in full contextual understanding.

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 clear descriptions for both parameters. The description mentions using 'ID and related customer ID,' which mirrors the schema but adds no extra meaning about parameter relationships or usage. This meets the baseline when schema coverage is high.

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

Purpose4/5

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

The description clearly states the tool's purpose: 'retrieve an address for a customer from Paddle using its ID and related customer ID.' It specifies the verb ('retrieve'), resource ('address'), and data source ('Paddle'), but does not explicitly differentiate it from its sibling 'list_addresses' or other get_* tools, which would require a 5.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives like 'list_addresses' or other retrieval tools. It mentions the required IDs but offers no context about prerequisites, error conditions, or typical use cases, leaving the agent without operational direction.

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

get_adjustment_credit_noteA
Read-only

This tool will retrieve a link to a credit note PDF for an adjustment from Paddle.

Credit note PDFs are created for refunds and credits as a record of an adjustment. Return this if record is needed to be given to the customer immediately after the adjustment is created.

The link returned is not a permanent link. It expires after an hour.

ParametersJSON Schema
NameRequiredDescriptionDefault
adjustmentIdYesPaddle ID of the adjustment.
dispositionNoDetermine whether the generated URL should download the PDF as an attachment saved locally, or open it inline in the browser.

TDQS

A4.2/5.0
Behavior4/5

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

The description adds valuable behavioral context beyond the readOnlyHint annotation. It explains that the link expires after an hour, which is crucial operational information not captured in annotations. It also clarifies that credit note PDFs are created for refunds and credits as adjustment records, providing context about when these documents exist. No contradiction with the readOnlyHint annotation.

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

Conciseness5/5

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

The description is perfectly structured and concise with three focused sentences. The first states the core purpose, the second provides context about when credit notes are created, and the third delivers crucial behavioral information about link expiration. Every sentence earns its place with no wasted words.

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

Completeness4/5

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

For a read-only retrieval tool with good annotations and complete schema coverage, the description provides excellent context about the tool's purpose, usage timing, and link expiration behavior. The main gap is the lack of output schema, so the description doesn't specify the exact format of the returned link, but this is mitigated by the clear behavioral context provided.

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

Parameters3/5

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

With 100% schema description coverage, the schema already documents both parameters thoroughly. The description doesn't add any additional parameter semantics beyond what's in the schema descriptions. The baseline score of 3 is appropriate since the schema does the heavy lifting for parameter documentation.

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

Purpose5/5

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

The description clearly states the tool's purpose with specific verbs ('retrieve a link to a credit note PDF') and resource ('for an adjustment from Paddle'). It distinguishes itself from siblings by focusing on credit note PDF retrieval rather than general adjustment data (like 'get_adjustment' or 'list_adjustments'), and explains the context of credit notes being created for refunds and credits.

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

Usage Guidelines4/5

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

The description provides clear context for when to use this tool ('Return this if record is needed to be given to the customer immediately after the adjustment is created'), which helps differentiate it from other adjustment-related tools. However, it doesn't explicitly mention when NOT to use it or name specific alternatives among the sibling tools.

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

get_businessB
Read-only

This tool will retrieve a business for a customer from Paddle using its ID and related customer ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
customerIdYesPaddle ID of the customer.
businessIdYesPaddle ID of the business.

TDQS

B3.3/5.0
Behavior3/5

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

Annotations provide readOnlyHint=true, so the agent knows it's safe. The description adds that it retrieves 'for a customer' and specifies the source (Paddle), which offers useful context beyond annotations. However, it doesn't mention error conditions, rate limits, or authentication 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?

Single sentence with zero waste—directly states the tool's purpose without fluff. Efficiently front-loaded with the core action and key parameters.

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 read operation with good annotations and full schema coverage, the description is adequate but minimal. It lacks output details (no output schema) and doesn't explain error handling or typical return structure, leaving gaps for agent understanding.

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 both parameters clearly documented in the schema. The description mentions using 'ID and related customer ID' but doesn't add syntax, format, or relationship details 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?

The description clearly states the action ('retrieve') and resource ('a business'), specifying it's from Paddle using ID and customer ID. It distinguishes from 'list_businesses' by focusing on single retrieval, but doesn't explicitly contrast with other get_ tools like 'get_customer' or 'get_address'.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives like 'list_businesses' or other retrieval tools. The description mentions needing both IDs but doesn't provide context about prerequisites or typical use cases.

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

get_client_side_tokenA
Read-only

This tool will retrieve a client-side token from Paddle by its ID.

The returned token field is the client-side token that needs to be provided when initializing Paddle.js. Can be exposed client-side safely. If it starts with:

  • test_: The token is a test token for a sandbox environment and shouldn't be used in production.

  • live_: The token is a live token for a production environment. It can be used to test too but Paddle.js checkouts require real cards.

Client-side tokens have a status:

  • active: Client-side token can be used to authenticate with Paddle.js.

  • revoked: Client-side token has been revoked and can no longer be used to authenticate with Paddle.js.

ParametersJSON Schema
NameRequiredDescriptionDefault
clientTokenIdYesPaddle ID of the client-side token.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, indicating a safe read operation. The description adds valuable behavioral context beyond this: it explains the token's purpose (initializing Paddle.js), safety considerations (can be exposed client-side), environment distinctions (test_ vs. live_ prefixes), and token statuses (active/revoked). This enhances the agent's understanding without contradicting annotations.

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

Conciseness5/5

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

The description is well-structured and front-loaded, starting with the core purpose, followed by usage context and behavioral details. Each sentence adds value: the first states the action, the second explains the token's use, and the subsequent ones cover safety, environment prefixes, and statuses—with zero 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?

Given the tool's simplicity (one parameter, read-only operation) and lack of an output schema, the description provides comprehensive context: it covers purpose, usage, behavioral traits, and output interpretation (token prefixes and statuses). However, it does not explicitly describe the return format or error handling, leaving minor gaps.

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

Parameters3/5

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

The input schema has 100% description coverage, with the parameter 'clientTokenId' clearly documented as 'Paddle ID of the client-side token.' The description does not add further parameter details beyond what the schema provides, so it meets the baseline of 3 for high schema coverage.

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

Purpose5/5

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

The description clearly states the specific action ('retrieve a client-side token') and resource ('from Paddle by its ID'), distinguishing it from sibling tools like 'list_client_side_tokens' (which lists multiple tokens) and 'create_client_side_token' (which creates new tokens). It precisely defines what the tool does without ambiguity.

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

Usage Guidelines4/5

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

The description provides clear context on when to use this tool (to retrieve a specific token by ID) and implicitly distinguishes it from 'list_client_side_tokens' for bulk retrieval. However, it lacks explicit guidance on when NOT to use it or alternatives for related operations like token creation or listing.

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

get_customerB
Read-only

This tool will retrieve a customer from Paddle by its ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
customerIdYesPaddle ID of the customer.

TDQS

B3.3/5.0
Behavior3/5

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

The description doesn't add behavioral context beyond what annotations provide. Annotations declare readOnlyHint=true, which already indicates this is a safe read operation. The description doesn't disclose additional traits like authentication requirements, rate limits, error conditions, or what happens if the customer ID doesn't exist.

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

Conciseness5/5

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

The description is extremely concise - a single sentence that directly states the tool's purpose with zero wasted words. It's perfectly front-loaded and appropriately sized for this simple retrieval tool.

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 read operation with good annotations (readOnlyHint) and full parameter documentation, the description is minimally adequate. However, without an output schema and with no behavioral context about what gets returned or error conditions, there are clear gaps in completeness for agent usage.

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

Parameters3/5

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

With 100% schema description coverage, the input schema already fully documents the single 'customerId' parameter. The description doesn't add any meaningful semantic context beyond what's in the schema - it mentions retrieving by ID but doesn't explain format, validation, or examples.

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

Purpose4/5

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

The description clearly states the verb ('retrieve') and resource ('a customer from Paddle'), making the purpose specific and understandable. However, it doesn't explicitly differentiate from sibling tools like 'list_customers' or 'get_customer' vs other 'get_' tools, which would be needed for a perfect score.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. There's no mention of prerequisites, when to choose this over 'list_customers', or any context about its specific use case compared to other customer-related tools in the sibling list.

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

get_discountB
Read-only

This tool will retrieve a discount from Paddle by its ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
discountIdYesPaddle ID of the discount.

TDQS

B3.3/5.0
Behavior3/5

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

Annotations provide readOnlyHint=true, so the agent knows this is a safe read operation. The description adds minimal context by specifying 'by its ID,' which clarifies the lookup mechanism. However, it doesn't disclose any additional behavioral traits like error handling, authentication needs, rate limits, or what happens if the discount ID doesn't exist.

Agents need to know what a tool does to the world before 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, efficient sentence with zero wasted words. It's front-loaded with the core action and resource, making it easy to parse. Every word earns its place without redundancy or unnecessary elaboration.

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 read operation with one parameter and readOnlyHint annotation, the description is minimally adequate. However, without an output schema, it doesn't explain what data is returned (e.g., discount details, status, or error formats). Given the tool's simplicity, the description meets basic needs but lacks depth for full contextual understanding.

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 the single parameter 'discountId' fully documented in the schema as 'Paddle ID of the discount.' The description adds no additional meaning beyond this, merely restating that retrieval is 'by its ID.' With high schema coverage, the baseline score of 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 clearly states the action ('retrieve') and resource ('a discount from Paddle by its ID'), making the purpose unambiguous. However, it doesn't distinguish this tool from other 'get_' siblings like 'get_discount_group' or 'get_customer', which follow the same pattern of retrieving specific resources by ID.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. With siblings like 'list_discounts' (for multiple discounts) and 'get_discount_group' (for related resources), the agent must infer usage from naming conventions alone. No explicit when/when-not instructions or prerequisite information is given.

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

get_discount_groupB
Read-only

This tool will retrieve a discount group from Paddle by its ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
discountGroupIdYesPaddle ID of the discount group.

TDQS

B3.3/5.0
Behavior3/5

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

The annotations provide readOnlyHint=true, indicating a safe read operation. The description adds minimal context by specifying retrieval by ID, but does not disclose additional behavioral traits such as error handling, rate limits, or authentication needs. With annotations covering safety, a 3 is appropriate as the description adds some value but lacks rich behavioral 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?

The description is a single, efficient sentence with no wasted words. It is appropriately sized and front-loaded, clearly stating the tool's purpose without unnecessary elaboration.

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?

Given the tool's low complexity (single parameter, read-only), annotations covering safety, and no output schema, the description is minimally adequate. However, it lacks details on return values or error cases, which would be helpful for completeness. A 3 reflects a basic but incomplete description for this context.

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

Parameters3/5

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

The input schema has 100% description coverage, with the parameter 'discountGroupId' fully documented. The description implies retrieval by ID but does not add meaning beyond what the schema provides, such as ID format or examples. Baseline 3 is correct when the schema handles parameter documentation effectively.

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

Purpose4/5

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

The description clearly states the tool's purpose: 'retrieve a discount group from Paddle by its ID.' It specifies the verb ('retrieve'), resource ('discount group'), and source ('Paddle'), but does not explicitly differentiate it from sibling tools like 'list_discount_groups' or 'get_discount', which would require a 5.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It does not mention sibling tools like 'list_discount_groups' for listing multiple groups or 'get_discount' for individual discounts, nor does it specify prerequisites or exclusions for usage.

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

get_notificationA
Read-only

This tool will retrieve a notification from Paddle by its ID.

When an event that has a notification destination occurs, Paddle creates a notification entity with information about the notification.

Notifications older than 90 days aren't retained. If trying to get a notification that's no longer retained, Paddle returns an error.

Check the following details to understand the success or failure of the notification according to Paddle and debug issues:

  • status: Status of the notification.

    • notAttempted: Paddle hasn't yet tried to deliver this notification.

    • needsRetry: Paddle tried to deliver this notification, but it failed. It's scheduled to be retried.

    • delivered: Paddle delivered this notification successfully.

    • failed: Paddle tried to deliver this notification, but all attempts failed. It's not scheduled to be retried.

  • origin: Describes how this notification was created.

    • event: Notification created when a subscribed event occurred.

    • replay: Notification created when a notification with the origin event was replayed.

  • deliveredAt: RFC 3339 datetime string of when this notification was delivered. null if not yet delivered successfully.

  • lastAttemptAt: RFC 3339 datetime string of when this notification was last attempted.

  • retryAt: RFC 3339 datetime string of when this notification is scheduled to be retried.

  • timesAttempted: How many times delivery of this notification has been attempted.

ParametersJSON Schema
NameRequiredDescriptionDefault
notificationIdYesPaddle ID of the notification.

TDQS

A3.7/5.0
Behavior4/5

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

Annotations provide readOnlyHint=true, indicating a safe read operation. The description adds valuable behavioral context beyond this: it explains the 90-day retention policy, error handling for non-retained notifications, and details about notification statuses and attributes (e.g., status, origin, timestamps). This enhances understanding of the tool's behavior without contradicting annotations.

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

Conciseness4/5

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

The description is well-structured and front-loaded with the core purpose, followed by important behavioral details. It avoids unnecessary fluff, but the detailed breakdown of notification attributes (status, origin, etc.) is somewhat lengthy for a retrieval tool, though informative. Most sentences earn their place by clarifying tool behavior.

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

Completeness4/5

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

For a read-only tool with one parameter and no output schema, the description is quite complete. It covers the tool's purpose, retention policy, error conditions, and key return attributes. However, it doesn't specify the output format or structure, which could be helpful given the lack of an output schema, leaving 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?

The input schema has 100% description coverage, with the 'notificationId' parameter clearly documented. The description doesn't add any parameter-specific information beyond what the schema provides, such as format examples or constraints. Given the high schema coverage, a baseline score of 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 clearly states the tool's purpose: 'retrieve a notification from Paddle by its ID.' This specifies the verb ('retrieve') and resource ('notification'), making it unambiguous. However, it doesn't explicitly differentiate from sibling tools like 'list_notifications' or 'get_notification_setting,' which would be needed for a perfect score.

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

Usage Guidelines3/5

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

The description implies usage by mentioning that notifications older than 90 days aren't retained, suggesting this tool is for retrieving specific, recent notifications. However, it lacks explicit guidance on when to use this versus alternatives like 'list_notifications' or 'replay_notification,' and doesn't mention prerequisites or exclusions.

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

get_notification_settingA
Read-only

This tool will retrieve a notification setting (notification destination) from Paddle by its ID.

The endpointSecretKey is returned for webhook signature verification, but is a secure value and should never be shared, never be made publicly-accessible, and should only be stored securely.

ParametersJSON Schema
NameRequiredDescriptionDefault
notificationSettingIdYesPaddle ID of the notification setting (destination).

TDQS

A3.5/5.0
Behavior4/5

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

Annotations provide readOnlyHint=true, indicating a safe read operation. The description adds valuable behavioral context beyond this: it discloses that the endpointSecretKey is returned for webhook verification and includes security warnings ('secure value,' 'never be shared,' 'store securely'). This enhances transparency about sensitive data handling, though it doesn't cover rate limits or error behaviors.

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

Conciseness4/5

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

The description is concise and front-loaded: the first sentence clearly states the purpose. The second sentence adds important security context without redundancy. Both sentences earn their place, though minor improvements in structure (e.g., bullet points for security warnings) could push it to a 5.

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

Completeness4/5

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

Given the tool's low complexity (single parameter, read-only operation) and rich annotations (readOnlyHint), the description is reasonably complete. It adds security warnings that aren't covered by annotations or schema. However, without an output schema, it doesn't detail the full response structure (e.g., other fields besides endpointSecretKey), leaving a minor gap.

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

Parameters3/5

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

Schema description coverage is 100% for the single parameter 'notificationSettingId,' which is fully documented in the schema. The description doesn't add any parameter-specific details beyond what the schema provides, such as format examples or constraints. With high schema coverage, the baseline score of 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 clearly states the tool's purpose: 'retrieve a notification setting (notification destination) from Paddle by its ID.' This specifies the verb ('retrieve'), resource ('notification setting'), and scope ('by its ID'). However, it doesn't explicitly differentiate from sibling tools like 'list_notification_settings' or 'get_notification', which would require a 5.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention sibling tools like 'list_notification_settings' for bulk retrieval or 'get_notification' for individual notifications, nor does it specify prerequisites or exclusions. This leaves the agent without contextual usage direction.

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

get_priceB
Read-only

This tool will retrieve a price from Paddle by its ID.

Use the include parameter to include related entities in the response:

  • product: An object for the product entity tied to the price.

ParametersJSON Schema
NameRequiredDescriptionDefault
priceIdYesPaddle ID of the price.
includeNoInclude related entities in the response.

TDQS

B3.3/5.0
Behavior3/5

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

Annotations provide readOnlyHint=true, indicating a safe read operation. The description adds value by specifying that it retrieves from 'Paddle' and mentions the 'include' parameter for related entities, offering some behavioral context. However, it doesn't disclose additional traits like error handling, rate limits, or response format, which could be useful given 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?

The description is well-structured and concise, with two sentences that directly address the tool's function and a key parameter. There is no wasted text, and information is front-loaded, making it efficient for an agent to parse.

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?

Given the tool's low complexity (2 parameters, 1 required) and annotations covering safety, the description is adequate but has gaps. It lacks output details (no schema provided), doesn't explain prerequisites like authentication, and offers no usage guidelines. This makes it minimally viable but incomplete for optimal agent use.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema fully documents both parameters. The description adds minimal semantics by explaining that 'include' can fetch 'related entities' like 'product,' but this is largely redundant with the schema. Baseline 3 is appropriate as 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 clearly states the tool's purpose: 'retrieve a price from Paddle by its ID.' It specifies the verb ('retrieve'), resource ('price'), and source ('Paddle'), which is specific and actionable. However, it doesn't explicitly differentiate from sibling tools like 'list_prices' or 'preview_prices,' which would require a 5.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It mentions the 'include' parameter for related entities but doesn't explain when this is necessary or compare it to other tools like 'get_product' or 'list_prices.' This lack of contextual direction leaves the agent without usage criteria.

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

get_productB
Read-only

This tool will retrieve a product from Paddle by its ID.

Use the include parameter to include related entities in the response:

  • prices: An array of price entities available for the product.

ParametersJSON Schema
NameRequiredDescriptionDefault
productIdYesPaddle ID of the product.
includeNoInclude related entities in the response. Use a comma-separated list to specify multiple entities.

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, indicating a safe read operation. The description adds useful context about including related entities ('prices') in the response, which goes beyond annotations. However, it doesn't disclose other behavioral traits like error handling, rate limits, or authentication needs, leaving room for improvement.

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 appropriately sized with two sentences: one for the core purpose and one for parameter guidance. It's front-loaded with the main function and avoids unnecessary details. However, the second sentence could be slightly more structured (e.g., bullet points for clarity), preventing a perfect score.

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?

Given the tool's low complexity (read-only, 2 parameters) and 100% schema coverage, the description is mostly adequate. However, with no output schema, it doesn't explain return values (e.g., product fields or error formats), and it lacks context on prerequisites or limitations, making it incomplete for optimal agent use.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema fully documents both parameters. The description adds minimal value by mentioning the 'include' parameter and its purpose, but doesn't provide syntax or format details beyond what the schema already states (e.g., 'comma-separated list'). This meets the baseline for high schema coverage.

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

Purpose4/5

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

The description clearly states the tool's purpose: 'retrieve a product from Paddle by its ID.' This is a specific verb+resource combination that distinguishes it from sibling tools like 'list_products' or 'create_product.' However, it doesn't explicitly differentiate from other 'get_' tools (e.g., 'get_price'), which prevents a perfect score.

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

Usage Guidelines3/5

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

The description provides implied usage guidance by mentioning the 'include' parameter for related entities, suggesting when to use this tool for enriched data. However, it lacks explicit when-to-use vs. when-not-to-use statements or named alternatives (e.g., 'list_products' for multiple products). This makes it adequate but with gaps.

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

get_reportA
Read-only

This tool will retrieve a report entity from Paddle by its ID. It only contains information about the report, like the ID, status, and the date it was created.

Use this tool to check the status of a generated report, or to get the ID of a report, to then use with the get_report_csv tool to download the CSV.

ParametersJSON Schema
NameRequiredDescriptionDefault
reportIdYesPaddle ID of the report.

TDQS

A4.4/5.0
Behavior4/5

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

The annotations already provide readOnlyHint=true, which covers the safety aspect. The description adds valuable context about what information is returned ('ID, status, and the date it was created') and clarifies that this is for retrieving existing reports rather than creating them. However, it doesn't mention potential limitations like error conditions or authentication 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 perfectly concise with three sentences that each serve a distinct purpose: stating what the tool does, clarifying what information it returns, and providing usage guidance. There is no wasted language and the structure is logical and front-loaded.

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

Completeness4/5

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

For a simple read operation with one parameter and readOnlyHint annotation, the description provides excellent context about purpose, usage, and return information. The main gap is the lack of output schema, but the description partially compensates by describing what information is returned. It could be more complete by mentioning error cases or response format.

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

Parameters3/5

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

The schema description coverage is 100%, with the single parameter 'reportId' fully documented in the schema. The description mentions 'by its ID' which aligns with the schema but doesn't add additional semantic context beyond what's already in the structured data. This meets the baseline for high schema coverage.

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

Purpose5/5

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

The description clearly states the specific action ('retrieve a report entity'), resource ('from Paddle by its ID'), and scope ('only contains information about the report, like the ID, status, and the date it was created'). It distinguishes from sibling tools by specifying this is for retrieving individual reports rather than listing or creating them.

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

Usage Guidelines5/5

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

The description explicitly states when to use this tool ('Use this tool to check the status of a generated report, or to get the ID of a report') and provides a clear alternative ('to then use with the get_report_csv tool to download the CSV'). This gives the agent specific guidance on appropriate use cases and next steps.

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

get_report_csvA
Read-only

This tool will retrieve a link to a CSV file for a report from Paddle by its ID.

Only returned for reports that are ready. This means Paddle has completed processing the report and it's ready to download. The status of a report can be checked using the get_report tool.

The link returned isn't a permanent link. It expires after 3 minutes.

ParametersJSON Schema
NameRequiredDescriptionDefault
reportIdYesPaddle ID of the report.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations provide readOnlyHint=true, indicating a safe read operation. The description adds valuable behavioral context beyond annotations: it specifies that the link expires after 3 minutes (a critical constraint) and clarifies that reports must be ready (a prerequisite condition). However, it doesn't mention rate limits or authentication needs, leaving some behavioral aspects uncovered.

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

Conciseness5/5

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

The description is efficiently structured in three sentences with zero waste: the first states the purpose, the second specifies prerequisites, and the third adds critical behavioral detail (link expiration). Each sentence earns its place by providing essential information without redundancy.

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

Completeness4/5

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

Given the tool's simplicity (1 parameter, read-only operation, no output schema), the description is nearly complete. It covers purpose, usage guidelines, and key behavioral constraints. The only minor gap is the lack of output format details (e.g., what the link structure looks like), but this is partially mitigated by the clear purpose statement.

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 the single parameter 'reportId' fully documented in the schema as 'Paddle ID of the report.' The description doesn't add any additional parameter semantics beyond what the schema provides, so it meets the baseline of 3 for high schema coverage without compensating value.

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

Purpose5/5

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

The description clearly states the specific action ('retrieve a link to a CSV file') and resource ('a report from Paddle by its ID'), distinguishing it from sibling tools like 'get_report' (which checks status) and 'create_report' (which creates reports). It precisely defines what the tool does without being vague or tautological.

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

Usage Guidelines5/5

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

The description explicitly states when to use this tool ('Only returned for reports that are ready') and when not to use it (if reports aren't ready), providing a clear alternative ('The status of a report can be checked using the get_report tool'). This gives complete guidance on usage context and prerequisites.

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

get_saved_payment_methodA
Read-only

This tool will retrieve a payment method for a customer from Paddle using its ID and related customer ID.

These are payment methods saved by the customer at checkout to be presented for future purchases. They aren't payment methods stored for transactions related to a recurring subscription. View a customers most recently used payment method for purchases or subscriptions by listing transactions (with the list_transactions tool) with a filter of customerId or subscriptionId, and looking at the returned payments[].methodDetails object.

ParametersJSON Schema
NameRequiredDescriptionDefault
customerIdYesPaddle ID of the customer.
paymentMethodIdYesPaddle ID of the payment method.

TDQS

A4.1/5.0
Behavior3/5

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

Annotations declare readOnlyHint=true, which the description aligns with by using 'retrieve' (implying a read operation). The description adds valuable context beyond annotations: it clarifies what type of payment methods are retrieved (saved at checkout, not for subscriptions) and provides guidance on alternative approaches for subscription-related payment methods. However, it doesn't mention potential errors, rate limits, or authentication requirements.

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

Conciseness4/5

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

The description is well-structured and appropriately sized. The first sentence clearly states the purpose, followed by explanatory context about what these payment methods are and aren't, and ends with guidance on alternatives. Every sentence adds value, though the second sentence could be slightly more concise.

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

Completeness4/5

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

Given the tool's moderate complexity (retrieving a specific resource), 100% schema coverage, and readOnlyHint annotation, the description is largely complete. It clarifies the tool's scope and provides usage guidance. The main gap is the lack of output schema, but the description compensates somewhat by explaining what type of data is retrieved.

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 both parameters (customerId and paymentMethodId) clearly documented in the schema. The description adds minimal semantic context beyond the schema, only implying these IDs are Paddle-specific. Since the schema does the heavy lifting, the baseline score of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'retrieve a payment method for a customer from Paddle using its ID and related customer ID.' It specifies the verb ('retrieve'), resource ('payment method'), and distinguishes it from sibling tools like 'list_saved_payment_methods' (which lists multiple) and 'list_transactions' (which shows recently used methods).

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

Usage Guidelines5/5

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

The description provides explicit guidance on when to use this tool vs. alternatives. It states these are 'payment methods saved by the customer at checkout to be presented for future purchases' and clarifies they 'aren't payment methods stored for transactions related to a recurring subscription.' It also explicitly names an alternative tool ('list_transactions') for viewing recently used payment methods.

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

get_simulationB
Read-only

This tool will retrieve a simulation from Paddle by its ID.

This is for the configuration of a simulation, as opposed to the simulation run which is used to send the events to the notification destination.

ParametersJSON Schema
NameRequiredDescriptionDefault
simulationIdYesPaddle ID of the simulation entity.

TDQS

B3.4/5.0
Behavior3/5

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

Annotations provide readOnlyHint=true, indicating a safe read operation. The description adds useful context about retrieving configuration vs. run data, which helps the agent understand the scope. However, it doesn't disclose additional behavioral traits like error handling, authentication needs, or rate limits. With annotations covering safety, this adds moderate value.

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 two sentences with zero waste—front-loaded with the core purpose and followed by clarifying context. It's appropriately sized for a simple retrieval tool, though it could be slightly more structured for optimal scanning.

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 read tool with one parameter and annotations covering safety, the description is mostly complete. However, without an output schema, it doesn't explain return values (e.g., what configuration data is included). Given the complexity is low, this is adequate but leaves a minor gap.

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

Parameters3/5

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

Schema description coverage is 100% with one parameter 'simulationId' fully documented. The description doesn't add any parameter-specific details beyond what the schema provides (e.g., format examples or constraints). Since the schema carries the full burden, the baseline score of 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 clearly states the tool's purpose: 'retrieve a simulation from Paddle by its ID' (specific verb+resource). It distinguishes from sibling 'get_simulation_run' by clarifying it's for configuration vs. run. However, it doesn't explicitly differentiate from 'list_simulations' or 'create_simulation', which slightly limits 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?

The description implies usage context by contrasting with 'simulation run' tools, suggesting this is for configuration retrieval. However, it doesn't provide explicit guidance on when to use this vs. 'list_simulations' or 'create_simulation', nor does it mention prerequisites or error conditions. The guidance is helpful but incomplete.

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

get_simulation_runB
Read-only

This tool will retrieve a simulation run from Paddle by its ID.

Use the include parameter to include related entities in the response:

  • events: An array of events entities for events sent by this simulation run.

ParametersJSON Schema
NameRequiredDescriptionDefault
simulationIdYesPaddle ID of the simulation entity associated with the run.
simulationRunIdYesPaddle ID of the simulation run entity.
includeYesInclude related entities in the response.

TDQS

B3.4/5.0
Behavior3/5

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

The annotations already declare readOnlyHint=true, so the agent knows this is a safe read operation. The description adds useful context about the 'include' parameter behavior (specifically that 'events' returns an array of event entities), which goes beyond what annotations provide. However, it doesn't describe other behavioral traits like error handling, rate limits, or authentication needs.

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

Conciseness4/5

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

The description is appropriately sized with two sentences: one stating the purpose and one explaining the 'include' parameter. It's front-loaded with the core purpose. While efficient, the second sentence could be slightly more structured (e.g., using bullet points for clarity), but overall it avoids unnecessary verbosity.

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?

Given the tool's moderate complexity (3 required parameters, no output schema), the description is adequate but has gaps. It covers the basic purpose and parameter usage but lacks information about return values, error cases, or how this fits into broader workflows with sibling tools. With annotations covering safety, it meets minimum viability but could be more comprehensive.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all three parameters thoroughly. The description adds minimal value by briefly explaining the 'include' parameter's effect ('include related entities in the response') and listing the 'events' option, but this mostly repeats schema information. Baseline 3 is appropriate when 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 clearly states the tool's purpose: 'retrieve a simulation run from Paddle by its ID.' This is a specific verb ('retrieve') + resource ('simulation run') combination. However, it doesn't explicitly differentiate from sibling tools like 'get_simulation' or 'list_simulation_runs' beyond the obvious ID-based retrieval vs listing.

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

Usage Guidelines3/5

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

The description provides some implied usage guidance by mentioning the 'include' parameter for related entities, but it doesn't explicitly state when to use this tool versus alternatives like 'get_simulation' or 'list_simulation_runs.' There's no mention of prerequisites, error conditions, or specific contexts where this tool is preferred over others.

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

get_simulation_run_eventB
Read-only

This tool will retrieve an event sent by a simulation run from Paddle by its ID.

Check the following details to understand the success or failure of the event according to Paddle and debug issues:

  • status: Status of the event according to Paddle.

    • pending: No attempt has been made to deliver the event yet.

    • success: The event was delivered successfully.

    • failure: Paddle tried to deliver the simulated event, but it failed. If response object is null, no response received from the server. Check the notification setting endpoint configuration.

    • aborted: Paddle couldn't attempt delivery of the simulated event.

  • payload: Payload sent by Paddle for this event within the simulation.

  • request.body: Request body sent by Paddle.

  • response.body: Response body sent by the responding server. May be empty for success responses.

  • response.statusCode: HTTP status code sent by the responding server.

If the destination URL is using a tunnel or proxy service, the response may be from the tunnel or proxy service, not the original server. Don't assume success or failure based on the status and response alone. Check the logs of the tunnel/proxy service and the destination server.

ParametersJSON Schema
NameRequiredDescriptionDefault
simulationIdYesPaddle ID of the simulation entity associated with the run the event was sent as part of.
simulationRunIdYesPaddle ID of the simulation run entity the event was sent as part of.
simulationEventIdYesPaddle ID of the simulation event entity to get.

TDQS

B3.4/5.0
Behavior4/5

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

Annotations indicate readOnlyHint=true, confirming it's a safe read operation. The description adds valuable behavioral context beyond annotations: it details the response structure (status, payload, request.body, response.body, response.statusCode) and warns about tunnel/proxy services affecting interpretation, which aids in debugging and understanding output.

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

Conciseness3/5

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

The description is moderately concise but could be more front-loaded. It starts with the purpose, then delves into detailed response fields and warnings. While informative, some sentences (e.g., about tunnel/proxy services) are lengthy and might bury key usage information, reducing efficiency.

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

Completeness4/5

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

Given the tool's complexity (retrieving specific events with debugging details), no output schema, and rich annotations, the description is fairly complete. It explains the response structure and caveats, though it lacks explicit error handling or prerequisites, which could enhance completeness for an 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 description coverage is 100%, with clear parameter descriptions in the input schema. The tool description does not add any parameter-specific information beyond what the schema provides, such as format examples or usage tips, so it meets the baseline without extra 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 description clearly states the tool's purpose: 'retrieve an event sent by a simulation run from Paddle by its ID.' It specifies the verb ('retrieve'), resource ('event'), and source ('Paddle'), but does not explicitly differentiate it from sibling tools like 'list_simulation_run_events' or 'get_simulation_run', which might cause confusion in selection.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It does not mention sibling tools such as 'list_simulation_run_events' for multiple events or 'get_simulation_run' for run details, leaving the agent without context for tool selection.

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

get_subscriptionA
Read-only

This tool will retrieve a subscription from Paddle by its ID.

Use the include parameter to include related entities in the response:

  • next_transaction: Include an object with a preview of the next transaction for this subscription. May include prorated charges that aren't yet billed and one-time charges.

  • recurring_transaction_details: Include an object with a preview of the recurring transaction for this subscription. This is what the customer can expect to be billed when there are no prorated or one-time charges.

ParametersJSON Schema
NameRequiredDescriptionDefault
subscriptionIdYesPaddle ID of the subscription.
includeNoInclude related entities in the response. Use a comma-separated list to specify multiple entities.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations provide readOnlyHint=true, indicating a safe read operation. The description adds valuable behavioral context beyond this: it explains what the 'include' parameter does (e.g., 'next_transaction' includes prorated charges, 'recurring_transaction_details' shows expected billing), which helps the agent understand response behavior. No contradictions with annotations are present.

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

Conciseness5/5

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

The description is appropriately sized and front-loaded: the first sentence states the core purpose, followed by specific usage details for the 'include' parameter. Every sentence adds value without redundancy, making it efficient and well-structured.

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

Completeness4/5

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

Given the tool's moderate complexity (2 parameters, read-only operation), the description is fairly complete. It covers purpose, parameter usage, and behavioral details. However, with no output schema, it doesn't describe the return format (e.g., subscription object structure), leaving a minor gap. Annotations help by indicating safety.

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 schema already documents parameters. The description adds semantic meaning by explaining the purpose and options of the 'include' parameter (e.g., 'next_transaction' includes unbilled charges), which goes beyond the schema's enum list. This compensates well, though it doesn't detail 'subscriptionId' further.

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

Purpose4/5

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

The description clearly states the tool's purpose: 'retrieve a subscription from Paddle by its ID.' This is a specific verb ('retrieve') and resource ('subscription'), but it doesn't explicitly differentiate from sibling tools like 'list_subscriptions' or 'get_customer' (which might also retrieve subscription data). The description is clear but lacks 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?

The description provides implied usage guidance by explaining the 'include' parameter for related entities, suggesting when to use this tool for detailed subscription data. However, it doesn't explicitly state when to choose this over alternatives like 'list_subscriptions' for bulk data or other 'get_' tools for different resources. The guidance is contextual but not comprehensive.

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

get_transactionA
Read-only

This tool will retrieve a transaction from Paddle by its ID.

Use the include parameter to include related entities in the response:

  • address: An object for the address entity related to this transaction. Only returned if an address is set against the transaction.

  • adjustments: An array of adjustment entities related to this transaction. Only returned if adjustments have been created against the transaction.

  • adjustments_totals: An object containing totals for all adjustments on a transaction. Only returned if adjustments have been created against the transaction.

  • available_payment_methods: An array of payment methods that are available to use for this transaction.

  • business: An object for the business entity related to this transaction. Only returned if a business is set against the transaction.

  • customer: An object for the customer entity related to this transaction. Only returned if a customer is set against the transaction.

  • discount: An object for the discount entity related to this transaction. Only returned if a discount is set against the transaction.

Transactions have a collectionMode that determines how Paddle tries to collect for payment:

  • automatic: Payment is collected automatically using a checkout initially, then using a payment method on file.

  • manual: Payment is collected manually. Customers are sent an invoice with payment terms and can make a payment offline or using a checkout. Requires billingDetails.

Transactions have a status that determines the current state of the transaction:

  • draft: Transaction is missing required fields. Typically the first stage of a checkout before customer details are captured.

  • ready: Transaction has all of the required fields to be marked as billed or completed.

  • billed: Transaction has been updated to billed. Billed transactions get an invoice number and are considered a legal record. They can't be changed. Typically used as part of an invoice workflow.

  • paid: Transaction is fully paid, but has not yet been processed internally.

  • completed: Transaction is fully paid and processed.

  • canceled: Transaction has been updated to canceled. If an invoice, it's no longer due.

  • past_due: Transaction is past due. Occurs for automatically-collected transactions when the related subscription is in dunning, and for manually-collected transactions when payment terms have elapsed.

ParametersJSON Schema
NameRequiredDescriptionDefault
transactionIdYesPaddle ID of the transaction.
includeNoInclude related entities in the response. Use a comma-separated list to specify multiple entities.

TDQS

A3.6/5.0
Behavior4/5

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

Annotations provide readOnlyHint=true, indicating a safe read operation. The description adds valuable behavioral context beyond this: it explains the 'collectionMode' (automatic vs. manual) and detailed 'status' values (draft, ready, billed, etc.) with their meanings. This significantly enhances understanding of transaction states, though it doesn't cover rate limits or auth needs.

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

Conciseness3/5

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

The description is front-loaded with the core purpose, but it becomes verbose with detailed explanations of 'include' values, 'collectionMode,' and 'status.' While informative, some of this could be streamlined or moved to a separate section, as not every sentence directly aids tool selection in a concise manner.

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

Completeness4/5

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

Given the tool's complexity (retrieval with optional includes and transaction states), the description provides substantial context: it explains parameters, related entities, and transaction behaviors. With annotations covering read-only safety and no output schema, it compensates well, though it could briefly mention response format or error handling for a higher score.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents both parameters. The description adds context for the 'include' parameter by listing and explaining each possible value (e.g., 'address' includes address entity if set). However, it doesn't provide additional syntax or format details beyond what the schema implies, meeting the baseline for high schema coverage.

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

Purpose4/5

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

The description clearly states the tool's purpose: 'retrieve a transaction from Paddle by its ID.' This is a specific verb+resource combination. However, it doesn't explicitly differentiate from sibling tools like 'get_transaction_invoice' or 'list_transactions,' which would be needed for a perfect score.

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

Usage Guidelines3/5

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

The description implies usage by explaining the 'include' parameter for related entities, but doesn't explicitly state when to use this tool versus alternatives like 'list_transactions' or 'get_transaction_invoice.' It provides context on what the tool does but lacks explicit guidance on when to choose it over siblings.

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

get_transaction_invoiceA
Read-only

This tool will retrieve a link to an invoice PDF for a transaction from Paddle.

Invoice PDFs are available for both automatically and manually-collected transactions:

  • The PDF for manually-collected transactions includes payment terms, purchase order number, and notes for the customer. It's a demand for payment from the customer. Available for transactions billed or completed.

  • The PDF for automatically-collected transactions lets the customer know that payment was taken successfully. Customers may require this for for tax-reporting purposes. Available for transactions completed.

Invoice PDFs aren't available for zero-value transactions.

The link returned isn't a permanent link. It expires after an hour.

ParametersJSON Schema
NameRequiredDescriptionDefault
transactionIdYesPaddle ID of the transaction.
dispositionNoDetermine whether the generated URL should download the PDF as an attachment saved locally, or open it inline in the browser. If omitted, defaults to `attachment`.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations provide readOnlyHint=true, indicating a safe read operation. The description adds valuable behavioral context beyond annotations: it explains that the link expires after an hour, details differences between transaction types (e.g., manually-collected vs. automatically-collected), and mentions tax-reporting purposes. It does not contradict annotations, as 'retrieve' aligns with read-only behavior.

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

Conciseness5/5

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

The description is well-structured and concise, using bullet points to organize information about transaction types and availability. Every sentence adds value (e.g., explaining link expiration, transaction distinctions, and exclusions), with no redundant or wasted text. It is front-loaded with the core purpose.

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

Completeness5/5

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

Given the tool's moderate complexity (2 parameters, no output schema), the description is highly complete. It covers purpose, usage guidelines, behavioral details (link expiration, transaction types), and exclusions (zero-value transactions). With annotations covering safety and schema covering parameters, no significant gaps remain.

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 clear descriptions for both parameters (transactionId and disposition). The description does not add any parameter-specific semantics beyond what the schema provides (e.g., it doesn't explain transactionId format or disposition implications further). Baseline 3 is appropriate as the schema adequately documents parameters.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'retrieve a link to an invoice PDF for a transaction from Paddle.' It specifies the resource (invoice PDF) and the action (retrieve a link), distinguishing it from sibling tools like 'get_transaction' which likely returns transaction data rather than invoice links. The description is specific and unambiguous.

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

Usage Guidelines4/5

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

The description provides clear context on when to use this tool by detailing availability for automatically and manually-collected transactions, and explicitly stating it's not available for zero-value transactions. However, it does not explicitly compare to alternatives (e.g., when to use 'get_transaction' vs. this tool for invoice-related needs), which prevents a perfect score.

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

list_addressesA
Read-only

This tool will list addresses for a customer in Paddle.

Use the maximum perPage by default (200) to ensure comprehensive results. Filter addresses by id, search (fuzzy search on the address's street, city, state, postalCode, or country), and status as needed. Results are paginated - use the 'after' parameter with the last ID from previous results to get the next page. Sort and order results using the orderBy parameter.

ParametersJSON Schema
NameRequiredDescriptionDefault
customerIdYesPaddle ID of the customer.
afterNoReturn entities after the specified Paddle ID when working with paginated endpoints.
idNoReturn only the IDs specified. Use a comma-separated list to get multiple entities.
orderByNoOrder returned entities by the specified field and direction.
perPageNoSet how many entities are returned per page. Returns the maximum number of results if a number greater than the maximum is requested.
searchNoReturn entities that match a search query. Pass an exact match for the street, city, state, postal code, or country.
statusNoReturn entities that match the specified status. Use a comma-separated list to specify multiple status values.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations declare readOnlyHint=true, and the description aligns with this by describing a listing operation without contradictions. It adds valuable behavioral context beyond annotations, such as recommending a default perPage value (200), explaining pagination mechanics with 'after' parameter, and noting that results are paginated—details not covered by 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?

The description is well-structured and concise, with four sentences that each serve a clear purpose: stating the tool's purpose, recommending a default, explaining filtering, and detailing pagination and sorting. No wasted words, and it's front-loaded with essential 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?

Given the tool's complexity (7 parameters, pagination) and lack of output schema, the description does a good job covering key aspects like default usage, filtering, and pagination. However, it doesn't detail the response format or error handling, which could be helpful for an agent. With annotations providing safety info, it's mostly complete but has minor gaps.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all parameters thoroughly. The description adds some semantic context by explaining how to use 'after' for pagination and 'search' for fuzzy matching, but this mostly reinforces rather than extends the schema. Baseline 3 is appropriate as 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 clearly states the tool's purpose as 'list addresses for a customer in Paddle,' which is a specific verb+resource combination. However, it doesn't explicitly differentiate from sibling tools like 'get_address' (singular) or other list tools, though the context of listing addresses for a specific customer is reasonably distinct.

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

Usage Guidelines3/5

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

The description provides implied usage guidance by mentioning filtering, pagination, and sorting, but it doesn't explicitly state when to use this tool versus alternatives like 'get_address' or other list tools. No clear exclusions or prerequisites are mentioned, leaving some ambiguity for the agent.

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

list_adjustmentsA
Read-only

This tool will list adjustments in Paddle.

Use the maximum perPage by default (50) to ensure comprehensive results. Filter adjustments by action, customerId, status, subscriptionId, transactionId, and id as needed. Results are paginated - use the 'after' parameter with the last ID from previous results to get the next page. Sort and order results using the orderBy parameter.

Amounts are in the smallest currency unit (e.g., cents).

Adjustments have an action that determines how the adjustment impacts the related transaction:

  • credit: Credits some or all the related transaction. Can be created manually.

  • refund: Refunds some or all the related transaction. Must be approved by Paddle in most cases. Can be created manually.

  • chargeback: Chargeback for the related transaction. Automatically created by Paddle when a customer successfully disputes a charge.

  • chargeback_reverse: Reversal of a chargeback for the related transaction. Automatically created by Paddle when Paddle contests a chargeback successfully.

  • chargeback_warning: Warning of an upcoming chargeback for the related transaction. Automatically created by Paddle.

  • chargeback_warning_reverse: Reversal of a chargeback warning for the related transaction. Automatically created by Paddle.

  • credit_reverse: Reversal of a credit for the related transaction. Automatically created by Paddle.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionNoReturn entities for the specified action.
afterNoReturn entities after the specified Paddle ID when working with paginated endpoints.
customerIdNoReturn entities related to the specified customer. Use a comma-separated list to specify multiple customer IDs.
orderByNoOrder returned entities by the specified field and direction.
perPageNoSet how many entities are returned per page. Returns the maximum number of results if a number greater than the maximum is requested.
statusNoReturn entities that match the specified status. Use a comma-separated list to specify multiple status values.
subscriptionIdNoReturn entities related to the specified subscription. Use a comma-separated list to specify multiple subscription IDs.
transactionIdNoReturn entities related to the specified transaction. Use a comma-separated list to specify multiple transaction IDs.
idNoReturn only the IDs specified. Use a comma-separated list to get multiple entities.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations declare readOnlyHint=true, which the description aligns with by describing a listing operation. The description adds valuable behavioral context beyond annotations: pagination mechanics ('after' parameter usage), default pagination behavior (maximum perPage=50), currency unit details (amounts in smallest unit like cents), and detailed explanations of adjustment actions including which are manual vs. automatic. This significantly enhances the agent's understanding of how the tool behaves.

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 appropriately sized and front-loaded with the core purpose and key usage guidelines. The detailed action explanations are necessary for behavioral transparency. While slightly lengthy, every section adds value and there's no redundant information. It could be slightly more concise but remains well-structured.

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

Completeness4/5

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

Given the tool's complexity (9 parameters, no output schema) and rich annotations (readOnlyHint), the description provides comprehensive context. It covers purpose, usage, behavioral details (pagination, currency, action types), and parameter guidance. The main gap is the lack of output schema, but the description compensates well with behavioral explanations. For a listing tool with good annotations, this is nearly complete.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all 9 parameters thoroughly. The description adds some context about parameter usage (e.g., 'after' parameter with last ID for pagination, filtering 'as needed'), but doesn't provide significant additional semantic meaning beyond what's in the schema. This meets the baseline expectation when schema coverage is complete.

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

Purpose5/5

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

The description starts with a clear verb+resource statement: 'This tool will list adjustments in Paddle.' It distinguishes from siblings like 'get_adjustment_credit_note' (specific adjustment detail) and 'create_adjustment' (write operation), establishing its role as a comprehensive listing tool for adjustments.

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

Usage Guidelines4/5

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

The description provides clear context for when to use this tool: for listing adjustments with filtering, pagination, and sorting capabilities. It doesn't explicitly state when NOT to use it or name alternatives, but the context is sufficient for an agent to infer this is the primary listing tool for adjustments among the siblings.

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

list_businessesA
Read-only

This tool will list businesses for a customer in Paddle.

Use the maximum perPage by default (200) to ensure comprehensive results. Filter businesses by id, search (fuzzy search on the business's name or tax or VAT number), and status as needed. Results are paginated - use the 'after' parameter with the last ID from previous results to get the next page. Sort and order results using the orderBy parameter.

ParametersJSON Schema
NameRequiredDescriptionDefault
customerIdYesPaddle ID of the customer.
afterNoReturn entities after the specified Paddle ID when working with paginated endpoints.
idNoReturn only the IDs specified. Use a comma-separated list to get multiple entities.
orderByNoOrder returned entities by the specified field and direction.
perPageNoSet how many entities are returned per page. Returns the maximum number of results if a number greater than the maximum is requested.
searchNoReturn entities that match a search query. Pass an exact match for the business's name or tax or VAT number.
statusNoReturn entities that match the specified status. Use a comma-separated list to specify multiple status values.

TDQS

A4/5.0
Behavior4/5

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

Annotations provide readOnlyHint=true, indicating a safe read operation. The description adds valuable behavioral context beyond this: it specifies default pagination behavior ('maximum perPage by default (200)'), explains pagination mechanics ('use the 'after' parameter with the last ID'), and details filtering options (id, search, status). This enriches the agent's understanding of how the tool behaves in practice, though it doesn't cover rate limits or auth needs. The description complements annotations well without contradiction.

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

Conciseness5/5

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

The description is efficiently structured with four sentences, each serving a distinct purpose: stating the tool's purpose, recommending a default, detailing filtering options, and explaining pagination and sorting. There is no wasted text, and information is front-loaded with the core function. This makes it easy for an agent to parse and apply the guidance quickly.

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

Completeness4/5

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

Given the tool's complexity (7 parameters, pagination, filtering) and the presence of annotations (readOnlyHint) but no output schema, the description does a good job of covering key aspects: purpose, usage, and behavioral traits. It explains pagination, filtering, and sorting, which are critical for effective use. However, it doesn't describe the return format or error handling, leaving some gaps. With annotations providing safety context, it's largely complete but not exhaustive.

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%, meaning all parameters are documented in the schema. The description adds some semantic context: it clarifies that 'search' performs 'fuzzy search on the business's name or tax or VAT number' (vs. schema's 'exact match'), and it provides usage tips for 'after' and 'orderBy.' However, it doesn't significantly enhance meaning beyond the schema, such as explaining parameter interactions or edge cases. Baseline 3 is appropriate given high schema coverage.

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

Purpose4/5

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

The description clearly states the tool's purpose: 'list businesses for a customer in Paddle.' It specifies the verb ('list'), resource ('businesses'), and scope ('for a customer'), which is specific and actionable. However, it doesn't explicitly differentiate from sibling tools like 'list_customers' or 'get_business,' though the scope implies it's for businesses under a specific customer. This clarity earns a 4, as it's clear but lacks explicit sibling differentiation.

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

Usage Guidelines4/5

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

The description provides clear context on when to use this tool: for listing businesses with filtering, pagination, and sorting capabilities. It implicitly suggests usage for comprehensive results by recommending 'maximum perPage by default (200).' However, it doesn't explicitly state when not to use it or name alternatives (e.g., 'get_business' for single businesses), which prevents a perfect score. The guidance is strong but not exhaustive.

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

list_client_side_tokensA
Read-only

This tool will list client-side tokens in Paddle.

Client-side tokens are needed to authenticate with Paddle.js. A token is provided when initializing Paddle.js.

Use the maximum perPage by default (200) to ensure comprehensive results. Filter client-side tokens by status as needed. Results are paginated - use the 'after' parameter with the last ID from previous results to get the next page. Sort and order results using the orderBy parameter.

The returned token field is the client-side token that needs to be provided when initializing Paddle.js. Can be exposed client-side safely. If it starts with:

  • test_: The token is a test token for a sandbox environment and shouldn't be used in production.

  • live_: The token is a live token for a production environment. It can be used to test too but Paddle.js checkouts require real cards.

Client-side tokens have a status:

  • active: Client-side token can be used to authenticate with Paddle.js.

  • revoked: Client-side token has been revoked and can no longer be used to authenticate with Paddle.js.

ParametersJSON Schema
NameRequiredDescriptionDefault
afterNoReturn entities after the specified Paddle ID when working with paginated endpoints.
orderByNoOrder returned entities by the specified field and direction.
perPageNoSet how many entities are returned per page. Returns the maximum number of results if a number greater than the maximum is requested.
statusNoReturn entities that match the specified status. Use a comma-separated list to specify multiple status values.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations provide readOnlyHint=true, indicating this is a safe read operation. The description adds valuable behavioral context beyond annotations: it explains pagination behavior ('Results are paginated'), safety of exposing tokens client-side, environment distinctions (test_ vs. live_ tokens), and token status meanings (active vs. revoked). This enriches the agent's understanding without contradicting annotations.

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

Conciseness4/5

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

The description is well-structured and front-loaded with the core purpose. It uses bullet points for token prefixes and statuses, which aids readability. However, some sentences could be more concise (e.g., 'The returned token field is the client-side token that needs to be provided when initializing Paddle.js' is slightly redundant). Overall, it efficiently conveys necessary information without excessive verbosity.

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

Completeness4/5

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

Given the tool's complexity (list operation with pagination and filtering), annotations (readOnlyHint), and schema coverage (100%), the description is quite complete. It explains key behaviors like pagination, token safety, and status meanings. The lack of an output schema is compensated by describing the returned token field and its implications. Minor gaps include not detailing the output structure beyond the token field.

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 (after, orderBy, perPage, status). The description adds some semantic context: it recommends using maximum perPage (200), explains how to use 'after' for pagination, and clarifies status filtering. However, it does not provide significant additional meaning beyond what the schema offers, such as default values or usage examples for orderBy.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'list client-side tokens in Paddle.' It specifies the resource (client-side tokens) and the action (list), and distinguishes it from sibling tools like 'get_client_side_token' (singular) and 'create_client_side_token' (creation). The description also explains what client-side tokens are used for (authenticating with Paddle.js), adding context beyond just the verb.

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

Usage Guidelines4/5

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

The description provides clear usage guidance: 'Use the maximum perPage by default (200) to ensure comprehensive results' and 'Filter client-side tokens by status as needed.' It also explains pagination with the 'after' parameter. However, it does not explicitly state when to use this tool versus alternatives like 'get_client_side_token' (for a single token) or other list tools, though the context of listing tokens is implied.

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

list_credit_balancesA
Read-only

This tool will list credit balances in each currency for a customer.

Credit balances are created automatically by Paddle when a customer takes an action that results in Paddle creating a credit for a customer, like making prorated changes to a subscription. These are transaction credits, not promotional credits like from discounts.

Each balance has three totals:

  • available: Total available to use.

  • reserved: Total temporarily reserved for billed transactions.

  • used: Total amount of credit used.

Credit is added to the available total initially. When used, it moves to the used total.

The reserved total is used when a credit balance is applied to a transaction that's marked as billed, like when working with an issued invoice. It's not available for other transactions at this point, but isn't considered used until the transaction is completed. If a billed transaction is canceled, any reserved credit moves back to available.

A credit balance can only be used for transactions in the same currency.

Adding to a credit balance directly isn't possible. Create a credit adjustment with the create_adjustment tool to reduce the amount due to pay for a transaction instead.

Filter credit balances by currencyCode as needed. Amounts are in the smallest currency unit (e.g., cents).

The response isn't paginated. An empty array is returned if a customer has no credit balances.

ParametersJSON Schema
NameRequiredDescriptionDefault
customerIdYesPaddle ID of the customer.
currencyCodeNoReturn entities that match the currency code. Use a comma-separated list to specify multiple currency codes.

TDQS

A4.2/5.0
Behavior4/5

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

The annotations provide readOnlyHint=true, but the description adds valuable behavioral context beyond this: it explains that credit balances are automatically created by Paddle for transaction credits (not promotional), describes the three balance totals (available, reserved, used) and their lifecycle, states that response isn't paginated, and clarifies that empty arrays are returned for no balances. This significantly enhances understanding of the tool's behavior.

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

Conciseness4/5

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

The description is appropriately sized and front-loaded with the core purpose. While comprehensive, some sentences could be more concise (e.g., the reserved total explanation is detailed but necessary). The structure flows logically from purpose to credit explanation to balance details to usage notes.

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

Completeness5/5

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

Given the complexity of credit balances and the absence of an output schema, the description provides excellent contextual completeness. It thoroughly explains what credit balances are, how they're created, the three balance types and their relationships, currency restrictions, how to affect balances (via create_adjustment), filtering, amount format, and response behavior. This compensates well for the lack of 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?

With 100% schema description coverage, the schema already documents both parameters well. The description adds minimal parameter-specific information beyond the schema - it mentions filtering by currencyCode and that amounts are in smallest currency units, but doesn't provide additional semantic context about the customerId parameter or currencyCode usage beyond what's in the schema descriptions.

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

Purpose5/5

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

The description clearly states the specific action ('list credit balances in each currency for a customer'), identifies the resource ('credit balances'), and distinguishes it from sibling tools by focusing on credit balances rather than other entities like addresses, adjustments, or transactions. The opening sentence provides immediate clarity about the tool's function.

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

Usage Guidelines4/5

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

The description provides clear context about when to use this tool (to list credit balances created by Paddle for transaction credits) and explicitly mentions an alternative tool ('create_adjustment') for adding to credit balances. However, it doesn't explicitly state when NOT to use this tool versus other list_* siblings, though the credit balance focus is distinct enough.

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

list_customersA
Read-only

This tool will list customers in Paddle.

Use the maximum perPage by default (200) to ensure comprehensive results. Filter customers by email, id, search (fuzzy search on the customer's name), and status as needed. Results are paginated - use the 'after' parameter with the last ID from previous results to get the next page. Sort and order results using the orderBy parameter.

ParametersJSON Schema
NameRequiredDescriptionDefault
afterNoReturn entities after the specified Paddle ID when working with paginated endpoints.
emailNoReturn entities that exactly match the specified email address. Use a comma-separated list to specify multiple email addresses. Recommended for precise matching of email addresses.
idNoReturn only the IDs specified. Use a comma-separated list to get multiple entities.
orderByNoOrder returned entities by the specified field and direction.
perPageNoSet how many entities are returned per page. Returns the maximum number of results if a number greater than the maximum is requested.
searchNoReturn entities that match a search query. Pass an exact match for the customer's name. Use the `email` query parameter for precise matching of email addresses.
statusNoReturn entities that match the specified status. Use a comma-separated list to specify multiple status values.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations provide readOnlyHint=true, which the description aligns with by describing a listing operation. The description adds valuable behavioral context beyond annotations: pagination mechanics ('use the 'after' parameter with the last ID'), default behavior ('use the maximum perPage by default'), and filtering capabilities. It doesn't mention rate limits or authentication needs, but with annotations covering safety, this is sufficient.

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

Conciseness5/5

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

The description is efficiently structured in 4 sentences, each serving a distinct purpose: stating the tool's function, recommending a default, explaining filtering options, and detailing pagination/sorting. There's no redundant information, and key guidance is front-loaded. Every sentence earns its place by adding practical 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?

Given the tool's complexity (7 parameters, pagination, filtering), the description provides good context. With annotations covering read-only safety and 100% schema coverage for parameters, the description adds necessary behavioral details like pagination mechanics and default usage. The lack of an output schema is a minor gap, but the description compensates by explaining result structure indirectly through parameter guidance.

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 fully documents all 7 parameters. The description adds some semantic context: it explains the purpose of filtering parameters ('filter customers by email, id, search...'), recommends default values ('use the maximum perPage by default'), and clarifies pagination usage. However, it doesn't provide significant additional meaning beyond what's already in the schema descriptions.

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

Purpose4/5

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

The description clearly states the tool's purpose: 'list customers in Paddle' with specific filtering capabilities. It distinguishes itself from sibling tools like 'get_customer' (singular retrieval) by focusing on listing multiple customers with filtering options. However, it doesn't explicitly contrast with other list_* tools (e.g., list_addresses, list_subscriptions) which might have similar patterns.

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

Usage Guidelines3/5

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

The description provides implicit usage guidance through parameter explanations (e.g., 'use the maximum perPage by default', 'use the 'after' parameter for pagination'). However, it doesn't explicitly state when to use this tool versus alternatives like 'get_customer' for single customer retrieval or 'search' for fuzzy matching. The guidance is practical but not comparative.

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

list_discount_groupsA
Read-only

This tool will list discount groups in the account's catalog.

Use the maximum perPage by default (200) to ensure comprehensive results. Filter discount groups by id as needed. Results are paginated - use the 'after' parameter with the last ID from previous results to get the next page. Sort and order results using the orderBy parameter.

ParametersJSON Schema
NameRequiredDescriptionDefault
afterNoReturn entities after the specified Paddle ID when working with paginated endpoints.
idNoReturn only the IDs specified. Use a comma-separated list to get multiple entities.
orderByNoOrder returned entities by the specified field and direction.
perPageNoSet how many entities are returned per page. Returns the maximum number of results if a number greater than the maximum is requested.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations provide readOnlyHint=true, indicating a safe read operation. The description adds valuable behavioral context beyond this: it specifies pagination behavior ('Results are paginated'), recommends a default perPage value ('Use the maximum perPage by default (200)'), and explains how to navigate pages ('use the 'after' parameter with the last ID'). This enhances the agent's understanding of how to use the tool effectively, though it doesn't cover rate limits or authentication needs.

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

Conciseness5/5

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

The description is front-loaded with the core purpose, followed by specific usage tips in a bullet-like structure. Each sentence adds practical value: default settings, filtering, pagination mechanics, and sorting. There is no wasted text, and the information is efficiently organized for quick comprehension by an agent.

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

Completeness4/5

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

Given the tool's complexity (a list operation with pagination and filtering), the description is reasonably complete. It covers key behavioral aspects like pagination and default usage, and annotations handle the safety profile. However, without an output schema, it doesn't describe the return format (e.g., structure of discount group objects), which is a minor gap for a list tool. Sibling tools provide context, but the description doesn't leverage this for differentiation.

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 thoroughly. The description adds some semantic context: it emphasizes using the maximum perPage for comprehensive results, clarifies that 'after' uses the last ID for pagination, and mentions filtering by ID and sorting with orderBy. However, this mostly reinforces rather than significantly extends the schema information, meeting the baseline for high coverage.

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

Purpose4/5

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

The description clearly states the tool's purpose: 'list discount groups in the account's catalog.' This specifies the verb ('list') and resource ('discount groups'), and the context ('account's catalog') provides helpful scope. However, it doesn't explicitly differentiate from sibling tools like 'get_discount_group' (singular) or 'list_discounts', which would be needed for a perfect score.

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

Usage Guidelines3/5

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

The description provides implied usage guidance by mentioning pagination, filtering by ID, and sorting, suggesting this tool is for browsing or searching discount groups. However, it lacks explicit when-to-use directives, such as contrasting with 'get_discount_group' for single entities or explaining scenarios where listing is preferred over getting specific IDs. No alternatives or exclusions are named.

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

list_discountsA
Read-only

This tool will list discounts in the account's catalog.

Use the maximum perPage by default (200) to ensure comprehensive results. Filter discounts by code, id, status, and mode as needed. Results are paginated - use the 'after' parameter with the last ID from previous results to get the next page. Sort and order results using the orderBy parameter.

Amounts are in the smallest currency unit (e.g., cents).

ParametersJSON Schema
NameRequiredDescriptionDefault
afterNoReturn entities after the specified Paddle ID when working with paginated endpoints.
codeNoReturn entities that match the discount code. Use a comma-separated list to specify multiple discount codes.
idNoReturn only the IDs specified. Use a comma-separated list to get multiple entities.
orderByNoOrder returned entities by the specified field and direction.
perPageNoSet how many entities are returned per page. Returns the maximum number of results if a number greater than the maximum is requested.
statusNoReturn entities that match the specified status. Use a comma-separated list to specify multiple status values.
modeNoReturn entities that match the specified mode.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations provide readOnlyHint=true, indicating safe read operations. The description adds valuable behavioral context beyond annotations: pagination mechanics ('use the after parameter with the last ID'), default behavior ('use maximum perPage by default'), data format ('amounts are in smallest currency unit'), and filtering capabilities. It doesn't mention rate limits or authentication needs, but adds significant operational 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?

The description is efficiently structured with 5 sentences, each providing distinct value: purpose statement, default usage, filtering options, pagination instructions, and data format note. It's front-loaded with the core purpose and avoids redundancy. Every sentence earns its place without wasted words.

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

Completeness4/5

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

Given the tool's complexity (7 parameters, pagination, filtering), annotations cover safety (readOnlyHint), and schema provides full parameter documentation. The description adds important operational context: pagination mechanics, default behavior, and data format. Without an output schema, it doesn't describe return values, but for a list operation with good schema coverage, this is reasonably complete.

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

Parameters3/5

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

Schema description coverage is 100%, so parameters are well-documented in the schema. The description adds some semantic context: it mentions filtering by 'code, id, status, and mode' (matching schema parameters) and explains pagination with 'after' and sorting with 'orderBy'. However, it doesn't provide additional meaning beyond what the schema already describes, such as parameter interactions or edge cases.

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

Purpose4/5

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

The description clearly states the tool's purpose: 'list discounts in the account's catalog.' It specifies the verb ('list') and resource ('discounts'), but doesn't explicitly differentiate from sibling tools like 'get_discount' or 'list_discount_groups' beyond the name. The purpose is clear but lacks sibling comparison context.

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

Usage Guidelines3/5

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

The description provides implied usage guidance: 'Use the maximum perPage by default (200) to ensure comprehensive results' suggests a best practice, and mentions filtering, pagination, and sorting. However, it doesn't explicitly state when to use this tool versus alternatives like 'get_discount' (for single discounts) or 'list_discount_groups', nor does it mention prerequisites or exclusions.

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

list_eventsA
Read-only

This tool will list events in Paddle.

When something notable occurs, Paddle creates an event entity with information about what happened. Events are created for actions regardless of how they happened and regardless of whether a notification setting is subscribed to be notified by Paddle.

Some actions might create multiple events. For example, resuming a subscription typically results in a subscription.resumed, transaction.created, and other transaction events being created.

Use the maximum perPage by default (200) to ensure comprehensive results. Results are paginated - use the 'after' parameter with the last ID from previous results to get the next page. Sort and order results using the orderBy parameter.

ParametersJSON Schema
NameRequiredDescriptionDefault
afterNoReturn entities after the specified Paddle ID when working with paginated endpoints.
orderByNoOrder returned entities by the specified field and direction.
perPageNoSet how many entities are returned per page. Returns the maximum number of results if a number greater than the maximum is requested.

TDQS

A3.9/5.0
Behavior4/5

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

The description adds valuable behavioral context beyond the readOnlyHint annotation: it explains that events are created for all notable actions regardless of notification settings, that some actions create multiple events, and provides specific pagination guidance (maximum 200 per page, use 'after' for next page). This goes well beyond what the annotation alone provides about read-only access.

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

Conciseness4/5

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

The description is well-structured and appropriately sized. It starts with the core purpose, provides context about events, gives important behavioral details, and ends with specific usage instructions. Each sentence adds value, though the middle paragraph about event creation could be slightly more concise.

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 list tool with readOnlyHint annotation and good schema coverage, the description provides comprehensive context. It explains what events are, how they're created, pagination behavior, and usage patterns. The main gap is lack of output format details (no output schema exists), but otherwise it's quite complete for this type of 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?

With 100% schema description coverage, the baseline is 3. The description adds some value by explaining practical usage of parameters (use 'after' with last ID for pagination, use orderBy for sorting, perPage maximum is 200), but doesn't provide additional semantic meaning beyond what's already in the schema descriptions.

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

Purpose4/5

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

The description clearly states the tool's purpose: 'list events in Paddle' with additional context about what events are ('notable occurrences' with entity creation). It distinguishes from siblings by focusing specifically on events rather than other resources like addresses, customers, or transactions. However, it doesn't explicitly differentiate from other list_* tools beyond the resource type.

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

Usage Guidelines4/5

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

The description provides clear usage guidance for pagination ('use the after parameter'), sorting ('use the orderBy parameter'), and default behavior ('use maximum perPage by default'). It explains when to use pagination parameters but doesn't explicitly state when to choose this tool over alternatives or mention any prerequisites for using it.

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

list_notification_logsA
Read-only

This tool will list notification logs in Paddle.

When Paddle sends a notification to a webhook endpoint or email address, it records information about each delivery attempt as a log against the notification.

Every delivered notification has at least one log with information about the response that Paddle received on delivery.

Where a notification isn't delivered successfully, Paddle tries to deliver the notification again. Each delivery attempt is logged against a notification.

Use the maximum perPage by default (200) to ensure comprehensive results. Results are paginated - use the 'after' parameter with the last ID from previous results to get the next page.

Check the following details to understand the success or failure of each delivery attempt and debug issues:

  • responseCode: HTTP code sent by the responding server.

  • responseContentType: Content-Type sent by the responding server.

  • responseBody: Response body sent by the responding server. Typically empty for success responses.

  • attemptedAt: RFC 3339 datetime string of when Paddle attempted to deliver the related notification.

ParametersJSON Schema
NameRequiredDescriptionDefault
notificationIdYesPaddle ID of the notification.
afterYesReturn entities after the specified Paddle ID when working with paginated endpoints.
perPageYesSet how many entities are returned per page. Returns the maximum number of results if a number greater than the maximum is requested.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations provide readOnlyHint=true, and the description aligns with this by describing a listing/log examination function. The description adds valuable behavioral context beyond annotations: explains pagination behavior, default usage of maximum perPage (200), and what details to check for debugging. It doesn't mention rate limits or authentication requirements, but adds useful operational context.

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

Conciseness4/5

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

The description is well-structured and appropriately sized. It starts with the core purpose, provides context about what notification logs are, then gives usage guidance and debugging details. Some sentences could be more concise (e.g., the debugging details section is quite detailed), but overall it's efficient and front-loaded with essential information.

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

Completeness4/5

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

For a read-only listing tool with 3 parameters and no output schema, the description provides good completeness. It explains what the tool returns (notification logs with specific fields), how to use pagination, and debugging context. The main gap is lack of output format details since there's no output schema, but the description compensates reasonably by listing key response fields to examine.

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 parameters are well-documented in the schema. The description adds some semantic context: explains that 'after' should use the last ID from previous results for pagination, and that perPage maximum is 200. However, it doesn't provide additional meaning for notificationId beyond what's in the schema. Baseline 3 is appropriate given high schema coverage.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'list notification logs in Paddle' with specific context about what notification logs are (delivery attempt records). It distinguishes from sibling tools like 'list_notifications' by focusing specifically on logs rather than notifications themselves, and from 'replay_notification' by being read-only versus action-oriented.

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

Usage Guidelines4/5

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

The description provides clear context for when to use this tool: to examine delivery attempts and debug issues. It mentions using maximum perPage by default and pagination with 'after' parameter. However, it doesn't explicitly state when NOT to use it or name specific alternatives among siblings, though the context implies it's for logs rather than notifications.

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

list_notificationsA
Read-only

This tool will list notifications in Paddle.

When an event that has a notification destination occurs, Paddle creates a notification entity with information about the notification.

A single event might create multiple notifications. This is common when working with multiple notification destinations that are subscribed to the same events. When an event occurs, Paddle creates a separate notification entity for each notification destination. They'll share the same eventId, but have different notificationId.

Notifications older than 90 days aren't retained and won't be returned.

Use the maximum perPage by default (200) to ensure comprehensive results. Filter notifications by notificationSettingId, search (fuzzy search on the event's type or id), status, filter (pass a transaction, customer, or subscription ID), to, and from as needed. Results are paginated - use the 'after' parameter with the last ID from previous results to get the next page. Sort and order results using the orderBy parameter.

Check the following details to understand the success or failure of the notification delivery according to Paddle and debug issues:

  • status: Status of the notification.

    • notAttempted: Paddle hasn't yet tried to deliver this notification.

    • needsRetry: Paddle tried to deliver this notification, but it failed. It's scheduled to be retried.

    • delivered: Paddle delivered this notification successfully.

    • failed: Paddle tried to deliver this notification, but all attempts failed. It's not scheduled to be retried.

  • origin: Describes how this notification was created.

    • event: Notification created when a subscribed event occurred.

    • replay: Notification created when a notification with the origin event was replayed.

  • deliveredAt: RFC 3339 datetime string of when this notification was delivered. null if not yet delivered successfully.

  • lastAttemptAt: RFC 3339 datetime string of when this notification was last attempted.

  • retryAt: RFC 3339 datetime string of when this notification is scheduled to be retried.

  • timesAttempted: How many times delivery of this notification has been attempted.

ParametersJSON Schema
NameRequiredDescriptionDefault
afterNoReturn entities after the specified Paddle ID when working with paginated endpoints.
notificationSettingIdNoReturn entities related to the specified notification destination. Use a comma-separated list to specify multiple notification destination IDs.
orderByNoOrder returned entities by the specified field and direction.
perPageNoSet how many entities are returned per page. Returns the maximum number of results if a number greater than the maximum is requested.
searchNoReturn entities that match a search query. Pass an exact match for the Paddle ID or event type.
statusNoReturn entities that match the specified status. Use a comma-separated list to specify multiple status values.
filterNoReturn entities that contain the Paddle ID specified. Pass a transaction, customer, or subscription ID.
toNoReturn entities up to a specific time. Pass an RFC 3339 datetime string.
fromNoReturn entities from a specific time. Pass an RFC 3339 datetime string.

TDQS

A4/5.0
Behavior4/5

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

Annotations provide readOnlyHint=true, indicating a safe read operation. The description adds valuable behavioral context beyond this: it explains pagination mechanics, retention limits (90 days), and detailed status/enum explanations (e.g., status values like 'needsRetry', origin types). This enriches the agent's understanding of how the tool behaves in practice, though it could mention rate limits or authentication needs more explicitly.

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

Conciseness3/5

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

The description is front-loaded with the core purpose but becomes verbose with detailed explanations of statuses and other attributes that might be better suited for an output schema. While informative, some sentences (e.g., the lengthy status breakdown) could be trimmed for conciseness without losing essential guidance, making it slightly over-specified in parts.

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

Completeness4/5

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

Given the tool's complexity (9 parameters, no output schema), the description is quite complete. It covers purpose, usage, behavioral details like pagination and retention, and parameter guidance. However, without an output schema, it partially compensates by explaining returned attributes (e.g., status, origin), but could more explicitly structure this as return value documentation to be fully comprehensive.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all 9 parameters thoroughly. The description adds some semantic context by explaining how to use parameters (e.g., 'use the maximum perPage by default', 'filter notifications by...', 'use the 'after' parameter with the last ID'), but this mostly reinforces rather than significantly extends the schema. Baseline 3 is appropriate as 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 clearly states the tool's purpose with a specific verb ('list') and resource ('notifications in Paddle'), and distinguishes it from siblings by focusing on notification entities rather than other resources like addresses, customers, or transactions. It explains what notifications are and how they relate to events, providing essential context.

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

Usage Guidelines4/5

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

The description provides clear context on when to use this tool by explaining the nature of notifications and their retention policy (older than 90 days aren't returned). It suggests default usage ('Use the maximum perPage by default') and lists filtering parameters. However, it does not explicitly state when to use alternatives like 'get_notification' or 'list_notification_logs', missing explicit sibling differentiation.

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

list_notification_settingsA
Read-only

This tool will list notification settings in Paddle.

Use the maximum perPage by default (200) to ensure comprehensive results. Filter notification settings by active and trafficSource as needed. Results are paginated - use the 'after' parameter with the last ID from previous results to get the next page. Sort and order results using the orderBy parameter.

The endpointSecretKey is returned for webhook signature verification, but is a secure value and should never be shared, never be made publicly-accessible, and should only be stored securely.

ParametersJSON Schema
NameRequiredDescriptionDefault
afterNoReturn entities after the specified Paddle ID when working with paginated endpoints.
perPageNoSet how many entities are returned per page. Returns the maximum number of results if a number greater than the maximum is requested.
orderByNoOrder returned entities by the specified field and direction.
activeNoDetermine whether returned entities are active (`true`) or not (`false`).
trafficSourceNoReturn entities that match the specified traffic source.

TDQS

A3.7/5.0
Behavior4/5

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

Annotations provide readOnlyHint=true, but the description adds valuable behavioral context beyond that: it explains pagination mechanics ('use the after parameter with the last ID'), recommends a default perPage value (200), warns about secure handling of endpointSecretKey, and mentions sorting capabilities. This significantly enhances understanding of how the tool behaves in practice.

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 appropriately sized (6 sentences) and front-loaded with the core purpose. Each sentence adds value: default behavior, filtering guidance, pagination mechanics, sorting, and security warning. There's minimal redundancy, though the security warning about endpointSecretKey could be slightly more concise.

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 list tool with readOnlyHint annotation and no output schema, the description provides good completeness: it covers purpose, pagination behavior, filtering parameters, sorting, and security considerations. The main gap is lack of output format details (what fields are returned beyond endpointSecretKey), but given it's a list operation with good parameter coverage, this is acceptable.

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

Parameters3/5

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

With 100% schema description coverage, the baseline is 3. The description adds some semantic context: it explains that perPage defaults to 200 maximum, that active and trafficSource are filters 'as needed', and that after uses 'the last ID from previous results'. However, it doesn't provide significant additional meaning beyond what's already well-documented in the schema descriptions.

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

Purpose4/5

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

The description clearly states the tool's purpose: 'list notification settings in Paddle.' This is a specific verb+resource combination that distinguishes it from other list tools (like list_notifications, list_notification_logs). However, it doesn't explicitly differentiate from get_notification_setting (singular vs. plural), which would require 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 provides implied usage guidance through parameter explanations (e.g., 'Filter notification settings by active and trafficSource as needed'), but doesn't explicitly state when to use this tool versus alternatives like get_notification_setting or list_notifications. It mentions pagination behavior but lacks explicit 'when-not' scenarios or sibling tool comparisons.

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

list_pricesA
Read-only

This tool will list prices in the account's catalog.

Use the maximum perPage by default (200) to ensure comprehensive results. Filter prices by id, productId, status, recurring, and type as needed. Results are paginated - use the 'after' parameter with the last ID from previous results to get the next page. Sort and order results using the orderBy parameter. Amounts are in the smallest currency unit (e.g., cents).

Use the include parameter to include related entities in the response:

  • product: An object for the product entity that's tied to the price.

ParametersJSON Schema
NameRequiredDescriptionDefault
afterNoReturn entities after the specified Paddle ID when working with paginated endpoints.
idNoReturn only the IDs specified. Use a comma-separated list to get multiple entities.
includeNoInclude related entities in the response.
orderByNoOrder returned entities by the specified field and direction.
perPageNoSet how many entities are returned per page. Returns the maximum number of results if a number greater than the maximum is requested.
productIdNoReturn entities related to the specified product. Use a comma-separated list to specify multiple product IDs.
statusNoReturn entities that match the specified status. Use a comma-separated list to specify multiple status values.
recurringNoDetermine whether returned entities are for recurring prices (`true`) or one-time prices (`false`).
typeNoReturn items that match the specified type.

TDQS

A3.7/5.0
Behavior4/5

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

Annotations provide readOnlyHint=true, indicating it's a safe read operation. The description adds valuable behavioral context beyond this: it explains pagination behavior ('Results are paginated'), currency units ('Amounts are in the smallest currency unit'), and includes details on the 'include' parameter for related entities. This enhances understanding without contradicting annotations.

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

Conciseness4/5

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

The description is well-structured and front-loaded with the core purpose. It uses bullet points effectively for the 'include' parameter details, but some sentences could be more concise (e.g., the pagination explanation is slightly verbose). Overall, it's efficient with minimal waste.

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

Completeness4/5

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

Given the tool's complexity (9 parameters, pagination, filtering) and the absence of an output schema, the description does a good job covering key aspects: purpose, pagination, filtering options, currency units, and related entities. However, it could improve by mentioning response format or error handling to be fully complete for a list 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%, so the schema already documents all 9 parameters thoroughly. The description adds some semantic context, such as recommending a default for 'perPage' and explaining how 'after' works with pagination, but doesn't provide significant additional meaning beyond what the schema specifies. This meets the baseline for high schema coverage.

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

Purpose4/5

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

The description clearly states the tool's purpose: 'list prices in the account's catalog.' It specifies the verb ('list') and resource ('prices'), making it easy to understand. However, it doesn't explicitly differentiate from sibling tools like 'get_price' (singular) or 'preview_prices,' which might be used for different scenarios.

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

Usage Guidelines3/5

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

The description provides some implied usage guidance, such as recommending to 'use the maximum perPage by default (200) to ensure comprehensive results' and explaining when to use the 'after' parameter for pagination. However, it lacks explicit when-to-use vs. alternatives (e.g., compared to 'get_price' for a single price or 'preview_prices' for estimates), and doesn't mention prerequisites or exclusions.

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

list_productsA
Read-only

This tool will list products in the account's catalog.

Use the maximum perPage by default (200) to ensure comprehensive results. Filter products by id, status, taxCategory, and type as needed. Results are paginated - use the 'after' parameter with the last ID from previous results to get the next page. Sort and order results using the orderBy parameter. Amounts are in the smallest currency unit (e.g., cents).

Use the include parameter to include related entities in the response:

  • prices: An array of price entities tied to the product.

ParametersJSON Schema
NameRequiredDescriptionDefault
afterNoReturn entities after the specified Paddle ID when working with paginated endpoints.
idNoReturn only the IDs specified. Use a comma-separated list to get multiple entities.
includeNoInclude related entities in the response. Use a comma-separated list to specify multiple entities.
orderByNoOrder returned entities by the specified field and direction.
perPageNoSet how many entities are returned per page. Returns the maximum number of results if a number greater than the maximum is requested.
statusNoReturn entities that match the specified status. Use a comma-separated list to specify multiple status values.
taxCategoryNoReturn entities that match the specified tax category. Use a comma-separated list to specify multiple tax categories.
typeNoReturn items that match the specified type.

TDQS

A3.7/5.0
Behavior4/5

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

Annotations provide readOnlyHint=true, indicating this is a safe read operation. The description adds valuable behavioral context beyond annotations: it specifies pagination behavior ('Results are paginated'), recommends a default perPage value ('Use the maximum perPage by default (200)'), explains currency units ('Amounts are in the smallest currency unit'), and details the include parameter's effect. This enhances the agent's understanding without contradicting annotations.

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

Conciseness4/5

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

The description is well-structured and appropriately sized, with clear sections on usage, filtering, pagination, sorting, currency, and includes. Each sentence adds value, such as the perPage recommendation and pagination instructions. It could be slightly more concise by avoiding repetition (e.g., 'Filter products by id, status, taxCategory, and type as needed' is somewhat redundant with schema details), but overall it's efficient and front-loaded with key 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?

Given the tool's complexity (8 parameters, no output schema), the description is reasonably complete. It covers key behavioral aspects like pagination, defaults, and response details (e.g., currency units, includes). With annotations handling the read-only safety, the description fills in necessary context without needing to explain return values. It could improve by mentioning error handling or rate limits, but it's sufficient for an agent to use the tool effectively.

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 8 parameters thoroughly. The description adds some semantic context: it mentions filtering by id, status, taxCategory, and type, and explains the include parameter with an example ('prices: An array of price entities tied to the product'). However, it doesn't provide significant additional meaning beyond what's in the schema, such as default values or edge cases, warranting a baseline score of 3.

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

Purpose4/5

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

The description clearly states the tool's purpose: 'list products in the account's catalog.' This is a specific verb ('list') and resource ('products'), but it doesn't distinguish this tool from other list_* siblings like list_prices or list_customers, which all follow the same pattern. The description could be more specific about what makes listing products unique.

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

Usage Guidelines3/5

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

The description provides implied usage guidance by mentioning filtering, pagination, sorting, and including related entities, but it doesn't explicitly state when to use this tool versus alternatives. For example, it doesn't compare list_products to get_product for retrieving a single product or explain its role relative to other list_* tools. The guidance is practical but lacks explicit context for tool selection.

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

list_reportsA
Read-only

This tool will list reports in Paddle.

Use the maximum perPage by default (200) to ensure comprehensive results. Filter reports by status as needed. Results are paginated - use the 'after' parameter with the last ID from previous results to get the next page. Sort and order results using the orderBy parameter.

Amounts are in the smallest currency unit (e.g., cents).

ParametersJSON Schema
NameRequiredDescriptionDefault
afterNoReturn entities after the specified Paddle ID when working with paginated endpoints.
orderByNoOrder returned entities by the specified field and direction.
perPageNoSet how many entities are returned per page. Returns the maximum number of results if a number greater than the maximum is requested.
statusNoReturn entities that match the specified status. Use a comma-separated list to specify multiple status values.

TDQS

A3.7/5.0
Behavior4/5

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

Annotations provide readOnlyHint=true, and the description adds valuable behavioral context beyond that: it specifies pagination behavior ('Results are paginated'), recommends default usage ('Use the maximum perPage by default'), and notes currency formatting ('Amounts are in the smallest currency unit'). This enhances understanding without contradicting annotations.

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

Conciseness4/5

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

The description is appropriately sized and front-loaded with the core purpose. Each sentence adds value: purpose, default behavior, filtering, pagination, sorting, and currency details. There's minimal waste, though it could be slightly more structured for clarity.

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

Completeness4/5

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

Given the tool's moderate complexity, 4 parameters with full schema coverage, readOnlyHint annotation, and no output schema, the description is reasonably complete. It covers key behavioral aspects like pagination and currency units, though it could benefit from more explicit sibling differentiation or error handling 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?

With 100% schema description coverage, the baseline is 3. The description adds some semantic context (e.g., explaining pagination with 'after' and recommending 'perPage' defaults), but doesn't provide significant additional meaning beyond what the schema already documents for each parameter.

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

Purpose4/5

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

The description clearly states the tool's purpose: 'list reports in Paddle'. It specifies the verb ('list') and resource ('reports'), and while it doesn't explicitly differentiate from siblings like 'get_report' or 'create_report', the listing nature is evident. However, it doesn't fully distinguish from other list_* tools in the context.

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

Usage Guidelines3/5

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

The description provides implied usage guidance through parameter explanations (e.g., 'Filter reports by status as needed'), but doesn't explicitly state when to use this tool versus alternatives like 'get_report' for individual reports or 'create_report' for new ones. It offers some context but lacks clear when/when-not directives.

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

list_saved_payment_methodsA
Read-only

This tool will list payment methods for a customer in Paddle.

These are payment methods saved by the customer at checkout to be presented for future purchases. They aren't payment methods stored for transactions related to a recurring subscription. View a customers most recently used payment method for purchases or subscriptions by listing transactions (with the list_transactions tool) with a filter of customerId or subscriptionId, and looking at the returned payments[].methodDetails object.

Use the maximum perPage by default (200) to ensure comprehensive results. Filter payment methods by addressId and supportsCheckout as needed. Results are paginated - use the 'after' parameter with the last ID from previous results to get the next page. Sort and order results using the orderBy parameter.

ParametersJSON Schema
NameRequiredDescriptionDefault
customerIdYesPaddle ID of the customer.
addressIdNoReturn entities related to the specified address. Use a comma-separated list to specify multiple address IDs.
afterNoReturn entities after the specified Paddle ID when working with paginated endpoints.
orderByNoOrder returned entities by the specified field and direction.
perPageNoSet how many entities are returned per page. Returns the maximum number of results if a number greater than the maximum is requested.
supportsCheckoutNoReturn entities that support being presented at checkout (`true`) or not (`false`).

TDQS

A4.3/5.0
Behavior4/5

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

The description adds valuable behavioral context beyond the readOnlyHint annotation. It explains that results are paginated with instructions on using the 'after' parameter, recommends a default perPage value for comprehensiveness, and clarifies the nature of the data (saved payment methods for checkout vs. subscriptions). No contradictions with annotations exist.

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

Conciseness4/5

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

The description is well-structured and front-loaded with the core purpose, followed by usage notes and parameter guidance. Each sentence adds value, such as distinguishing from sibling tools and explaining pagination. It could be slightly more concise by integrating some details, but overall it avoids redundancy and is efficiently organized.

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

Completeness4/5

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

Given the lack of an output schema and the tool's complexity (6 parameters, pagination), the description provides sufficient context for effective use. It covers key behavioral aspects like pagination, filtering, and sibling tool differentiation. However, it does not detail the structure of returned payment methods, which could be helpful since there's 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?

With 100% schema description coverage, the input schema fully documents all parameters. The description adds minimal semantic context, such as implying that 'addressId' and 'supportsCheckout' are optional filters, but does not provide significant additional meaning beyond what the schema already specifies. This meets the baseline for high schema coverage.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'list payment methods for a customer in Paddle' with the specific resource 'saved payment methods at checkout.' It distinguishes from sibling tools by explicitly contrasting with 'list_transactions' for subscription-related payment methods, making the scope unambiguous.

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

Usage Guidelines5/5

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

The description provides explicit guidance on when to use this tool versus alternatives: it specifies that this tool is for saved payment methods at checkout, not for subscription transactions, and directs users to 'list_transactions' for the latter. It also advises on default usage ('Use the maximum perPage by default') and when to apply filters.

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

list_simulation_run_eventsA
Read-only

This tool will list simulation run events in Paddle.

Use the maximum perPage by default (200) to ensure comprehensive results. Filter simulationRunEvents by id as needed. Results are paginated - use the 'after' parameter with the last ID from previous results to get the next page. Sort and order results using the orderBy parameter.

Check the following details to understand the success or failure of the event according to Paddle and debug issues:

  • status: Status of the event according to Paddle.

    • pending: No attempt has been made to deliver the event yet.

    • success: The event was delivered successfully.

    • failure: Paddle tried to deliver the simulated event, but it failed. If response object is null, no response received from the server. Check the notification setting endpoint configuration.

    • aborted: Paddle couldn't attempt delivery of the simulated event.

  • payload: Payload sent by Paddle for this event within the simulation.

  • request.body: Request body sent by Paddle.

  • response.body: Response body sent by the responding server. May be empty for success responses.

  • response.statusCode: HTTP status code sent by the responding server.

If the destination URL is using a tunnel or proxy service, the response may be from the tunnel or proxy service, not the original server. Don't assume success or failure based on the status and response alone. Check the logs of the tunnel/proxy service and the destination server.

ParametersJSON Schema
NameRequiredDescriptionDefault
simulationIdYesPaddle ID of the simulation entity associated with the run.
simulationRunIdYesPaddle ID of the simulation run entity.
afterNoReturn entities after the specified Paddle ID when working with paginated endpoints.
orderByNoOrder returned entities by the specified field and direction.
perPageNoSet how many entities are returned per page. Returns the maximum number of results if a number greater than the maximum is requested.
idNoReturn only the IDs specified. Use a comma-separated list to get multiple entities.

TDQS

A3.6/5.0
Behavior4/5

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

Annotations indicate readOnlyHint=true, which the description aligns with by describing a listing operation. The description adds valuable behavioral context beyond annotations: it explains pagination mechanics, default perPage usage, status interpretations, and caveats about tunnel/proxy services. This enhances transparency without contradicting annotations.

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

Conciseness3/5

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

The description is front-loaded with the core purpose but becomes verbose with debugging details and caveats. While informative, some sentences could be more streamlined, and the structure mixes usage instructions with debugging advice, reducing overall efficiency.

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

Completeness4/5

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

Given the tool's complexity (6 parameters, pagination, debugging needs) and lack of output schema, the description does a good job covering key aspects: purpose, usage, behavioral traits, and parameter hints. It compensates for missing output schema by explaining response fields, though it could be more organized.

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 fully documents all 6 parameters. The description adds some semantic context, such as recommending maximum perPage and explaining pagination with 'after,' but does not provide significant additional meaning beyond the schema. This meets the baseline for high schema coverage.

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

Purpose4/5

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

The description clearly states the tool's purpose: 'list simulation run events in Paddle.' It specifies the resource (simulation run events) and verb (list), but does not explicitly differentiate it from sibling tools like 'list_simulation_runs' or 'get_simulation_run_event,' which reduces the score 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?

The description provides implied usage guidance by detailing pagination, filtering, and sorting parameters, and it mentions debugging with status and response details. However, it lacks explicit when-to-use instructions compared to alternatives like 'get_simulation_run_event' or 'list_simulation_runs,' leaving some ambiguity.

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

list_simulation_runsA
Read-only

This tool will list simulation runs in Paddle.

Use the maximum perPage by default (200) to ensure comprehensive results. Filter simulationRuns by id as needed. Results are paginated - use the 'after' parameter with the last ID from previous results to get the next page. Sort and order results using the orderBy parameter.

Use the include parameter to include related entities in the response:

  • events: An array of events entities for events sent by this simulation run.

ParametersJSON Schema
NameRequiredDescriptionDefault
simulationIdYesPaddle ID of the simulation to list runs for.
afterNoReturn entities after the specified Paddle ID when working with paginated endpoints.
includeNoInclude related entities in the response.
orderByNoOrder returned entities by the specified field and direction.
perPageNoSet how many entities are returned per page. Returns the maximum number of results if a number greater than the maximum is requested.
idNoReturn only the IDs specified. Use a comma-separated list to get multiple entities.

TDQS

A3.7/5.0
Behavior4/5

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

Annotations provide readOnlyHint=true, indicating a safe read operation. The description adds valuable behavioral context beyond this: it specifies pagination behavior ('Results are paginated'), default usage ('Use the maximum perPage by default'), and what the 'include' parameter does (including related entities like events). This enhances the agent's understanding without contradicting annotations.

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

Conciseness4/5

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

The description is well-structured and appropriately sized, with clear sentences that each serve a purpose: stating the tool's function, providing usage tips, and explaining the 'include' parameter. It's front-loaded with the core purpose and avoids redundancy, though it could be slightly more concise by integrating some tips into the parameter explanations.

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

Completeness4/5

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

Given the tool's complexity (6 parameters, pagination, filtering), the description is reasonably complete. It covers key behavioral aspects like pagination and default usage, and with annotations indicating read-only operation and no output schema, it doesn't need to explain return values. However, it could benefit from more explicit guidance on when to use versus sibling tools.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema fully documents all 6 parameters. The description adds some semantic context, such as recommending default values for 'perPage' and explaining how 'after' works with pagination, but doesn't provide significant additional meaning beyond what's in the schema. This meets the baseline for high schema coverage.

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

Purpose4/5

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

The description clearly states the tool's purpose: 'list simulation runs in Paddle.' It specifies the resource (simulation runs) and verb (list), but doesn't explicitly differentiate from sibling tools like 'list_simulation_run_events' or 'get_simulation_run' beyond the resource name. The purpose is clear but lacks sibling distinction.

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

Usage Guidelines3/5

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

The description provides implied usage guidance through parameter explanations (e.g., 'use the maximum perPage by default,' 'use the 'after' parameter... to get the next page'), but doesn't explicitly state when to use this tool versus alternatives like 'get_simulation_run' for single runs or 'list_simulation_run_events' for events. It offers practical tips but no direct comparative context.

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

list_simulationsA
Read-only

This tool will list simulations in Paddle.

These are the configurations for simulations, as opposed to the simulation runs which are used to send the events to the notification destination.

Use the maximum perPage by default (200) to ensure comprehensive results. Filter simulations by notificationSettingId, id, and status as needed. Results are paginated - use the 'after' parameter with the last ID from previous results to get the next page. Sort and order results using the orderBy parameter.

ParametersJSON Schema
NameRequiredDescriptionDefault
afterNoReturn entities after the specified Paddle ID when working with paginated endpoints.
notificationSettingIdNoReturn entities related to the specified notification destination. Use a comma-separated list to specify multiple notification destination IDs.
orderByNoOrder returned entities by the specified field and direction.
perPageNoSet how many entities are returned per page. Returns the maximum number of results if a number greater than the maximum is requested.
idNoReturn only the IDs specified. Use a comma-separated list to get multiple entities.
statusNoReturn entities that match the specified status. Use a comma-separated list to specify multiple status values.

TDQS

A3.7/5.0
Behavior4/5

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

Annotations provide readOnlyHint=true, but the description adds valuable behavioral context: it explains pagination mechanics ('after' parameter usage), recommends default perPage value (200), and clarifies that results are configurations rather than runs. This goes beyond what annotations alone provide without contradicting them.

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

Conciseness4/5

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

The description is well-structured and front-loaded with the core purpose. Each sentence adds value: distinguishing simulations from runs, providing usage recommendations, and explaining pagination. While efficient, the recommendation about perPage could be slightly more concise.

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

Completeness4/5

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

Given the read-only nature (annotations), comprehensive parameter documentation (schema), and lack of output schema, the description provides good contextual completeness. It covers key behavioral aspects like pagination and filtering scope, though it doesn't describe the return format or error conditions.

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

Parameters3/5

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

With 100% schema description coverage, the input schema already documents all 6 parameters thoroughly. The description adds minimal parameter-specific semantics beyond the schema, mainly reinforcing filtering capabilities and pagination behavior. This meets the baseline expectation when schema coverage is complete.

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

Purpose4/5

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

The description clearly states the tool 'list simulations in Paddle' and distinguishes simulations from simulation runs, providing specific context about what type of resource is being listed. However, it doesn't explicitly differentiate from sibling list tools like 'list_simulation_runs' beyond the general distinction mentioned.

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

Usage Guidelines3/5

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

The description implies usage by mentioning filtering parameters and pagination, but doesn't provide explicit guidance on when to use this tool versus alternatives like 'get_simulation' or 'list_simulation_runs'. It offers some operational context but lacks clear when/when-not directives.

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

list_subscriptionsA
Read-only

This tool will list subscriptions in Paddle.

Use the maximum perPage by default (200) to ensure comprehensive results. Filter subscriptions by addressId, collectionMode, customerId, id, priceId, scheduledChangeAction, and status as needed. Results are paginated - use the 'after' parameter with the last ID from previous results to get the next page. Sort and order results using the orderBy parameter.

Amounts are in the smallest currency unit (e.g., cents).

ParametersJSON Schema
NameRequiredDescriptionDefault
addressIdNoReturn entities related to the specified address. Use a comma-separated list to specify multiple address IDs.
afterNoReturn entities after the specified Paddle ID when working with paginated endpoints.
collectionModeNoReturn entities that match the specified collection mode.
customerIdNoReturn entities related to the specified customer. Use a comma-separated list to specify multiple customer IDs.
idNoReturn only the IDs specified. Use a comma-separated list to get multiple entities.
orderByNoOrder returned entities by the specified field and direction.
perPageNoSet how many entities are returned per page. Returns the maximum number of results if a number greater than the maximum is requested.
priceIdNoReturn entities related to the specified price. Use a comma-separated list to specify multiple price IDs.
scheduledChangeActionNoReturn subscriptions that have a scheduled change. Use a comma-separated list to specify multiple scheduled change actions.
statusNoReturn entities that match the specified status. Use a comma-separated list to specify multiple status values.

TDQS

A3.7/5.0
Behavior4/5

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

Annotations provide readOnlyHint=true, and the description adds valuable behavioral context beyond that: it specifies pagination behavior ('Results are paginated'), recommends a default perPage value ('Use the maximum perPage by default (200)'), and notes currency formatting ('Amounts are in the smallest currency unit'). This enhances understanding without contradicting annotations.

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

Conciseness4/5

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

The description is appropriately sized with 5 sentences, each adding value: purpose, default usage, filtering, pagination, sorting, and currency details. It's front-loaded with the core purpose and key usage tip. Minor redundancy exists in listing filter fields that are already 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?

Given the tool's complexity (10 parameters, no output schema), the description is fairly complete: it covers purpose, key behavioral traits (pagination, defaults, currency), and usage hints. With annotations covering read-only safety, it doesn't need to explain return values deeply, though output format details could be more explicit.

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 10 parameters thoroughly. The description adds minimal param semantics by listing filterable fields and mentioning pagination with 'after', but doesn't provide significant additional meaning beyond what's in the schema. Baseline 3 is appropriate given high schema coverage.

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

Purpose4/5

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

The description clearly states the tool's purpose as 'list subscriptions in Paddle,' which is a specific verb+resource combination. However, it doesn't explicitly differentiate from sibling tools like 'get_subscription' or other list tools, though the context suggests it's for bulk retrieval with filtering.

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

Usage Guidelines3/5

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

The description provides implied usage guidance by mentioning filtering, pagination, and sorting, but doesn't explicitly state when to use this tool versus alternatives like 'get_subscription' for single items or other list tools for different resources. No exclusions or clear alternatives are named.

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

list_transactionsA
Read-only

This tool will list transactions in Paddle.

Use the maximum perPage by default (30) to ensure comprehensive results. Filter transactions by billedAt, collectionMode, createdAt, customerId, id, invoiceNumber, origin, status, subscriptionId, and updatedAt as needed. Results are paginated - use the 'after' parameter with the last ID from previous results to get the next page. Sort and order results using the orderBy parameter. Amounts are in the smallest currency unit (e.g., cents).

Use the include parameter to include related entities in the response:

  • address: An object for the address entity related to this transaction. Only returned if an address is set against the transaction.

  • adjustments: An array of adjustment entities related to this transaction. Only returned if adjustments have been created against the transaction.

  • adjustments_totals: An object containing totals for all adjustments on a transaction. Only returned if adjustments have been created against the transaction.

  • available_payment_methods: An array of payment methods that are available to use for this transaction.

  • business: An object for the business entity related to this transaction. Only returned if a business is set against the transaction.

  • customer: An object for the customer entity related to this transaction. Only returned if a customer is set against the transaction.

  • discount: An object for the discount entity related to this transaction. Only returned if a discount is set against the transaction.

Transactions have a collectionMode that determines how Paddle tries to collect for payment:

  • automatic: Payment is collected automatically using a checkout initially, then using a payment method on file.

  • manual: Payment is collected manually. Customers are sent an invoice with payment terms and can make a payment offline or using a checkout. Requires billingDetails.

Transactions have a status that determines the current state of the transaction:

  • draft: Transaction is missing required fields. Typically the first stage of a checkout before customer details are captured.

  • ready: Transaction has all of the required fields to be marked as billed or completed.

  • billed: Transaction has been updated to billed. Billed transactions get an invoice number and are considered a legal record. They can't be changed. Typically used as part of an invoice workflow.

  • paid: Transaction is fully paid, but has not yet been processed internally.

  • completed: Transaction is fully paid and processed.

  • canceled: Transaction has been updated to canceled. If an invoice, it's no longer due.

  • past_due: Transaction is past due. Occurs for automatically-collected transactions when the related subscription is in dunning, and for manually-collected transactions when payment terms have elapsed.

ParametersJSON Schema
NameRequiredDescriptionDefault
afterNoReturn entities after the specified Paddle ID when working with paginated endpoints.
billedAtNoReturn entities billed at this exact time. Pass an RFC 3339 datetime string.
billedAtLTNoReturn entities billed before this time. Pass an RFC 3339 datetime string.
billedAtLTENoReturn entities billed at or before this time. Pass an RFC 3339 datetime string.
billedAtGTNoReturn entities billed after this time. Pass an RFC 3339 datetime string.
billedAtGTENoReturn entities billed at or after this time. Pass an RFC 3339 datetime string.
collectionModeNoReturn entities that match the specified collection mode.
createdAtNoReturn entities created at this exact time. Pass an RFC 3339 datetime string.
createdAtLTNoReturn entities created before this time. Pass an RFC 3339 datetime string.
createdAtLTENoReturn entities created at or before this time. Pass an RFC 3339 datetime string.
createdAtGTNoReturn entities created after this time. Pass an RFC 3339 datetime string.
createdAtGTENoReturn entities created at or after this time. Pass an RFC 3339 datetime string.
customerIdNoReturn entities related to the specified customer. Use a comma-separated list to specify multiple customer IDs.
idNoReturn only the IDs specified. Use a comma-separated list to get multiple entities.
includeNoInclude related entities in the response. Use a comma-separated list to specify multiple entities.
invoiceNumberNoReturn entities that match the invoice number. Use a comma-separated list to specify multiple invoice numbers.
originNoReturn entities related to the specified origin. Use a comma-separated list to specify multiple origins.
orderByNoOrder returned entities by the specified field and direction.
statusNoReturn entities that match the specified status. Use a comma-separated list to specify multiple status values.
subscriptionIdNoReturn entities related to the specified subscription. Use a comma-separated list to specify multiple subscription IDs. Pass `null` to return entities that aren't related to any subscription.
perPageNoSet how many entities are returned per page.
updatedAtNoReturn entities updated at this exact time. Pass an RFC 3339 datetime string.
updatedAtLTNoReturn entities updated before this time. Pass an RFC 3339 datetime string.
updatedAtLTENoReturn entities updated at or before this time. Pass an RFC 3339 datetime string.
updatedAtGTNoReturn entities updated after this time. Pass an RFC 3339 datetime string.
updatedAtGTENoReturn entities updated at or after this time. Pass an RFC 3339 datetime string.

TDQS

A4.5/5.0
Behavior5/5

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

The description adds substantial behavioral context beyond the readOnlyHint annotation. It explains pagination mechanics ('use the 'after' parameter with the last ID'), data format details ('amounts are in the smallest currency unit'), collectionMode behaviors (automatic vs manual), and status definitions with workflow implications. This provides rich operational context that annotations alone don't cover.

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

Conciseness3/5

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

The description is comprehensive but verbose at 22 sentences. While information is valuable, it could be more front-loaded with critical details. The lengthy explanations of collectionMode and status could be condensed, though they do earn their place by providing important behavioral 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?

Given the tool's complexity (26 parameters, no output schema), the description provides excellent completeness. It covers pagination, filtering, sorting, data formats, include options, and detailed explanations of collectionMode and status - essentially everything needed to use the tool effectively despite the lack of output schema.

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

Parameters4/5

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

With 100% schema description coverage, the baseline is 3. The description adds meaningful context about parameter usage: it explains the 'include' parameter's purpose and what each option returns, clarifies that amounts use smallest currency units, and provides guidance on default pagination behavior. However, it doesn't fully explain all 26 parameters' interactions or edge cases.

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

Purpose5/5

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

The description explicitly states 'list transactions in Paddle' - a specific verb ('list') and resource ('transactions') with clear scope ('in Paddle'). It distinguishes from sibling tools like 'get_transaction' (singular retrieval) and 'create_transaction' (creation operation).

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

Usage Guidelines4/5

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

The description provides clear usage context with pagination guidance ('use the maximum perPage by default'), filtering capabilities, and include parameter usage. However, it doesn't explicitly state when to use this tool versus alternatives like 'get_transaction' for single transactions or other list_* tools for different resources.

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

preview_pricesA

This tool will preview price calculations for one or more prices.

Consider using the preview_transaction_create tool for more advanced and accurate pricing calculations or for all manually-collected invoiced transactions.

Providing location information when previewing prices allows Paddle to calculate tax or automatically localize prices. Provide one of the following:

  • customer_ip_address: Paddle fetches location using the IP address to calculate totals.

  • address: Paddle uses the country and ZIP code (where supplied) to calculate totals.

  • customerId, addressId, businessId: Paddle uses existing customer data to calculate totals. Typically used for logged-in customers.

Each line item includes formattedUnitTotals and formattedTotals objects that return totals formatted for the country or region being worked with, including the currency symbol.

If successful, the response includes the data sent with a details object that includes totals for the supplied prices.

ParametersJSON Schema
NameRequiredDescriptionDefault
customerIdNoPaddle ID of the customer that this preview is for, prefixed with `ctm_`.
addressIdNoPaddle ID of the address that this preview is for, prefixed with `add_`. Send one of `addressId`, `customerIpAddress`, or the `address` object when previewing.
businessIdNoPaddle ID of the business that this preview is for, prefixed with `biz_`.
currencyCodeNoSupported three-letter ISO 4217 currency code.
discountIdNoPaddle ID of the discount applied to this preview, prefixed with `dsc_`.
addressNoAddress for this preview. Send one of `addressId`, `customerIpAddress`, or the `address` object when previewing.
customerIpAddressNoIP address for this transaction preview. Send one of `addressId`, `customerIpAddress`, or the `address` object when previewing.
itemsYesList of items to preview price calculations for.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations indicate readOnlyHint=false and destructiveHint=false, but the description adds valuable behavioral context beyond this. It explains that providing location information enables tax calculation and price localization, describes how formatted totals are returned in the response, and specifies that successful responses include a 'details' object with totals. No contradiction with annotations exists.

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

Conciseness4/5

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

The description is well-structured and appropriately sized. It starts with the core purpose, then provides usage guidelines, parameter context, and response details. Most sentences add value, though some information (like the formatted totals explanation) could be slightly more concise.

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

Completeness4/5

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

Given the tool's complexity (8 parameters, tax calculation logic) and lack of output schema, the description does a good job explaining key aspects: purpose, when to use alternatives, location parameter significance, and response format. However, it could better explain the relationship between items and prices or provide more detail about error cases.

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 8 parameters thoroughly. The description adds some semantic context by explaining the purpose of location parameters (customer_ip_address, address, customerId/addressId/businessId) for tax calculation and localization, but doesn't provide significant additional meaning beyond what's in the schema descriptions.

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

Purpose4/5

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

The description clearly states the tool's purpose: 'preview price calculations for one or more prices.' It specifies the verb ('preview') and resource ('price calculations'), but doesn't explicitly differentiate from sibling tools like 'preview_subscription_charge' or 'preview_transaction_create' beyond mentioning the latter as an alternative for advanced calculations.

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

Usage Guidelines5/5

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

The description provides explicit guidance on when to use this tool versus alternatives: 'Consider using the preview_transaction_create tool for more advanced and accurate pricing calculations or for all manually-collected invoiced transactions.' It also details context for location-based calculations, specifying three scenarios (customer_ip_address, address, customerId/addressId/businessId) and their typical use cases.

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

preview_subscription_chargeA

This tool will preview creating a one-time charge for a subscription without billing that charge, typically used for previewing calculations before making changes to a subscription.

One-time charges are non-recurring items. These are price entities where the billingCycle is null.

If successful, the response includes immediateTransaction, nextTransaction, and recurringTransactionDetails to see expected transactions for the changes.

ParametersJSON Schema
NameRequiredDescriptionDefault
subscriptionIdYesPaddle ID of the subscription.
effectiveFromYesWhen one-time charges should be billed.
itemsYesList of one-time charges to bill for. Only prices where the `billingCycle` is `null` may be added. Charge for items that have been added to the catalog by passing the Paddle ID of an existing price entity, or charge for non-catalog items by passing a price object. Non-catalog items can be for existing products, or pass a product object as part of the price to charge for a non-catalog product.
onPaymentFailureNoHow Paddle should handle changes made to a subscription or its items if the payment fails during update. If omitted, defaults to `prevent_change`.

TDQS

A4.4/5.0
Behavior4/5

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

The description adds valuable behavioral context beyond the annotations. While annotations indicate it's not read-only and not destructive, the description clarifies that it 'previews... without billing that charge,' explaining the non-destructive nature in practical terms. It also describes the response format ('includes immediateTransaction, nextTransaction, and recurringTransactionDetails'), which is helpful since there's no output schema. However, it doesn't mention rate limits, authentication needs, 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.

Conciseness5/5

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

The description is well-structured and concise. The first sentence clearly states the purpose and usage, followed by explanatory details about one-time charges and the response format. Each sentence adds value without redundancy, and the information is front-loaded for quick understanding.

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

Completeness4/5

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

Given the tool's complexity (previewing charges with multiple parameters) and the absence of an output schema, the description does a good job of explaining the tool's behavior and response. It covers the purpose, usage, and output structure. However, it could be more complete by mentioning potential errors, authentication requirements, or limitations, which would help the agent use it more effectively.

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

Parameters3/5

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

With 100% schema description coverage, the baseline is 3. The description adds minimal parameter semantics: it clarifies that 'one-time charges are non-recurring items' and that 'billingCycle is null,' which relates to the 'items' parameter. However, it doesn't provide additional context for other parameters like 'effectiveFrom' or 'onPaymentFailure' beyond what's already in the schema.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'preview creating a one-time charge for a subscription without billing that charge, typically used for previewing calculations before making changes to a subscription.' It specifies the verb ('preview creating'), resource ('one-time charge for a subscription'), and distinguishes it from sibling tools like 'create_subscription_charge' by emphasizing the preview-only nature.

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

Usage Guidelines5/5

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

The description explicitly states when to use this tool: 'typically used for previewing calculations before making changes to a subscription.' It also distinguishes it from alternatives by contrasting with 'create_subscription_charge' (implied by the sibling list) and clarifies that it's for 'previewing calculations before making changes,' providing clear guidance on its intended context.

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

preview_subscription_updateA

This tool will preview an update for a subscription without applying those changes.

It's best practice to preview every time before updating the subscription to confirm the changes are as expected, especially when making updates to items, billing periods, and anything affecting proration.

The updateSummary object contains details of prorated credits and charges created, along with the overall result of the update.

If successful, the response includes immediateTransaction, nextTransaction, and recurringTransactionDetails to see expected transactions for the changes.

ParametersJSON Schema
NameRequiredDescriptionDefault
subscriptionIdYesPaddle ID of the subscription.
customerIdNoUnique Paddle ID for this customer entity, prefixed with `ctm_`.
addressIdNoUnique Paddle ID for this address entity, prefixed with `add_`.
businessIdNoPaddle ID of the business that this subscription is for, prefixed with `biz_`. Include to change the business for a subscription.
currencyCodeNoSupported three-letter ISO 4217 currency code.
nextBilledAtNoRFC 3339 datetime string.
discountNoDetails of the discount applied to this subscription. Include to add a discount to a subscription. `null` to remove a discount.
collectionModeNoHow payment is collected for transactions created for this subscription. `automatic` for checkout, `manual` for invoices.
billingDetailsNoDetails for invoicing. Required if `collectionMode` is `manual`. `null` if changing `collectionMode` to `automatic`.
scheduledChangeNoSet to `null` to remove a scheduled change applied to a subscription. Pause the subscription, cancel the subscription, and resume the subscription to create scheduled changes instead.
itemsNoList of items on this subscription. Only recurring items may be added. Send the complete list of items that should be on this subscription, including existing items to retain.
customDataNoAny structured custom key-value data needed outside of Paddle's standard fields. Occasionally used by third-parties.
prorationBillingModeNoHow Paddle should handle proration calculation for changes made to a subscription or its items. Required when making changes that impact billing. For automatically-collected subscriptions, responses may take longer than usual if a proration billing mode that collects for payment immediately is used.
onPaymentFailureNoHow Paddle should handle changes made to a subscription or its items if the payment fails during update. If omitted, defaults to `prevent_change`.

TDQS

A3.9/5.0
Behavior3/5

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

Annotations indicate readOnlyHint=false and destructiveHint=false, suggesting this is a non-destructive operation that may involve writes (e.g., generating preview data). The description adds value by clarifying that changes are not applied ('without applying those changes') and detailing the response structure (e.g., updateSummary, transaction details). However, it doesn't disclose behavioral traits like rate limits, authentication needs, or error handling, which are not covered by annotations.

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

Conciseness4/5

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

The description is appropriately sized and front-loaded, starting with the core purpose. Each sentence adds value: the first states the action, the second provides usage guidance, and the last two explain response details. There's no wasted text, but it could be slightly more structured (e.g., bullet points for response fields) without losing conciseness.

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

Completeness4/5

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

Given the tool's complexity (14 parameters, nested objects) and lack of output schema, the description does well by explaining key response components (updateSummary, transaction details). However, it doesn't cover all contextual aspects like error cases, prerequisites (e.g., required permissions), or how it integrates with sibling tools (e.g., 'update_subscription' not listed). With annotations providing safety hints, it's mostly complete but has minor gaps.

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

Parameters3/5

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

The input schema has 100% description coverage, thoroughly documenting all 14 parameters. The description adds minimal parameter semantics beyond the schema, only implying that parameters relate to subscription updates (e.g., 'items, billing periods, and anything affecting proration'). With high schema coverage, the baseline is 3, as the description doesn't significantly enhance parameter understanding.

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

Purpose4/5

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

The description clearly states the tool's purpose: 'preview an update for a subscription without applying those changes.' It specifies the verb ('preview') and resource ('subscription update'), distinguishing it from tools like 'update_subscription' (though not listed as a sibling). However, it doesn't explicitly differentiate from sibling tools like 'preview_subscription_charge' or 'preview_prices', which are also preview tools in the same domain, leaving some ambiguity.

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

Usage Guidelines5/5

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

The description provides explicit usage guidelines: 'It's best practice to preview every time before updating the subscription to confirm the changes are as expected, especially when making updates to items, billing periods, and anything affecting proration.' This clearly indicates when to use this tool (before applying updates) and highlights critical scenarios, though it doesn't name specific alternative tools like 'update_subscription' (not in siblings).

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

preview_transaction_createA

This tool will preview a transaction without creating a transaction entity.

Consider using the preview_prices tool for simpler pricing calculations where payment is often taken through checkout.

Providing location information when previewing a transaction allows Paddle to calculate tax or automatically localize prices. Provide one of the following:

  • customer_ip_address: Paddle fetches location using the IP address to calculate totals.

  • address: Paddle uses the country and ZIP code (where supplied) to calculate totals.

  • customerId, addressId, businessId: Paddle uses existing customer data to calculate totals. Typically used for logged-in customers.

Exclude items from the total calculation using the includeInTotals boolean.

By default, recurring items with trials are considered to have a zero charge when previewing. Set ignoreTrials to true to ignore trial periods against prices for transaction preview calculations.

Transaction previews don't create transactions, so no id is returned.

If successful, the response includes the data sent with a details object that includes totals for the supplied prices.

ParametersJSON Schema
NameRequiredDescriptionDefault
customerIdNoPaddle ID of the customer that this transaction preview is for, prefixed with `ctm_`.
currencyCodeNoSupported three-letter ISO 4217 currency code.
discountIdNoPaddle ID of the discount applied to this transaction preview, prefixed with `dsc_`.
ignoreTrialsNoWhether trials should be ignored for transaction preview calculations. By default, recurring items with trials are considered to have a zero charge when previewing. Set to `true` to disable this.
itemsYesList of items to preview charging for. Preview charging for items that have been added to the catalog by passing the Paddle ID of an existing price entity, or preview charging for non-catalog items by passing a price object. Non-catalog items can be for existing products, or pass a product object as part of the price to preview charging for a non-catalog product.
addressYesRepresents an address entity when previewing addresses.
customerIpAddressYesIP address for this transaction preview.
addressIdYesPaddle ID of the address that this transaction preview is for, prefixed with `add_`.
businessIdNoPaddle ID of the business that this transaction preview is for, prefixed with `biz_`.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations indicate readOnlyHint=false and destructiveHint=false, but the description adds valuable behavioral context beyond this. It explains that 'Transaction previews don't create transactions, so no id is returned' and describes the response structure ('details object that includes totals'), which clarifies the non-persistent nature and output format.

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

Conciseness4/5

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

The description is well-structured and front-loaded with the core purpose. Each paragraph addresses a specific aspect (purpose, alternatives, location info, parameter behaviors, output). While comprehensive, it avoids redundancy and maintains focus, though it could be slightly more condensed in the location explanation section.

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

Completeness4/5

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

Given the tool's complexity (9 parameters, nested objects) and lack of output schema, the description does a good job covering key aspects: purpose, usage guidelines, parameter semantics, and behavioral traits. It explains the response format and non-persistent nature, though it could briefly mention error handling or rate limits for full completeness.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3. The description adds meaningful context for parameters: it explains the purpose of location information (tax/price calculation), lists options (customer_ip_address, address, customerId/addressId/businessId), and clarifies behaviors for includeInTotals and ignoreTrials. This enhances understanding beyond the schema's technical definitions.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'preview a transaction without creating a transaction entity.' It specifies the verb ('preview'), resource ('transaction'), and distinguishes it from actual creation, making it distinct from sibling tools like 'create_transaction'.

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

Usage Guidelines5/5

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

The description provides explicit guidance on when to use this tool versus alternatives. It states: 'Consider using the preview_prices tool for simpler pricing calculations where payment is often taken through checkout,' naming a specific sibling tool and clarifying the use case difference.

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

replay_notificationA

This tool will resend a delivered or failed notification, like a webhook notification, using its ID.

Don't use this tool without checking with the user first. Avoid using before gaining explicit approval.

Paddle creates a new notification entity for the replay, related to the same eventId. The response includes the new notificationId of the created notification.

Notifications older than 90 days aren't retained. If trying to replay a notification that's no longer retained, Paddle returns an error.

Only notifications with the origin of event can be replayed. Replaying a notification created for a replay isn't possible.

Check the following details to understand the success or failure of the notification according to Paddle and debug issues:

  • status: Status of the notification.

    • notAttempted: Paddle hasn't yet tried to deliver this notification.

    • needsRetry: Paddle tried to deliver this notification, but it failed. It's scheduled to be retried.

    • delivered: Paddle delivered this notification successfully.

    • failed: Paddle tried to deliver this notification, but all attempts failed. It's not scheduled to be retried.

  • origin: Describes how this notification was created.

    • event: Notification created when a subscribed event occurred.

    • replay: Notification created when a notification with the origin event was replayed.

  • deliveredAt: RFC 3339 datetime string of when this notification was delivered. null if not yet delivered successfully.

  • lastAttemptAt: RFC 3339 datetime string of when this notification was last attempted.

  • retryAt: RFC 3339 datetime string of when this notification is scheduled to be retried.

  • timesAttempted: How many times delivery of this notification has been attempted.

ParametersJSON Schema
NameRequiredDescriptionDefault
notificationIdYesPaddle ID of the notification.

TDQS

A4.4/5.0
Behavior4/5

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

The description adds significant behavioral context beyond the annotations (readOnlyHint: false, destructiveHint: false). It explains that a new notification entity is created, includes retention policies ('Notifications older than 90 days aren't retained'), error conditions, and detailed status/field explanations for debugging. While annotations indicate it's not read-only or destructive, the description provides operational details that help the agent understand the tool's effects and constraints.

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

Conciseness4/5

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

The description is well-structured and appropriately sized. It front-loads the core purpose and usage warnings, then provides detailed behavioral information. While somewhat lengthy due to the status/origin explanations, every section adds value for understanding the tool's operation and constraints, with no redundant or wasted sentences.

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

Completeness5/5

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

Given the tool's complexity (mutation operation with specific constraints) and the absence of an output schema, the description provides comprehensive context. It explains what the tool does, when to use it, behavioral details (creation of new entity, retention limits, origin restrictions), and debugging information including status values and timestamps. This compensates well for the lack of structured output documentation.

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 input schema has 100% description coverage, with the single parameter 'notificationId' clearly documented as 'Paddle ID of the notification.' The description doesn't add additional parameter semantics beyond what's in the schema, but it provides context about what type of notification ID is acceptable (e.g., from delivered/failed notifications with origin 'event'). This meets the baseline for high schema coverage.

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

Purpose5/5

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

The description clearly states the tool's purpose with specific verbs ('resend a delivered or failed notification') and resources ('notification, like a webhook notification, using its ID'). It distinguishes itself from sibling tools by focusing on notification replay rather than creation or retrieval operations, which are covered by other tools like create_notification_setting, get_notification, and list_notifications.

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

Usage Guidelines5/5

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

The description provides explicit usage guidelines, including when to use ('resend a delivered or failed notification'), prerequisites ('Don't use this tool without checking with the user first. Avoid using before gaining explicit approval'), and exclusions ('Only notifications with the origin of event can be replayed. Replaying a notification created for a replay isn't possible'). This gives clear context for when and how to invoke the tool responsibly.

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

replay_simulation_run_eventA

This tool will resend an event sent by a simulation run from Paddle using its ID.

This is useful to retest the sending of an individual event within a simulation run rather than creating a new simulation run and sending all events again.

Paddle creates a new simulation run event entity for the replay, related to the same simulation run.

If successful, the response includes the new simulation run event entity.

Check the following details to understand the success or failure of the event according to Paddle and debug issues:

  • status: Status of the event according to Paddle.

    • pending: No attempt has been made to deliver the event yet.

    • success: The event was delivered successfully.

    • failure: Paddle tried to deliver the simulated event, but it failed. If response object is null, no response received from the server. Check the notification setting endpoint configuration.

    • aborted: Paddle couldn't attempt delivery of the simulated event.

  • payload: Payload sent by Paddle for this event within the simulation.

  • request.body: Request body sent by Paddle.

  • response.body: Response body sent by the responding server. May be empty for success responses.

  • response.statusCode: HTTP status code sent by the responding server.

ParametersJSON Schema
NameRequiredDescriptionDefault
simulationIdYesPaddle ID of the simulation entity associated with the run the event was sent as part of.
simulationRunIdYesPaddle ID of the simulation run entity the event was sent as part of.
simulationEventIdYesPaddle ID of the simulation event entity to replay.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations indicate this is not read-only and not destructive, but the description adds valuable behavioral context: it explains that Paddle creates a new simulation run event entity for the replay, describes the response structure (including status fields like pending, success, failure, aborted), and provides debugging details (payload, request.body, response.body, response.statusCode). This goes beyond what annotations provide, though it doesn't cover rate limits or authentication needs.

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

Conciseness4/5

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

The description is well-structured and appropriately sized. It starts with the core purpose, then provides usage context, behavioral details, and debugging information. While it's slightly longer than minimal, every sentence adds value (e.g., explaining the response structure and debugging fields). It could be slightly more concise but remains efficient.

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

Completeness5/5

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

Given the tool's complexity (replaying events with debugging), the description provides comprehensive context. It explains what the tool does, when to use it, what happens during execution (creates new entity), and details the response structure for success/failure analysis. With no output schema, the description effectively compensates by documenting the response format. This is complete for the tool's purpose.

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 three parameters (simulationId, simulationRunId, simulationEventId) with clear descriptions. The description doesn't add any additional parameter semantics beyond what's in the schema, but it doesn't need to since schema coverage is complete. Baseline 3 is appropriate when the schema does the heavy lifting.

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

Purpose5/5

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

The description clearly states the specific action ('resend an event'), the resource ('simulation run event from Paddle'), and the mechanism ('using its ID'). It distinguishes this tool from sibling tools like 'create_simulation_run' or 'replay_notification' by focusing on replaying individual events rather than creating new runs or replaying notifications.

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

Usage Guidelines5/5

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

The description explicitly states when to use this tool: 'to retest the sending of an individual event within a simulation run rather than creating a new simulation run and sending all events again.' This provides clear guidance on the alternative (creating a new simulation run) and the specific use case (retesting individual events).

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

TDQS

A3.9/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose targeting specific resources and actions in the Paddle ecosystem. For example, create_address, get_address, and list_addresses are distinct from create_adjustment, get_adjustment_credit_note, and list_adjustments, with no overlap in functionality. The descriptions provide clear boundaries, making it easy for an agent to differentiate between tools like create_transaction and preview_transaction_create.

Naming Consistency5/5

Tool names follow a highly consistent verb_noun pattern throughout, such as create_address, get_address, list_addresses, and preview_transaction_create. All tools use snake_case uniformly, with verbs like create, get, list, preview, replay, and update applied predictably across different entities like customer, subscription, and notification. This consistency aids in readability and predictability.

Tool Count2/5

With 63 tools, the count is excessive for typical MCP server purposes, making it overwhelming and heavy for agents to navigate. While Paddle's API is comprehensive, this many tools suggests poor scoping for an MCP interface, where a more streamlined set (e.g., 15-25 tools) would be more appropriate. The high count increases cognitive load and potential for misselection.

Completeness5/5

The tool set provides complete CRUD and lifecycle coverage for Paddle's domain, including entities like addresses, adjustments, businesses, customers, discounts, notifications, prices, products, reports, simulations, subscriptions, and transactions. It includes create, get, list, preview, and update operations where applicable, with no obvious gaps—agents can perform all core workflows from creation to management and reporting without dead ends.

Maintenance

ActivityInactive
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    A Model Context Protocol server that enables interaction with the Tradovate API for managing trading contracts, positions, orders, and accounts.
    1
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    A Model Context Protocol server that provides comprehensive integration with PayPal's APIs, enabling seamless interaction with payment processing, invoicing, subscription management, and business operations through a standardized interface.
    6
    Apache 2.0

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/PaddleHQ/paddle-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server