gumroad-mcp
Provides read-only access to a Gumroad store, allowing products listing, sales retrieval with pagination and totals, and revenue summaries net of refunds.
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., "@gumroad-mcphow much revenue did I make this month?"
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.
gumroad-mcp
Read-only MCP server for your Gumroad store — products, sales, and revenue summaries, exposed as tools your AI agent can call.
Built by a store operator, not from the API docs alone:
Sales are fully paginated — and say so when they aren't. The v2 sales endpoint pages by
page_key; naive clients read page 1 and silently under-report. This server walks every page. There is a hard page cap so a huge store can't hang a session, and if that cap is ever hit the response carries"complete": falseplus an explicit warning that the totals are a floor. A truncated total is never returned as if it were the real number.Money is integer cents + a formatted string. Models shouldn't do float arithmetic on revenue.
Refunds are first-class.
salesandrevenue_summaryreport gross and net-of-refunds.Buyer privacy by default. Sales rows expose the buyer's email domain only — enough for channel analysis, no PII handed to the model.
Read-only by design. Only GET endpoints. The token comes from the environment and is never echoed or logged.
No false delivery alarms. Gumroad returns an empty
file_infofor multi-file products, so "empty" does not mean "no file attached". This server reports that field as the raw API fact it is (file_info_reported_by_api) and attaches a note, instead of asserting a delivery status the endpoint cannot actually tell you.
Requires the 1.x MCP SDK.
mcp2.0.0 removedmcp.server.fastmcp, so the dependency is pinnedmcp>=1.0.0,<2.0.0. Porting to the 2.x (mcp.server.mcpserver) API is tracked as follow-up.
Tools
Tool | What it answers |
| What am I actually selling? Name, permalink, price, published state, sales count |
| Every sale in a window, paginated to the end, with totals |
| One-call health check: product counts, lifetime sales per product, revenue since a date (default: this month) |
Related MCP server: SimpleShop MCP
Install
git clone https://github.com/stcmain/gumroad-mcp.git
cd gumroad-mcp
pip install .Get a token: Gumroad → Settings → Advanced → Applications → create app → copy the access token.
Register with Claude Code:
claude mcp add --scope user gumroad --env GUMROAD_ACCESS_TOKEN=your_token -- gumroad-mcpOr any MCP client config:
{
"mcpServers": {
"gumroad": {
"command": "gumroad-mcp",
"env": { "GUMROAD_ACCESS_TOKEN": "your_token" }
}
}
}License
MIT © Zachary Pampu
Available Tools
3 toolslist_productsA
List all products in the store: name, permalink, price, published state, and sales count. Answers 'what am I actually selling right now?'
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full disclosure burden. It clearly states this is a read-only listing operation and defines its scope ('all products in the store'), including the returned fields. It does not disclose pagination, ordering, or authorization, but for a simple zero-parameter list tool, the behavioral surface is adequately covered.
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, front-loaded with the action and resource, and every word adds value. The supporting 'answers...' phrase is concise and clarifies the tool's purpose without unnecessary 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?
This is a simple parameterless list tool with an output schema available. The description fully explains what data is returned and the intended use case. Sibling tools are financial summaries, so this catalog-focused description is complete enough for an agent to select and invoke the tool 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?
The tool has zero parameters, and schema description coverage is 100% trivially, so the baseline is 4. The description adds useful semantic value by explaining what the output represents, which is sufficient for a parameterless tool.
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 identifies the operation as 'list all products' and specifies the exact fields returned (name, permalink, price, published state, sales count). The phrase 'what am I actually selling right now?' gives an outcome-oriented purpose that distinguishes this catalog tool from the sibling financial tools (sales, revenue_summary).
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 clear use case ('what am I actually selling right now?') but does not explicitly state when to use this tool over the sibling sales and revenue_summary tools. It gives no exclusions or alternative references, so usage guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
revenue_summaryA
One-call store health check: product count, published count, lifetime
sales counts per product, and revenue since after (YYYY-MM-DD, default:
start of current month). The number an operator actually wants first.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of explaining behavior. It discloses that it returns aggregate metrics, applies revenue filtering by `after` with a default, and distinguishes lifetime sales counts from date-filtered revenue. It does not cover error handling or auth, but for a simple read-oriented summary tool the core behavior is 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?
The description is two sentences, front-loaded with the tool's purpose, and every clause adds specific information. The only minor flourish is 'The number an operator actually wants first', which reinforces usage context without bloating the text.
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 tool with one optional parameter and an output schema present, the description fully covers what the tool does, the key metrics, and the parameter's format/default. It is complete enough for an agent to select and invoke appropriately without further clarification.
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 schema only defines `after` as a string with an empty default, providing 0% coverage. The description compensates by specifying the YYYY-MM-DD format and the default of 'start of current month', adding meaningful semantics that allow correct invocation.
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 defines the tool as a one-call store health check, enumerating the exact metrics returned (product count, published count, lifetime sales counts per product, revenue since a date). It stands apart from siblings list_products and sales by providing an aggregated summary rather than raw lists or separate sales data.
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 phrase 'One-call store health check' and 'The number an operator actually wants first' imply this is a quick aggregate alternative to calling multiple tools, but it does not explicitly name sibling tools or state when not to use it. The guidance is clear in context but lacks direct exclusions or alternative references.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
salesA
List sales, fully paginated. Dates are YYYY-MM-DD (after defaults to today — pass e.g. after='2026-01-01' for history). Returns per-sale price, product, email domain (full buyer email withheld), refund state, and totals.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | ||
| before | No | ||
| product_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full responsibility. It discloses pagination, date format, default behavior for 'after', and output details (per-sale price, product, email domain, refund state, totals), providing useful behavioral context beyond a bare 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?
Two concise, information-dense sentences. Every phrase adds value: pagination, date format, default behavior, and return fields are all covered without 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?
For a list tool with no required parameters and an output schema, the description covers key aspects (pagination, date range, output fields). Minor ambiguity remains around 'totals' and how pagination is controlled, but overall it is sufficiently 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 descriptions are absent (0% coverage), so the description must compensate. It explains 'after' semantics (defaults to today) but leaves 'before' and 'product_id' vague, offering only partial parameter clarification.
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 sales with a specific verb ('List') and resource ('sales'), distinguishes it from sibling tools (list_products, revenue_summary) by focusing on sales records, and adds important context about pagination and date filtering.
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 sales data and provides parameter guidance (e.g., 'after' defaults to today), but it does not explicitly state when to use this tool over siblings or mention exclusions/alternatives.
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.
3 tool updates
v0.2.0- First observed
list_products - First observed
revenue_summary - First observed
sales
TDQS
Scored across 3 tools
Tools are mostly distinct: list_products focuses on the product catalog, sales provides transaction-level details, and revenue_summary gives aggregate metrics. There is minor overlap in sales counts per product between list_products and revenue_summary, but descriptions clarify their different intents.
Naming is mixed: list_products follows verb_noun, while sales and revenue_summary are plain nouns. All are lowercase snake_case, but the lack of a consistent verb_prefix pattern makes it slightly less predictable.
Three tools is a tight, well-scoped set for a read-only store analytics server. Each tool covers a distinct high-level need (catalog, transactions, summary) without unnecessary bloat or missing core functions.
For the apparent purpose of store health monitoring, the surface is fairly complete: product listings, detailed sales history, and revenue summaries are all covered. A minor gap is the lack of a single-product detail or sales-by-sale retrieval, but pagination and filtering mitigate this.
Maintenance
Related MCP Connectors
MCP server for Lemon Squeezy — stores, products, orders, subscriptions, license keys.
Federated commerce search across independent WooCommerce merchants. Keyless, read-only MCP server.
An MCP server that provides read access to your cloud storage providers, bank accounts and more.
Hosted Amazon Seller and Vendor MCP server for Claude, ChatGPT, Cursor, Codex, Gemini, Copilot.
Related MCP Servers
- AlicenseAqualityDmaintenanceA Model Context Protocol (MCP) server implementation for Gumroad, enabling MCP-compatible AI clients like Claude Desktop to interact with Gumroad API.1177 npm32MIT
- AlicenseBqualityCmaintenanceA read-only MCP server for SimpleShop accounting data, enabling AI agents to find documents, download PDFs, inspect products, and review sales exports.5MIT
- AlicenseAqualityAmaintenanceA read-only MCP server that exposes the full Shopify Admin GraphQL API through 6 universal tools, with multi-store support and mutation rejection at the parser level for safety.6MIT
- AlicenseAqualityDmaintenanceMCP server that integrates with Gumroad API, enabling Claude to list products, view sales, and get sales summaries for your Gumroad store.477 npmMIT