MCP server for interacting with Gumroad API to manage products, sales, and offer codes
Gumroad MCP has 11 tools with explicit schemas and descriptions visible in src/server.ts. All tools have names starting with action verbs (get_, create_, update_, delete_) and descriptions present. However, descriptions are minimal (10-50 chars), parameter descriptions lack detail on constraints/formats, and output schemas are completely undocumented. No error handling guidance, no pagination support despite list operations, and no tool annotations (readOnlyHint/destructiveHint). Parameter validation rules are not described in descriptions (e.g., date patterns exist in schema but not explained to LLM). This is a functional but below-average implementation.
Creates a new offer code for a product
Deletes an offer code for a product
Disables a product by its ID
Enables a product by its ID
Retrieves a single offer code by its ID for a specific product
Retrieves all offer codes for a product
Output schemas completely undocumented. No tool returns a documented response structure. LLMs cannot plan downstream calls or extract required fields (e.g., product_id from get_products for chaining to get_offer_codes).
Descriptions are too brief (10-50 chars). Rubric baseline is 194 chars average. Minimal descriptions like 'Retrieves all of the products' do not explain WHEN to use this tool vs alternatives, what it returns, or prerequisites. LLMs cannot reliably select the right tool.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 50 | 2026-07-28+ | v2 |
Retrieves a single product by its ID
Retrieves all of the products
Retrieves all of the successful sales
Retrieves the authenticated user's data. Available with any scope.
Updates the max purchase count of an existing offer code for a product
Parameter descriptions lack constraint details. Date parameters (after, before in gumroad_get_sales) have regex patterns in schema but descriptions do not explain format (YYYY-MM-DD). Enum parameters (offer_type) have enums in schema but descriptions do not list valid values. LLMs cannot read JSON Schema, they rely on description text.
No pagination support for list operations. gumroad_get_products and gumroad_get_sales accept page_key but no limit/offset parameters. No documentation of result limits or how to iterate. Large result sets will blow context window.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Destructive tools like gumroad_delete_offer_code and write tools like gumroad_create_offer_code lack annotations. LLMs cannot distinguish safe reads from dangerous writes without explicit hints.