Skip to main content
Glama
PaddleHQ

Paddle MCP Server

Official
by PaddleHQ

create_report

Generate custom financial reports from Paddle Billing data for analysis, reconciliation, or export. Supports multiple report types with filter options to extract specific transaction, adjustment, product, or discount information.

Instructions

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.

Input Schema

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

Implementation Reference

  • The main handler function that executes the create_report tool by calling the Paddle SDK's reports.create method with the provided parameters.
    export const createReport = async (paddle: Paddle, params: z.infer<typeof Parameters.createReportParameters>) => {
      try {
        const report = await paddle.reports.create(params);
        return report;
      } catch (error) {
        return error;
      }
    };
  • The tool schema defining the method name, description, input parameters schema, and required actions for the create_report tool.
      method: "create_report",
      name: "Create a report",
      description: prompts.createReportPrompt,
      parameters: params.createReportParameters,
      actions: {
        reports: {
          write: true,
          create: true,
        },
      },
    },
  • src/api.ts:86-86 (registration)
    Registration of the createReport handler function to the CREATE_REPORT tool method in the central toolMap used by the PaddleAPI class.
    [TOOL_METHODS.CREATE_REPORT]: funcs.createReport,
  • Constant defining the string identifier for the create_report tool method in the TOOL_METHODS object.
    CREATE_REPORT: "create_report",
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.

Install Server

Other Tools

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