Gumroad MCP server for AI agents

Live

OAUTH 2.0

CREATOR COMMERCE

Marketing

Gumroad gives your agent creator commerce on your Gumroad account: create and update products, offer codes, and variants, look up and refund sales, verify and manage license keys, and send audience emails.

  • Per-user credentials: each call uses the actual user's token, never a shared bot.
  • Encrypted per-tenant vault: AES-256, resolved at request time, never in LLM context.
  • Scoped before every call: pre-call scope check, 90-day SIEM-exportable audit chain.
Gumroad
agent · Acme Q3
Run
How many sales did the Design System Kit make this week?
S
gumroad_list_sales
116ms
Store agent
The Design System Kit made 47 sales this week. 2 of them were refunded.
Sources: Gumroad sales, 1 product
gumroad
47 sales
18:29
Message Claude...

Tools your store agent reaches for on Gumroad, scoped per user.

CALL ANY TOOL
60 tools for creator commerce in Gumroad: create, update, publish, and unpublish products, manage offer codes and variants, look up and refund sales, verify and manage license keys, and send audience emails.
gumroad_create_custom_field
Create custom field
Add a custom checkout field to a product. Returns the created custom_field object with id, type, name and required. Use to collect extra buyer information such as a phone number. Use gumroad_update_custom_field to change whether it is required. Requires a product id from gumroad_list_products.
Parameters
Name
Type
Required
Description
name
string
Required
Label of the custom field shown to buyers at checkout, for example phone number.
product_id
string
Required
ID of the product, as returned by gumroad_list_products (the id field, for example A-m3CDDC5dlrSdKZp0RFhA==). The product's custom permalink also works.
required
string
Optional
Whether buyers must fill the field in: true or false. Defaults to false. One of: `true`, `false`.
gumroad_create_offer_code
Create offer code
gumroad_create_variant
Create variant
gumroad_decrement_license_uses
Decrement license uses
gumroad_delete_custom_field
Delete custom field
gumroad_delete_offer_code
Delete offer code
gumroad_delete_variant
Delete variant
gumroad_disable_license
Disable license
gumroad_enable_license
Enable license
gumroad_get_email
Get email
gumroad_get_payout
Get payout
gumroad_get_refund_policy
Get refund policy
gumroad_get_store_offer_code
Get store offer code
gumroad_get_upcoming_payouts
Get upcoming payouts
gumroad_get_variant
Get variant
gumroad_list_categories
List categories
gumroad_list_emails
List emails
gumroad_list_payouts
List payouts
gumroad_list_products
List products
gumroad_list_store_offer_codes
List store offer codes
gumroad_list_variant_categories
List variant categories
gumroad_mark_sale_as_shipped
Mark sale as shipped
gumroad_refund_sale
Refund sale
gumroad_revoke_sale_access
Revoke sale access
gumroad_schedule_email
Schedule email
gumroad_send_email
Send email
gumroad_unschedule_email
Unschedule email
gumroad_update_custom_field
Update custom field
gumroad_update_product
Update product
gumroad_update_variant
Update variant

For more tools, view docs.

Build your Agent
Same auth pattern across LangChain, OpenAI, Anthropic, and Google ADK.
Python · LlamaIndex
import { ScalekitClient } from "@scalekit-sdk/node";
import { createReactAgent } from "@langchain/langgraph/prebuilt";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);

// Gumroad tools scoped to this user
const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["gumroad"], toolNames: [
    "gumroad_list_products",
    "gumroad_create_offer_code",
    "gumroad_create_email"] },
  pageSize: 100,
});

const agent = createReactAgent({ llm, tools });
await agent.invoke({ messages: [{ role: "user", content: "Create a LAUNCH20 offer code for the Design System Kit and draft an email announcing it" }] });
import OpenAI from "openai";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);
const openai = new OpenAI();

const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["gumroad"] }, pageSize: 100,
});

const res = await openai.chat.completions.create({
  model: "gpt-5",
  messages: [{ role: "user", content: "Create a LAUNCH20 offer code for the Design System Kit and draft an email announcing it" }],
  tools,
});

// Execute the tool call with the user's vaulted Gumroad OAuth token
await sk.tools.executeTool(res.choices[0].message.tool_calls[0], "user_123");
import Anthropic from "@anthropic-ai/sdk";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);
const anthropic = new Anthropic();

const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["gumroad"] }, pageSize: 100,
});

const msg = await anthropic.messages.create({
  model: "claude-sonnet-5",
  max_tokens: 1024,
  messages: [{ role: "user", content: "Create a LAUNCH20 offer code for the Design System Kit and draft an email announcing it" }],
  tools,
});

// Tool call runs with the user's vaulted Gumroad OAuth token
await sk.tools.executeTool(msg.content, "user_123");
import { Agent } from "@google/adk/agents";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);

const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["gumroad"] }, pageSize: 100,
});

const agent = new Agent({
  name: "store_agent",
  model: "gemini-2.5-pro",
  instruction: "Gumroad tools scoped to this user",
  tools,
});

await agent.run("Create a LAUNCH20 offer code for the Design System Kit and draft an email announcing it");
Try these prompts
Copy any prompt into your agent. Each maps directly to a Gumroad tool. Click to copy, paste into your agent, done.
Products
Copy the prompt
Copied
List my products with their prices and sales counts.
Copy the prompt
Copied
Create a 20% off offer code called LAUNCH20 for the Design System Kit.
Copy the prompt
Copied
Unpublish the 2023 course so no one can buy it.
Sales and licenses
Copy the prompt
Copied
List sales of the Design System Kit from the last 7 days.
Copy the prompt
Copied
Refund this sale in full.
Copy the prompt
Copied
Verify this customer's license key for the Design System Kit.
Audience and payouts
Copy the prompt
Copied
Draft an audience email announcing the new course.
Copy the prompt
Copied
Schedule the course announcement email for Monday at 9am.
Copy the prompt
Copied
Show my upcoming payouts.
SEE HOW AUTH WORKS
Each user signs in to Gumroad once, and Scalekit stores and refreshes their tokens. Credentials stay vaulted, every call is scope checked, and every action is logged.
1
Authorize
Your user connects
Gumroad
once. We tie it to their identity and the meetings they approved — no shared bot account, no org-wide access
Who:
user ‘A’
when:
Once per user
access:
Limited to user
2
Store
Their
Gumroad
token lives in a vault scoped to them. User A's meetings are never reachable by an agent acting for user B, even on the same connection
vault:
encrypted
scope:
per-user
tokens:
auto-refreshed
3
Resolve
When your agent calls a
Gumroad
tool, we fetch the right token server-side. It never touches your agent, never appears in the LLM context, never shows up in your logs
speed:
~40ms
check:
before every call
seen by:
nobody
4
Audit
Every
Gumroad
tool call is logged — who triggered it, which meeting was fetched, what came back. 90 days of history, tied to the user who authorized it
history:
90 days
export:
SIEM-ready
logged:
every call
Test other agents
See the same per-user auth pattern across other marketing and commerce connectors.
GTM and RevOps Teams
Revenue forecast commentary
Pulls open pipeline from Salesforce and HubSpot, calculates coverage against quota, flags at-risk stages, posts commentary to Slack, and logs every snapshot to Google Sheets.
Support and Ops Teams
Support ticket automation agent
Fetches new Zendesk tickets, drafts a reply from Notion knowledge base articles, digests what it cannot answer to Slack, and archives the rest, acting as the support agent rather than a shared API key.
Test other agents
See the same per-user auth pattern across other marketing and commerce connectors.
GTM
Revenue forecast agent
Score pipeline coverage against quota across Salesforce and HubSpot, post forecast commentary to Slack, log snapshots to Sheets.
SUPPORT
Support ticket automation (Google ADK)
Fetch, annotate, and archive Zendesk tickets with Notion context, digesting anything it cannot answer to Slack.
Why Scalekit
Secure your agent's access. Connectors ship in minutes
01.
Shared tokens break per-user analytics
A shared Gumroad token looks fine in a demo. In production every refund and product edit looks like one service account, and you cannot tell which user triggered it. Scalekit resolves the credential of the actual user who triggered the agent, never a shared bot.
// shared token
audit → bot_service_account

// scalekit
audit → user_abc ✓
02.
Authentication is not authorization
03.
Multi-tenancy is architectural
04.
Gumroad today. Ten connectors tomorrow.
“Our agents act across Salesforce, Gong, Google Drive, and more, on behalf of every customer. Scalekit behind the scenes meant we can keep adding tools without ever rebuilding how credentials or tool calling work.”
Venu Madhav Kattagoni
Head of Engineering / Von
FAQs
Frequently Asked Questions
Does the agent access Gumroad as the user or through a shared service account?
As the user. Each user signs in to Gumroad once, and Scalekit stores and refreshes their tokens. Product edits, refunds, and audience emails are attributed to that user in your audit trail, not a shared service account.
Where is the Gumroad OAuth token stored?
In Scalekit's managed AES-256 token vault, namespaced per tenant. Refresh is automatic. Revocation is a single dashboard action. Credentials never appear in prompts, logs, or LLM context.
Can I limit what the agent does in Gumroad?
Yes. Filter by tool name in listScopedTools to expose only what you want, for example the sales and product tools without gumroad_refund_sale or gumroad_delete_product. Scalekit also enforces scope checks before every API call.
What happens when a user revokes Gumroad access?
The connection is invalidated on the next tool call. Subsequent requests for that user fail closed with a clear error. Other users in the tenant remain unaffected. The event is logged for audit.
Can the agent manage license keys in Gumroad?
Yes. gumroad_verify_license checks a customer's license key for a product and counts a use, gumroad_disable_license and gumroad_enable_license turn a key off and on, and gumroad_rotate_license replaces a key with a new one so the old key stops working.
Start in your coding agent
Up and running in one command
Install the Scalekit skill in your editor of choice. Connector, auth, tools, prompt, all wired up
Claude Code REPL
/plugin marketplace add scalekit-inc/claude-code-authstack
/plugin install agentkit@scalekit-auth-stack
Cursor Code REPL
# ~/.cursor/mcp.json
{
""mcpServers"": {
""gumroad"": {
""url"": ""https://mcp.scalekit.com/gumroad"",
""headers"": { ""Authorization"": ""Bearer $SCALEKIT_TOKEN"" }
}
}
}
Codex Code REPL
# ~/.codex/config.toml
[mcp_servers.gumroad]
url = ""https://mcp.scalekit.com/gumroad""
auth_env = ""SCALEKIT_TOKEN""
Copilot Code REPL
# .vscode/mcp.json
{
""servers"": {
""gumroad"": {
""url"": ""https://mcp.scalekit.com/gumroad"",
""type"": ""http""
}
}
}