Why there is no registration tool
The MCP server exposes read-only discovery tools and nothing that writes. API keys are read-only credentials that travel into third-party hosts and prompt-injectable contexts, so a write requires your authenticated session in the app. An agent that looks for a registration tool will not find one, andget_authoring_guide tells it so. The execute scope lets a widget run http actions; it does not let anyone write. See Trust model and Keys and scopes.
What the agent reads
The guide is derived from the live validators when it is called: reserved kinds from the catalog, limits from the store defaults, tokens from the registry, patterns from the validators’ own constants. It cannot drift from what the store will accept. Catalogs are per key and change between calls, so the agent should call
list_widgets fresh rather than answer from an earlier listing. The tools are described in MCP tools.
The workflow
1
Connect a host with your key
Register the server in your MCP host with one of your API keys; a read-only key is enough for drafting. See Connect a host.
2
Ask for a draft
Describe the widget, theme or schema you want. A prompt that names the tools works well:
3
Review the JSON
You receive one object in the shape the store persists:
{ kind, template, descriptor } for a widget, { name, label?, description?, tokens } for a theme, { name, label?, description?, schema } for a shared schema, { name, label?, description?, definition } for an action.4
Import in the matching section
Sign in at widgentic.dev and open Widgets, Themes, Data schemas or Actions. Each designer has an Import section before its Export section. Import treats the JSON as untrusted: it re-validates everything and, if the entry fails, shows the structured errors and leaves your current draft untouched. With a valid import, check the preview against your own sample data and themes.
5
Save
Save to my catalog writes the entry through your session. It appears in your MCP catalog on the next tool call made with your key, with no further step. An http action must pass a Test call before it can be saved.
When a widget references a shared schema, import and save the schema first. The
dataSchemaRef is validated against your saved schemas when the widget is saved. See Data schemas.What a good draft looks like
The guide steers the agent toward these, and they are what to look for in review:- A kind that does not collide. Built-in kinds are reserved, and existing kinds come from
list_widgets. - Bindings on schema-declared properties. Schema-declared data fails fast with dotted paths;
$meta.*is outside schema validation, so a heading belongs in the schema as an optionaltitle. - A
dataExamplethat validates. The designer cross-checks it against the schema and uses it as preview data. - A reference, not a copy, of a saved schema. A reconstructed inline schema forks the moment you edit the shared one.
- Styles on
.wg-selectors usingvar(--wg-<token>). Themes then restyle the widget; customx-*variables get a fallback. - A theme delivered as an importable entry. An inline token map passed to
render_widgetstyles one render; the entry is what you save.
Actions drafted by an agent
The guide documents the action vocabulary too. Inlineaction bindings arrive inside the widget template and import with it; a shared action arrives as its own entry for the Actions section. An http action still has to pass the Test call before Save is available, a prompt action asks you to acknowledge that the proposed message is your responsibility, and any { "secret": "<name>" } the definition references must already exist in Secrets. See Actions and secrets.
After saving
The agent sees the result on its next call:list_widgets lists the new kind with its descriptor, render_widget renders it, and a saved theme resolves by name. Two tails on render_widget output help the agent correct itself without your involvement: Hint notes: for misaimed hints and Action notes: for what the widget’s buttons do and why any are disabled.