creator-kit
Leverages Cloudflare Workers AI to generate images from text prompts and synthesize speech from text, with configurable AI Gateway inference and selectable models.
Click on "Deploy 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., "@creator-kitGenerate an image of a futuristic city skyline at night."
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.
creator-kit
An MCP server on Cloudflare Workers that turns a prompt into an image and text into speech, using Workers AI.
A model most often stores what it made and answers with a presigned link that stands for about a day, and the reply hands that link on as given, or a link to the deployment's own copy where it keeps one — as a resource link, as structured content, and as text, because a different reader needs each one. Nothing generated passes through the Worker to do that; it does only where a deployment asks for backups, and then each file streams through on its way to that deployment's own bucket. Audio a model hands over in its answer instead has no link of its own, so only a deployment keeping copies can hand it on, through the link to its copy.
Tools
create_image
Generate an image from a prompt.
Argument | Default | Accepts |
| — | What the image should show. Required. |
|
|
|
| the model's own |
|
| the model's own |
|
|
|
|
|
|
|
| the model's own |
|
| the time of day alone | What to call this file where the deployment keeps copies, and offered only there. Up to 64 characters, and no slashes |
Google's tiers run google/nano-banana-pro, google/nano-banana-2, then
google/nano-banana-2.1 and google/nano-banana-2-lite from dearest to
cheapest; of the last two, only google/nano-banana-2.1 generates above 1K.
Of the GPT Image models, openai/gpt-image-2.5-flare is the faster and
openai/gpt-image-2.5-sunburst the more capable. What each costs on an account is on the Cloudflare dashboard.
create_audio
Speak text aloud with a text-to-speech model.
Argument | Default | Accepts |
| — | What should be spoken, word for word. Required. How a model can be steered through it is in the guides |
|
|
|
| the model's own |
|
| the model's own |
|
| the model's own |
|
| the time of day alone | What to call this file where the deployment keeps copies, and offered only there. Up to 64 characters, and no slashes |
google/gemini-3.8-flash-lite-tts speaks Mandarin closest to how people in
Taiwan do, and google/gemini-3.8-flash-tts pronounces most exactly at a higher
price. openai/tts-1 is charged by the character where the Gemini models are
charged by the second, so it is the cheapest for Chinese. The Gemini models
only ever hand their audio over in the answer, so they are offered only where a
copy can be kept to link to it.
An argument is named for what the caller is choosing, never for what one model happens to call it; each model is asked in its own words at the moment the request is made. A request the chosen model cannot honour is refused before it is sent, and the refusal names what would let the call through.
read_guide
Read how to use the other tools beyond what their own descriptions say.
Argument | Default | Accepts |
| — |
|
A tool's description is read on every listing, so it holds only what every call
needs; longer know-how lives in guides, read on asking the way an agent skill
is. Each guide is a Markdown file in src/guides/ whose front matter gives its
name and one line on what it is for — the line the tool lists it by. Adding one
is that file and an import in src/guide.ts. A guide says what was heard to
work, and where that rests on behaviour a provider does not document.
Related MCP server: Cloudinary Media Generation MCP Server
Requirements
Node.js 24 and pnpm (the version is pinned by
packageManager)A Cloudflare account with Workers AI and R2 — the bucket backups go in is created by the first deploy, so nothing has to be made by hand
Getting started
git clone git@github.com:elct9620/creator-mcp.git
cd creator-mcp
pnpm install
cp .dev.vars.example .dev.vars
pnpm devThe endpoint is then at http://localhost:8787/mcp, speaking Streamable HTTP.
Workers AI has no local simulation: every call wrangler dev makes reaches the
account and is billed. The test suite closes remote bindings off and injects a
fake AI instead, so pnpm test:run costs nothing.
Configuration
Name | Where | Purpose |
| a secret; | The AI Gateway inference is reached through, which decides how it is billed and rate limited. Leave it unset and the account's default gateway answers. |
| a secret; | Whether a generated file is copied into the bucket as well as linked. Only |
| a secret; | The account and an R2 API token, which sign the link to a copy. Object Read only, scoped to this bucket, is enough: writes go through the binding. |
| a secret; | The bucket |
| a secret; | The time zone the date in a backup's path is read in, as an IANA name such as |
wrangler.jsonc deliberately declares none of these: a var of the same name is
uploaded over the secret on every deploy. Set each with
wrangler secret put <NAME>, and env.d.ts is what types them.
Access
Cloudflare Access is attached to the Worker rather than to a hostname, so every
way in is covered by the one application. The /mcp endpoint answers 401 to any
request Access did not match, which is what makes Managed OAuth safe to enable
in front of it. Locally, the access.dev block in wrangler.jsonc stands in
for one.
Address | Open | Why |
Custom Domain, routes | yes | Where callers reach the server |
Preview URLs | yes | Created per version by the platform |
| no | Nothing reaches the server through it, and |
Backup
A model's link stands for about a day, and audio a model hands over in its
answer has no link at all. A deployment that wants what was generated to outlive that sets
BACKUP to yes, and every generated file is copied into its bucket on the way
out; the reply then links to the copy, presigned for a day through R2's S3 API.
Signing takes an R2 API token and the bucket's name, which the binding cannot
say: the first deploy names it after the Worker as the dashboard names it, so
it is usually <Worker name>-bucket. Without all
four signing secrets nothing is copied. A copy that cannot be made says why in
the log and leaves the model's own link in the reply, because the caller has
already paid for the generation; audio handed over has no such link, so that
call fails instead.
Part of | What it holds |
| One prefix, so whatever the bucket comes to hold besides copies can still say what it is |
| The first sixteen hex digits of the SHA-256 of the caller's Access email address |
| The caller's day, read in the zone |
| The time of day, four random characters, and the encoding the file was really stored in |
How long copies are kept is the bucket's answer rather than this Worker's. One object lifecycle rule on the bucket deletes everything past the age you name — the date in the path is there for a person browsing, not for that rule, which reads an object's own age instead.
Development
Command | Purpose |
| Local development |
| Run the tests once — |
| Format the working tree |
| Regenerate |
| Publish from a working copy |
| Check the source against |
.spec/ is where this project's vocabulary and behaviour are settled, and
sumi checks the source against it.
Read it before changing behaviour, and record a decision there rather than only
in code. CI runs formatting, both TypeScript projects, the tests and sumi verify on every push and pull request.
Deployment happens through Cloudflare Workers Builds when main moves, so
there is no deploy workflow in this repository.
License
This server cannot be deployed
Maintenance
Related MCP Connectors
Generate reproducible image, video, and audio assets with leading models and your own provider keys.
- Flux AIOAuthart.fluxaipro
Generate images, videos and music with model discovery, cost estimates and asynchronous results.
Generate images, videos, voiceovers, and captions from a chat prompt.
Image, video, music and text generation across 100+ models through one endpoint.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to generate images using Cloudflare Workers AI models directly through the Model Context Protocol. It supports various models like Flux and Stable Diffusion, providing seamless image generation and storage via Cloudflare R2.7Apache 2.0
- AlicenseNot gradedqualityCmaintenanceEnables generating images from text prompts using various AI models (FLUX, Recraft, GPT Image, etc.) and automatically delivering them through Cloudinary's platform.348 npmMIT
- AlicenseNot gradedqualityDmaintenanceProvides image generation tools powered by OpenRouter, running on Cloudflare Workers.19 npmMIT
- FlicenseNot gradedqualityCmaintenanceGenerates images and videos from text prompts using Cloudflare Workers AI and Google Gemini models.-