Skip to main content
Glama
thenavidm

Gumroad MCP Server

by thenavidm

Refund sale

refund_sale
Destructive

Issue full or partial refunds for a Gumroad sale using its sale ID; explicit confirmation is required before processing.

Instructions

Refund sale. Reviewed native PUT /sales/:id/refund; scope: edit_sales. Requires explicit per-call confirmation.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
accountNoExact private profile label; never inherited credentials, ownership or scope proof.
confirmNoSet true only when the user asked for exactly this action.
sale_idYesExact opaque provider ID, including native = padding.
full_refundNoDeliberate full refund. Must be true if amount_cents is omitted, and cannot coexist with it.
amount_centsNo(optional) - Amount to refund, in minor units of the sale's listed currency — the `currency` field on the sale object, not the buyer's local currency. Every listed currency has 100 minor units except `jpy`, which has none (whole yen), so for most sales 200 means 2.00 of that currency, but for a JPY sale 200 means ¥200. If set, issue partial refund by this amount. If not set, issue full refund. You can issue multiple partial refunds per sale until it is fully refunded.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changedv3.0.0
    • removedInput schema / properties / amount_cents / maximum
      Removed value: -9007199254740991
    • changedInput schema / properties / confirm / description
      Previous value: -"Explicit approval of this exact native effect or private file output."New value: +"Set true only when the user asked for exactly this action."
  2. First observedv2.0.0

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, idempotentHint=false, and openWorldHint=true, so the safety profile is partly covered. The description adds genuinely new context beyond that: the required scope (edit_sales) and the mandatory per-call confirmation, both of which affect whether an agent should attempt the call.

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

Conciseness5/5

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

Three short clauses, front-loaded with the purpose, then scope, then the confirmation requirement. No filler, no redundancy with the schema.

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

Completeness4/5

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

For a destructive, non-idempotent mutation with no output schema, the description supplies the key preconditions (scope, confirmation) that an agent needs before invoking. It does not describe post-refund effects or rate limits, but nothing critical for correct invocation is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already fully documents account, confirm, sale_id, full_refund, and amount_cents in detail (including the JPY minor-unit nuance). The description only gestures at the confirm parameter via 'per-call confirmation' and adds no syntax or format detail beyond the schema, so baseline 3 applies.

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

Purpose4/5

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

States a specific verb+resource ('Refund sale') and pins it to the native endpoint PUT /sales/:id/refund, so the agent knows exactly what operation this is. It does not explicitly contrast itself with siblings (e.g., revoke_sale_access, resend_sale_receipt), but the resource is distinctive enough to distinguish it.

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

Usage Guidelines3/5

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

The description implies a usage precondition with 'Requires explicit per-call confirmation,' which tells the agent a confirmation step is mandatory. However, it gives no when-to-use vs. when-not guidance relative to siblings like revoke_sale_access or update_refund_policy, so usage is only partially implied.

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