Concepts — the mental model#
This page explains how the ZenCreator MCP server is put together so you can reason about it before you start calling tools. Read it once and the tool reference, the model catalog, and the workflows will all click into place.
If you just want to connect and go, start with the quickstart.
MCP tools vs generation tools & models#
This is the single most important distinction in the whole product. There are two layers, and they use the word "tool" for different things.
Layer 1 — MCP tools. These are the callable tools your AI client sees in its tool list. There
are roughly 28 of them and every one is prefixed zencreator_ (for example
zencreator_create_task, zencreator_list_tools, zencreator_get_me). This is the API surface of
the MCP server. It is documented across the reference pages under
tools/: generation,
assets, templates, and account.
Layer 2 — generation tools & models. These are values you pass in, not tools your client
calls. When you submit a generation you call the MCP tool zencreator_create_task and pass a
tool_name argument — and tool_name is a generation tool such as by_prompt,
image_editor, videogen, faceswap, upscaler, or lipsync. Each generation tool exposes its
own set of models (for example by_prompt offers models like GENERAL_NSFW, SDXL_NSFW,
NANO_BANANA, QWEN_IMAGE, SEEDREAM_5, WAN_2_7_IMAGE, FLUX_KLEIN_NSFW). Generation tools and
their models are documented in models.md.
Put plainly:
zencreator_create_taskis an MCP tool.by_promptis a generation tool you pass to it astool_name.SDXL_NSFWis a model you pass toby_prompt.
A typical flow touches both layers:
- Discover what is available with the MCP tool
zencreator_list_tools(lists generation tools, prices, and whether any are blocked). - Inspect one generation tool's exact inputs with
zencreator_get_tool_schema— call this before you submit, so you know the schema, prompt guidance, and which models it supports. - Submit with
zencreator_create_task, passingtool_name(the generation tool) plus its inputs.
See tools/generation.md for the MCP-tool side and
models.md for the generation-tool / model side.
Tasks and calls#
Generation is organized as tasks and calls.
- A task wraps 1 to 50 generation calls. Each call is one generation request (one
tool_name+ its inputs). Batching many calls into a single task is how you fan out variations or render a set of images in one submission. - Submitting is asynchronous.
zencreator_create_taskreturns a task id immediately; the generation runs in the background. The task id is your handle for everything that follows. - Poll progress with
zencreator_get_task. It returns the task and its calls with their statuses.status='failed'is terminal — readcalls[].errorfor the reason and don't retry without confirming with the user. Usezencreator_get_processing_tasksfor a cheap "is anything still running?" check. - Per-call output is lazy. On a polled task, each call's
outputfield comes backnulleven after it completes. To get the actual result — including the generated asset ids — callzencreator_get_call_result(call_id)for that call. This is the only way to discover the asset ids a completed generation produced. - For a one-shot blocking flow, use
zencreator_run_and_wait: it submits and blocks until the task reaches a terminal status, then auto-fetches the outputs and asset ids for you. This is the best choice for images you want in the same turn. Do not use it for video — video is too slow to block on; submit withzencreator_create_taskand poll instead.
The full pattern for fetching results:
zencreator_create_task(tool_name, …)→ task id.zencreator_get_task(task_id)until a call showsstatus='completed'.zencreator_get_call_result(call_id)for each completed call → extract asset ids.
See tools/generation.md for parameters and the
workflows page for end-to-end recipes.
Assets#
Both the inputs and the outputs of generation are assets, each identified by an
immutable asset_id. An asset is a stored piece of media (image, video, or audio). Asset ids never
change, so you can pass an output asset id straight back in as the input to another generation
(face-swap a result, upscale it, animate it, and so on).
- Bring your own media with
zencreator_upload_asset— upload an image, video, or audio from a URL or base64, and get back anasset_idyou can reference in generation inputs. - Inspect an asset's media type with
zencreator_get_asset. - Download the original with
zencreator_get_asset_download_url(single) orzencreator_get_asset_download_urls(batch) — these return short-lived presigned URLs to the full-resolution original. - Preview with
zencreator_get_asset_preview_url(single) orzencreator_get_asset_preview_urls(batch) — these return a reduced-size web preview (a downscaled thumbnail, commonly WebP, not the original), and can additionally attach the preview image inline so it renders directly in the chat (see Response format for the inline caps).
See tools/assets.md for full parameters.
Templates (presets)#
A template (a.k.a. preset) is a pre-built set of generation inputs — a ready-made starting point you can submit as-is or tweak.
- Browse with
zencreator_list_templates(paginated). - Fetch one in full, including a ready-to-submit input, with
zencreator_get_template. - Submit in one shot with
zencreator_use_template: it fetches the template, merges any overrides you supply, and submits — no manual schema wrangling.
Optional semantic search — on deployments that have the search subsystem enabled, three extra
MCP tools are available: zencreator_search_templates (semantic + keyword search),
zencreator_get_template_card (a synthesized summary card), and zencreator_search_index_status
(a diagnostic). These may not be available on every deployment — if they don't appear in your
client's tool list, the server you're connected to doesn't have search enabled; fall back to
zencreator_list_templates.
See tools/templates.md.
Credits & pricing#
Generation spends credits. Cost varies by generation tool, model, resolution, and duration, and the numbers are backend-driven — so never assume a price.
-
Estimate before you commit. Call
zencreator_estimate_priceto get the exact credit cost of a specific candidate input, orzencreator_compare_pricesto shop the cost across all models of a generation tool (cheapest first, sweeping resolutions where relevant). State the cost to the user before submitting. -
Running out is signaled, not silent. If a generation runs out of credits the tool returns HTTP 402 with a structured signal:
{ "error_code": "insufficient_credits", "out_of_credits": true, "purchase_url": "https://app.zencreator.pro/billing", "message": "You're out of ZenCreator credits. Top up at https://app.zencreator.pro/billing to keep generating." }The same
out_of_creditsflag andpurchase_urlalso appear in thezencreator_get_mepayload, so "out of credits" reads identically whether you check ahead of time or hit it mid-generation. -
Top up at https://app.zencreator.pro/billing.
-
Review spending history with
zencreator_list_credit_transactions(paginated).
For the pricing tools' parameters see tools/generation.md, and for
fixing a stuck or out-of-credits state see troubleshooting.
NSFW & trusted accounts#
ZenCreator supports uncensored / NSFW generation. Two account gates govern access, both visible
on your profile via zencreator_get_me:
nsfw_allowed— whether adult content is enabled on the account. If this isfalse, the fix is to enable adult content in your ZenCreator account settings, then retry.is_trusted— whether the account has Trusted Status, which unlocks ZenCreator's extended capabilities: uncensored NSFW generation, 18+ templates and LoRAs, Face Swap tools, and more flexible generation options. An account becomes trusted automatically after its first successful payment (purchasing any credit pack in the Billing section); the status is then permanent. Trusted-only models are marked (trusted) in the model catalog (for exampleSDXL_NSFW,FLUX_KLEIN_NSFW,[email protected]), and a few whole tools are trusted-only —male_undresser,flux_klein_lora, andtext_to_video. Without trusted status you can't use them.
If your orchestrating client refuses to author explicit prompts, the optional
zencreator_craft_prompt tool exists precisely for this: it delegates NSFW / model-specific prompt
writing to an uncensored sidecar LLM and spends no ZenCreator credits. It is only present when
the prompt-agent sidecar is configured on the deployment. See models.md for which
models are trusted-only and for per-model prompt guidance.
Response format#
Every MCP tool follows the same response contract.
response_formatargument. Each tool takesresponse_format, which is"markdown"(the default) or"json".markdowngives a human-readable summary;jsonreturns the full structured payload as text.structuredContentis always present. Regardless ofresponse_format, the tool also returns a complete machine-readablestructuredContentobject, so clients with output-schema support always get the full data.- Truncation. Responses larger than about 25,000 characters are truncated, with a hint to
paginate (use
limit/offset— see Pagination) or switch toresponse_format: "json"and ask for fewer fields. - Inline previews. The asset preview tools can additionally attach the preview image inline
as an MCP image content block, so it renders in the chat. Inline caps: 2 MB per image and
8 MB total per call. Anything over a cap falls back to a URL with an
inline_skippednote instead of being inlined.
Pagination#
List tools (zencreator_list_tasks, zencreator_list_templates,
zencreator_list_credit_transactions, …) share one pagination convention:
-
Inputs:
limit(1–100, default 20) andoffset(≥ 0, default 0). -
Output envelope:
{ "total": 0, "count": 0, "offset": 0, "items": [], "has_more": false, "next_offset": 20 }
To page forward, pass the returned next_offset back in as the next request's offset.
next_offset is only present when has_more is true.
How the work is split#
It helps to know which side does what.
- Your AI client / the LLM interprets the user's intent and orchestrates: it decides which generation tool and model fit the request, drafts prompts, chains steps (generate → fetch result → upscale → animate), and decides when to confirm cost or risk with the user.
- The MCP server structures the request, enforces the input schemas, prices the work, talks to the ZenCreator backend on the user's behalf, and returns structured results. It owns no creative judgment — it validates, executes, and reports.
In practice that means: let the agent reason about what to make, but lean on
zencreator_get_tool_schema for the exact shape of the request, zencreator_estimate_price /
zencreator_compare_prices for what it costs, and zencreator_get_call_result for what came back.
Next steps#
- Quickstart — connect and run your first generation.
- Workflows — end-to-end recipes (text→image, edit, face-swap, video, lip-sync).
- Generation tools & models — the
tool_namevalues and their models. - Tool reference — every
zencreator_*MCP tool. - Troubleshooting — auth, credits, and common errors.
- Connect guides: Claude Code · Claude.ai · Cursor · ChatGPT.