stripe-mcp-server
Provides tools for managing Stripe payment operations including customers, payments, subscriptions, invoices, checkout sessions, refunds, balance, and webhooks, with built-in PII redaction and strict input validation.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@stripe-mcp-serverCreate a payment intent for $50"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Stripe MCP Server
A local Model Context Protocol server for Stripe payment operations. 52 tools across 8 domains, with built-in PII redaction and input validation.
Built for AI-assisted development workflows where Stripe API access needs to be both comprehensive and safe by default.
Why this exists
Stripe's official remote MCP server (mcp.stripe.com) uses OAuth and includes doc search, but exposes a smaller toolset. This server runs locally, covers more of the Stripe API surface, and sanitises every response before it reaches the model context, so sensitive data never leaks into conversation history or logs.
This server | Stripe official | |
Transport | stdio (local) | HTTP (remote) |
Auth |
| OAuth |
Tools | 52 | Smaller subset |
PII redaction | Built-in | Stripe-managed |
Doc search | No | Yes |
Idempotency keys | All mutating tools | Varies |
Input validation | Strict schemas (Zod) | Varies |
The two servers complement each other. Run both if you want operational tools plus doc search.
Related MCP server: Integrations MCP
Tools (52)
Customers (6)
create_customer, retrieve_customer, update_customer, delete_customer, list_customers, search_customers
Payments (11)
create_payment_intent, retrieve_payment_intent, confirm_payment_intent, capture_payment_intent, cancel_payment_intent, list_payment_intents, list_payment_methods, attach_payment_method, detach_payment_method, retrieve_charge, list_charges
Subscriptions (9)
create_subscription, retrieve_subscription, update_subscription, cancel_subscription, list_subscriptions, create_product, list_products, create_price, list_prices
Invoices (8)
create_invoice, retrieve_invoice, finalize_invoice, pay_invoice, void_invoice, list_invoices, retrieve_upcoming_invoice, create_invoice_item
Checkout (5)
create_checkout_session, retrieve_checkout_session, list_checkout_sessions, create_coupon, list_coupons
Refunds (3)
create_refund, retrieve_refund, list_refunds
Balance (5)
retrieve_balance, list_balance_transactions, list_payouts, list_disputes, retrieve_dispute
Webhooks (5)
create_webhook_endpoint, delete_webhook_endpoint, list_webhook_endpoints, list_events, retrieve_event
Resources (4)
Exposed as MCP resources (read-only, sanitised):
stripe://account- current account detailsstripe://balance- balance by currencystripe://webhook-endpoints- registered webhook endpointsstripe://products- active product catalogue with default prices
Prompts (4)
Pre-built prompt templates for common integration tasks:
review_stripe_integration- security, error handling, and best-practice auditsetup_webhooks- end-to-end webhook implementation guide per frameworkdesign_pricing- pricing model design with Stripe Products and Pricestroubleshoot_payment- diagnose failed payments, declines, and disputes
Security posture
Every Stripe API response is sanitised before reaching MCP output:
Secrets redacted: webhook signing secrets, PaymentIntent
client_secretvalues, including inside expanded nested objectsPII masked: email addresses (shows first 2 chars + domain), phone numbers (shows last 4 digits), billing/shipping addresses fully redacted
URLs redacted: hosted invoice URLs and invoice PDF links (bearer-style access tokens)
Metadata redacted: values stripped, keys preserved for operator context
Unknown objects: unrecognised Stripe object types reduced to a minimal envelope (
id,object,status,redacted: true) instead of passed through rawInput validation: Stripe IDs, currency codes, webhook event names, API versions, checkout payment method types, and balance transaction types validated against Zod schemas. Enum validators are derived from the installed Stripe SDK's type declarations at startup; if those files change shape in a future SDK version, validators degrade to allow-all with a stderr warning rather than crashing
Idempotency: all mutating tools accept optional
idempotency_key(except deletions, which Stripe treats as inherently idempotent)Pinned API version:
2026-05-27.dahlia, set insrc/stripe-client.tsBounded runtime: network retries capped at 0-5, timeout capped at 1-120 seconds
Setup
Prerequisites
Node.js 18+ for runtime. Node ^20.19.0 or >=22.12.0 for running tests (Vite/Vitest dev dependency requirement)
A Stripe account with API keys (dashboard.stripe.com/apikeys)
Install and build
git clone <repo-url>
cd stripe-mcp-server
npm install
npm run buildEnvironment
cp .env.example .env
# Edit .env with your Stripe secret keyVariable | Required | Default | Description |
| Yes | - | Secret key ( |
| No |
| Max retries on transient failures (0-5) |
| No |
| Request timeout in milliseconds (1000-120000) |
Using restricted keys
For tighter security, use restricted keys (rk_*) instead of full secret keys. Minimum permissions per tool group:
Tool group | Required permissions |
Customers | Customers: Read/Write |
Payments | PaymentIntents, PaymentMethods, Charges: Read/Write |
Subscriptions | Subscriptions, Products, Prices: Read/Write |
Invoices | Invoices: Read/Write |
Checkout | Checkout Sessions: Read/Write; Coupons: Read/Write |
Refunds | Refunds: Read/Write (also needs Charges or PaymentIntents: Read) |
Balance | Balance: Read; Payouts: Read; Disputes: Read |
Webhooks | Webhook Endpoints: Read/Write; Events: Read |
Grant only the groups you need. Read-only tools (list/retrieve) need only Read permission on their resource.
Wire into your MCP client
Claude Code (.mcp.json)
{
"mcpServers": {
"stripe": {
"command": "node",
"args": ["/absolute/path/to/stripe-mcp-server/dist/index.js"],
"env": {
"STRIPE_SECRET_KEY": "sk_test_..."
}
}
}
}VS Code (.vscode/mcp.json)
{
"servers": {
"stripe": {
"command": "node",
"args": ["/absolute/path/to/stripe-mcp-server/dist/index.js"],
"env": {
"STRIPE_SECRET_KEY": "sk_test_..."
}
}
}
}Other MCP clients
Any client that supports stdio transport can run this server. Point it at dist/index.js with STRIPE_SECRET_KEY in the environment.
Verification
npm test # 42 tests (sanitisation, config validation, schema checks)
npm run build # TypeScript compilation to dist/Project structure
src/
index.ts # Server entry point, tool/resource/prompt registration
stripe-client.ts # Stripe SDK singleton with pinned version and bounded config
tools/
balance.ts # Balance and payout tools
checkout.ts # Checkout Session and coupon tools
customers.ts # Customer CRUD and search
invoices.ts # Invoice lifecycle tools
payments.ts # PaymentIntent and PaymentMethod tools
refunds.ts # Refund tools
subscriptions.ts # Subscription, Product, and Price tools
webhooks.ts # Webhook endpoint and event tools
resources/index.ts # MCP resources (account, balance, webhooks, products)
prompts/index.ts # MCP prompt templates
utils/stripe-toolkit.ts # Sanitisation, validation schemas, error formatting
tests/
stripe-toolkit.test.ts # Sanitisation and masking tests
stripe-config-and-schemas.test.ts # Config validation and schema testsDesign decisions
Sanitise by default, not by opt-in. Every Stripe object type has an explicit sanitisation path. Unknown object types are reduced rather than passed through. This means new Stripe object types added in future API versions are safe by default (they show id, status, and redacted: true until an explicit handler is added).
Validate from Stripe's own type definitions. Checkout payment method types, webhook event names, and API versions are loaded at startup from the installed Stripe SDK's TypeScript declaration files. When you upgrade the Stripe SDK, the validators update automatically. If the SDK restructures its type files in a future major version, validators degrade to allow-all with a stderr warning rather than crashing. The wildcard * webhook event is always rejected regardless of validator state.
No stored state. The server holds no data between requests beyond the Stripe SDK client singleton. All state lives in Stripe's API.
Licence
MIT
Available Tools
52 toolsattach_payment_methodAttach Payment MethodC
Attach a payment method to a customer.
| Name | Required | Description | Default |
|---|---|---|---|
| payment_method_id | Yes | Payment method ID (pm_...) | |
| customer | Yes | Customer ID to attach to (cus_...) | |
| idempotency_key | No | Optional idempotency key for safe retries |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, and the description fails to disclose behavioral traits such as whether attaching a payment method sets it as default, if it requires special permissions, or what happens on conflict. The description carries the full burden for a mutation tool but provides only the basic operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise at one sentence, but its brevity leads to under-specification. It could benefit from structured details without being verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no output schema and no annotations, the description should explain return behavior, side effects (e.g., setting default payment method), and error conditions. It lacks this context, making it incomplete despite the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with each parameter already well-documented (patterns, required status). The description adds no additional parameter semantics beyond what the schema provides, scoring the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (attach) and the resource (payment method to a customer), making the tool's purpose immediately understandable. It distinguishes from sibling tools like detach_payment_method by implying the opposite direction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus alternatives like detach_payment_method or how it interacts with customer payment method settings. The absence of usage context forces the agent to infer based on name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cancel_payment_intentCancel Payment IntentADestructive
Cancel a PaymentIntent. Can only cancel intents that are not already succeeded.
| Name | Required | Description | Default |
|---|---|---|---|
| payment_intent_id | Yes | PaymentIntent ID (pi_...) | |
| cancellation_reason | No | Reason for cancellation | |
| idempotency_key | No | Optional idempotency key for safe retries |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds the important behavioral constraint about intent state beyond the destructiveHint annotation. It does not elaborate on side effects like idempotency or webhook triggers, but the core safety constraint is well communicated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero redundancy. Every word serves a purpose: the verb, resource, and the critical state constraint.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity of the tool and no output schema, the description adequately covers the core purpose and a key limitation. It does not describe return values, but that is acceptable for a cancellation action.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for all three parameters, so the baseline is 3. The description does not add additional semantic guidance beyond the schema's own definitions (e.g., pattern, enum).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Cancel' on the resource 'PaymentIntent' and includes a key constraint ('not already succeeded'), distinguishing it from sibling tools like capture_payment_intent or confirm_payment_intent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description specifies that cancellation is only possible for intents that are not yet succeeded, which provides a clear precondition. However, it does not mention when to use alternatives (e.g., create_refund for succeeded intents) or explicitly state when not to use the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cancel_subscriptionCancel SubscriptionADestructive
Cancel a subscription immediately or at the end of the current period.
| Name | Required | Description | Default |
|---|---|---|---|
| subscription_id | Yes | Subscription ID (sub_...) | |
| cancel_at_period_end | No | If true, cancel at period end instead of immediately (default: immediate) | |
| cancellation_details | No | Cancellation details | |
| idempotency_key | No | Optional idempotency key for safe retries |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate destructiveHint=true, and description adds timing nuance (immediate vs end of period). However, it does not disclose side effects like proration, refunds, or access loss.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, 11 words, front-loaded with action and key distinction. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema. Description provides high-level purpose but lacks details on return values, confirmation, or consequences beyond the destructive annotation. Adequate for a simple tool but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so description adds little beyond the schema. The description's mention of 'immediate or at the end of the current period' maps to cancel_at_period_end, but the schema already describes that parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description uses verb 'Cancel' and resource 'subscription', clearly distinguishing two modes (immediate vs at period end). It uniquely identifies the tool among siblings like update_subscription or delete_customer.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives (e.g., update_subscription for modifications). No when-not-to-use or prerequisite conditions provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
capture_payment_intentCapture Payment IntentADestructive
Capture a previously authorized PaymentIntent (capture_method=manual). Optionally capture a partial amount.
| Name | Required | Description | Default |
|---|---|---|---|
| payment_intent_id | Yes | PaymentIntent ID (pi_...) | |
| amount_to_capture | No | Amount to capture in smallest currency unit. Omit to capture full authorization. | |
| idempotency_key | No | Optional idempotency key for safe retries |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations include destructiveHint=true, so the description doesn't need to restate destructiveness. It adds that partial capture is optional. No contradictions. Could discuss side effects or authorization, but overall transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the main purpose, no fluff. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, but the tool is simple. Could mention return value (captured PaymentIntent), but the description is adequate for its complexity. Annotations and schema cover most needs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value by explaining 'Optionally capture a partial amount' for amount_to_capture and 'safe retries' for idempotency_key, which clarifies usage beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'capture', the resource 'PaymentIntent', and the specific condition 'previously authorized (capture_method=manual)'. It distinguishes from sibling tools like confirm_payment_intent or create_payment_intent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It specifies when to use: for previously authorized PaymentIntents with manual capture. It does not explicitly state when not to use or list alternatives, but the context is clear enough for an AI agent to select correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
confirm_payment_intentConfirm Payment IntentADestructive
Confirm a PaymentIntent to initiate the payment. Optionally attach a payment method.
| Name | Required | Description | Default |
|---|---|---|---|
| payment_intent_id | Yes | PaymentIntent ID (pi_...) | |
| payment_method | No | Payment method ID to use for confirmation | |
| return_url | No | Return URL for redirect-based payment methods | |
| idempotency_key | No | Optional idempotency key for safe retries |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate destructiveHint=true, so the tool is a write operation. The description adds that it initiates payment, but does not disclose potential side effects (e.g., charging the customer), idempotency behavior, or error conditions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, front-loaded and efficient. However, it could include a bit more context without becoming verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description should at least mention the return value (e.g., confirmed PaymentIntent object). It also lacks details on required PaymentIntent status and behavior for different payment methods.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds minor value by stating the payment method is optional, but does not elaborate on return_url or idempotency_key beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool confirms a PaymentIntent to initiate payment, with an optional payment method attachment. It distinguishes from sibling tools like cancel_payment_intent and capture_payment_intent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is used to confirm a PaymentIntent, but does not specify when to use it versus alternatives like capture_payment_intent, nor does it mention prerequisites such as the PaymentIntent must be in a certain status.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_checkout_sessionCreate Checkout SessionB
Create a Stripe Checkout session. Returns a URL to redirect customers to Stripe-hosted payment page.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | Yes | "payment" for one-time, "subscription" for recurring, "setup" for saving payment method | |
| line_items | No | Line items, max 20 (required for payment and subscription modes) | |
| success_url | Yes | URL to redirect after successful payment | |
| cancel_url | No | URL to redirect if customer cancels | |
| customer | No | Existing customer ID | |
| customer_email | No | Pre-fill email (ignored if customer is set) | |
| metadata | No | Session metadata | |
| allow_promotion_codes | No | Allow promotion code entry | |
| trial_period_days | No | Trial days (subscription mode only) | |
| payment_method_types | No | Payment methods (e.g. ["card", "us_bank_account"]) | |
| expires_at | No | Session expiration as Unix timestamp (30min to 24hr from now) | |
| idempotency_key | No | Optional idempotency key for safe retries |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It only mentions behavior ('Creates... Returns a URL') but lacks details on side effects (e.g., idempotency, expiration, conditional requirements like line_items for certain modes). The schema provides param-level detail, but the description does not surface key aspects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, minimal and focused, with no wasted text. It is front-loaded with the primary action and return value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (12 parameters, nested objects, conditional requirements) and no output schema, the description is incomplete. It fails to mention critical constraints like line_items being required for payment/subscription modes, session expiration, or idempotency.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds no additional meaning beyond what the schema already provides for parameters. It does not highlight important parameter interactions (e.g., mode-dependent fields).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly specifies the verb 'Create' and the resource 'Stripe Checkout session'. It distinguishes from sibling tools like create_payment_intent or create_subscription by naming the specific Stripe-hosted checkout flow.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for customer-facing payments by stating 'Returns a URL to redirect customers', but it does not explicitly state when to use this tool over alternatives such as create_payment_intent or create_subscription, nor does it provide exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_couponCreate CouponB
Create a Stripe coupon for discounts on subscriptions or invoices.
| Name | Required | Description | Default |
|---|---|---|---|
| percent_off | No | Percentage discount (use this OR amount_off) | |
| amount_off | No | Fixed amount discount in smallest currency unit | |
| currency | No | Currency for amount_off (required if using amount_off) | |
| duration | Yes | How long the coupon applies | |
| duration_in_months | No | Number of months (required when duration is "repeating") | |
| name | No | Coupon display name | |
| max_redemptions | No | Max times this coupon can be redeemed | |
| redeem_by | No | Unix timestamp after which coupon can no longer be redeemed | |
| metadata | No | Metadata | |
| idempotency_key | No | Optional idempotency key for safe retries |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It only states the broad purpose and does not mention idempotency, rate limits, error scenarios, or what happens upon creation (e.g., unique constraints, validation).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no redundant information. However, it could be structured to include more behavioral or usage context without being verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 10 parameters, no output schema, and involves creating a resource with potential interactions (e.g., linking to subscriptions/invoices), the description lacks details about return value, error handling, and prerequisites, making it incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage for all parameters, so the baseline is 3. The description adds no additional context beyond the schema's parameter descriptions, earning the baseline score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'create', the resource 'coupon', and the purpose 'for discounts on subscriptions or invoices', distinguishing it from sibling tools like 'create_subscription' or 'create_invoice'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives (e.g., using a promotion code or applying a discount directly on an invoice). No explicit 'when not to use' or alternative tool references are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_customerCreate CustomerB
Create a new Stripe customer with optional email, name, phone, description, and metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| No | Customer email address | ||
| name | No | Customer full name | |
| phone | No | Customer phone number | |
| description | No | Internal description | |
| metadata | No | Key-value metadata pairs | |
| payment_method | No | Payment method ID to attach | |
| idempotency_key | No | Optional idempotency key for safe retries |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full behavioral burden. It mentions creation but omits important traits like idempotency (despite idempotency key parameter), authentication needs, rate limits, or return value. The idempotency key parameter hints at safe retries, but description doesn't explain.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one concise sentence, efficient and front-loaded. However, it could be slightly more structured by listing all optional fields or mentioning idempotency. Minor improvement possible.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 7 parameters, no annotations, and no output schema, the description is minimal. It doesn't explain the creation process, prerequisites, response structure, or differentiate from siblings like search_customers or update_customer. Incomplete for a tool with complex context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so each parameter is already described. The tool description lists only a subset of fields (email, name, phone, description, metadata) and omits payment_method and idempotency_key. It adds no new semantics beyond the schema, warranting baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Create a new Stripe customer' with specific verb and resource, and lists optional fields (email, name, phone, description, metadata). It distinguishes from sibling tools like delete_customer and update_customer.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when you need to create a customer, but does not provide explicit when-to-use or when-not-to-use guidance, nor does it mention alternatives among the many sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_invoiceCreate InvoiceA
Create a draft invoice for a customer. Add invoice items before finalizing.
| Name | Required | Description | Default |
|---|---|---|---|
| customer | Yes | Customer ID (cus_...) | |
| collection_method | No | Payment collection method | |
| days_until_due | No | Days until due (for send_invoice) | |
| description | No | Invoice description | |
| metadata | No | Metadata | |
| auto_advance | No | Auto-finalize when ready (default true) | |
| idempotency_key | No | Optional idempotency key for safe retries |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden. It mentions creating a draft but does not disclose other behaviors such as idempotency, error handling, or side effects like sending emails. The auto_advance parameter is not addressed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero fluff. The description is front-loaded with the core purpose and includes a critical workflow hint. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 7 parameters (1 required, 6 optional with enums and defaults), no output schema, and no annotations, the description is too minimal. It does not explain success/failure states, return value, or how parameters interact. More detail is needed for an agent to use it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description does not add any extra meaning beyond what the schema already provides for parameters. It does not explain usage of collection_method or days_until_due, but the schema descriptions are adequate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Create' and resource 'draft invoice', and distinguishes this tool from siblings like finalize_invoice and create_invoice_item by specifying the draft state and the need to add items before finalizing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies a workflow: create draft, then add items, then finalize. This provides context for when to use this tool versus alternatives. However, it does not explicitly state when not to use it or compare with other creation tools like create_payment_intent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_invoice_itemCreate Invoice ItemB
Add a line item to an invoice (or to the customer's next upcoming invoice).
| Name | Required | Description | Default |
|---|---|---|---|
| customer | Yes | Customer ID (cus_...) | |
| invoice | No | Invoice ID (in_...). Omit to add to next upcoming invoice. | |
| price | No | Price ID (price_...) - use this OR amount+currency | |
| amount | No | Amount in smallest currency unit (use with currency, not price) | |
| currency | No | Currency code (use with amount) | |
| description | No | Line item description | |
| quantity | No | Quantity | |
| metadata | No | Metadata | |
| idempotency_key | No | Optional idempotency key for safe retries |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It only states the action without disclosing traits like mutation, idempotency, effects on invoice totals, or required permissions. This is insufficient for a create tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that efficiently conveys the core function. It is concise, though could include more detail without losing brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 9 parameters, no output schema, and no annotations, the description is too brief. It does not describe the return value, the line item structure, or behavioral implications, leaving gaps for the agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 100% parameter coverage with descriptions, so the description adds no additional meaning. It does not explain parameter relationships or provide usage tips beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description uses specific verb 'Add' and resource 'line item to an invoice' and distinguishes between adding to an existing invoice or the next upcoming invoice. This clearly differentiates it from sibling tools like create_invoice or finalize_invoice.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description implies usage (add line items to invoices) but does not explicitly provide when to use this tool versus alternatives, nor does it state when not to use it or list prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_payment_intentCreate Payment IntentBDestructive
Create a Stripe PaymentIntent. Amount is in the smallest currency unit (e.g. cents for USD).
| Name | Required | Description | Default |
|---|---|---|---|
| amount | Yes | Amount in smallest currency unit (e.g. 1000 = $10.00) | |
| currency | Yes | Three-letter ISO currency code (e.g. "usd", "eur") | |
| customer | No | Customer ID to associate | |
| description | No | Payment description | |
| payment_method | No | Payment method ID to use | |
| confirm | No | Immediately confirm the payment (default false) | |
| automatic_payment_methods | No | Enable automatic payment methods (default true) | |
| metadata | No | Metadata key-value pairs | |
| receipt_email | No | Email to send receipt to | |
| statement_descriptor | No | Statement descriptor (max 22 chars) | |
| capture_method | No | "automatic" (default) or "manual" for auth-then-capture | |
| off_session | No | Set true if payment is made without customer present | |
| idempotency_key | No | Optional idempotency key for safe retries |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotation destructiveHint=true indicates side effects, but the description does not elaborate on behaviors like automatic confirmation or manual capture. It adds only the currency unit note, which is already in the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with two sentences, no wasted words, and front-loaded with the core action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's 13 parameters and no output schema, the description lacks necessary context about return values, side effects, and workflow steps (e.g., what happens when confirm is true).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All 13 parameters have schema descriptions (100% coverage), so the description's mention of currency unit is redundant. No additional parameter meaning is provided beyond what the schema already conveys.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool creates a Stripe PaymentIntent, using a specific verb and resource. However, it does not differentiate from sibling tools like confirm_payment_intent or create_checkout_session, leaving room for ambiguity in context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives, such as create_checkout_session or capture_payment_intent. There is no mention of prerequisites, limitations, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_priceCreate PriceB
Create a new price for a product.
| Name | Required | Description | Default |
|---|---|---|---|
| product | Yes | Product ID (prod_...) | |
| unit_amount | Yes | Price in smallest currency unit (e.g. 1000 = $10.00) | |
| currency | Yes | Currency code (e.g. "usd") | |
| recurring | No | Recurring config (omit for one-time price) | |
| active | No | Whether price is active | |
| metadata | No | Metadata | |
| nickname | No | Internal nickname | |
| idempotency_key | No | Optional idempotency key for safe retries |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description 'Create a new price for a product' implies a mutation but adds no behavioral traits beyond the verb. Annotations are absent, so the description carries full burden; yet it does not disclose idempotency, side effects, or error scenarios. Minimal transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, no redundancies. However, given the tool's complexity (8 params, nested objects), the description is perhaps too brief to be fully informative, slightly limiting conciseness score from 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool requires nested objects (recurring), multiple required fields, and no output schema. The description provides zero context about return value, error cases, or behavior for one-time vs. subscription prices. Incomplete for a creation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameters are well-documented in the schema. The description adds no further meaning or examples, meeting the baseline for high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'create' and resource 'price for a product', exactly matching the tool name. Among sibling tools like create_product or create_coupon, this distinguishes the tool's purpose unambiguously.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs. alternatives like create_product or when not to use it. No prerequisites (e.g., product must exist) or context about idempotency key usage. The description is silent on usage conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_productCreate ProductC
Create a new Stripe product.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Product name | |
| description | No | Product description | |
| active | No | Whether the product is active (default true) | |
| metadata | No | Metadata | |
| default_price_data | No | Inline price creation | |
| idempotency_key | No | Optional idempotency key for safe retries |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description gives only the basic action. It fails to disclose behavioral traits such as idempotency key support, the impact of setting 'active' to false, or the side effects of including 'default_price_data' (which creates a price simultaneously).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise at 4 words, which is efficient but arguably too terse. It front-loads the purpose well, but could include a brief note about inline pricing without losing conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (6 parameters, nested objects, no output schema), the description is insufficient. It omits that 'default_price_data' creates a price, does not explain the idempotency_key's role, and provides no information about the return value or error conditions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage, so baseline is 3. The description adds no additional meaning beyond what the schema already provides, neither explaining parameter semantics nor giving usage examples.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Create a new Stripe product' uses a clear verb+resource structure. However, there is no differentiation from sibling tools like 'create_price' which may be related, and the tool's ability to create an inline price is not highlighted.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives (e.g., 'create_price' separately). The description does not mention prerequisites or typical use cases, leaving the agent without context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_refundCreate RefundBDestructive
Refund a charge or payment intent. Specify amount for partial refunds; omit for full refund.
| Name | Required | Description | Default |
|---|---|---|---|
| payment_intent | No | PaymentIntent ID to refund (pi_...) | |
| charge | No | Charge ID to refund (ch_...) - use this or payment_intent | |
| amount | No | Amount to refund in smallest currency unit. Omit for full refund. | |
| reason | No | Reason for refund | |
| metadata | No | Metadata | |
| idempotency_key | No | Optional idempotency key for safe retries |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate destructiveHint=true, but the description does not elaborate on behavioral implications like irreversibility, impact on balances, or dispute risks. It adds minimal context beyond the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded, but could benefit from noting required parameters. It is appropriately sized for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite full schema coverage, the description omits critical constraints like the need to specify one of 'charge' or 'payment_intent', and does not explain inapplicability to certain payment states. It is insufficient for a complex tool with no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%; the description repeats the partial vs full refund guidance for 'amount' but adds little else. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (refund) and the resources (charge or payment intent). It distinguishes this tool from sibling tools like 'create_payment_intent' and 'list_refunds'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides guidance on specifying amount for partial vs full refunds, but does not clarify that one of 'charge' or 'payment_intent' must be provided, nor does it discuss when to use this tool over alternatives like 'cancel_payment_intent'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_subscriptionCreate SubscriptionADestructive
Create a new subscription for a customer. Requires at least one price item.
| Name | Required | Description | Default |
|---|---|---|---|
| customer | Yes | Customer ID (cus_...) | |
| items | Yes | Subscription line items | |
| default_payment_method | No | Payment method ID to use | |
| trial_period_days | No | Free trial days | |
| cancel_at_period_end | No | Cancel at end of current period | |
| metadata | No | Metadata key-value pairs | |
| collection_method | No | How to collect payment | |
| days_until_due | No | Days until invoice is due (for send_invoice) | |
| coupon | No | Coupon ID to apply | |
| promotion_code | No | Promotion code ID to apply | |
| idempotency_key | No | Optional idempotency key for safe retries |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true. Description adds no additional behavioral context beyond the creation action, such as triggers, side effects, or confirmation requirements. No contradictions 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, direct and front-loaded with verb and resource. No unnecessary words. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 11 parameters, nested items, and no output schema, the description is insufficient. It does not explain typical workflow, prerequisites (e.g., customer must exist), or what happens upon creation (e.g., invoice generation, payment attempt). A more comprehensive description is needed for such a complex tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema covers all 11 parameters with descriptions (100% coverage). The description adds no parameter-specific information beyond what schema provides, so baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'Create a new subscription for a customer' with a specific verb and resource. Requirement for at least one price item adds clarity. Distinguishes from siblings like cancel_subscription and update_subscription.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Describes a precondition (requires at least one price item) but does not provide guidance on when to use this tool versus alternatives like create_checkout_session or create_invoice. No explicit when-to-use or when-not-to-use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_webhook_endpointCreate Webhook EndpointBDestructive
Register a new webhook endpoint with Stripe.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | HTTPS URL that will receive webhook events | |
| enabled_events | Yes | Event types to listen for, e.g. ["payment_intent.succeeded", "customer.subscription.deleted"]. | |
| description | No | Endpoint description | |
| metadata | No | Metadata | |
| api_version | No | Stripe API version for events (defaults to account version) | |
| idempotency_key | No | Optional idempotency key for safe retries |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description provides only minimal context: 'Register a new webhook endpoint'. It does not disclose what response to expect, whether the call is idempotent, or any other behavioral traits beyond the destructiveHint annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise at one sentence. It is front-loaded with the purpose, but could be slightly more informative without becoming verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has no output schema and only the destructiveHint annotation. The description does not cover return values, error conditions, or setup requirements, leaving significant gaps for a creation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All 6 parameters have schema descriptions (100% coverage), so the description adds no additional meaning. Baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'register', the resource 'webhook endpoint', and the target 'Stripe'. It effectively distinguishes this tool from siblings like 'delete_webhook_endpoint' and 'list_webhook_endpoints'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. The description does not mention prerequisites, typical use cases, or situations where another tool might be more appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_customerDelete CustomerADestructive
Permanently delete a Stripe customer. This cannot be undone. Active subscriptions will be canceled.
| Name | Required | Description | Default |
|---|---|---|---|
| customer_id | Yes | Stripe customer ID (cus_...) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral context beyond the destructiveHint annotation: 'This cannot be undone. Active subscriptions will be canceled.' This informs the agent of irreversibility and side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no wasted words. The most critical information (permanence, cancellation) is front-loaded. Excellent conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple deletion tool with one parameter and no output schema, the description covers irreversibility and subscription cancellation, which are likely the most important behavioral aspects. It is complete enough for typical use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (one parameter with pattern and description). The description does not add parameter-level details, but the schema is sufficient. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Permanently delete a Stripe customer', which is a specific verb and resource. It distinguishes from sibling tools like update_customer or retrieve_customer by indicating permanent deletion and side effects.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implicitly guides usage by stating it's permanent and cancels subscriptions, but does not explicitly mention when not to use or suggest alternatives (e.g., deactivating via update). Sibling context helps, but more explicit guidance would improve.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_webhook_endpointDelete Webhook EndpointADestructive
Delete a webhook endpoint. Cannot be undone.
| Name | Required | Description | Default |
|---|---|---|---|
| webhook_endpoint_id | Yes | Webhook endpoint ID (we_...) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds the irreversibility context beyond the destructiveHint annotation, but does not elaborate on side effects or requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no redundant information; every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple destructive tool with annotations, the description covers the essential behavior; could optionally mention post-deletion effects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the description does not add any parameter-specific meaning beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (Delete) and resource (webhook endpoint). The name and description distinguish it from siblings like create_webhook_endpoint and list_webhook_endpoints.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a warning ('Cannot be undone') but does not explicitly state when to use this tool vs alternatives or include an explicit 'when-not'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
detach_payment_methodDetach Payment MethodADestructive
Detach a payment method from its customer.
| Name | Required | Description | Default |
|---|---|---|---|
| payment_method_id | Yes | Payment method ID (pm_...) | |
| idempotency_key | No | Optional idempotency key for safe retries |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true, so the description adds no extra behavioral context. The description does not state what happens to the payment method after detachment (e.g., whether it can be reattached).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, no wasted words, front-loaded with action and resource.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive operation, description lacks details on irreversibility, return value, or effects on customer. With no output schema, agents need more context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the description adds no new meaning beyond the schema's descriptions of payment_method_id and idempotency_key.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the action (detach), resource (payment method), and relationship (from its customer). This distinguishes it from sibling tools like attach_payment_method.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use or avoid this tool. The implication is that it complements attach_payment_method, but prerequisites or alternatives are not mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
finalize_invoiceFinalize InvoiceA
Finalize a draft invoice so it can be paid. This transitions it from draft to open.
| Name | Required | Description | Default |
|---|---|---|---|
| invoice_id | Yes | Invoice ID (in_...) | |
| auto_advance | No | Auto-advance to payment after finalization | |
| idempotency_key | No | Optional idempotency key for safe retries |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries full burden. It states the state transition (draft to open) but does not disclose potential side effects, irreversibility, or required permissions. Adequate but could be more detailed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences with no fluff. Every word adds value, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, but the description does not mention what the tool returns (e.g., the finalized invoice object). For a simple state-changing tool, it is somewhat complete but lacks return value context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the description does not add any information beyond what the schema's parameter descriptions already provide. Baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (finalize), the resource (draft invoice), and the outcome (transitions to open, can be paid). It distinguishes from sibling tools like create_invoice, void_invoice, and pay_invoice.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use: for draft invoices that need to become payable. It does not explicitly mention when not to use or alternatives like pay_invoice, but the context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_balance_transactionsList Balance TransactionsARead-only
List balance transactions (charges, refunds, payouts, fees, etc.) with optional filtering.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Filter by transaction type: "charge", "refund", "payout", "adjustment", "transfer", etc. | |
| payout | No | Filter by payout ID | |
| source | No | Filter by source ID (charge, refund, etc.) | |
| limit | No | Results per page | |
| starting_after | No | Pagination cursor | |
| created_gte | No | Created at or after (Unix timestamp) | |
| created_lte | No | Created at or before (Unix timestamp) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, and the description adds scope clarification but does not disclose additional behavioral traits like pagination or rate limits, which would be useful.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence, front-loading the purpose, though it could be slightly expanded without verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and 7 parameters, the description is adequate but lacks details on return format or pagination behavior, leaving some gaps for a list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with detailed parameter descriptions, so the tool description's mention of 'optional filtering' adds minimal extra meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it lists balance transactions and provides examples of included types (charges, refunds, payouts, fees), distinguishing it from sibling tools like list_charges or list_refunds which focus on single types.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions optional filtering but does not explicitly guide when to use this tool versus sibling tools like list_charges or list_payouts, missing explicit usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_chargesList ChargesBRead-only
List charges with optional filtering.
| Name | Required | Description | Default |
|---|---|---|---|
| customer | No | Filter by customer ID | |
| payment_intent | No | Filter by PaymentIntent ID | |
| limit | No | Results per page | |
| starting_after | No | Pagination cursor |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotation readOnlyHint=true already signals this is a read-only operation. The description adds no further behavioral traits, such as pagination or default ordering.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, no filler. Efficient, but slightly terse; could benefit from additional context without becoming verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with good schema descriptions, the description is minimally adequate. However, it omits pagination details and does not explain the response format.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions on each parameter. The description adds no additional meaning beyond 'optional filtering', so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists charges with optional filtering. It uses a specific verb and resource, distinguishing it from other list tools by resource name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. There is no mention of context or exclusion criteria, leaving the agent without direction on tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_checkout_sessionsList Checkout SessionsARead-only
List Checkout sessions with optional filtering.
| Name | Required | Description | Default |
|---|---|---|---|
| customer | No | Filter by customer ID | |
| payment_intent | No | Filter by PaymentIntent ID | |
| subscription | No | Filter by Subscription ID | |
| status | No | Filter by session status | |
| limit | No | Results per page | |
| starting_after | No | Pagination cursor |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already indicates safe reading. The description adds no additional behavioral context (e.g., pagination defaults, rate limits), but does not contradict the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no wasted words. Every element ('List', 'Checkout sessions', 'optional filtering') adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The combination of schema (parameter descriptions) and annotations (readOnly) covers the tool's behavior well. Lacks explicit mention of return format or pagination nuances, but these are implied by the schema's pagination parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema coverage, the input schema fully describes each parameter. The description's mention of 'optional filtering' is redundant but not harmful. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'List' and the resource 'Checkout sessions', with a hint of optional filtering. This directly distinguishes it from other list_* sibling tools that target different resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like list_payment_intents or list_invoices. The description does not mention any context-specific conditions or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_couponsList CouponsCRead-only
List all coupons.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Results per page | |
| starting_after | No | Pagination cursor |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=true, but the description adds no behavioral details beyond that. It does not mention pagination behavior, default sorting, or what happens with large result sets.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, front-loaded, and contains no unnecessary words. However, it could include more useful information without harming conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is too minimal for effective use. It does not mention ordering, default limit, or what fields are returned, leaving gaps for an agent unfamiliar with the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with both parameters described. The description adds no additional meaning beyond the schema, so baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'List all coupons' clearly indicates the verb 'List' and the resource 'coupons'. It is straightforward but does not differentiate from other 'list_*' sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus other list tools. The description lacks context about filtering, prerequisites, or alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_customersList CustomersARead-only
List Stripe customers with optional filtering by email, creation date, and pagination.
| Name | Required | Description | Default |
|---|---|---|---|
| No | Filter by exact email address | ||
| limit | No | Number of results (1-100, default 10) | |
| starting_after | No | Cursor for pagination - customer ID to start after | |
| created_gte | No | Filter: created at or after this Unix timestamp | |
| created_lte | No | Filter: created at or before this Unix timestamp |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, indicating a read operation. Description confirms this with 'List'. No additional behavioral traits (e.g., rate limits, sorting) are disclosed. Consistent with annotations, no contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single concise sentence that clearly states the purpose and key features. No redundancy, every word adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Description is adequate for a straightforward list tool with well-described schema parameters, but lacks details on return data format, ordering, or pagination behavior. Since no output schema exists, some additional context could be beneficial.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already explains each parameter. The description summarizes the filtering capabilities but does not add new meaning beyond what is in the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states verb (List), resource (Stripe customers), and optional filters (email, creation date, pagination). It distinguishes from sibling tools like retrieve_customer and search_customers, but does not explicitly differentiate, so not a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description implies usage for listing customers with specific filters but provides no explicit when-to-use or when-not-to-use guidance. No mention of alternatives like search_customers. Adequate but lacks exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_disputesList DisputesBRead-only
List payment disputes (chargebacks).
| Name | Required | Description | Default |
|---|---|---|---|
| charge | No | Filter by charge ID | |
| payment_intent | No | Filter by PaymentIntent ID | |
| limit | No | Results per page | |
| starting_after | No | Pagination cursor |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description is consistent with the readOnlyHint annotation, but adds no behavioral context beyond 'list', such as pagination or response structure, which is a gap for a list tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with no unnecessary words, achieving maximum conciseness while conveying the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of an output schema, the description should explain that the tool returns a paginated list object, but it only states 'List payment disputes', leaving the agent to infer response details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Since schema description coverage is 100%, the description does not need to add parameter details, but it also does not provide any additional context about how parameters like charge or limit affect the listing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'list' and the resource 'payment disputes (chargebacks)', which immediately distinguishes it from sibling list tools like list_charges or list_refunds.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like retrieve_dispute, nor does it mention the filtering capabilities available through the parameters.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_eventsList EventsARead-only
List recent Stripe events (webhook deliveries). Useful for debugging integrations.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Filter by event type, e.g. "payment_intent.succeeded", "customer.created" | |
| limit | No | Results per page | |
| starting_after | No | Pagination cursor | |
| created_gte | No | Created at or after (Unix timestamp) | |
| created_lte | No | Created at or before (Unix timestamp) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds minimal behavioral context beyond the readOnlyHint annotation, simply restating the basic function. No additional traits like rate limits or access needs are disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that efficiently conveys the tool's purpose without any fluff or redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 5 parameters and no output schema, the description is brief and omits context like pagination, default sorting, or typical response structure, though the schema covers parameter details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All parameters are fully described in the schema (100% coverage), so the description does not need to add parameter details. It provides no extra semantic value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it lists events (webhook deliveries) and mentions a use case (debugging), which distinguishes it from other list tools by resource. However, it does not explicitly differentiate from sibling list tools, preventing a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for debugging integrations but provides no explicit guidance on when to use this tool vs alternatives, nor does it mention exclusion criteria or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_invoicesList InvoicesBRead-only
List invoices with optional filtering.
| Name | Required | Description | Default |
|---|---|---|---|
| customer | No | Filter by customer ID | |
| subscription | No | Filter by subscription ID | |
| status | No | Filter by status | |
| limit | No | Results per page | |
| starting_after | No | Pagination cursor |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the agent knows it's safe. The description adds no additional behavioral context (e.g., pagination, rate limits, or what happens with no filters). Minimal value beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is very short (4 words) and front-loaded. No wasted words, but could be slightly expanded to include more context without losing conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 5 parameters and no output schema, the description is minimal. It does not explain return values, pagination details, or how filtering interacts. Incomplete for a list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema provides full descriptions for all 5 parameters (100% coverage). The description adds no extra meaning beyond 'optional filtering', so it meets the baseline but does not enhance the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'List invoices' and mentions optional filtering. The name and description together identify the resource and action, distinguishing it from other list tools. However, it does not explicitly differentiate from siblings like list_charges or list_subscriptions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description implies you can list all invoices or apply filters, but provides no guidance on when to use this tool versus alternatives. No exclusions or when-not-to-use are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_payment_intentsList Payment IntentsCRead-only
List PaymentIntents with optional filtering.
| Name | Required | Description | Default |
|---|---|---|---|
| customer | No | Filter by customer ID | |
| limit | No | Results per page (1-100) | |
| starting_after | No | Pagination cursor | |
| created_gte | No | Created at or after (Unix timestamp) | |
| created_lte | No | Created at or before (Unix timestamp) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, but the description adds no additional behavioral context, such as pagination, idempotency, or lack of side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single, front-loaded sentence with no unnecessary words. Efficient but could benefit from slightly more context without losing conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema provided, and the description does not explain return values or pagination behavior. For a list tool with 5 parameters, more context is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with all parameters described. The description adds 'optional filtering', which is already implied. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (list) and resource (PaymentIntents), with optional filtering. It is specific but does not differentiate from sibling tools like list_charges.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives, such as retrieve_payment_intent for single items. The description only states functionality.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_payment_methodsList Payment MethodsBRead-only
List payment methods attached to a customer.
| Name | Required | Description | Default |
|---|---|---|---|
| customer | Yes | Customer ID (cus_...) | |
| type | No | Filter by payment method type | |
| limit | No | Results per page |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true. Description adds no additional behavioral context such as pagination, ordering, or response details. Does not disclose if only active methods are listed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence with no unnecessary words. Could be slightly more informative, but remains concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with well-documented schema and readOnly annotation, description is adequate but lacks details about pagination behavior or response format.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so schema already documents parameters. Description does not add new meaning beyond restating the overall purpose. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states verb 'list' and resource 'payment methods' with scope 'attached to a customer'. Distinguishes from sibling tools like attach_payment_method and detach_payment_method.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs alternatives. Does not mention exclusions or preferences among sibling list tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_payoutsList PayoutsARead-only
List payouts to your bank account or debit card.
| Name | Required | Description | Default |
|---|---|---|---|
| status | No | Filter by payout status | |
| limit | No | Results per page | |
| starting_after | No | Pagination cursor | |
| created_gte | No | Created at or after (Unix timestamp) | |
| created_lte | No | Created at or before (Unix timestamp) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, which is consistent. Description adds minimal behavioral context (destination to bank/debit card) beyond annotations, but does not explain sorting, pagination beyond schema, or any side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single concise sentence with no redundant information. Every word adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 5 parameters all documented in schema and no output schema, the description is sufficient for understanding the tool's basic function. However, it could hint at pagination or ordering behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. Description provides no additional meaning beyond the schema's parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description uses specific verb 'List' and resource 'payouts to your bank account or debit card', clearly distinguishing from sibling list tools like list_charges or list_invoices.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. Does not mention prerequisites, exclusions, 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.
list_pricesList PricesBRead-only
List prices with optional product filter.
| Name | Required | Description | Default |
|---|---|---|---|
| product | No | Filter by product ID | |
| active | No | Filter by active status | |
| type | No | Filter by type | |
| limit | No | Results per page | |
| starting_after | No | Pagination cursor |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description adds minimal behavioral context. It mentions the optional product filter but does not disclose pagination or list nature, though these are covered in the schema. For a read-only list tool, the description is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is front-loaded with the verb. It is concise and contains no unnecessary words, earning every character.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite rich schema and annotations, the description lacks any mention of what the tool returns (e.g., a list of price objects). For a tool with no output schema, this omission makes it incomplete for an agent to understand the full context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the description does not need to detail parameters. It adds some meaning by highlighting the product filter as optional, but does not explain other parameters like limit or starting_after. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'list' and the resource 'prices', and mentions an optional product filter, which distinguishes it from siblings like list_products. It 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.
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 the many other list_* siblings. It does not specify contexts or exclusions, leaving the agent without decision support.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_productsList ProductsBRead-only
List Stripe products.
| Name | Required | Description | Default |
|---|---|---|---|
| active | No | Filter by active status | |
| limit | No | Results per page | |
| starting_after | No | Pagination cursor |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already declares the tool is safe. The description confirms a read operation but adds no additional behavioral traits (e.g., pagination behavior, rate limits). Since annotations cover the safety profile, a score of 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise—one sentence that communicates the core purpose. No unnecessary words, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list operation with 3 parameters and full schema coverage, the description is adequate but lacks details about return format or pagination behavior, which would be helpful since there is no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the input schema already documents all parameters. The description does not add any extra meaning beyond the schema, hence baseline score of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it lists Stripe products. It uses a specific verb and resource, but it doesn't differentiate from sibling list tools like list_coupons or list_prices, though the resource name is distinct.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus other list tools. It lacks context about filtering or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_refundsList RefundsBRead-only
List refunds with optional filtering.
| Name | Required | Description | Default |
|---|---|---|---|
| payment_intent | No | Filter by PaymentIntent ID | |
| charge | No | Filter by Charge ID | |
| limit | No | Results per page | |
| starting_after | No | Pagination cursor |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotation readOnlyHint=true already indicates this is a safe read operation. The description simply restates the listing behavior without adding extra context like pagination, rate limits, or what happens with no results. It is adequate but not enriched beyond the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise—only one phrase—which is efficient and front-loaded. However, it is so brief that it misses opportunities to add valuable information without becoming verbose. Still, it earns a 4 for no waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has four parameters and no output schema, the description lacks important details such as default behavior (e.g., ordering, maximum results), return format, or pagination cursor usage. It is incomplete for a comprehensive understanding, even with strong schema descriptions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so each parameter already has a clear description in the schema. The tool description adds no additional meaning or context beyond what is in the schema, so baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List refunds with optional filtering,' which is a specific verb-resource combination. It distinguishes from siblings like create_refund and retrieve_refund, but could be more specific about the scope (e.g., all refunds) or default behavior.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool (to list refunds with filters) but does not provide explicit guidance on when not to use it or mention alternative tools. Among many list siblings, no differentiation is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_subscriptionsList SubscriptionsCRead-only
List subscriptions with optional filtering.
| Name | Required | Description | Default |
|---|---|---|---|
| customer | No | Filter by customer ID | |
| price | No | Filter by price ID | |
| status | No | Filter by status | |
| limit | No | Results per page | |
| starting_after | No | Pagination cursor |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the agent knows it's safe. The description adds no behavioral context beyond that, such as pagination behavior or result ordering, which would be useful for a list operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that is front-loaded with the core purpose. While brief, it contains no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no output schema and 5 optional parameters, the description is too minimal. It does not explain what the tool returns, default behavior without filters, or pagination details, leaving gaps for an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with descriptions for all 5 parameters. The description adds no additional meaning beyond what's in the schema, so 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List subscriptions with optional filtering,' specifying the verb and resource. However, it does not differentiate from sibling list tools, though list_subscriptions is the only subscription-specific list tool among them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like retrieve_subscription or other list tools. The description only mentions optional filtering without context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_webhook_endpointsList Webhook EndpointsARead-only
List all registered webhook endpoints.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Results per page | |
| starting_after | No | Pagination cursor |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already signals safe read-only behavior. The description does not add further behavioral context like pagination or ordering, but does not contradict the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence that immediately states the tool's purpose. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with two optional parameters and no output schema, the description is adequate but could benefit from mentioning that the response is a paginated list of webhook endpoint objects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides descriptions for both parameters (limit, starting_after) with 100% coverage. The description adds no additional meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('list') and the resource ('all registered webhook endpoints'), effectively distinguishing it from sibling tools like list_customers or list_invoices.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives, such as creating or deleting webhook endpoints, despite the availability of create_webhook_endpoint and delete_webhook_endpoint as siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pay_invoicePay InvoiceADestructive
Attempt to pay an open invoice using the default payment method.
| Name | Required | Description | Default |
|---|---|---|---|
| invoice_id | Yes | Invoice ID (in_...) | |
| payment_method | No | Specific payment method to use | |
| idempotency_key | No | Optional idempotency key for safe retries |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructive behavior. Description adds that it attempts to pay an open invoice, but lacks details on success/failure scenarios, idempotency, or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single, front-loaded sentence with no wasted words. Every word adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Adequate for a tool with full schema coverage and destructive annotation, but lacks details on return behavior, error conditions, and when the invoice is not open.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 100% coverage. Description implies default payment method behavior when payment_method param is omitted, adding context beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the action (pay) and resource (invoice), and distinguishes from siblings like create_invoice, void_invoice, or finalize_invoice. The phrase 'open invoice' adds a precondition.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs alternatives like finalize_invoice or void_invoice. No mention of prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
retrieve_balanceRetrieve BalanceARead-only
Retrieve the current Stripe account balance, broken down by currency and status (available, pending).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds value beyond the annotation (readOnlyHint=true) by explaining the format of the return value (broken down by currency and status). No behavioral traits are hidden, and there is 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with no redundant words. Every part adds value, and it is well front-loaded with the action and resource.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no parameters, a simple description is appropriate. It specifies what is returned (balance broken down by currency/status). However, it does not disclose the exact structure of the response object, which could be useful but is not critical for a read-only retrieval tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so by the rubric baseline is 4. The description does not need to add parameter information, and it correctly uses the empty input schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'retrieve' and clearly identifies the resource as 'Stripe account balance', with added detail about breakdown by currency and status. This clearly distinguishes it from sibling tools which operate on specific entities like customers or payments.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implicitly indicates this tool is for fetching the overall account balance, with no parameters needed. It does not provide explicit when-to-use or when-not-to-use guidance, but given the simplicity and the context of sibling tools, the usage is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
retrieve_chargeRetrieve ChargeARead-only
Retrieve a charge by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| charge_id | Yes | Charge ID (ch_...) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description matches the readOnlyHint annotation, indicating a read-only operation. However, it does not add information beyond the annotation, such as behavior on missing ID or response format.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with no unnecessary words. It is appropriately concise for a simple tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (1 required parameter, no output schema, read-only annotation), the description is complete and sufficient for an agent to understand its purpose and usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema fully describes the parameter with pattern and description (100% coverage). The description adds no additional semantic meaning beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Retrieve a charge by ID' uses a specific verb (Retrieve) and resource (charge), and clearly distinguishes from sibling tools like 'list_charges' which retrieves multiple charges.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for retrieving a single charge by ID, but lacks explicit guidance on when to use it over alternatives (e.g., when to use list_charges or other retrieve tools). No exclusions or context provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
retrieve_checkout_sessionRetrieve Checkout SessionARead-only
Retrieve a Checkout session by ID. Includes payment status and customer details.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes | Checkout session ID (cs_...) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true. The description adds value by specifying the returned data (payment status and customer details), providing more behavioral context beyond the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero wasted words. Front-loads the action and then adds the key output detail. Highly concise and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read operation with one parameter and annotations present, the description is adequately complete. It covers the action, input, and output nature. However, it could mention that the session must exist or that it returns a 404 on failure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a clear description for the single parameter session_id. The tool description does not add additional parameter meaning beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves a Checkout session by ID and specifies the returned data includes payment status and customer details. This distinguishes it from sibling tools like list_checkout_sessions or create_checkout_session.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives. While the purpose is clear, the description does not mention when not to use it (e.g., for listing sessions) or suggest alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
retrieve_customerRetrieve CustomerARead-only
Retrieve a Stripe customer by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| customer_id | Yes | Stripe customer ID (cus_...) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true. The description adds only that retrieval is by ID, which is minimal additional transparency. No details on error behavior or response format.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence that is perfectly front-loaded and contains zero unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple retrieval with one parameter and no output schema, the description is largely complete. Minor gap: no mention of return structure or error cases, but acceptable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a clear description and pattern for customer_id. The tool description adds no further meaning beyond what the schema provides, resulting in baseline score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (Retrieve), resource (Stripe customer), and method (by ID). It distinguishes from sibling tools like search_customers and list_customers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use when you have a customer ID, but provides no explicit guidance on when not to use or alternatives. Context from siblings suggests its role, but that is not in the description itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
retrieve_disputeRetrieve DisputeARead-only
Retrieve a dispute by ID with full details.
| Name | Required | Description | Default |
|---|---|---|---|
| dispute_id | Yes | Dispute ID (dp_...) |
TDQS
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 'with full details', but does not disclose additional behavioral traits like idempotency or rate limits. With annotations covering safety, a score of 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no unnecessary words. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter, no output schema, clear annotations), the description is mostly complete. It could be improved by hinting at what 'full details' include, but it's sufficient for a basic retrieval tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a single parameter that has a description and pattern. The description's 'by ID' adds no new meaning beyond what the schema provides, so baseline 3 is correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'retrieve' and the resource 'dispute by ID', and implies it returns full details. It distinguishes from the sibling 'list_disputes' by specifying a single dispute retrieval, though not explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for retrieving a specific dispute, but does not provide explicit guidance on when to use it vs alternatives or any exclusions. For a simple retrieval tool, usage is implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
retrieve_eventRetrieve EventARead-only
Retrieve a single event by ID with full payload.
| Name | Required | Description | Default |
|---|---|---|---|
| event_id | Yes | Event ID (evt_...) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true. The description adds 'with full payload', implying it returns all event data, which provides context beyond annotations. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, no unnecessary words. Properly front-loaded with the core action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given one parameter, 100% schema coverage, readOnlyHint annotation, and no output schema, the description is sufficient for a simple retrieval. Minor gap: no mention of error behavior for invalid IDs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single parameter 'event_id', with pattern and description. The description adds 'Retrieve a single event by ID', but this does not add significant new semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Retrieve a single event by ID with full payload', which uses a specific verb and resource, and distinguishes from sibling tools like list_events that retrieve multiple events.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives like list_events or other retrieve_ tools. The usage is implied but not clarified.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
retrieve_invoiceRetrieve InvoiceARead-only
Retrieve an invoice by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| invoice_id | Yes | Invoice ID (in_...) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint=true, and the description aligns. No additional behavioral details beyond the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, no unnecessary words. Front-loaded and concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple retrieval with one parameter and no output schema, the description is complete. No missing context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the description does not add meaning beyond the schema. The parameter description in the schema is sufficient.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Retrieve') and resource ('an invoice by ID'). It distinguishes from sibling tools like 'retrieve_upcoming_invoice' and list tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives. The purpose is implied but not formally stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
retrieve_payment_intentRetrieve Payment IntentARead-only
Retrieve a PaymentIntent by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| payment_intent_id | Yes | PaymentIntent ID (pi_...) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description does not add behavioral detail beyond the annotation 'readOnlyHint: true', which already informs the agent that the tool is safe and idempotent. The description could mention that it returns the PaymentIntent object, but lacking an output schema, the agent still has some uncertainty. A score of 3 reflects adequate transparency given annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise (6 words) and front-loaded with the key action and resource. Every word is essential; there is no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter, no output schema), the description is minimally viable. However, it lacks contextual cues such as that the PaymentIntent must exist or that the tool is best used after creation, which slightly reduces completeness for an agent unfamiliar with the domain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already covers the single parameter with a pattern and description ('PaymentIntent ID (pi_...)'), achieving 100% schema description coverage. The tool description adds no additional semantic detail about the parameter, so 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Retrieve') and the resource ('a PaymentIntent'), and specifies the key parameter ('by ID'). This explicitly distinguishes it from sibling tools like 'list_payment_intents' (which retrieves multiple) and other 'retrieve_*' tools for different resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives, such as when to use 'list_payment_intents' instead, nor does it mention any prerequisites or contextual conditions. This forces the agent to rely solely on the tool name and context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
retrieve_refundRetrieve RefundARead-only
Retrieve a refund by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| refund_id | Yes | Refund ID (re_...) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark readOnlyHint=true, so the description adds no new behavioral info. It correctly indicates a read operation but doesn't disclose any additional traits like 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that gets directly to the point. It is appropriately concise for a simple retrieval tool, though slightly more context could be added without bloat.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple retrieval with one required parameter and no output schema, the description is sufficient. It tells the core function and how to identify the refund, though return format is omitted.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 100% coverage with a regex pattern and description for the single parameter. The tool description adds no further semantics beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Retrieve a refund by ID,' which includes a specific verb and resource, and distinguishes this tool from siblings like 'list_refunds' or 'create_refund'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives (e.g., 'list_refunds' for multiple refunds). The description lacks context about prerequisites or typical scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
retrieve_subscriptionRetrieve SubscriptionARead-only
Retrieve a subscription by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| subscription_id | Yes | Subscription ID (sub_...) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description aligns with the annotation 'readOnlyHint: true' but adds no further behavioral details (e.g., what fields are returned, if any filtering applies). Since annotations already cover safety, no extra context is provided.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. Every word is necessary and earned its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a single parameter, annotations, and many sibling tools, the description is functional but minimal. It lacks details on output (no output schema) and doesn't differentiate from other retrieval tools, but suffices for a simple read operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides 100% coverage (pattern and required for 'subscription_id'). The description repeats 'by ID' without adding meaning, so it meets the baseline for well-documented parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Retrieve') and the resource ('a subscription by ID'). It immediately distinguishes itself from sibling tools like 'cancel_subscription' or 'list_subscriptions' by specifying retrieval by ID.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool over alternatives (e.g., 'list_subscriptions' to find IDs or 'retrieve_upcoming_invoice' for upcoming charges). There is no mention of context or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
retrieve_upcoming_invoiceRetrieve Upcoming InvoiceARead-only
Preview the next upcoming invoice for a customer. Useful for showing what will be charged.
| Name | Required | Description | Default |
|---|---|---|---|
| customer | Yes | Customer ID (cus_...) | |
| subscription | No | Subscription ID to preview |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already declares this as a safe read operation, so the description does not need to repeat that. The term 'Preview' aligns with the annotation, but the description adds no additional behavioral context beyond what the annotation provides (e.g., what happens if no upcoming invoice exists, or whether it requires specific permissions). It is adequate but not enriching.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description consists of two concise sentences with no unnecessary words. The first sentence immediately states the tool's core purpose, and the second adds a practical use case. Every sentence earns its place, making it highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (two parameters, read-only, no output schema), the description covers the essential purpose and a typical use case. It does not explicitly mention that the subscription parameter is optional or what the return object contains, but the core functionality is clear. The lack of output schema is compensated by the inferred return type (invoice preview). Mild gaps exist but are not critical.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides descriptions for both parameters (customer ID and subscription ID) with regex patterns, achieving 100% coverage. The description does not add any extra meaning or clarification beyond what the schema already states. With complete 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Preview' and identifies the resource 'next upcoming invoice for a customer,' clearly distinguishing it from sibling tools like retrieve_invoice (which retrieves a specific invoice) and list_invoices (which lists all invoices). The additional sentence 'Useful for showing what will be charged' reinforces the intended use case.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states it is 'useful for showing what will be charged,' which provides some context for when to use it. However, it lacks explicit guidance on when not to use it or what alternatives exist (e.g., retrieve_invoice for existing invoices, or create_invoice to generate). The guidance is implied 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.
search_customersSearch CustomersARead-only
Search Stripe customers using the Search API. Query syntax: field~"value" or field:"value". Searchable fields: email, name, phone, metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Stripe search query, e.g. 'email~"test"' or 'name:"John Doe"' or 'metadata["key"]:"value"' | |
| limit | No | Max results (1-100) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the tool's read-only nature is known. The description adds no further behavioral traits (e.g., rate limits, pagination). It does not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences covering purpose, query syntax, and searchable fields. No unnecessary words; each sentence provides essential information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers query usage and fields well, but does not describe the response format. However, given the low complexity and good parameter/schema coverage, it is nearly complete for invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the description adds value by explaining the query syntax and listing searchable fields, which goes beyond the schema's parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches Stripe customers via the Search API, specifies query syntax and searchable fields, and distinguishes it from sibling tools like list_customers (returns all) and retrieve_customer (by ID).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains how to construct queries using the Search API syntax, which guides usage. It does not explicitly state when not to use it or compare with alternatives, but the context is clear enough for differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_customerUpdate CustomerC
Update an existing Stripe customer's details.
| Name | Required | Description | Default |
|---|---|---|---|
| customer_id | Yes | Stripe customer ID (cus_...) | |
| No | New email address | ||
| name | No | New name | |
| phone | No | New phone number | |
| description | No | New description | |
| metadata | No | Metadata to merge (set value to empty string to remove a key) | |
| default_payment_method | No | Default payment method ID for invoices | |
| idempotency_key | No | Optional idempotency key for safe retries |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It does not disclose behavioral traits such as whether updates are partial or full overwrite, how metadata merging works, or idempotency implications. The schema hints at merging metadata but description omits this.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no waste. However, given the tool's complexity (8 parameters, nested objects), it could include a bit more context without becoming verbose. Still efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 8 parameters, nested objects, no output schema, and no annotations, the description is too sparse. It does not indicate how updates are applied (partial vs full), how to clear fields, or mention idempotency. Context signals show high schema coverage but the description compensates little.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage for parameters, so the description adds no extra meaning beyond 'update details'. Baseline 3 is appropriate since schema already documents each parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Update an existing Stripe customer's details', which is a specific verb and resource. It distinguishes from sibling tools like 'create_customer' and 'retrieve_customer' by focusing on updating, not creating or retrieving.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide any guidance on when to use this tool versus alternatives. No mention of prerequisites (e.g., customer must exist), nor any explicit when-not-to-use advice. Sibling tools include creation and retrieval, but no comparative hints.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_subscriptionUpdate SubscriptionB
Update a subscription. Can change items, payment method, trial, cancellation behavior, and metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| subscription_id | Yes | Subscription ID (sub_...) | |
| items | No | Updated line items | |
| cancel_at_period_end | No | Cancel at end of period | |
| default_payment_method | No | New default payment method | |
| metadata | No | Metadata to update | |
| proration_behavior | No | How to handle prorations | |
| trial_end | No | Trial end timestamp or "now" to end immediately | |
| coupon | No | Coupon ID to apply | |
| idempotency_key | No | Optional idempotency key for safe retries |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It fails to disclose behavioral traits such as idempotency (though an idempotency_key parameter exists), potential side effects like proration or invoicing, permission requirements, or state constraints (e.g., cannot update canceled subscriptions). The list of changeable aspects is helpful but insufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is concise and front-loaded with the action and changeable aspects. It could be more structured (e.g., listing parameters in a bullet format) but is efficient overall.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (9 parameters, nested objects, no output schema), the description is incomplete. It does not explain return values, behavioral outcomes of different parameter combinations (e.g., proration_behavior, trial_end), or the overall effect of an update, which is necessary for an AI agent to use it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds a high-level summary of changeable categories (items, payment method, etc.) but does not elaborate on parameter semantics beyond what the schema already provides, and it omits parameters like proration_behavior, coupon, and idempotency_key.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Update' and resource 'subscription', and lists the types of changes (items, payment method, trial, cancellation behavior, metadata), distinguishing it from related tools like create_subscription or cancel_subscription.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives (e.g., create_subscription, cancel_subscription), nor does it specify preconditions or exclusions. The context of modifying an existing subscription is implied but not explicitly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
void_invoiceVoid InvoiceADestructive
Void a finalized invoice. Cannot be undone.
| Name | Required | Description | Default |
|---|---|---|---|
| invoice_id | Yes | Invoice ID (in_...) | |
| idempotency_key | No | Optional idempotency key for safe retries |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description adds 'Cannot be undone' beyond the destructiveHint annotation, emphasizing irreversibility. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two-sentence description is extremely concise with no wasted words. Clear and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Simple tool with two parameters. Description covers key behavior and irreversibility. Lacks mention of resulting invoice status or side effects, but adequate for typical use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 100% description coverage, including pattern and optionality. Description adds no additional parameter meaning beyond what schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Explicitly states the verb 'Void' and resource 'finalized invoice'. Clearly distinguishes from sibling tools like finalize_invoice, pay_invoice, and cancel_subscription.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use vs. alternatives (e.g., refund, credit note). Does not specify conditions or prerequisites beyond invoice being finalized.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
52 tool updates
v1.0.0- First observed
attach_payment_method - First observed
cancel_payment_intent - First observed
cancel_subscription - First observed
capture_payment_intent - First observed
confirm_payment_intent - First observed
create_checkout_session - First observed
create_coupon - First observed
create_customer - First observed
create_invoice - First observed
create_invoice_item - First observed
create_payment_intent - First observed
create_price - First observed
create_product - First observed
create_refund - First observed
create_subscription - First observed
create_webhook_endpoint - First observed
delete_customer - First observed
delete_webhook_endpoint - First observed
detach_payment_method - First observed
finalize_invoice - First observed
list_balance_transactions - First observed
list_charges - First observed
list_checkout_sessions - First observed
list_coupons - First observed
list_customers - First observed
list_disputes - First observed
list_events - First observed
list_invoices - First observed
list_payment_intents - First observed
list_payment_methods - First observed
list_payouts - First observed
list_prices - First observed
list_products - First observed
list_refunds - First observed
list_subscriptions - First observed
list_webhook_endpoints - First observed
pay_invoice - First observed
retrieve_balance - First observed
retrieve_charge - First observed
retrieve_checkout_session - First observed
retrieve_customer - First observed
retrieve_dispute - First observed
retrieve_event - First observed
retrieve_invoice - First observed
retrieve_payment_intent - First observed
retrieve_refund - First observed
retrieve_subscription - First observed
retrieve_upcoming_invoice - First observed
search_customers - First observed
update_customer - First observed
update_subscription - First observed
void_invoice
TDQS
Scored across 52 tools
Each tool targets a distinct Stripe resource or action (e.g., customers, payment intents, subscriptions, invoices). Tool names clearly indicate the operation and entity, making them easy to differentiate.
All tools follow a consistent verb_noun pattern in snake_case (e.g., create_customer, list_invoices, retrieve_balance). No mixing of conventions or ambiguous verbs.
With 52 tools, the set is large but justified by Stripe's extensive API surface. Each tool covers a necessary operation, though some could be consolidated (e.g., search_customers vs. list_customers). Still, the scope is reasonable for a comprehensive integration.
The tool set provides near-complete coverage of Stripe's core operations: CRUD for customers, products, prices, payment intents, subscriptions, invoices, charges, refunds, disputes, coupons, and webhooks. Advanced operations like search, balance retrieval, and checkout sessions are included. Only minor gaps (e.g., no update_invoice) exist.
Maintenance
Related MCP Connectors
Zero-setup MCP gateway securely connecting AI to your tools with authentication and workflows
MCP server for secureFlows: token-free URL builders and integration-linting tools for AI agents.
The Remote MCP server acts as a standardized bridge between LLM applications (like Claude, ChatGPT, and Cursor) and external services, enabling AI agents to access external tools and resources. Its primary capability is providing a centralized search tool to discover other MCP servers and their respective tools. Unlike local implementations, it runs remotely with OAuth authentication and permission controls for security.
MCP server connecting AI agents to 100+ apps (Gmail, Slack, Notion, GitHub) via one-click OAuth.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceA remote MCP server implementation that integrates with Stripe, enabling AI assistants to interact with the Stripe API for payment processing functionality.-
- FlicenseNot gradedqualityDmaintenanceA comprehensive MCP server providing over 390 tools across 66 providers, including major SaaS platforms like GitHub, Slack, and Stripe. It enables AI assistants to interact directly with a wide array of public APIs and utility services through a single interface.-
- AlicenseNot gradedqualityDmaintenanceMCP server for the Stripe API with 10 tools covering payments, customers, invoices, and subscriptions. Generated with MCPForge. Destructive and financial operations require human approval.37MIT
- AlicenseAqualityDmaintenanceA production-ready MCP server with 24 tools for Stripe, Twilio, Resend, GitHub, and Slack, plus pre-built workflow prompts and live resources.24131MIT