gumroad-mcp-server
Provides tools for interacting with the Gumroad v2 API, enabling management of products, variants and price tiers, custom checkout fields, offer codes, sales, payouts, subscribers, storefront pages and media, upsells, UTM links, email broadcasts and workflows, licence keys, and webhooks.
Click on "Install 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-mcp-serverGet my sales summary"
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-server
A Model Context Protocol server for the Gumroad v2 API.
All 105 seller operations — products, variants and price tiers, custom checkout fields, offer codes, sales, payouts, subscribers, storefront pages and media, upsells, UTM links, email broadcasts and workflows, licence keys, and webhooks.
MIT licensed.
Install
npm install -g @nasdigitaluk/gumroad-mcpRelated MCP server: Buttondown MCP Server
Configuration
{ "env": { "GUMROAD_ACCESS_TOKEN": "your-access-token" } }Gumroad access tokens do not expire, so there is no refresh machinery here and no credentials file. GUMROAD_BASE_URL overrides the API host if you need it to.
⚠️ What is deliberately absent
The server this was rebuilt from did this, inherited from its upstream fork:
if (url !== GumroadClient.BASE_URL) {
process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
}That disables TLS certificate verification for the entire Node process — every request anything in it makes, not just Gumroad's — and it triggers on any difference from the exact production string, including a trailing slash. A typo in a base URL silently turned off certificate checking.
There is no such escape hatch here. A non-production base URL is just a base URL, and there is a test asserting that pointing the client somewhere else leaves NODE_TLS_REJECT_UNAUTHORIZED untouched.
Where the catalogue comes from
Gumroad publishes no OpenAPI document. Every other server in this family generates its catalogue from the provider's own spec; this one cannot, so vendor/gumroad-operations.json is the spec.
Each entry was read off Gumroad's own config/routes.rb and, where the parameters mattered, the controller behind it — not from a documentation page. That is deliberate: the routing table is the thing the server actually dispatches against, and documentation that advertises endpoints which do not exist is a recurring way to waste an afternoon.
Not catalogued: the /v2/walks/* namespace, which belongs to Gumroad's own iOS app (device attestation, realtime tokens) rather than to sellers. It is named here rather than listed as an excluded operation because inventing its exact routes would be worse than saying plainly that it was left out.
To refresh, re-read the routes, update the vendored JSON, then:
npm run generate && npm testThe coverage test fails if the generated catalogue and the vendored table drift apart.
Two traps worth knowing before you call anything
Creating a product does not put it on sale. Gumroad's controller sets draft: true, so a created product has purchases disabled until enableProduct publishes it. Useful, and not obvious.
createProduct takes a price in CENTS; updateProduct takes dollars. That asymmetry is Gumroad's, not this server's. It is stated in the tool description rather than silently normalised, because a hidden conversion is a worse trap than a documented one.
Two more, both encoded in the catalogue so they arrive as an explanation rather than a mystery:
getEarnings,listTaxFormsanddownloadTaxFormneed "Tax center" enabled on the account and otherwise return "Tax center is not enabled for this account." That is an account setting, not a fault — usegetSalesSummaryand do not retry.listWebhooksrequiresresource_name. Without it Gumroad answers "Valid resource_name parameter required", which reads exactly like a broken tool.
Tools
Eight tools for 105 operations. Every tool name and description is paid for in the model's context window on every turn, used or not.
Tool | |
| Browse the catalogue. Start here. |
| Call any operation by id. |
| The seller account. |
| Every product. |
| One product, with variants. |
| Create a draft. Price in cents. |
| Sales, one row each. |
| Gross / net / unit totals. |
Each dedicated tool names the operation id it corresponds to, so there is still one place to look.
Of 105 operations: 46 read, 43 write, 16 destructive. Gumroad's own financial grouping covers 12 of the reads — those read money without moving it, so they stay available in read-only mode. Moving money (refundSale) and reaching real customers (sendEmail, scheduleEmail) are destructive.
Read-only and no-destructive modes
MCP_READ_ONLY=1 refuse anything that changes state
MCP_NO_DESTRUCTIVE=1 allow writes, refuse refunds, deletes and sends⚠️ gumroad_call is one door onto all 105 operations, sixteen of which are destructive, so it is classified destructive and MCP_READ_ONLY=1 refuses it outright. The dedicated read tools stay usable in that mode.
Testing
npm test # 15 tests
SMOKE_ENV='{"GUMROAD_ACCESS_TOKEN":"x"}' npm run smoke # real MCP over stdioBuilt on
@nasdigitaluk/mcp-server-core.
Licence
MIT.
Available Tools
8 toolsgumroad_callB
Call any Gumroad operation by id. Some of these move real money or reach real customers — refundSale, sendEmail, scheduleEmail — so this is classified destructive as a whole. Check the operation's summary before calling it.
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | ||
| params | No | ||
| operation_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full safety burden. It explicitly discloses that certain operations 'move real money or reach real customers' and that the tool is 'classified destructive as a whole,' naming concrete examples. This goes well beyond a generic 'be careful' warning, though it does not address idempotency, rate limits, or output behavior.
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?
Three short sentences, front-loaded with the core purpose, followed by a concrete risk list and an actionable safeguard. No filler or redundancy; 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?
For a generic operation dispatcher with no output schema and no annotations, the description provides essential safety context and instructs the agent to consult the operation summary before calling. However, it doesn't point to gumroad_list_operations as the discovery source, nor explain how to translate an operation summary into the `body`/`params` fields. Thus, an agent has enough to be cautious but not enough to confidently construct arbitrary calls.
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 0%, and the description only identifies operation_id by referring to calling an operation by id. It does not explain the `body` or `params` properties, how operation-specific arguments should be structured, or what checking the operation's summary should reveal about inputs. The schema's bare `additionalProperties` object remains entirely undocumented.
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 states a clear action — 'Call any Gumroad operation by id' — and names concrete example operations, so an agent understands it is a generic dispatcher keyed by operation_id. It doesn't explicitly distinguish when to prefer this over the dedicated sibling tools, but the generic-by-id semantics provide reasonable clarity.
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 — call by operation_id and check the operation's summary first — but never says when gumroad_call should be chosen over dedicated siblings like gumroad_create_product or gumroad_get_sales. There is no explicit alternative routing or when-not-to-use guidance, though the safety warning establishes a clear precondition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gumroad_create_productA
Create a product. It is created as a DRAFT with purchases disabled — Gumroad's own controller sets draft=true — so this cannot put anything on sale. Publishing is a separate call (enableProduct). Operation id: createProduct.
⚠️ price_cents is in CENTS here, while Gumroad's UPDATE endpoint takes dollars. That asymmetry is upstream's, not this server's, and it is stated rather than silently normalised because a silent conversion is worse than a documented trap.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Product name. | |
| tags | No | ||
| description | No | ||
| native_type | No | e.g. digital, course, ebook, membership, physical. | |
| price_cents | Yes | Price in CENTS. 999 is $9.99. Zero means pay-what-you-want. | |
| taxonomy_id | No | From listCategories. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden, and it does so well: it discloses draft=true, disabled purchases, the separate publishing step, and the price_cents-vs-dollars asymmetry. It does not cover auth, response contents, or rate limits, but the most surprising and consequential behaviors are transparently stated.
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 essential statement is front-loaded, and the warnings are grouped logically in two short paragraphs. The explanation of why the unit mismatch was not silently normalized is slightly verbose but earns its place by preventing incorrect assumptions.
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 no annotations, the description covers the critical operational context: draft state, disabled purchases, the publishing alternative, and the unit asymmetry. It omits details such as expected response shape or authorization, but the information needed to avoid the main pitfalls is present.
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 67%, so the description does not need to explain every field. It adds crucial meaning beyond the schema by highlighting that price_cents is in cents while the update endpoint uses dollars, and by reinforcing that zero means pay-what-you-want. Remaining undocumented fields like tags and description are largely self-explanatory.
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 begins with a clear verb and resource: 'Create a product.' It goes beyond a simple label by specifying the outcome ('created as a DRAFT with purchases disabled') and names the operation id, making it unambiguous and distinct from any read or list siblings.
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 explicitly says publishing is a separate call ('enableProduct') and that this tool cannot put anything on sale, which tells an agent when not to rely on this tool. It does not enumerate all sibling alternatives, but the key operational boundary is clearly drawn.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gumroad_get_productA
One product in full, including its variants. Operation id: getProduct.
| Name | Required | Description | Default |
|---|---|---|---|
| product_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It does disclose that the result includes variants and is a full product representation, but it omits other behavioral context such as authentication requirements, failure modes, or whether it is a read-only 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 brief and front-loaded with the core meaning. The second sentence, 'Operation id: getProduct', adds marginal value and is somewhat redundant with the tool name, but it does not create significant clutter.
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 is simple with one parameter and no output schema, and the description states the essential return content ('full' product with variants). However, it does not explain where product_id comes from, how it relates to list_products, or what fields the full product includes, leaving meaningful gaps for an 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 description coverage is 0%, and the description adds no direct meaning for the product_id parameter beyond the parameter name itself. It only implies via context that product_id identifies the product, so the description does not compensate for the schema gap.
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 resource ('One product'), the scope ('in full'), and the key differentiator ('including its variants'). This distinguishes it from plural or summary siblings like gumroad_list_products and gumroad_get_sales.
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 product' implicitly signals use when a single product is needed rather than a list, but it does not explicitly name alternatives or give conditions for when not to use this tool. The guidance is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gumroad_get_salesC
Sales, one row each. Reads money without moving it. Operation id: listSales.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | YYYY-MM-DD, inclusive. | |
| No | Filter to one buyer. | ||
| before | No | YYYY-MM-DD, inclusive. | |
| page_key | No | ||
| product_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly says 'Reads money without moving it,' which usefully discloses that this is a read-only operation with no side effects. However, with no annotations provided, the description still omits important behavioral details like pagination mechanics via page_key, whether results are ordered, or how date filters behave on output.
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 appropriately brief and front-loaded: it states the output shape first, then the safety behavior. The 'Operation id' line is slightly internal but still compact and informative. No wasted words, though the sentence fragment 'Sales, one row each' could have been written as a fuller sentence.
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 no output schema and no annotations, the description does not provide enough context for reliable invocation. The agent is not told how pagination works, what output fields to expect, whether filters are mutually exclusive, or how this relates to gumroad_get_sales_summary. Several parameters remain unexplained across both the schema and description.
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 only 60%, leaving page_key and product_id undocumented in the schema. The description itself adds no parameter-level meaning, so it does not compensate for that gap. It also does not clarify how after and before interact or what granularity 'one row each' implies relative to the available filters.
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's 'Sales, one row each' clearly indicates this tool returns individual sale records rather than an aggregate, and 'Reads money' clarifies it is a read operation. Combined with the tool name get_sales, this is enough to identify the tool's purpose. It does not use an explicit verb like 'get' or 'list', but the operation id 'listSales' reinforces the meaning.
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 its siblings, especially gumroad_get_sales_summary. The description does not mention alternatives, exclusions, or the appropriate context for choosing this over other sales-related tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gumroad_get_sales_summaryA
Gross, net and unit totals over a date range. Operation id: getSalesSummary.
Use this rather than getEarnings: earnings and the tax-form endpoints need 'Tax center' enabled on the account and otherwise return 'Tax center is not enabled for this account.' That is an account setting, not a fault — do not retry it.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | YYYY-MM-DD, inclusive. | |
| before | No | YYYY-MM-DD, inclusive. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It does disclose the output (gross/net/unit totals) and a relevant error behavior for getEarnings, but it does not state whether this tool is read-only, what happens when after/before are omitted, or any response structure. It is not misleading, but it is only moderately 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 compact and well-organized: a one-sentence summary followed by targeted operational guidance. Every sentence earns its place, including the operation id and the caution about tax-form endpoints, with no 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?
For a simple two-parameter tool with no output schema, the description covers the main return values and provides practical caveats. It does not explain default date-range behavior when both parameters are omitted or explicitly contrast with gumroad_get_sales, but these are minor gaps given the low complexity.
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 documents after and before with inclusive YYYY-MM-DD format. The description only adds 'over a date range,' which does not meaningfully extend the parameter semantics beyond the schema 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 identifies the tool as returning gross, net, and unit totals over a date range, and gives the operation id. It is specific about resource and scope, though it does not explicitly name the verb or distinguish itself from the sibling tool gumroad_get_sales beyond the 'summary' concept.
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 gives explicit guidance: 'Use this rather than getEarnings' and explains exactly when that alternative fails due to 'Tax center' not being enabled. It also warns that the error is an account setting and should not be retried, leaving no ambiguity about the intended choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gumroad_get_userB
The authenticated seller account. Operation id: getUser.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
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 of behavioral disclosure. It indicates that the resource is the authenticated seller account and names the operation as getUser, but it does not describe what data is returned, whether the operation requires special permissions, or any side effects. For a getter this is a low-risk operation, but that is implied by the name rather than 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 only two short sentences with no wasted words. It front-loads the core resource identity and adds the operation id as a clarifying detail. It is concise, though the operation id is largely redundant with the tool name.
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 no input schema, no output schema, and no annotations, the description should explain what the returned user object represents or when to call this operation. It only states that the target is the authenticated seller account and gives the operation id. Missing return-value context and usage guidance leave the description under-specified.
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 there is no parameter detail for the description to clarify. Schema coverage is effectively complete at 100%, and the description adds the context that the target is the authenticated seller account. This meets the baseline for a zero-parameter 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 identifies the resource as 'the authenticated seller account' and provides the operation id 'getUser', making the tool's purpose clear: fetch the current seller's user information. It is distinct from siblings like get_product or get_sales because it specifically targets the seller account rather than products or transaction data. However, it relies on the operation id to supply the verb, since the prose is a noun phrase rather than an explicit 'Gets...' statement.
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?
There is no guidance on when to use this tool versus alternatives such as gumroad_get_product or gumroad_get_sales. The phrase 'authenticated seller account' implies the context, but no explicit when-to-use or when-not-to-use instructions are given. No alternatives or exclusions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gumroad_list_operationsA
Browse all 105 operations in the Gumroad v2 API — products, variants, sales, payouts, storefront pages, email broadcasts, licences and webhooks. Use this to find an operation id for gumroad_call. The few most common ones also have a dedicated tool below.
| Name | Required | Description | Default |
|---|---|---|---|
| search | No | Filter by id, path, tag or summary — try 'sales', 'variant', 'license'. |
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 conveys the non-mutating nature ('Browse') and the scope (105 operations, returns operation ids), which covers the core behavioral profile. However, it does not disclose return structure, pagination behavior for a 105-item listing, or how the search filter affects results.
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 filler. Scope is front-loaded, the tool's purpose is stated immediately, and the sibling-tool routing is delivered in the final clause. 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?
For a low-complexity discovery tool with one optional parameter and no output schema, the description covers what it does, why to use it, and how it relates to dedicated siblings. The main gap is the lack of detail on what the returned list looks like when search is empty versus filtered, which is minor for an index 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 the search parameter already documented ('Filter by id, path, tag or summary'). The description's category list (sales, variant, license) partially reinforces the search hints, but it adds no genuinely new parameter semantics beyond the schema, so the baseline 3 applies.
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?
States a specific verb ('Browse'), resource ('all 105 operations in the Gumroad v2 API'), and scope, enumerating the covered categories (products, sales, payouts, webhooks, etc.). It differentiates itself from the operation-executing siblings by framing itself as an index/discovery tool that feeds gumroad_call.
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?
Gives explicit use context: 'Use this to find an operation id for gumroad_call.' It also signals the routing rule that common operations have dedicated tools below, implying the agent should prefer those for frequent cases. It stops short of explicitly naming each alternative or stating a hard when-not-to-use rule, but the guidance is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gumroad_list_productsB
Every product on the account. Operation id: listProducts.
| Name | Required | Description | Default |
|---|---|---|---|
| page_key | No | From a previous response, to page on. |
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 implies a read-only listing operation but does not explicitly state that it has no side effects, does not mention pagination behavior, or the structure of the response.
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, containing only two short phrases. It avoids unnecessary verbosity, though it sacrifices some detail for 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?
The description lacks information about the output format, pagination details, or any potential errors. For a simple list operation, it is minimally adequate but not complete enough to fully inform an agent without additional 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?
The only parameter, page_key, is described as 'From a previous response, to page on,' which clearly explains its purpose for pagination. This adds meaningful context beyond the raw 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 states 'Every product on the account' and the operation id 'listProducts' clarifies that it retrieves all products. It is distinguishable from sibling tools like get_product and create_product, though it does not use an explicit verb like 'list' or 'retrieve'.
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?
There is no guidance on when to use this tool instead of alternatives, nor any mention of pagination, filtering, or other usage context. The description provides no explicit conditions or examples for invocation.
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. Dates show when Glama detected each change.
8 tool updates
v1.0.0- First observed
gumroad_call - First observed
gumroad_create_product - First observed
gumroad_get_product - First observed
gumroad_get_sales - First observed
gumroad_get_sales_summary - First observed
gumroad_get_user - First observed
gumroad_list_operations - First observed
gumroad_list_products
TDQS
Each dedicated tool targets a specific resource or action, and the generic gumroad_call plus gumroad_list_operations are clearly framed as an escape hatch for all other operations. There is intentional overlap between generic and dedicated paths, but the descriptions make the distinction workable.
All tools share the gumroad_ prefix and mostly follow a verb_noun snake_case pattern. Minor inconsistencies exist: collection reads mix get_sales and list_products, while gumroad_call is a generic verb with no noun target.
Eight tools is a well-scoped surface for a Gumroad API wrapper. The generic call tool keeps the count reasonable instead of exposing all 105 operations as individual tools.
The combination of gumroad_list_operations and gumroad_call provides access to the full Gumroad v2 API, so missing dedicated update/publish/delete tools are not actual gaps. Common product, sales, and user workflows all have direct tools.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Create and manage checkout pages, event ticketing, forms, customers, payments and subscriptions.
Manage Memberful members, subscriptions, plans, passes and coupons via the GraphQL API.
Manage SiteGPT chatbots and account resources through the SiteGPT API v2.
Read products, sales, subscribers and offer codes; verify, enable and disable product licenses.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables interaction with Freshdesk API v2 to manage support tickets, contacts, agents, companies, and conversations with built-in authentication, rate limiting, and error handling.30011MIT
- AlicenseAqualityCmaintenanceEnables interaction with the Buttondown newsletter API for managing emails, subscribers, and tags.15141MIT
- AlicenseBqualityDmaintenanceProvides access to Product Hunt data via the Product Hunt API v2, enabling queries for posts, collections, users, topics, comments, goals, and maker groups.17641MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to interact with GoHighLevel's CRM, marketing automation, and business management tools via the API v2, with support for contacts, conversations, calendars, opportunities, payments, and workflows.21MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/N-Graves/gumroad-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server