SpicyGen
AI adult image, character and movie generator (18+). Create reusable characters, generate images and videos, build multi-scene movies, manage the library and buy credits, all from your AI agent. 16 tools over MCP plus a REST mirror. Credit-spending tools ask the human to approve in chat first.
Hosted MCP Server
npx add-mcp 'https://www.spicygen.ai/api/mcp'Installs into Claude Code, Codex, Cursor and more
Documentation
SpicyGen for AI agents
An MCP server and a REST API let Claude Code, Cursor, Codex, Claude Desktop and any agent that speaks Streamable HTTP or plain HTTP work with a SpicyGen account: create characters, generate images and videos, build movies, manage the library and fetch a checkout link. The same moderation, credit, suspension and age-gate checks as the website apply to every call.
1. Create an API key
Sign in at https://www.spicygen.ai/login (or sign up at https://www.spicygen.ai/signup and confirm your email), open https://www.spicygen.ai/account#api-keys, and create a key. Keys look like sg_live_…, are shown once, and can be revoked at any time. Tick Sandbox to get a sg_sandbox_… key that answers every tool from fixture data and spends nothing.
2. Connect
Claude Code:
claude mcp add --transport http spicygen https://www.spicygen.ai/api/mcp --header "Authorization: Bearer sg_live_…"
Cursor (~/.cursor/mcp.json or .cursor/mcp.json):
{ "mcpServers": { "spicygen": { "url": "https://www.spicygen.ai/api/mcp", "headers": { "Authorization": "Bearer sg_live_…" } } } }
Codex (~/.codex/config.toml):
[mcp_servers.spicygen]
url = "https://www.spicygen.ai/api/mcp"
http_headers = { Authorization = "Bearer sg_live_…" }
Claude Desktop and other stdio-only clients bridge through mcp-remote:
{ "mcpServers": { "spicygen": { "command": "npx", "args": ["-y", "mcp-remote", "https://www.spicygen.ai/api/mcp", "--header", "Authorization: Bearer sg_live_…"] } } }
REST instead of MCP: POST https://www.spicygen.ai/api/v1/tools/{tool_name} with the same header and a JSON body of arguments. GET https://www.spicygen.ai/api/v1/tools lists the tools with schemas. OpenAPI 3.1: https://www.spicygen.ai/openapi.json.
3. Ask your agent something
"Create a character called Mara, a woman in her thirties with dark curly hair and freckles, then generate four photorealistic images of her on a beach." The agent calls read_content_rules, create_character, waits for get_character to say ready, then generate_images and get_job.
Rules the surface enforces
- Every prompt goes through the same moderation as the website (see https://www.spicygen.ai/ai-policy). A blocked prompt costs nothing but counts as a strike.
- Credit-spending tools (
create_character,generate_images,generate_video,create_movie_scene) anddelete_itemreturnapproval_requiredwith the credit cost first. The agent shows it, the user says yes, the agent calls again with the token (15 minute expiry, bound to the exact arguments). Accounts can skip approvals from the API keys card; nothing else changes. - Age verification: where the law requires it, NSFW media URLs are withheld until the user has completed the one-time check;
get_accountreports the state and the verification URL. - Rate limit 60 requests per minute per key. Ten active keys per account.
- Payment is always a hosted checkout URL the human opens; the agent never handles card details.
Skills
SKILL.md files that hold the whole workflow for one job (tool calls in order, costs, the approval rule): https://www.spicygen.ai/skills/index.json. Install into .claude/skills/<name>/SKILL.md or point your harness at the raw URL. Source: https://github.com/Wayfinity/spicygen-skills.
Tool reference
Account and rules
get_account: Start here. Credits balance, age-verification state for the caller's jurisdiction (whether NSFW media is available, and the verification URL when it is not), credit costs per image, per video second and per character, rate limits, and whether the account skips approvals.read_content_rules: The acceptable-use rules every prompt and image is checked against (adults only, fictional characters only, no real people, no minors, no non-consent, no violence). Read this before writing prompts; a blocked prompt costs nothing but counts toward the account's moderation strikes.get_credit_packs: Credit packs and prices available to this account (regional packs where they apply), with what each pack buys in images and video seconds.get_checkout_link: A hosted checkout URL for a credit pack. Hand the URL to the user; they pay in their browser (card, local methods or crypto depending on region). Never ask for or enter card details. Credits land in the account when the provider confirms; get_account shows the new balance.get_referral_stats: The user's referral code and link, referred signups, clicks and credits earned. Affiliate program payouts (Tapfiliate) are read in the affiliate dashboard, not here.
Characters
list_characters: The user's saved characters (id, name, appearance, style, status, thumbnail). Use a character id in generate_images, generate_video and create_movie_scene for a consistent identity.get_character: One character with its recent generations (images and videos). NSFW media URLs are withheld when the account's jurisdiction requires age verification the user has not completed.create_character(guarded): Create a reusable character from a text description (10 credits). Generates the identity image; poll get_character until status is ready (about a minute). The description goes through the same prompt moderation as the website.
Generation
generate_images(guarded): Generate 1 to 10 images from a prompt (5 credits each Standard, 10 HD; a character reference forces HD). Returns job ids; poll get_job. Prompts are moderated exactly as on the website; call read_content_rules first.generate_video(guarded): Turn a library image (source_item_id) or a character (character_id) into a video with a motion prompt. Costs 10 to 20 credits per second depending on quality and model (see get_account.costs). Returns a job id; poll get_job (videos take a few minutes).create_movie_scene(guarded): Add a scene to a movie and start generating it on SpicyMotion v3.0 Fast (HD, audio). Omit movie_id to start a new movie; the first scene needs a source_item_id or character_id, later scenes continue from the previous scene's last frame. Costs 20 credits per second. Poll get_job with the returned job id; when it completes, call create_movie_scene again for the next scene, then combine_movie.combine_movie(guarded): Stitch a movie's completed scenes into one video (no credits, but it renders on the server and is guarded so the user confirms the cut). Returns the movie URL.get_job: Status of a generation job (queued, generating, completed, failed), progress, and on completion the image or video URLs (withheld with nsfw_withheld:true when the age gate applies). Poll every 10 to 20 seconds.
Library
list_library: The user's generated images and videos, newest first, with prompt, status, favourite flag and URLs (NSFW withheld when the age gate applies). Paginate with cursor.favorite_item: Mark or unmark a library item as a favourite.delete_item(guarded): Delete a library image or video. Irreversible; guarded so the user confirms.
Costs
- Character: 10 credits (one identity image, reusable in every later generation).
- Image: 5 credits Standard, 10 credits HD (a character reference is always HD).
- Video, SpicyMotion v3.0: 10 credits per second Standard, 15 HD, 3 to 15 seconds.
- Video, SpicyMotion v3.0 Fast (native audio, up to 30 seconds): 15 credits per second Standard, 20 HD. Movie scenes use this model in HD.