Edit design and optional features with a typed settings contract
Use these tools when an AI client needs to change POM colours, typography, header, footer, cookies or contact dock. POM Theme must be active. Connect through POM AI → Settings → MCP, choose your authentication method and enable Allow POM Theme writes. The connected WordPress user needs manage_options; OAuth grants need mcp:write and pom_theme:write. Reading contracts requires edit_theme_options and the corresponding read scopes.
Read, preview and apply
- Call
pom_theme_get_settings_catalog. It lists the groups registered on this site, their activation state and the operation used to edit them. - Call
pom_theme_get_setting_contractwith asettingfrom that catalog. The response includesfields,values,enabledandrevision. Each field describes its input schema, choices, dependencies and whether it is readable or writable. - Call
pom_theme_patch_settingswith the group, a partialvaluesobject anddry_run: true. For an optional group, you can also supplyenabled: trueorfalse. - Review the returned
before,afterand activation change. Apply the same arguments withdry_run: falseandexpected_revisioncopied from the preview. - Read the contract again. Refresh discovery after activating a feature or changing a layout: available fields, reusable blocks, locations and choices can change on the next request.
- Run
pom_theme_generate_assetswhen the site's configuration is assembled, then inspect the actual frontend at desktop and mobile widths.
{
"setting": "header_settings",
"values": {"pom_header_sticky": "yes", "pom_header_padding": 18},
"dry_run": true
}
Use the returned revision rather than copying a revision from another site. A stale revision is refused before the patch is saved. Unspecified top-level fields and unrelated groups are preserved.
Repeaters and fonts
A repeater is a plain array of rows. Every row needs a stable repeater_identifier. Supply child fields directly, using their discovered schemas; do not send filesystem paths or storage wrappers. The supplied array replaces the row collection, so include every row you want to keep. Matching row identifiers preserve omitted child values and server-owned metadata. Omitted rows are removed. Defaults and newly added rows retain their native groups, which can affect ordering between those groups.
Nested repeaters are supported up to the advertised limits. Font families use the framework's native family and variant definitions. Multiple selections use arrays; toggles use "yes" or "no". Numeric fields use numbers.
HTML and rich text are accepted as content, sanitized and saved as managed assets when applied. Preview does not create those content files. Keep old source assets until you have finished reviewing and recovering changes.
Dedicated operations and limits
Custom post types, taxonomies, fields and templates use the content model tools. Queries and filters use the listing tools. CSS retains its dedicated operations.
Password, credential, JavaScript and non-editable fields are excluded. Fields backed by native options or theme modifications may be read-only here. Always follow the returned field policy; a group appearing in the catalog does not grant unrestricted access to its contents. The older pom_theme_update_setting allowlist remains separate.
Each request is limited to 512 KiB of JSON and 100 top-level values. A patch can involve multiple managed files and theme save hooks; it is not a database transaction. If a write fails after execution starts, inspect the current values before retrying. Site plans retain previews and execution receipts across requests.
If a field or group is missing, refresh the catalog after activating its parent feature. If a write is denied, check the field policy, WordPress capabilities, OAuth scopes and MCP write gate. If the frontend is unchanged, regenerate assets and clear the site's caches.