- The web wrapper studio — a visual editor on the ModelRunner site. Best when you want to see your schema, template, and a live preview as you build.
- Your AI assistant over MCP — describe what you want in chat and let the assistant draft, preview, and publish it. Best when you’d rather not hand-build the schema and mappings.
In the web wrapper studio
Sign in and open Dashboard → Settings → Wrappers to see the wrappers you own and create new ones. The studio is a guided form — you don’t hand-write JSON. It gives you:- a visual schema builder to add input fields with their types, enums, and defaults — no JSON Schema by hand;
- a prompt template editor for the Handlebars recipe;
- a base model picker with a per-model field-mappings editor to map your inputs onto each model;
- a live preview that renders your template and the resulting base-model input as you edit;
- metadata — display name, a URL-safe
aliaswith a live availability check, category, a Markdown description, a thumbnail, and tags; - visibility (private / unlisted / public) and status (draft / published) controls.
The studio UI evolves, so we don’t document it screen by screen — but the concepts are identical to the API-level example below, and the prompt templates and field mappings references apply equally to both paths.
Building with an AI assistant
The rest of this page builds a wrapper end to end from an AI assistant connected to the MCP server — the most reproducible path. The assistant reads the base model, drafts the wrapper, dry-runs the transform, and publishes it, all from chat.The tools your assistant uses
Once the MCP server is connected, these wrapper tools are available:| Tool | What it does |
|---|---|
wrapper_authoring_guide | Returns the canonical authoring rulebook. Your assistant reads this before drafting. |
get_wrapper / list_wrappers / recommended_wrappers | Inspect existing wrappers for reference. |
get_model / get_model_raw_schema | Read the base model’s input fields — you need these to write field mappings. |
preview_wrapper | Dry-run the prompt template + mappings against a sample input. No wrapper is created. |
create_wrapper | Create a wrapper you own. Defaults to visibility: private, status: draft. |
patch_wrapper / delete_wrapper | Update or remove one of your wrappers. |
Worked example: a “cinematic portrait” generator
We’ll build a text-to-image wrapper that takes a subject and a mood, and turns them into a polished cinematic prompt for an image model. Caller-facing, it’s two fields. Behind the scenes, it bakes in lighting language, locks the output format, and applies a fixed quality.Pick a base model and read its inputs
Ask your assistant for a base model, then inspect its schema:You’re looking for the field names the model accepts — e.g.
prompt, num_outputs, output_format. Your field mappings have to produce exactly those keys, so this step is not optional.Let the assistant load the authoring guide
Design the wrapper
The assistant proposes a wrapper definition. For our example it looks like this:Three design moves are worth noting:
subjectandmoodare the only fields the caller sees. Everything else — quality, count, format — is decided for them.- The template rewrites
moodinto rich lighting language via a lookup map, then assembles the finalprompt. - The mappings force
num_outputsandoutput_formatwithstaticValues, andomitthe now-consumedmoodfield so it never reaches the base model.
Preview the transformation
Before creating anything, dry-run it:The preview shows the rendered prompt and the final base-model input:
Preview validates rendering — the template, presets, renames, and omits. It does not guarantee every produced key is accepted by the base model; that’s checked when you create. Treat preview as your fast feedback loop, not the final word.
Create it
yourname/cinematic-portrait for testing.Test, iterate, publish
Call your wrapper like any model (see calling a wrapper), refine with
patch_wrapper, then flip visibility to public and status to published when it’s ready:Choosing what to expose
The wrapper schema is your public contract — keep it small and stable. A useful rule of thumb when deciding where each setting goes:| Question | Goes in |
|---|---|
| Should the user control it? | The schema (exposed input field) |
| Should it be fixed and hidden? | fieldMappings.staticValues |
| Is it derived from other inputs? | The promptTemplate |
| Does it just need a name change for the model? | fieldMappings.renames |
| Should one friendly choice expand into several model fields? | fieldMappings.presets |
| Is it a helper field that shouldn’t reach the model? | fieldMappings.omit |
Where to go next
Prompt templates
The full set of Handlebars helpers, lookup maps, and constraints.
Switching base models
Add a second model and let callers choose at request time.

