Roblox-Monetize
Integrates with Roblox's Open Cloud monetization APIs to create and manage game passes and developer products, list existing monetization items, and write the resulting real IDs into a Roblox game's Luau configuration.
roblox-monetize
Website and live demo: roblox-monetize.vercel.app
Stop copy-pasting game pass IDs out of Creator Hub. Tell Claude "add a VIP pass for 299 Robux" and it creates the pass on Roblox, puts it on sale, and writes the real ID into your game's config.
A Claude Code skill that creates your Roblox game passes and developer products for you and writes their real IDs straight into your game's code. No more copying IDs out of Creator Hub.
You describe the items once (name, price, description). Then you run one command, or ask Claude to "set up monetization". Every item gets created, put on sale, and wired into your config.
Safe to re-run: existing IDs are kept, and items with the same name are reused, never duplicated.
Zero dependencies: a single Node script using Roblox's official Open Cloud API.
Two ways to use it: a Claude skill (default) or an MCP server (optional).
Requirements
Windows 10/11 (also works on macOS and Linux)
Node.js 18 or newer
Claude Code
A Roblox experience you own (or can edit in a group)
Related MCP server: Roblox MCP Server
Install with Claude (easiest)
Copy this whole block and paste it into Claude Code. Built for Windows first; macOS and Linux work the same.
Install the roblox-monetize Claude Code skill for me from https://github.com/rpatty-dev/roblox-monetize. Do these steps in order and stop to tell me if any of them fails:
1. Check that git and Node.js 18 or newer are installed (`git --version`, `node -v`). If either is missing, tell me exactly how to install it for my operating system and wait for me.
2. Clone the repo into a folder named roblox-monetize in my home directory (if it is already there, run `git pull` in it instead).
3. In that folder run `node install.mjs --mcp`. It must print "selftest ok" and "Skill installed".
4. Walk me through creating a Roblox Open Cloud API key, one step at a time:
create.roblox.com > Open Cloud > API Keys > Create API Key; add "game-passes" with read + write and "developer-products" with read + write for my experience; set Accepted IP Addresses to 0.0.0.0/0; save and copy the key.
Never ask me to paste the key into this chat. Once I have copied it, tell me to type this myself (with the ! at the start), using the real path on my machine:
! node "<home>/.claude/skills/roblox-monetize/scripts/monetize.mjs" set-key
That reads the key from my clipboard and stores it privately.
5. Ask me for my universe ID (the number in my Creator Hub URL after /experiences/) and run the `check` command to prove the key works.
6. Tell me to restart Claude Code, then say "set up monetization for this game" inside my game project.Install by hand
git clone https://github.com/rpatty-dev/roblox-monetize.git
cd roblox-monetize
node install.mjs # skill only
node install.mjs --mcp # skill + MCP serverRun in PowerShell or cmd on Windows; the same commands work in a macOS or Linux terminal. The installer links the skill into ~/.claude/skills/roblox-monetize (a junction on Windows, no admin needed) and runs a self-test. Restart Claude Code afterwards so it picks up the skill.
One-time setup: API key
Go to create.roblox.com, then Open Cloud > API Keys > Create API Key.
Under Access Permissions, add:
game-passes, with operations read and write, for your experience
developer-products, with operations read and write, for your experience
Under Accepted IP Addresses, enter
0.0.0.0/0(any IP) or your own IP.Save, then copy the key.
With the key still on your clipboard, run:
# Windows (PowerShell)
node "$HOME\.claude\skills\roblox-monetize\scripts\monetize.mjs" set-key# macOS / Linux
node ~/.claude/skills/roblox-monetize/scripts/monetize.mjs set-keyIt reads the key straight from the clipboard, so it never lands in a chat or your shell history. Piping also works: echo $KEY | node ... set-key.
The key is saved to ~/.config/roblox-monetize/api-key (on Windows %USERPROFILE%\.config\roblox-monetize\api-key) with owner-only permissions. You can also set it with the ROBLOX_API_KEY environment variable instead.
Check it works (the universe ID is the number in your Creator Hub URL: /experiences/<universeId>/):
node ~/.claude/skills/roblox-monetize/scripts/monetize.mjs check <universeId>Usage
With Claude
Open your game project in Claude Code and say something like:
set up monetization for this game: a 2x cash pass for 149 and a cash pack for 49
Claude finds your ID table, writes monetization.json, shows you a dry run, creates the items and fills in the IDs.
By hand
Make sure your config has a table with a zero for each item:
Config.Passes = {
DoubleCash = 0,
}
Config.Products = {
CashPack = 0,
}Create
monetization.json(seeexamples/monetization.json):
{
"universeId": 1234567890,
"configPath": "src/shared/Config.luau",
"items": [
{ "key": "DoubleCash", "kind": "pass", "name": "2x Cash", "price": 149, "description": "Every action pays double. Forever." },
{ "key": "CashPack", "kind": "product", "name": "Cash Pack", "price": 49, "description": "A big pile of cash, instantly." }
]
}Run it:
S=~/.claude/skills/roblox-monetize/scripts/monetize.mjs
node $S sync monetization.json --dry # preview
node $S sync monetization.json # create + write IDsResult:
Config.Passes = {
DoubleCash = 2070181984,
}Spec fields
Field | Required | Notes |
| yes | Experience (universe) ID, not the place ID |
| yes | Luau file holding the ID tables, relative to the spec |
| no | Default |
| no | Default |
| yes | Key inside the table, e.g. |
| yes |
|
| yes | Shown in the purchase prompt |
| yes | Whole Robux, 1 or more |
| no | |
| no | PNG/JPG icon, relative to the spec |
All commands
node monetize.mjs set-key # save the key from the clipboard (or stdin)
node monetize.mjs check <universeId> # test the key
node monetize.mjs list <universeId> # list passes and products
node monetize.mjs sync <spec.json> [--dry] # create what's missing, write IDs
node monetize.mjs create-pass <universeId> "<name>" <price> ["desc"] [icon.png]
node monetize.mjs create-product <universeId> "<name>" <price> ["desc"] [icon.png]
node monetize.mjs selftest # offline testMCP tools (with --mcp)
list_monetization, create_game_pass, create_developer_product, sync_config.
Troubleshooting
Error | Fix |
| Do the one-time setup |
| The key was copied wrongly or revoked. Regenerate it and run |
| Edit the key: add read and write for both APIs, plus the IP list |
| Add |
| Rate limited. Retries happen automatically |
Why
Every Roblox dev has done this: make a pass in Creator Hub, copy the ID, paste it into Config.luau, repeat ten times, typo one, wonder why the purchase prompt is broken. This makes it one sentence to Claude, and it is safe to run again whenever you add items.
If it saved you time, a star helps other devs find it.
Notes
Purchases only work in the published game. Inside Studio they are free test purchases.
Paid random items (crates, loot boxes) must show their odds before purchase, and some regions block them. Check with
PolicyService:GetPolicyInfoForPlayerAsync.This tool uses Roblox's Open Cloud monetization endpoints, which Roblox marks as beta.
License
MIT © rpatty-dev
Available Tools
4 toolscreate_developer_productC
Create one developer product (for sale).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| price | Yes | ||
| imagePath | No | ||
| universeId | Yes | ||
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It indicates a creation operation and that the product is for sale, but says nothing about permissions, side effects, validation rules, or what happens on success or failure.
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 single sentence is concise and front-loaded, but its brevity reflects under-specification rather than efficient communication. For a five-parameter mutation, more structure and detail are needed.
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 definition is far too sparse for a creation tool with five parameters, no annotations, and no output schema. It leaves essential information about parameters, behavior, and usage entirely unaddressed.
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 does not explain any of the five parameters. Required fields like universeId and price, and optional fields like imagePath and description, are left entirely to the bare 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 a specific verb and resource: create a developer product. It is clear what the tool does, though it does not explicitly distinguish the tool from siblings like create_game_pass beyond the resource name.
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 create_game_pass or list_monetization. The parenthetical '(for sale)' is the only contextual hint, and no prerequisites or exclusions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_game_passC
Create one game pass (for sale).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| price | Yes | ||
| imagePath | No | ||
| universeId | Yes | ||
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full behavioral burden, yet it only hints that the pass is purchasable ("for sale"). It says nothing about required permissions, whether the pass goes live immediately, whether creation is idempotent, or what is returned — significant gaps for a mutation 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?
The single short sentence is front-loaded and free of padding, but it is under-specified rather than concise — brevity here costs information rather than saving it.
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 5-parameter mutation tool with no annotations, no output schema, and zero schema description coverage, one sentence is far from sufficient. An agent cannot tell what a valid call requires beyond the field names or what happens after creation.
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% across 5 parameters, so the description should compensate, but it adds no meaning for universeId, price, imagePath, or description. The only hint is that price relates to sale, which is already obvious from the parameter name and minimum constraint.
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 gives a clear verb+resource ("Create one game pass") which is understandable on its own, but it does nothing to differentiate from the sibling create_developer_product, and the parenthetical "(for sale)" is ambiguous rather than clarifying scope.
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 create_developer_product or list_monetization, no prerequisites, and no stated alternatives. The agent must infer everything from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_monetizationB
List all game passes and developer products in a universe.
| Name | Required | Description | Default |
|---|---|---|---|
| universeId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full burden, and 'List all' at least implies a non-mutating, non-paginated full enumeration. However it never addresses authorization requirements, whether the two resource types come back merged or separately, or what an empty universe returns — meaningful gaps for a tool with zero annotation coverage.
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?
One sentence, front-loaded with the verb and scope, with no filler or redundancy. Nothing could be trimmed without losing meaning.
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 single-parameter read tool with no output schema, the definition is minimally adequate but leaves the agent guessing about the return shape (one combined list vs two separate collections) and about the required identifier's origin. Slightly more context would make it fully self-sufficient.
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%, so the single universeId parameter is documented nowhere. The phrase 'in a universe' loosely maps to universeId, but the description adds no format, range, or provenance guidance (e.g. where to obtain the ID) beyond what the property name already suggests.
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 specific verb (List) and two concrete resources (game passes, developer products) scoped to a universe, which is enough to distinguish it from the create_* siblings. It stops short of naming those siblings or contrasting behavior explicitly.
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?
Usage is only implied: the verb 'List' signals a read operation and the sibling names (create_game_pass, create_developer_product) make the read-vs-create split inferable. There is no explicit statement of when to prefer this tool, nor any precondition such as needing an existing universe or ownership permissions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sync_configB
Create any missing passes/products and write their IDs into the game's Luau config. Idempotent. Pass specPath (monetization.json) or the fields inline. Use dryRun first.
| Name | Required | Description | Default |
|---|---|---|---|
| items | No | ||
| dryRun | No | ||
| specPath | No | ||
| passTable | No | ||
| configPath | No | ||
| universeId | No | ||
| productTable | No |
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 key traits of idempotency and that it mutates the game's Luau config file, which is valuable. It omits what happens on partial failure, whether existing config content is preserved or overwritten, permission/auth requirements, and what is returned after creation.
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?
Short and front-loaded: the core action and idempotency come first, with the input-mode and dryRun notes following. Each sentence carries content, though the phrasing is clipped to the point of underspecifying the alternative input path.
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 7-parameter mutation tool with no annotations and no output schema, the description is thin: it never explains default config location, how items and specPath interact if both are given, or what the caller gets back after IDs are written.
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%, so the description must compensate, and it only covers specPath, dryRun, and vaguely "fields inline." Four parameters (passTable, productTable, configPath, universeId) and the required-key structure of items (key/kind/name/price) receive no explanation anywhere.
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 specific verbs and resources: create missing passes/products and write their IDs into the Luau config. This distinguishes it from the pure-creation siblings by its sync/ID-writeback scope, though it doesn't explicitly name create_game_pass or create_developer_product as the single-item alternatives.
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 a useful operating hint ("Use dryRun first") and a choice of input modes (specPath or inline fields), but never states when to prefer this bulk sync over the sibling create_game_pass/create_developer_product tools, or what preconditions (e.g., existing config file) are needed.
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.
4 tool updates
v0.1.0- First observed
create_developer_product - First observed
create_game_pass - First observed
list_monetization - First observed
sync_config
TDQS
Scored across 4 tools
List vs. create vs. sync are clearly distinct actions on the monetization domain. The one soft overlap is that sync_config also creates missing passes/products, so an agent must decide between the single-item create tools and the bulk idempotent sync, though the description's emphasis on config writing and dryRun helps differentiate them.
All four tools follow a consistent verb_noun snake_case pattern: list_monetization, create_game_pass, create_developer_product, sync_config. The naming is predictable and readable throughout.
Four tools is well-scoped for a narrow monetization-management server: one read, two granular writes, and one bulk sync. Each tool earns its place without bloat.
The surface covers listing and creation (both individually and via idempotent sync), but there is no update or delete operation for game passes or developer products, and no way to fetch or inspect a single item's details. These are notable lifecycle gaps that could leave agents unable to modify or remove existing monetization items.
Maintenance
Related MCP Connectors
Autonomous AI agent selling pay-per-call skills settled with x402 micropayments (USDC).
Optionality — AI-judged options trading drill, Tollbooth-monetized MCP server
Game-design skills for AI agents: describe a problem, get the right skill. Plus free sound effects.
Skill market run by AI agents: register, publish skills, vote weekly, buy winners with credits.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to interact with Roblox Studio in real-time, allowing creation and manipulation of game objects through natural language commands via an HTTP-based plugin system.3Apache 2.0
- FlicenseBqualityNot gradedmaintenanceBridges AI assistants with Roblox game environments in real-time via a Lua client and WebSocket connection. Enables AI tools like Claude to navigate instances, execute scripts, monitor remote events, and interact with the Roblox API through natural language.13-
- FlicenseNot gradedqualityCmaintenanceAI-driven dashboard for Roblox games that enables AI assistants to communicate with Roblox games in real time through MCP integration.-
- AlicenseAqualityBmaintenanceA local MCP server that lets AI agents manage Roblox developer products and game passes through the Open Cloud API.1232 npmMIT