@wootsup/yt-builder-mcp 1.1.0 → 1.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +56 -55
- package/manifest.json +15 -15
- package/package.json +2 -2
- package/skills/yt-builder-mcp/SKILL.md +130 -121
- package/dist/auth.d.ts +0 -119
- package/dist/auth.d.ts.map +0 -1
- package/dist/auth.js +0 -226
- package/dist/auth.js.map +0 -1
- package/dist/client.d.ts +0 -84
- package/dist/client.d.ts.map +0 -1
- package/dist/client.js +0 -151
- package/dist/client.js.map +0 -1
- package/dist/clients/claude-code.d.ts +0 -18
- package/dist/clients/claude-code.d.ts.map +0 -1
- package/dist/clients/claude-code.js +0 -53
- package/dist/clients/claude-code.js.map +0 -1
- package/dist/clients/claude-desktop.d.ts +0 -19
- package/dist/clients/claude-desktop.d.ts.map +0 -1
- package/dist/clients/claude-desktop.js +0 -56
- package/dist/clients/claude-desktop.js.map +0 -1
- package/dist/clients/cline.d.ts +0 -26
- package/dist/clients/cline.d.ts.map +0 -1
- package/dist/clients/cline.js +0 -80
- package/dist/clients/cline.js.map +0 -1
- package/dist/clients/codex-cli.d.ts +0 -42
- package/dist/clients/codex-cli.d.ts.map +0 -1
- package/dist/clients/codex-cli.js +0 -194
- package/dist/clients/codex-cli.js.map +0 -1
- package/dist/clients/continue.d.ts +0 -13
- package/dist/clients/continue.d.ts.map +0 -1
- package/dist/clients/continue.js +0 -52
- package/dist/clients/continue.js.map +0 -1
- package/dist/clients/cursor.d.ts +0 -12
- package/dist/clients/cursor.d.ts.map +0 -1
- package/dist/clients/cursor.js +0 -38
- package/dist/clients/cursor.js.map +0 -1
- package/dist/clients/gemini-cli.d.ts +0 -18
- package/dist/clients/gemini-cli.d.ts.map +0 -1
- package/dist/clients/gemini-cli.js +0 -44
- package/dist/clients/gemini-cli.js.map +0 -1
- package/dist/clients/home.d.ts +0 -14
- package/dist/clients/home.d.ts.map +0 -1
- package/dist/clients/home.js +0 -20
- package/dist/clients/home.js.map +0 -1
- package/dist/clients/index.d.ts +0 -52
- package/dist/clients/index.d.ts.map +0 -1
- package/dist/clients/index.js +0 -72
- package/dist/clients/index.js.map +0 -1
- package/dist/clients/roo-code.d.ts +0 -23
- package/dist/clients/roo-code.d.ts.map +0 -1
- package/dist/clients/roo-code.js +0 -69
- package/dist/clients/roo-code.js.map +0 -1
- package/dist/clients/zed.d.ts +0 -12
- package/dist/clients/zed.d.ts.map +0 -1
- package/dist/clients/zed.js +0 -41
- package/dist/clients/zed.js.map +0 -1
- package/dist/errors/hints.d.ts +0 -51
- package/dist/errors/hints.d.ts.map +0 -1
- package/dist/errors/hints.js +0 -95
- package/dist/errors/hints.js.map +0 -1
- package/dist/errors/mask.d.ts +0 -35
- package/dist/errors/mask.d.ts.map +0 -1
- package/dist/errors/mask.js +0 -49
- package/dist/errors/mask.js.map +0 -1
- package/dist/errors/sanitize.d.ts +0 -31
- package/dist/errors/sanitize.d.ts.map +0 -1
- package/dist/errors/sanitize.js +0 -100
- package/dist/errors/sanitize.js.map +0 -1
- package/dist/errors.d.ts +0 -42
- package/dist/errors.d.ts.map +0 -1
- package/dist/errors.js +0 -61
- package/dist/errors.js.map +0 -1
- package/dist/gateway/advanced-tool/discovery.d.ts +0 -19
- package/dist/gateway/advanced-tool/discovery.d.ts.map +0 -1
- package/dist/gateway/advanced-tool/discovery.js +0 -53
- package/dist/gateway/advanced-tool/discovery.js.map +0 -1
- package/dist/gateway/advanced-tool/domains.d.ts +0 -47
- package/dist/gateway/advanced-tool/domains.d.ts.map +0 -1
- package/dist/gateway/advanced-tool/domains.js +0 -94
- package/dist/gateway/advanced-tool/domains.js.map +0 -1
- package/dist/gateway/advanced-tool/execute.d.ts +0 -29
- package/dist/gateway/advanced-tool/execute.d.ts.map +0 -1
- package/dist/gateway/advanced-tool/execute.js +0 -54
- package/dist/gateway/advanced-tool/execute.js.map +0 -1
- package/dist/gateway/advanced-tool/index.d.ts +0 -36
- package/dist/gateway/advanced-tool/index.d.ts.map +0 -1
- package/dist/gateway/advanced-tool/index.js +0 -39
- package/dist/gateway/advanced-tool/index.js.map +0 -1
- package/dist/gateway/advanced-tool/register.d.ts +0 -18
- package/dist/gateway/advanced-tool/register.d.ts.map +0 -1
- package/dist/gateway/advanced-tool/register.js +0 -69
- package/dist/gateway/advanced-tool/register.js.map +0 -1
- package/dist/gateway/advanced-tool.d.ts +0 -13
- package/dist/gateway/advanced-tool.d.ts.map +0 -1
- package/dist/gateway/advanced-tool.js +0 -13
- package/dist/gateway/advanced-tool.js.map +0 -1
- package/dist/gateway/capturing-server.d.ts +0 -117
- package/dist/gateway/capturing-server.d.ts.map +0 -1
- package/dist/gateway/capturing-server.js +0 -103
- package/dist/gateway/capturing-server.js.map +0 -1
- package/dist/gateway/essentials.d.ts +0 -49
- package/dist/gateway/essentials.d.ts.map +0 -1
- package/dist/gateway/essentials.js +0 -92
- package/dist/gateway/essentials.js.map +0 -1
- package/dist/gateway/test-support.d.ts +0 -41
- package/dist/gateway/test-support.d.ts.map +0 -1
- package/dist/gateway/test-support.js +0 -60
- package/dist/gateway/test-support.js.map +0 -1
- package/dist/index.d.ts +0 -29
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -113
- package/dist/index.js.map +0 -1
- package/dist/install-skill.d.ts +0 -43
- package/dist/install-skill.d.ts.map +0 -1
- package/dist/install-skill.js +0 -118
- package/dist/install-skill.js.map +0 -1
- package/dist/platform/detect.d.ts +0 -64
- package/dist/platform/detect.d.ts.map +0 -1
- package/dist/platform/detect.js +0 -98
- package/dist/platform/detect.js.map +0 -1
- package/dist/platform/index.d.ts +0 -121
- package/dist/platform/index.d.ts.map +0 -1
- package/dist/platform/index.js +0 -176
- package/dist/platform/index.js.map +0 -1
- package/dist/platform/joomla.d.ts +0 -44
- package/dist/platform/joomla.d.ts.map +0 -1
- package/dist/platform/joomla.js +0 -46
- package/dist/platform/joomla.js.map +0 -1
- package/dist/server.d.ts +0 -109
- package/dist/server.d.ts.map +0 -1
- package/dist/server.js +0 -237
- package/dist/server.js.map +0 -1
- package/dist/setup-cli-confirm.d.ts +0 -36
- package/dist/setup-cli-confirm.d.ts.map +0 -1
- package/dist/setup-cli-confirm.js +0 -59
- package/dist/setup-cli-confirm.js.map +0 -1
- package/dist/setup-cli.d.ts +0 -152
- package/dist/setup-cli.d.ts.map +0 -1
- package/dist/setup-cli.js +0 -870
- package/dist/setup-cli.js.map +0 -1
- package/dist/setup-prompts.d.ts +0 -41
- package/dist/setup-prompts.d.ts.map +0 -1
- package/dist/setup-prompts.js +0 -146
- package/dist/setup-prompts.js.map +0 -1
- package/dist/setup-token.d.ts +0 -38
- package/dist/setup-token.d.ts.map +0 -1
- package/dist/setup-token.js +0 -106
- package/dist/setup-token.js.map +0 -1
- package/dist/setup-wizard-defaults.d.ts +0 -43
- package/dist/setup-wizard-defaults.d.ts.map +0 -1
- package/dist/setup-wizard-defaults.js +0 -160
- package/dist/setup-wizard-defaults.js.map +0 -1
- package/dist/setup-wizard-handshake.d.ts +0 -25
- package/dist/setup-wizard-handshake.d.ts.map +0 -1
- package/dist/setup-wizard-handshake.js +0 -103
- package/dist/setup-wizard-handshake.js.map +0 -1
- package/dist/setup-wizard-types.d.ts +0 -164
- package/dist/setup-wizard-types.d.ts.map +0 -1
- package/dist/setup-wizard-types.js +0 -11
- package/dist/setup-wizard-types.js.map +0 -1
- package/dist/setup-wizard.d.ts +0 -33
- package/dist/setup-wizard.d.ts.map +0 -1
- package/dist/setup-wizard.js +0 -199
- package/dist/setup-wizard.js.map +0 -1
- package/dist/setup.d.ts +0 -17
- package/dist/setup.d.ts.map +0 -1
- package/dist/setup.js +0 -33
- package/dist/setup.js.map +0 -1
- package/dist/sites/cli/add-site.d.ts +0 -106
- package/dist/sites/cli/add-site.d.ts.map +0 -1
- package/dist/sites/cli/add-site.js +0 -185
- package/dist/sites/cli/add-site.js.map +0 -1
- package/dist/sites/cli/list-sites.d.ts +0 -40
- package/dist/sites/cli/list-sites.d.ts.map +0 -1
- package/dist/sites/cli/list-sites.js +0 -117
- package/dist/sites/cli/list-sites.js.map +0 -1
- package/dist/sites/cli/remove-site.d.ts +0 -60
- package/dist/sites/cli/remove-site.d.ts.map +0 -1
- package/dist/sites/cli/remove-site.js +0 -120
- package/dist/sites/cli/remove-site.js.map +0 -1
- package/dist/sites/cli/set-default.d.ts +0 -47
- package/dist/sites/cli/set-default.d.ts.map +0 -1
- package/dist/sites/cli/set-default.js +0 -69
- package/dist/sites/cli/set-default.js.map +0 -1
- package/dist/sites/cli/test-site.d.ts +0 -77
- package/dist/sites/cli/test-site.d.ts.map +0 -1
- package/dist/sites/cli/test-site.js +0 -146
- package/dist/sites/cli/test-site.js.map +0 -1
- package/dist/sites/client-pool.d.ts +0 -124
- package/dist/sites/client-pool.d.ts.map +0 -1
- package/dist/sites/client-pool.js +0 -172
- package/dist/sites/client-pool.js.map +0 -1
- package/dist/sites/env-bridge.d.ts +0 -55
- package/dist/sites/env-bridge.d.ts.map +0 -1
- package/dist/sites/env-bridge.js +0 -94
- package/dist/sites/env-bridge.js.map +0 -1
- package/dist/sites/paths.d.ts +0 -21
- package/dist/sites/paths.d.ts.map +0 -1
- package/dist/sites/paths.js +0 -37
- package/dist/sites/paths.js.map +0 -1
- package/dist/sites/probe.d.ts +0 -60
- package/dist/sites/probe.d.ts.map +0 -1
- package/dist/sites/probe.js +0 -112
- package/dist/sites/probe.js.map +0 -1
- package/dist/sites/registry.d.ts +0 -142
- package/dist/sites/registry.d.ts.map +0 -1
- package/dist/sites/registry.js +0 -163
- package/dist/sites/registry.js.map +0 -1
- package/dist/sites/schema.d.ts +0 -90
- package/dist/sites/schema.d.ts.map +0 -1
- package/dist/sites/schema.js +0 -71
- package/dist/sites/schema.js.map +0 -1
- package/dist/sites/secret-resolver.d.ts +0 -109
- package/dist/sites/secret-resolver.d.ts.map +0 -1
- package/dist/sites/secret-resolver.js +0 -189
- package/dist/sites/secret-resolver.js.map +0 -1
- package/dist/sites/store.d.ts +0 -82
- package/dist/sites/store.d.ts.map +0 -1
- package/dist/sites/store.js +0 -198
- package/dist/sites/store.js.map +0 -1
- package/dist/sites/tools/index.d.ts +0 -28
- package/dist/sites/tools/index.d.ts.map +0 -1
- package/dist/sites/tools/index.js +0 -30
- package/dist/sites/tools/index.js.map +0 -1
- package/dist/sites/tools/sites-list.d.ts +0 -48
- package/dist/sites/tools/sites-list.d.ts.map +0 -1
- package/dist/sites/tools/sites-list.js +0 -135
- package/dist/sites/tools/sites-list.js.map +0 -1
- package/dist/sites/tools/sites-test.d.ts +0 -47
- package/dist/sites/tools/sites-test.d.ts.map +0 -1
- package/dist/sites/tools/sites-test.js +0 -148
- package/dist/sites/tools/sites-test.js.map +0 -1
- package/dist/skill-loader.d.ts +0 -111
- package/dist/skill-loader.d.ts.map +0 -1
- package/dist/skill-loader.js +0 -191
- package/dist/skill-loader.js.map +0 -1
- package/dist/tools/elements/builders.d.ts +0 -24
- package/dist/tools/elements/builders.d.ts.map +0 -1
- package/dist/tools/elements/builders.js +0 -199
- package/dist/tools/elements/builders.js.map +0 -1
- package/dist/tools/elements/handlers-write.d.ts +0 -49
- package/dist/tools/elements/handlers-write.d.ts.map +0 -1
- package/dist/tools/elements/handlers-write.js +0 -148
- package/dist/tools/elements/handlers-write.js.map +0 -1
- package/dist/tools/elements/handlers.d.ts +0 -68
- package/dist/tools/elements/handlers.d.ts.map +0 -1
- package/dist/tools/elements/handlers.js +0 -206
- package/dist/tools/elements/handlers.js.map +0 -1
- package/dist/tools/elements/index.d.ts +0 -28
- package/dist/tools/elements/index.d.ts.map +0 -1
- package/dist/tools/elements/index.js +0 -27
- package/dist/tools/elements/index.js.map +0 -1
- package/dist/tools/elements.d.ts +0 -13
- package/dist/tools/elements.d.ts.map +0 -1
- package/dist/tools/elements.js +0 -13
- package/dist/tools/elements.js.map +0 -1
- package/dist/tools/elicitation.d.ts +0 -87
- package/dist/tools/elicitation.d.ts.map +0 -1
- package/dist/tools/elicitation.js +0 -100
- package/dist/tools/elicitation.js.map +0 -1
- package/dist/tools/format/elements-format.d.ts +0 -40
- package/dist/tools/format/elements-format.d.ts.map +0 -1
- package/dist/tools/format/elements-format.js +0 -194
- package/dist/tools/format/elements-format.js.map +0 -1
- package/dist/tools/format/health-format.d.ts +0 -79
- package/dist/tools/format/health-format.d.ts.map +0 -1
- package/dist/tools/format/health-format.js +0 -181
- package/dist/tools/format/health-format.js.map +0 -1
- package/dist/tools/format/inspection-format.d.ts +0 -58
- package/dist/tools/format/inspection-format.d.ts.map +0 -1
- package/dist/tools/format/inspection-format.js +0 -164
- package/dist/tools/format/inspection-format.js.map +0 -1
- package/dist/tools/format/pages-format.d.ts +0 -48
- package/dist/tools/format/pages-format.d.ts.map +0 -1
- package/dist/tools/format/pages-format.js +0 -137
- package/dist/tools/format/pages-format.js.map +0 -1
- package/dist/tools/format/sources-format.d.ts +0 -25
- package/dist/tools/format/sources-format.d.ts.map +0 -1
- package/dist/tools/format/sources-format.js +0 -208
- package/dist/tools/format/sources-format.js.map +0 -1
- package/dist/tools/health.d.ts +0 -22
- package/dist/tools/health.d.ts.map +0 -1
- package/dist/tools/health.js +0 -220
- package/dist/tools/health.js.map +0 -1
- package/dist/tools/index.d.ts +0 -30
- package/dist/tools/index.d.ts.map +0 -1
- package/dist/tools/index.js +0 -39
- package/dist/tools/index.js.map +0 -1
- package/dist/tools/inspection.d.ts +0 -14
- package/dist/tools/inspection.d.ts.map +0 -1
- package/dist/tools/inspection.js +0 -170
- package/dist/tools/inspection.js.map +0 -1
- package/dist/tools/layout-flatten.d.ts +0 -75
- package/dist/tools/layout-flatten.d.ts.map +0 -1
- package/dist/tools/layout-flatten.js +0 -107
- package/dist/tools/layout-flatten.js.map +0 -1
- package/dist/tools/multi-items/builders.d.ts +0 -23
- package/dist/tools/multi-items/builders.d.ts.map +0 -1
- package/dist/tools/multi-items/builders.js +0 -69
- package/dist/tools/multi-items/builders.js.map +0 -1
- package/dist/tools/multi-items/clean-implode-handler.d.ts +0 -28
- package/dist/tools/multi-items/clean-implode-handler.d.ts.map +0 -1
- package/dist/tools/multi-items/clean-implode-handler.js +0 -40
- package/dist/tools/multi-items/clean-implode-handler.js.map +0 -1
- package/dist/tools/multi-items/index.d.ts +0 -18
- package/dist/tools/multi-items/index.d.ts.map +0 -1
- package/dist/tools/multi-items/index.js +0 -18
- package/dist/tools/multi-items/index.js.map +0 -1
- package/dist/tools/multi-items/inspect-handler.d.ts +0 -41
- package/dist/tools/multi-items/inspect-handler.d.ts.map +0 -1
- package/dist/tools/multi-items/inspect-handler.js +0 -50
- package/dist/tools/multi-items/inspect-handler.js.map +0 -1
- package/dist/tools/multi-items/item-container-map.d.ts +0 -41
- package/dist/tools/multi-items/item-container-map.d.ts.map +0 -1
- package/dist/tools/multi-items/item-container-map.js +0 -73
- package/dist/tools/multi-items/item-container-map.js.map +0 -1
- package/dist/tools/pages/builders.d.ts +0 -14
- package/dist/tools/pages/builders.d.ts.map +0 -1
- package/dist/tools/pages/builders.js +0 -127
- package/dist/tools/pages/builders.js.map +0 -1
- package/dist/tools/pages/handlers-read.d.ts +0 -33
- package/dist/tools/pages/handlers-read.d.ts.map +0 -1
- package/dist/tools/pages/handlers-read.js +0 -171
- package/dist/tools/pages/handlers-read.js.map +0 -1
- package/dist/tools/pages/handlers-write.d.ts +0 -21
- package/dist/tools/pages/handlers-write.d.ts.map +0 -1
- package/dist/tools/pages/handlers-write.js +0 -52
- package/dist/tools/pages/handlers-write.js.map +0 -1
- package/dist/tools/pages/index.d.ts +0 -17
- package/dist/tools/pages/index.d.ts.map +0 -1
- package/dist/tools/pages/index.js +0 -17
- package/dist/tools/pages/index.js.map +0 -1
- package/dist/tools/pages/schemas.d.ts +0 -30
- package/dist/tools/pages/schemas.d.ts.map +0 -1
- package/dist/tools/pages/schemas.js +0 -48
- package/dist/tools/pages/schemas.js.map +0 -1
- package/dist/tools/pages.d.ts +0 -13
- package/dist/tools/pages.d.ts.map +0 -1
- package/dist/tools/pages.js +0 -13
- package/dist/tools/pages.js.map +0 -1
- package/dist/tools/pool-resolve-helper.d.ts +0 -83
- package/dist/tools/pool-resolve-helper.d.ts.map +0 -1
- package/dist/tools/pool-resolve-helper.js +0 -148
- package/dist/tools/pool-resolve-helper.js.map +0 -1
- package/dist/tools/progress-phases.d.ts +0 -46
- package/dist/tools/progress-phases.d.ts.map +0 -1
- package/dist/tools/progress-phases.js +0 -48
- package/dist/tools/progress-phases.js.map +0 -1
- package/dist/tools/shared-schemas.d.ts +0 -25
- package/dist/tools/shared-schemas.d.ts.map +0 -1
- package/dist/tools/shared-schemas.js +0 -48
- package/dist/tools/shared-schemas.js.map +0 -1
- package/dist/tools/sources/builders.d.ts +0 -13
- package/dist/tools/sources/builders.d.ts.map +0 -1
- package/dist/tools/sources/builders.js +0 -115
- package/dist/tools/sources/builders.js.map +0 -1
- package/dist/tools/sources/handlers-bind.d.ts +0 -28
- package/dist/tools/sources/handlers-bind.d.ts.map +0 -1
- package/dist/tools/sources/handlers-bind.js +0 -129
- package/dist/tools/sources/handlers-bind.js.map +0 -1
- package/dist/tools/sources/handlers.d.ts +0 -45
- package/dist/tools/sources/handlers.d.ts.map +0 -1
- package/dist/tools/sources/handlers.js +0 -91
- package/dist/tools/sources/handlers.js.map +0 -1
- package/dist/tools/sources/index.d.ts +0 -19
- package/dist/tools/sources/index.d.ts.map +0 -1
- package/dist/tools/sources/index.js +0 -18
- package/dist/tools/sources/index.js.map +0 -1
- package/dist/tools/sources.d.ts +0 -14
- package/dist/tools/sources.d.ts.map +0 -1
- package/dist/tools/sources.js +0 -14
- package/dist/tools/sources.js.map +0 -1
- package/dist/tools/sparse-fields.d.ts +0 -80
- package/dist/tools/sparse-fields.d.ts.map +0 -1
- package/dist/tools/sparse-fields.js +0 -144
- package/dist/tools/sparse-fields.js.map +0 -1
- package/dist/tools/tool-builder/annotations.d.ts +0 -55
- package/dist/tools/tool-builder/annotations.d.ts.map +0 -1
- package/dist/tools/tool-builder/annotations.js +0 -86
- package/dist/tools/tool-builder/annotations.js.map +0 -1
- package/dist/tools/tool-builder/define.d.ts +0 -31
- package/dist/tools/tool-builder/define.d.ts.map +0 -1
- package/dist/tools/tool-builder/define.js +0 -31
- package/dist/tools/tool-builder/define.js.map +0 -1
- package/dist/tools/tool-builder/index.d.ts +0 -28
- package/dist/tools/tool-builder/index.d.ts.map +0 -1
- package/dist/tools/tool-builder/index.js +0 -27
- package/dist/tools/tool-builder/index.js.map +0 -1
- package/dist/tools/tool-builder/results.d.ts +0 -93
- package/dist/tools/tool-builder/results.d.ts.map +0 -1
- package/dist/tools/tool-builder/results.js +0 -211
- package/dist/tools/tool-builder/results.js.map +0 -1
- package/dist/tools/tool-builder/types.d.ts +0 -82
- package/dist/tools/tool-builder/types.d.ts.map +0 -1
- package/dist/tools/tool-builder/types.js +0 -9
- package/dist/tools/tool-builder/types.js.map +0 -1
- package/dist/tools/tool-builder.d.ts +0 -16
- package/dist/tools/tool-builder.d.ts.map +0 -1
- package/dist/tools/tool-builder.js +0 -16
- package/dist/tools/tool-builder.js.map +0 -1
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: yt-builder-mcp
|
|
3
|
-
description: Drive the YOOtheme Pro Page Builder on WordPress or Joomla 5/6
|
|
3
|
+
description: Drive the YOOtheme Pro Page Builder on WordPress or Joomla 5/6. Discover pages, inspect layouts, add/move/clone/delete elements, bind dynamic sources, diagnose 401/403 auth failures. Use when the user works with a YOOtheme Pro site via the YT Builder MCP server.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
# YT Builder MCP for YOOtheme Pro (unofficial)
|
|
6
|
+
# YT Builder MCP for YOOtheme Pro (unofficial). Skill
|
|
7
7
|
|
|
8
8
|
> Independent third-party project. YOOtheme® is a registered trademark of YOOtheme GmbH
|
|
9
9
|
> ([yootheme.com](https://yootheme.com)). YT Builder MCP is built by WootsUp (getimo
|
|
@@ -12,45 +12,45 @@ description: Drive the YOOtheme Pro Page Builder on WordPress or Joomla 5/6 —
|
|
|
12
12
|
> WordPress and Joomla 5/6.
|
|
13
13
|
|
|
14
14
|
This skill helps AI assistants drive the YOOtheme Pro Page Builder through the
|
|
15
|
-
`@wootsup/yt-builder-mcp` server. The server exposes
|
|
16
|
-
tools. 20 of them advertised as first-class entries in `tools/list`
|
|
17
|
-
L1 forwards + 2 direct L3 entries + 1 gateway), and 7 advanced
|
|
18
|
-
through the single `yootheme_builder_advanced` gateway. This
|
|
19
|
-
`tools/list` well below the ~40-tool Cursor cap while every
|
|
20
|
-
fully reachable.
|
|
15
|
+
`@wootsup/yt-builder-mcp` server. The server exposes 27 typed, scoped, idempotent
|
|
16
|
+
callable tools. 20 of them advertised as first-class entries in `tools/list`
|
|
17
|
+
(17 essential L1 forwards + 2 direct L3 entries + 1 gateway), and 7 advanced
|
|
18
|
+
tools reachable through the single `yootheme_builder_advanced` gateway. This
|
|
19
|
+
3-lane split keeps `tools/list` well below the ~40-tool Cursor cap while every
|
|
20
|
+
catalogued tool stays fully reachable.
|
|
21
21
|
|
|
22
22
|
## How to use this MCP server
|
|
23
23
|
|
|
24
24
|
The user invokes you through Claude Desktop, Cursor, Zed, Continue, Cline,
|
|
25
25
|
Roo Code, Claude Code, Codex CLI or any other MCP-aware AI client. Setup is
|
|
26
|
-
**cross-platform
|
|
26
|
+
**cross-platform**. The same MCP server speaks to the same WordPress *or*
|
|
27
27
|
Joomla 5/6 host plugin:
|
|
28
28
|
|
|
29
29
|
1. The user installs the host plugin for their CMS:
|
|
30
|
-
- **WordPress
|
|
30
|
+
- **WordPress**. Install the `yt-builder-mcp` plugin (downloadable from the
|
|
31
31
|
[GitHub repository](https://github.com/wootsup/yt-builder-mcp)) and generate
|
|
32
32
|
a Bearer key in **wp-admin → Tools → "YT Builder MCP" → Bearer Keys**.
|
|
33
|
-
- **Joomla 5/6
|
|
33
|
+
- **Joomla 5/6**. Install the `yt-builder-mcp` package (downloadable from the
|
|
34
34
|
[GitHub repository](https://github.com/wootsup/yt-builder-mcp)) and generate
|
|
35
35
|
a Bearer key in **Components → YT Builder MCP → Bearer Keys**. The package
|
|
36
36
|
installs three sub-extensions (system plugin, webservices plugin, component).
|
|
37
37
|
2. The user runs `npx -y @wootsup/yt-builder-mcp setup` once; the wizard probes
|
|
38
38
|
the host plugin, validates the key, and writes the MCP server entry into every
|
|
39
|
-
selected AI client's config file. (Wizard prompts include a platform hint
|
|
40
|
-
`auto` works for most cases
|
|
39
|
+
selected AI client's config file. (Wizard prompts include a platform hint;
|
|
40
|
+
`auto` works for most cases. Set it to `joomla` explicitly when the site URL
|
|
41
41
|
has no `/joomla` segment.)
|
|
42
42
|
3. The user restarts their AI client. The server is now visible.
|
|
43
43
|
4. The user asks for a YOOtheme task (build, audit, change, diagnose).
|
|
44
44
|
|
|
45
|
-
### Two picker entries
|
|
45
|
+
### Two picker entries (activate both)
|
|
46
46
|
|
|
47
47
|
Some clients (notably Claude Desktop with the `.dxt` bundle) expose **two**
|
|
48
48
|
entries when the user types "YT Builder MCP" into the picker:
|
|
49
49
|
|
|
50
|
-
- **`YT Builder MCP for YOOtheme Pro (unofficial)
|
|
50
|
+
- **`YT Builder MCP for YOOtheme Pro (unofficial)`**: the MCP **server**.
|
|
51
51
|
Provides the 20 first-class tools (17 essential, 2 direct, 1 gateway).
|
|
52
52
|
The `yootheme_builder_advanced` gateway routes 7 additional tools.
|
|
53
|
-
- **`Von YT Builder MCP for YOOtheme Pro
|
|
53
|
+
- **`Von YT Builder MCP for YOOtheme Pro`**: the bundled **skill** (this
|
|
54
54
|
document). Gives the agent the workflow knowledge needed to drive those
|
|
55
55
|
tools correctly on first try.
|
|
56
56
|
|
|
@@ -58,7 +58,7 @@ entries when the user types "YT Builder MCP" into the picker:
|
|
|
58
58
|
typed tools but no narrative guidance; the skill alone has no tools to call.
|
|
59
59
|
|
|
60
60
|
When the user asks a YOOtheme-related question, **always start with
|
|
61
|
-
`yootheme_builder_health
|
|
61
|
+
`yootheme_builder_health`**. It confirms the host plugin is reachable and (when
|
|
62
62
|
the Bearer key is valid) returns the **plugin version, YOOtheme version, WordPress
|
|
63
63
|
or Joomla version, PHP version, and the site_url + home_url of the connected
|
|
64
64
|
site**. The site URL is how you know *which* site the agent is currently driving;
|
|
@@ -71,24 +71,26 @@ If a tool returns `401 Unauthorized` or `403 Forbidden`, jump straight to
|
|
|
71
71
|
|
|
72
72
|
The server exposes:
|
|
73
73
|
|
|
74
|
-
- **2 direct top-level tools
|
|
74
|
+
- **2 direct top-level tools**, always callable, always in `tools/list`:
|
|
75
75
|
`yootheme_builder_health` and `yootheme_builder_diagnose`. These are
|
|
76
76
|
the "the gateway itself might be broken" escape hatch.
|
|
77
|
-
- **17 essential forwarded tools
|
|
77
|
+
- **17 essential forwarded tools**: common reads + the most-used writes
|
|
78
78
|
(pages_list, get_etag, element_list / add / update_settings / get / move /
|
|
79
79
|
clone / delete, page_get_layout, sources_list, element_types_list,
|
|
80
80
|
element_type_get_schema, template_summary, inspect_multi_items_binding,
|
|
81
81
|
sites_list, sites_test). Always advertised in `tools/list` so AI clients
|
|
82
82
|
see them first-class.
|
|
83
|
-
- **7 advanced captured tools
|
|
83
|
+
- **7 advanced captured tools**: everything else (page_save, page_publish,
|
|
84
84
|
page_get_schema, element_get_binding, element_bind_source,
|
|
85
85
|
element_unbind_source, clean_implode_directives). Reachable through one
|
|
86
86
|
gateway tool: `yootheme_builder_advanced({ tool: "<name>", input: { ... } })`.
|
|
87
|
-
- **1 gateway tool
|
|
87
|
+
- **1 gateway tool**: `yootheme_builder_advanced`.
|
|
88
88
|
|
|
89
|
-
`tools/list` therefore advertises 20 names (17 + 2 + 1)
|
|
90
|
-
|
|
91
|
-
|
|
89
|
+
`tools/list` therefore advertises 20 names (17 + 2 + 1). That's 17 L1
|
|
90
|
+
essentials + 2 L3 direct + 1 gateway. The total callable surface is 27
|
|
91
|
+
(20 advertised + 7 advanced reachable through the gateway). If the AI
|
|
92
|
+
client reports "tool not found", you are almost certainly calling an
|
|
93
|
+
advanced tool by its raw name. Wrap it in
|
|
92
94
|
`yootheme_builder_advanced({ tool, input })` instead.
|
|
93
95
|
|
|
94
96
|
## Site and frontend URLs (for deep-linking and verification)
|
|
@@ -108,7 +110,7 @@ guess where the agent is pointing:
|
|
|
108
110
|
`frontend_url_template` (with placeholders the user fills in).
|
|
109
111
|
|
|
110
112
|
Treat `frontend_url: null` as "host plugin could not resolve a public URL for
|
|
111
|
-
this template"
|
|
113
|
+
this template". Surface that honestly rather than fabricating one.
|
|
112
114
|
|
|
113
115
|
## Scopes (Bearer key permissions)
|
|
114
116
|
|
|
@@ -125,12 +127,18 @@ ask the user to regenerate the key with a higher scope **before** retrying.
|
|
|
125
127
|
Do not loop on auth errors.
|
|
126
128
|
|
|
127
129
|
> **Joomla note.** On the Joomla API surface (`com_api`), the Bearer token's
|
|
128
|
-
> scope is the **sole** authority
|
|
130
|
+
> scope is the **sole** authority. The L2 article-write `core.edit` ACL gate
|
|
129
131
|
> was intentionally removed (see ADR at https://github.com/wootsup/yt-builder-mcp/blob/main/docs/adr/2026-05-24-l2-bearer-as-authority.md).
|
|
130
132
|
> Joomla ACL still governs the admin component (`com_ytbmcp`). On WordPress,
|
|
131
133
|
> capabilities like `manage_options` gate the admin settings page only; the
|
|
132
134
|
> REST API surface is Bearer-gated.
|
|
133
135
|
|
|
136
|
+
> **Joomla L2 articles surface.** The Joomla plugin ships `/v1/articles*`
|
|
137
|
+
> REST endpoints for per-article custom layouts, but they are NOT exposed
|
|
138
|
+
> via MCP tools in v1.x. To use that surface, call the REST endpoints
|
|
139
|
+
> directly with the Bearer key. MCP tool coverage for L2 articles is
|
|
140
|
+
> planned for v1.2.0.
|
|
141
|
+
|
|
134
142
|
---
|
|
135
143
|
|
|
136
144
|
## Working with multiple sites
|
|
@@ -290,33 +298,33 @@ for a focused diagnosis without touching the others.
|
|
|
290
298
|
**Goal:** Add a fresh hero section (heading + sub-heading + CTA button)
|
|
291
299
|
to an existing page.
|
|
292
300
|
|
|
293
|
-
**Canonical tool-call sequence (real parameter names
|
|
301
|
+
**Canonical tool-call sequence (real parameter names, snake_case):**
|
|
294
302
|
|
|
295
|
-
1. `yootheme_builder_health
|
|
303
|
+
1. `yootheme_builder_health`: confirm host plugin reachable. Note plugin
|
|
296
304
|
version and `site_url` (some element types are version-gated; surface
|
|
297
305
|
the site URL back to the user).
|
|
298
|
-
2. `yootheme_builder_pages_list({ fields: ["id", "label"] })
|
|
306
|
+
2. `yootheme_builder_pages_list({ fields: ["id", "label"] })`: find
|
|
299
307
|
the target template. Returns `[{ id, label, ... }]`. If the user
|
|
300
308
|
named a specific page, match on `label` (exact then fuzzy).
|
|
301
|
-
3. `yootheme_builder_get_etag()
|
|
309
|
+
3. `yootheme_builder_get_etag()`: fetch the current top-level
|
|
302
310
|
optimistic-lock ETag. Every write tool requires it via `etag`.
|
|
303
|
-
4. `yootheme_builder_element_add({ template_id: "<id>", parent_path: "", element_type: "section", props: { background: "primary" }, etag: "<etag>" })
|
|
304
|
-
|
|
311
|
+
4. `yootheme_builder_element_add({ template_id: "<id>", parent_path: "", element_type: "section", props: { background: "primary" }, etag: "<etag>" })`:
|
|
312
|
+
append a new section at the template root (`parent_path: ""`).
|
|
305
313
|
Returns `{ path: "/0/children/N", etag: "<fresh>" }`.
|
|
306
|
-
5. `yootheme_builder_element_add({ template_id, parent_path: "<section-path>", element_type: "row", etag: "<fresh-etag>" })
|
|
307
|
-
|
|
308
|
-
previous write
|
|
309
|
-
6. `yootheme_builder_element_add({ template_id, parent_path: "<row-path>", element_type: "headline", props: { content: "<h1 text>" }, etag })
|
|
310
|
-
|
|
311
|
-
7. `yootheme_builder_element_add({ template_id, parent_path: "<row-path>", element_type: "text", props: { content: "<sub text>" }, etag })
|
|
312
|
-
|
|
313
|
-
8. `yootheme_builder_element_add({ template_id, parent_path: "<row-path>", element_type: "button", props: { content: "<cta>", link: "<url>" }, etag })
|
|
314
|
-
|
|
315
|
-
9. `yootheme_builder_advanced({ tool: "yootheme_builder_page_save", input: { template_id, etag } })
|
|
316
|
-
|
|
314
|
+
5. `yootheme_builder_element_add({ template_id, parent_path: "<section-path>", element_type: "row", etag: "<fresh-etag>" })`:
|
|
315
|
+
add a row inside the section. Use the etag returned by the
|
|
316
|
+
previous write (etags rotate every mutation).
|
|
317
|
+
6. `yootheme_builder_element_add({ template_id, parent_path: "<row-path>", element_type: "headline", props: { content: "<h1 text>" }, etag })`:
|
|
318
|
+
add a headline.
|
|
319
|
+
7. `yootheme_builder_element_add({ template_id, parent_path: "<row-path>", element_type: "text", props: { content: "<sub text>" }, etag })`:
|
|
320
|
+
add a text element.
|
|
321
|
+
8. `yootheme_builder_element_add({ template_id, parent_path: "<row-path>", element_type: "button", props: { content: "<cta>", link: "<url>" }, etag })`:
|
|
322
|
+
add the CTA button.
|
|
323
|
+
9. `yootheme_builder_advanced({ tool: "yootheme_builder_page_save", input: { template_id, etag } })`:
|
|
324
|
+
persist the working copy (visible in YOOtheme Customizer preview).
|
|
317
325
|
`page_save` is an advanced tool; call it through the gateway.
|
|
318
|
-
10. `yootheme_builder_advanced({ tool: "yootheme_builder_page_publish", input: { template_id, etag } })
|
|
319
|
-
|
|
326
|
+
10. `yootheme_builder_advanced({ tool: "yootheme_builder_page_publish", input: { template_id, etag } })`:
|
|
327
|
+
make the changes live on the front-end. Also an advanced tool.
|
|
320
328
|
|
|
321
329
|
**Common pitfalls:**
|
|
322
330
|
|
|
@@ -332,19 +340,19 @@ to an existing page.
|
|
|
332
340
|
row in between. The server returns a structured error with a
|
|
333
341
|
human-readable hint when you skip the row.
|
|
334
342
|
- **Saving without publishing.** `page_save` is the equivalent of the
|
|
335
|
-
YOOtheme Customizer "Save" button
|
|
343
|
+
YOOtheme Customizer "Save" button. Content lives in the staging
|
|
336
344
|
copy. Visitors see nothing until `page_publish`.
|
|
337
345
|
- **Reusing a stale etag across many writes.** Every write returns a
|
|
338
|
-
fresh etag in the response. Pass THAT etag into the next write
|
|
339
|
-
|
|
346
|
+
fresh etag in the response. Pass THAT etag into the next write.
|
|
347
|
+
Don't hold the one from the original `get_etag` call.
|
|
340
348
|
- **Calling page_save / page_publish by name.** Both are advanced
|
|
341
|
-
(L2) tools
|
|
349
|
+
(L2) tools. Call them through `yootheme_builder_advanced({ tool, input })`,
|
|
342
350
|
not directly. The first sign you forgot is "tool not found".
|
|
343
351
|
|
|
344
352
|
**Worked example (tool-call snippet):**
|
|
345
353
|
|
|
346
354
|
```jsonc
|
|
347
|
-
// Step 4
|
|
355
|
+
// Step 4. Add the section. parent_path: "" means template root.
|
|
348
356
|
yootheme_builder_element_add({
|
|
349
357
|
template_id: "home",
|
|
350
358
|
parent_path: "",
|
|
@@ -355,14 +363,14 @@ yootheme_builder_element_add({
|
|
|
355
363
|
// Response: { path: "/0/children/3", etag: "def456" }
|
|
356
364
|
// → next call uses etag "def456"
|
|
357
365
|
|
|
358
|
-
// Step 9
|
|
366
|
+
// Step 9. page_save is L2; call via the gateway.
|
|
359
367
|
yootheme_builder_advanced({
|
|
360
368
|
tool: "yootheme_builder_page_save",
|
|
361
369
|
input: { template_id: "home", etag: "<latest>" }
|
|
362
370
|
})
|
|
363
371
|
```
|
|
364
372
|
|
|
365
|
-
**Edge case:** YOOtheme allows nested sections (rare)
|
|
373
|
+
**Edge case:** YOOtheme allows nested sections (rare). If the user
|
|
366
374
|
asks for a "card grid inside a hero", you still need the
|
|
367
375
|
`section → row → column → grid` hierarchy, even when the parent
|
|
368
376
|
section sits inside another section.
|
|
@@ -381,27 +389,27 @@ section as the last child of the template root.
|
|
|
381
389
|
Source from API Mapper or the built-in YOOtheme Sources system so it
|
|
382
390
|
renders dynamic items.
|
|
383
391
|
|
|
384
|
-
**Canonical tool-call sequence (real parameter names
|
|
392
|
+
**Canonical tool-call sequence (real parameter names, snake_case):**
|
|
385
393
|
|
|
386
|
-
1. `yootheme_builder_health
|
|
394
|
+
1. `yootheme_builder_health`: confirm host plugin reachable.
|
|
387
395
|
2. `yootheme_builder_pages_list({ fields: ["id", "label"] })` and
|
|
388
|
-
`yootheme_builder_page_get_layout({ template_id: "<id>", flat: false })
|
|
389
|
-
|
|
396
|
+
`yootheme_builder_page_get_layout({ template_id: "<id>", flat: false })`:
|
|
397
|
+
locate the target Grid. Note its JSON-Pointer `path` (e.g.
|
|
390
398
|
`/0/children/2/children/0`).
|
|
391
|
-
3. `yootheme_builder_element_get({ template_id, element_path })
|
|
392
|
-
fetch the Grid's current props so you can preserve them
|
|
399
|
+
3. `yootheme_builder_element_get({ template_id, element_path })`:
|
|
400
|
+
fetch the Grid's current props so you can preserve them. Binding
|
|
393
401
|
sets `props.source` and leaves the rest alone.
|
|
394
|
-
4. `yootheme_builder_sources_list()
|
|
402
|
+
4. `yootheme_builder_sources_list()`: enumerate available Sources.
|
|
395
403
|
Each returns `{ name, label, origin, kind }`. Pick the one the
|
|
396
404
|
user asked for.
|
|
397
405
|
5. `yootheme_builder_advanced({ tool: "yootheme_builder_element_get_binding", input: { template_id, element_path } })`
|
|
398
|
-
|
|
406
|
+
check whether the Grid is already bound (idempotency: skip step
|
|
399
407
|
7 if `source_name` already matches the user's intent).
|
|
400
|
-
`element_get_binding` is an advanced (L2) tool
|
|
401
|
-
6. `yootheme_builder_get_etag()
|
|
408
|
+
`element_get_binding` is an advanced (L2) tool. Call via the gateway.
|
|
409
|
+
6. `yootheme_builder_get_etag()`: fetch the optimistic-lock etag for
|
|
402
410
|
the upcoming mutation.
|
|
403
411
|
7. `yootheme_builder_advanced({ tool: "yootheme_builder_element_bind_source", input: { template_id, element_path, source_name: "<name>", etag: "<etag>" } })`
|
|
404
|
-
|
|
412
|
+
applies the binding. Returns `{ path, etag, has_binding: true }`.
|
|
405
413
|
Pass `source_id: "<origin>:<name>"` as well **only** when two
|
|
406
414
|
plugins register a source with the same `source_name` (the server
|
|
407
415
|
surfaces the ambiguity as an elicitation prompt; if the host
|
|
@@ -415,7 +423,7 @@ renders dynamic items.
|
|
|
415
423
|
- **Inventing `fieldMap`.** The bind tool's schema is just
|
|
416
424
|
`template_id`, `element_path`, `source_name`, optional `source_id`,
|
|
417
425
|
`etag`. Field mapping happens inside YOOtheme at render time based
|
|
418
|
-
on the element's own field bindings
|
|
426
|
+
on the element's own field bindings, not via an MCP parameter.
|
|
419
427
|
- **Wrong parameter names.** Use `template_id` (not `pageId`),
|
|
420
428
|
`element_path` (not `path`), `source_name` (not `sourceName`),
|
|
421
429
|
`etag` (not `ifMatch`).
|
|
@@ -423,21 +431,22 @@ renders dynamic items.
|
|
|
423
431
|
they're PUBLISHED in API Mapper (not just saved). If
|
|
424
432
|
`yootheme_builder_sources_list` returns no match for the name the
|
|
425
433
|
user typed, send the user to API Mapper to publish it.
|
|
426
|
-
- **Binding non-list elements.** Only multi-item element types
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
434
|
+
- **Binding non-list elements.** Only multi-item element types
|
|
435
|
+
(Accordion, Button, Description List, Gallery, Grid, List, Map, Nav,
|
|
436
|
+
Overlay-Slider, Panel-Slider, Popover, Slideshow, Social, Subnav,
|
|
437
|
+
Switcher, Table) accept a source binding. Binding a single-item
|
|
438
|
+
element like Headline returns a structured `validation` error.
|
|
430
439
|
- **Forgetting `etag`.** Every write requires the optimistic-lock
|
|
431
440
|
etag. On `412 Precondition Failed` re-fetch via
|
|
432
441
|
`yootheme_builder_get_etag` and retry.
|
|
433
442
|
- **Calling bind/unbind directly.** Both `element_bind_source` and
|
|
434
|
-
`element_get_binding` are L2 advanced
|
|
443
|
+
`element_get_binding` are L2 advanced. Wrap in
|
|
435
444
|
`yootheme_builder_advanced({ tool, input })`.
|
|
436
445
|
|
|
437
446
|
**Worked example (tool-call snippet):**
|
|
438
447
|
|
|
439
448
|
```jsonc
|
|
440
|
-
// Step 7
|
|
449
|
+
// Step 7. Bind a Posts source onto a Grid element via the gateway.
|
|
441
450
|
yootheme_builder_advanced({
|
|
442
451
|
tool: "yootheme_builder_element_bind_source",
|
|
443
452
|
input: {
|
|
@@ -460,7 +469,7 @@ yootheme_builder_advanced({
|
|
|
460
469
|
**Edge case:** A Source can render zero items at runtime (e.g. empty
|
|
461
470
|
search filter). The bind call still succeeds; the front-end Grid just
|
|
462
471
|
shows the YOOtheme "no items" placeholder. Don't treat empty render
|
|
463
|
-
as a binding failure
|
|
472
|
+
as a binding failure. Verify by re-reading
|
|
464
473
|
`yootheme_builder_element_get_binding` through the gateway.
|
|
465
474
|
|
|
466
475
|
**Success criterion:** After publish, the Grid on the front-end shows
|
|
@@ -475,11 +484,11 @@ field-value spot-check). `yootheme_builder_element_get_binding`
|
|
|
475
484
|
**Goal:** Duplicate a section inside the SAME template and tweak the
|
|
476
485
|
copy. Common variants: A/B-style hero, repeated CTA blocks, mirroring
|
|
477
486
|
a row layout. (Cross-template duplication is **not** supported by
|
|
478
|
-
`element_clone
|
|
487
|
+
`element_clone`. See "Important scope note" below.)
|
|
479
488
|
|
|
480
489
|
**Important scope note:** `yootheme_builder_element_clone` is
|
|
481
490
|
**sibling-only and intra-template**. Its real schema is
|
|
482
|
-
`{ template_id, element_path, etag }
|
|
491
|
+
`{ template_id, element_path, etag }`. There is **no** `destPageId`
|
|
483
492
|
or `destParentPath`. The cloned element lands at the same parent,
|
|
484
493
|
right after the source. To move the clone elsewhere in the SAME
|
|
485
494
|
template, call `yootheme_builder_element_move` afterwards. To
|
|
@@ -487,23 +496,23 @@ duplicate into a DIFFERENT template, flag to the user that
|
|
|
487
496
|
cross-template clone is not currently supported and suggest a
|
|
488
497
|
CMS-level template duplication (in wp-admin or Joomla administrator).
|
|
489
498
|
|
|
490
|
-
**Canonical tool-call sequence (real parameter names
|
|
499
|
+
**Canonical tool-call sequence (real parameter names, snake_case):**
|
|
491
500
|
|
|
492
|
-
1. `yootheme_builder_health
|
|
493
|
-
2. `yootheme_builder_pages_list({ fields: ["id", "label"] })
|
|
501
|
+
1. `yootheme_builder_health`: confirm host plugin reachable.
|
|
502
|
+
2. `yootheme_builder_pages_list({ fields: ["id", "label"] })`:
|
|
494
503
|
locate the template by `label`. Note its `id`.
|
|
495
504
|
3. `yootheme_builder_advanced({ tool: "yootheme_builder_page_get_schema", input: { template_id } })`
|
|
496
|
-
|
|
505
|
+
returns a flat schema view (lighter than `page_get_layout`) showing every
|
|
497
506
|
element path + type. Pick the JSON-Pointer path of the section
|
|
498
507
|
to clone. `page_get_schema` is L2; call via the gateway.
|
|
499
|
-
4. `yootheme_builder_get_etag()
|
|
508
|
+
4. `yootheme_builder_get_etag()`: fetch the optimistic-lock etag.
|
|
500
509
|
5. `yootheme_builder_element_clone({ template_id, element_path: "<src-path>", etag: "<etag>" })`
|
|
501
|
-
|
|
510
|
+
clones as sibling. Returns `{ path: "<new-path>", etag: "<fresh>" }`.
|
|
502
511
|
The new path is at the same parent, immediately after the source.
|
|
503
512
|
6. (Optional) `yootheme_builder_element_move({ template_id, element_path: "<new-path>", to_parent_path: "<other-parent>", to_index: 0, etag: "<fresh>" })`
|
|
504
|
-
|
|
513
|
+
re-parents the clone within the same template if needed.
|
|
505
514
|
7. `yootheme_builder_element_update_settings({ template_id, element_path: "<final-path>", props: { ... }, etag: "<fresh>" })`
|
|
506
|
-
|
|
515
|
+
replaces the `props` on the clone. **Existing props NOT in the
|
|
507
516
|
request are removed** (update_settings is a full replace by default;
|
|
508
517
|
pass `merge: true` to apply a server-side deep-merge instead).
|
|
509
518
|
Read the current props first via `yootheme_builder_element_get`
|
|
@@ -522,7 +531,7 @@ CMS-level template duplication (in wp-admin or Joomla administrator).
|
|
|
522
531
|
first if you only want to tweak a subset and prefer not to use merge.
|
|
523
532
|
- **Clone-then-update path drift.** The clone returns a path that's
|
|
524
533
|
correct at the moment of the call. If you fire off many ops in
|
|
525
|
-
parallel, a concurrent edit may shift indices
|
|
534
|
+
parallel, a concurrent edit may shift indices. Refresh via
|
|
526
535
|
`get_etag` + `page_get_schema` (via gateway) between independent batches.
|
|
527
536
|
- **Cloning a bound element keeps the binding.** `element_clone`
|
|
528
537
|
copies the entire element including `props.source`. If the user
|
|
@@ -535,7 +544,7 @@ CMS-level template duplication (in wp-admin or Joomla administrator).
|
|
|
535
544
|
**Worked example (tool-call snippet):**
|
|
536
545
|
|
|
537
546
|
```jsonc
|
|
538
|
-
// Step 5
|
|
547
|
+
// Step 5. Clone the section element as a sibling.
|
|
539
548
|
yootheme_builder_element_clone({
|
|
540
549
|
template_id: "home",
|
|
541
550
|
element_path: "/0/children/2", // the hero section to duplicate
|
|
@@ -543,7 +552,7 @@ yootheme_builder_element_clone({
|
|
|
543
552
|
})
|
|
544
553
|
// Response: { path: "/0/children/3", etag: "def456" }
|
|
545
554
|
|
|
546
|
-
// Step 7
|
|
555
|
+
// Step 7. Tweak the clone (replace props entirely, or pass merge: true).
|
|
547
556
|
const current = yootheme_builder_element_get({
|
|
548
557
|
template_id: "home",
|
|
549
558
|
element_path: "/0/children/3",
|
|
@@ -572,16 +581,16 @@ shows the new section at the cloned path with the user's tweaks reflected in
|
|
|
572
581
|
## Workflow 4: Diagnose a 401 / 403 / auth failure
|
|
573
582
|
|
|
574
583
|
**Goal:** Recover from `401 Unauthorized` or `403 Forbidden` without
|
|
575
|
-
guessing
|
|
584
|
+
guessing, and without rotating the user's key unnecessarily.
|
|
576
585
|
|
|
577
586
|
**Canonical tool-call sequence:**
|
|
578
587
|
|
|
579
|
-
1. `yootheme_builder_diagnose`
|
|
588
|
+
1. `yootheme_builder_diagnose` is a single probe that hits `/health` (no
|
|
580
589
|
auth) and then `/etag` (Bearer auth). Returns
|
|
581
590
|
`{ plugin_reachable, plugin_version, yootheme_loaded, yootheme_version,
|
|
582
591
|
endpoint_count, bearer_valid, bearer_error?, site_url?, home_url?,
|
|
583
592
|
summary? }`. Call this **before** any other tool when you see
|
|
584
|
-
auth errors. (Takes no arguments
|
|
593
|
+
auth errors. (Takes no arguments. The schema is `{}`.)
|
|
585
594
|
2. **Interpret the result:**
|
|
586
595
|
- `plugin_reachable: false` → the WordPress / Joomla install is down
|
|
587
596
|
OR the host plugin is deactivated. Send the user to **wp-admin →
|
|
@@ -606,7 +615,7 @@ guessing — and without rotating the user's key unnecessarily.
|
|
|
606
615
|
- WordPress: "wp-admin → Tools → YT Builder MCP → Bearer Keys."
|
|
607
616
|
Joomla: "Components → YT Builder MCP → Bearer Keys."
|
|
608
617
|
- "Click 'Generate New Key', pick the scope (admin for full access)."
|
|
609
|
-
- "Copy the key
|
|
618
|
+
- "Copy the key. It's shown ONCE; you cannot recover it later."
|
|
610
619
|
- "Update your AI client config: replace `YTB_MCP_BEARER_TOKEN`
|
|
611
620
|
with the new key. The fastest way is to re-run
|
|
612
621
|
`npx -y @wootsup/yt-builder-mcp setup`."
|
|
@@ -618,7 +627,7 @@ guessing — and without rotating the user's key unnecessarily.
|
|
|
618
627
|
**Common pitfalls:**
|
|
619
628
|
|
|
620
629
|
- **Treating 401 as a network error.** A network error has no HTTP
|
|
621
|
-
status
|
|
630
|
+
status. It's a TCP/TLS / DNS failure. 401 means the server
|
|
622
631
|
responded "I do not accept this key", which is fundamentally a
|
|
623
632
|
config problem.
|
|
624
633
|
- **Stripping the `Bearer ` prefix.** The MCP server adds it
|
|
@@ -631,12 +640,12 @@ guessing — and without rotating the user's key unnecessarily.
|
|
|
631
640
|
- **Confusing 401 with 403.** 401 = "I don't recognise this key"
|
|
632
641
|
(rotate). 403 = "I recognise the key but it lacks the required
|
|
633
642
|
scope" (regenerate with higher scope). Different error codes,
|
|
634
|
-
different recovery
|
|
643
|
+
different recovery. Never collapse them into one branch.
|
|
635
644
|
|
|
636
645
|
**Worked example (tool-call snippet):**
|
|
637
646
|
|
|
638
647
|
```jsonc
|
|
639
|
-
// First
|
|
648
|
+
// First. Never retry blindly. Call diagnose (no args).
|
|
640
649
|
yootheme_builder_diagnose({})
|
|
641
650
|
// Response shape:
|
|
642
651
|
// {
|
|
@@ -654,7 +663,7 @@ yootheme_builder_diagnose({})
|
|
|
654
663
|
```
|
|
655
664
|
|
|
656
665
|
**Edge case:** `plugin_reachable: true` but `yootheme_loaded: false`
|
|
657
|
-
|
|
666
|
+
means the user installed the MCP host plugin but YOOtheme Pro itself
|
|
658
667
|
isn't active. The MCP server still answers, but every tool that
|
|
659
668
|
touches the YOOtheme layout returns an empty/error response. Surface
|
|
660
669
|
the mismatch ("YOOtheme Pro is not active on this install") instead
|
|
@@ -674,28 +683,28 @@ YOOtheme install (built-ins + YOOtheme Pro + YOOessentials + child
|
|
|
674
683
|
theme + plugin-contributed elements), pick the right one, and place
|
|
675
684
|
an instance with a sensible default props payload.
|
|
676
685
|
|
|
677
|
-
**Canonical tool-call sequence (real parameter names
|
|
686
|
+
**Canonical tool-call sequence (real parameter names, snake_case):**
|
|
678
687
|
|
|
679
|
-
1. `yootheme_builder_health
|
|
688
|
+
1. `yootheme_builder_health`: note the YOOtheme version. Custom
|
|
680
689
|
elements often require a minimum YOOtheme major.
|
|
681
690
|
2. `yootheme_builder_element_types_list({ fields: ["name", "label", "origin"] })`
|
|
682
|
-
|
|
691
|
+
narrows the catalogue with sparse-fields. Returns rows like
|
|
683
692
|
`{ name: "headline", label: "Headline", origin: "core", ... }`.
|
|
684
693
|
3. `yootheme_builder_element_type_get_schema({ type_name: "<picked>" })`
|
|
685
|
-
|
|
694
|
+
fetches the prop schema for the chosen type. Returns the field
|
|
686
695
|
definitions you can pass via `props`. Note: the parameter is
|
|
687
696
|
`type_name`, not `name`.
|
|
688
697
|
4. `yootheme_builder_pages_list({ fields: ["id", "label"] })` and
|
|
689
698
|
`yootheme_builder_page_get_layout({ template_id, flat: false })`
|
|
690
|
-
|
|
699
|
+
locate the `parent_path` (JSON-Pointer) where the new element
|
|
691
700
|
should land.
|
|
692
|
-
5. `yootheme_builder_get_etag()
|
|
701
|
+
5. `yootheme_builder_get_etag()`: fetch the optimistic-lock etag.
|
|
693
702
|
6. `yootheme_builder_element_add({ template_id, parent_path: "<path>", element_type: "<picked-name>", props: { ... }, etag })`
|
|
694
|
-
|
|
703
|
+
asks the server to validate `props` against the type schema and
|
|
695
704
|
returns a structured `validation` error with a per-field issue
|
|
696
705
|
list if anything is missing or malformed.
|
|
697
706
|
7. (Optional) `yootheme_builder_element_update_settings({ template_id, element_path: "<new-path>", props: { ... }, etag })`
|
|
698
|
-
|
|
707
|
+
iterates on the props. **Note: this REPLACES `props` entirely by
|
|
699
708
|
default; pass `merge: true` for a server-side deep-merge.** When
|
|
700
709
|
replacing, include every key you want to keep.
|
|
701
710
|
8. `yootheme_builder_advanced({ tool: "yootheme_builder_page_save", input: { template_id, etag } })`
|
|
@@ -719,7 +728,7 @@ an instance with a sensible default props payload.
|
|
|
719
728
|
element may not register a prop schema. In that case
|
|
720
729
|
`yootheme_builder_element_type_get_schema` returns an empty/sparse
|
|
721
730
|
schema and the server accepts arbitrary `props`. Don't assume "no
|
|
722
|
-
schema = no required fields"
|
|
731
|
+
schema = no required fields". Read the third-party element's
|
|
723
732
|
docs.
|
|
724
733
|
- **Type name vs. label confusion.** The `name` field on the
|
|
725
734
|
catalogue row is the machine identifier (e.g. `pro_slider`); the
|
|
@@ -732,17 +741,17 @@ an instance with a sensible default props payload.
|
|
|
732
741
|
**Worked example (tool-call snippet):**
|
|
733
742
|
|
|
734
743
|
```jsonc
|
|
735
|
-
// Step 2
|
|
744
|
+
// Step 2. Narrow the catalogue with sparse-fields to save tokens.
|
|
736
745
|
yootheme_builder_element_types_list({
|
|
737
746
|
fields: ["name", "label", "origin"]
|
|
738
747
|
})
|
|
739
748
|
// Rows: [{ name: "headline", label: "Headline", origin: "core" }, ...]
|
|
740
749
|
|
|
741
|
-
// Step 3
|
|
750
|
+
// Step 3. Fetch the schema (note: type_name, not name).
|
|
742
751
|
yootheme_builder_element_type_get_schema({ type_name: "headline" })
|
|
743
752
|
// Returns the field definitions for the headline's `props`.
|
|
744
753
|
|
|
745
|
-
// Step 6
|
|
754
|
+
// Step 6. Place the element.
|
|
746
755
|
yootheme_builder_element_add({
|
|
747
756
|
template_id: "home",
|
|
748
757
|
parent_path: "/0/children/2", // row inside section
|
|
@@ -756,7 +765,7 @@ yootheme_builder_element_add({
|
|
|
756
765
|
**Edge case:** A child theme can override a built-in element's
|
|
757
766
|
schema in PHP. The `origin` field will read `child_theme` instead
|
|
758
767
|
of `core`. If you see surprising required keys, that's the override
|
|
759
|
-
talking
|
|
768
|
+
talking. Surface this to the user so they know their theme is
|
|
760
769
|
customising element defaults.
|
|
761
770
|
|
|
762
771
|
**Success criterion:** After publish, the front-end shows the new
|
|
@@ -774,7 +783,7 @@ and the props payload you passed.
|
|
|
774
783
|
re-creating.
|
|
775
784
|
- **Delete an element**: use `yootheme_builder_element_delete({
|
|
776
785
|
template_id, element_path, etag, confirm: true })`.
|
|
777
|
-
Elicitation-aware
|
|
786
|
+
Elicitation-aware. Confirms via the AI client prompt before
|
|
778
787
|
destroying state when `confirm` is omitted. On hosts without
|
|
779
788
|
elicitation, it returns a preview-with-confirm-required response;
|
|
780
789
|
call again with `confirm: true`.
|
|
@@ -785,7 +794,7 @@ and the props payload you passed.
|
|
|
785
794
|
type without fetching the whole nested tree): call through the
|
|
786
795
|
gateway: `yootheme_builder_advanced({ tool: "yootheme_builder_page_get_schema", input: { template_id } })`.
|
|
787
796
|
- **Etag-only fetch** (e.g. polling for concurrent edits): use
|
|
788
|
-
`yootheme_builder_get_etag()` (takes no arguments)
|
|
797
|
+
`yootheme_builder_get_etag()` (takes no arguments) is cheaper than
|
|
789
798
|
fetching the full layout.
|
|
790
799
|
- **Find a public/front-end URL for a template** (404 test page,
|
|
791
800
|
homepage URL, etc.): call
|
|
@@ -812,7 +821,7 @@ Joomla administrator access." Don't fabricate tool calls.
|
|
|
812
821
|
|
|
813
822
|
<!-- TOOL-CATALOG:BEGIN -->
|
|
814
823
|
|
|
815
|
-
**26 tools**
|
|
824
|
+
**26 catalogued tools** plus the `yootheme_builder_advanced` gateway = **27 reachable via `tools/list`** (17 L1 + 2 L3 + 1 gateway = 20 advertised; the gateway routes to 7 additional advanced tools, bringing the total to 27 callable). Generated by `scripts/extract-tools.mjs` from the compiled `buildAllTools()` registry. Do not hand-edit this section; re-run `npm run build && node scripts/extract-tools.mjs` after changing tool definitions.
|
|
816
825
|
|
|
817
826
|
| Tool | Kind | Input keys | Description |
|
|
818
827
|
| --- | --- | --- | --- |
|
|
@@ -823,24 +832,24 @@ Joomla administrator access." Don't fabricate tool calls.
|
|
|
823
832
|
| `yootheme_builder_element_clone` | mutating | `element_path`, `etag`, `site_id`, `template_id` | Clone an element as a sibling (same parent, immediately after the source). Returns the new element's path. Requires ETag. Operates on the default site unless site_id is provided. |
|
|
824
833
|
| `yootheme_builder_element_delete` | destructive | `confirm`, `element_path`, `etag`, `site_id`, `template_id` | PERMANENTLY delete an element and all its children. Cannot be undone. Always ask the user to confirm first, then call again with `confirm: true`. Requires ETag. Operates on the default site unless site_id is provided. |
|
|
825
834
|
| `yootheme_builder_element_get` | read+idempotent | `element_path`, `site_id`, `template_id` | Get the full element object at a specific JSON-Pointer path, including props and children. Use yootheme_builder_element_list to discover paths. Operates on the default site unless site_id is provided. |
|
|
826
|
-
| `yootheme_builder_element_get_binding` | read+idempotent | `element_path`, `site_id`, `template_id` | Read the source binding attached to an element
|
|
835
|
+
| `yootheme_builder_element_get_binding` | read+idempotent | `element_path`, `site_id`, `template_id` | Read the source binding attached to an element: the bound source name, the field-mappings (which source field feeds which element prop) and the query arguments/directives. Returns the empty object if the element is not bound. Operates on the default site unless site_id is provided. |
|
|
827
836
|
| `yootheme_builder_element_list` | read+idempotent | `cursor`, `depth`, `fields`, `limit`, `root_path`, `site_id`, `template_id` | List elements in a template as a flat array with JSON-Pointer paths + types. Scope with `root_path`/`depth` for a subtree, paginate with `limit`/`cursor` for large templates. `fields[]` narrows each row. Operates on the default site unless site_id is provided. |
|
|
828
837
|
| `yootheme_builder_element_move` | idempotent | `element_path`, `etag`, `site_id`, `template_id`, `to_index`, `to_parent_path` | Move an element to a new parent + index in the tree. Useful for reordering or reparenting (e.g. moving a card from one grid column to another). Requires ETag. Operates on the default site unless site_id is provided. |
|
|
829
|
-
| `yootheme_builder_element_type_get_schema` | read+idempotent | `element_type`, `site_id`, `type_name` | **Call before every `element_add` / `_update_settings
|
|
838
|
+
| `yootheme_builder_element_type_get_schema` | read+idempotent | `element_type`, `site_id`, `type_name` | **Call before every `element_add` / `_update_settings`.** Unknown prop keys are silently dropped server-side, so guessing fails quietly. Returns `{name,type,label?}` field descriptors. Use `element_type`; `type_name` is DEPRECATED. Operates on the default site unless site_id is provided. |
|
|
830
839
|
| `yootheme_builder_element_types_list` | read+idempotent | `fields`, `site_id` | List element types registered on this site (built-ins + YOOessentials/uEssentials extras). Names feed `element_type` of element_add. Pass `fields[]` to narrow each row. Operates on the default site unless site_id is provided. |
|
|
831
|
-
| `yootheme_builder_element_unbind_source` | destructive | `confirm`, `element_path`, `etag`, `site_id`, `template_id` | Remove the source binding from an element. Clears `props.source`. Destructive in the sense that it may break dynamic-content rendering
|
|
832
|
-
| `yootheme_builder_element_update_settings` | idempotent | `element_path`, `etag`, `merge`, `props`, `site_id`, `template_id` | Update `props` on an element. Default replaces all props; pass `merge:true` for server-side deep-merge (only request keys overwritten, others survive
|
|
833
|
-
| `yootheme_builder_get_etag` | read+idempotent | `site_id` | Get the current
|
|
840
|
+
| `yootheme_builder_element_unbind_source` | destructive | `confirm`, `element_path`, `etag`, `site_id`, `template_id` | Remove the source binding from an element. Clears `props.source`. Destructive in the sense that it may break dynamic-content rendering, so always ask the user to confirm. Requires ETag. Operates on the default site unless site_id is provided. |
|
|
841
|
+
| `yootheme_builder_element_update_settings` | idempotent | `element_path`, `etag`, `merge`, `props`, `site_id`, `template_id` | Update `props` on an element. Default replaces all props; pass `merge:true` for server-side deep-merge (only request keys overwritten, others survive, which avoids read-modify-write races). Requires ETag. Operates on the default site unless site_id is provided. |
|
|
842
|
+
| `yootheme_builder_get_etag` | read+idempotent | `site_id` | Get the current ETag (state revision) for the YOOtheme builder. Returns sha256+revision string used for optimistic locking on writes. Pass the returned value back as `etag` on any write tool (page_save, page_publish, element_add, element_update_settings, element_clone, element_move, element_delete). The server returns HTTP 412 if the ETag has changed since you read it. Keywords: get etag, current etag, state revision, optimistic lock, version stamp. Operates on the default site unless site_id is provided. |
|
|
834
843
|
| `yootheme_builder_health` | read+idempotent | `site_id` | Check plugin installed/reachable. Returns plugin version, YT Pro version, REST endpoints. Authenticated payload adds site_url + home_url for deep-linking. See yootheme_builder_diagnose for Bearer-validity + connectivity summary. Operates on the default site unless site_id is provided. |
|
|
835
844
|
| `yootheme_builder_inspect_multi_items_binding` | read+idempotent | `element_path`, `site_id`, `template_id` | Reports Multi-Items binding state: container/item pair (grid↔grid_item, slideshow↔slideshow_item, …), current binding level (none\|container\|item), and a recommended_fix when the binding sits on the container instead of the child. Operates on the default site unless site_id is provided. |
|
|
836
845
|
| `yootheme_builder_page_get_layout` | read+idempotent | `fields`, `flat`, `site_id`, `template_id` | Get full layout tree for one template. Default nested `{layout, etag}`. Set `flat:true` for depth-first array `{elements:[...], etag}`; combine with `fields[]` to project per-element. Operates on the default site unless site_id is provided. |
|
|
837
|
-
| `yootheme_builder_page_get_schema` | read+idempotent | `site_id`, `template_id` | Get the flat schema for a template
|
|
838
|
-
| `yootheme_builder_page_publish` | idempotent | `etag`, `site_id`, `template_id` | Publish a template
|
|
839
|
-
| `yootheme_builder_page_save` | idempotent | `etag`, `site_id`, `template_id` | Re-run save-transforms and persist. ETag optional
|
|
840
|
-
| `yootheme_builder_pages_list` | read+idempotent | `fields`, `site_id` | List
|
|
841
|
-
| `yootheme_builder_sites_list` | read+idempotent | `site_id` | List
|
|
842
|
-
| `yootheme_builder_sites_test` | read+idempotent | `site_id` | Verify connectivity to ONE
|
|
843
|
-
| `yootheme_builder_sources_list` | read+idempotent | `fields`, `site_id` | List
|
|
844
|
-
| `yootheme_builder_template_summary` | read+idempotent | `site_id`, `template_id` | Token-efficient template overview: element counts by type, binding count, max nesting depth, and named landmark sections
|
|
846
|
+
| `yootheme_builder_page_get_schema` | read+idempotent | `site_id`, `template_id` | Get the flat schema for a template: a list of nodes with their JSON-Pointer paths and element types. Best entry-point for navigation: lighter than page_get_layout, sufficient to locate elements before editing. Operates on the default site unless site_id is provided. |
|
|
847
|
+
| `yootheme_builder_page_publish` | idempotent | `etag`, `site_id`, `template_id` | Publish a template: persist state, flush YT + WP caches, snapshot the published-state ETag. ETag optional. When provided, 412 on conflict; when omitted, last-write-wins. Recommended for collaborative edits. Operates on the default site unless site_id is provided. |
|
|
848
|
+
| `yootheme_builder_page_save` | idempotent | `etag`, `site_id`, `template_id` | Re-run save-transforms and persist. ETag optional. When provided, 412 on conflict; when omitted, last-write-wins. Recommended for collaborative edits. No-op when state is byte-identical (returns `no_changes:true`, ETag unchanged). Operates on the default site unless site_id is provided. |
|
|
849
|
+
| `yootheme_builder_pages_list` | read+idempotent | `fields`, `site_id` | List all pages, templates, and layouts in the YOOtheme Pro builder. Returns template_id, label, type, element count, and frontend_url per row. CALL THIS FIRST to discover available template IDs before any tool that needs a template_id (page_get_layout, element_list, page_get_schema, etc.). Keywords: list pages, list templates, list layouts, discover template_id, index, available templates, what pages exist. Pass `fields:["id","label"]` to slim. Returns ALL pages in one call (no pagination, typically <50 templates per site). Operates on the default site unless site_id is provided. |
|
|
850
|
+
| `yootheme_builder_sites_list` | read+idempotent | `site_id` | List all sites configured in this multi-site MCP installation. Returns site_id + URL + platform (wordpress\|joomla) + default flag per row. CALL THIS FIRST when working with a fresh MCP connection to discover available site_ids before targeting one with any other tool. Read-only, no REST calls. Keywords: list sites, list connections, list installations, discover site_id, available sites, configured sites, what sites exist, multi-site index. (site_id is accepted for schema-uniformity but ignored by this tool.) |
|
|
851
|
+
| `yootheme_builder_sites_test` | read+idempotent | `site_id` | Verify connectivity to ONE site: probes /health (no auth) + /etag (auth) in parallel; returns plugin_reachable + bearer_valid. `site_id` is REQUIRED. Use sites_list to find IDs. |
|
|
852
|
+
| `yootheme_builder_sources_list` | read+idempotent | `fields`, `site_id` | List all data sources, feeds, and dynamic content sources available in the YOOtheme Pro builder. Returns name + label + origin (apimapper / wordpress / joomla / essentials) per source. CALL THIS BEFORE binding any element to a data source. Pick a source name from the list and pass it to `element_bind_source`. Keywords: list sources, list data sources, list feeds, list bindings, dynamic content, available data, what sources exist. Pass `fields[]` to narrow each row. Operates on the default site unless site_id is provided. |
|
|
853
|
+
| `yootheme_builder_template_summary` | read+idempotent | `site_id`, `template_id` | Token-efficient template overview: element counts by type, binding count, max nesting depth, and named landmark sections, computed server-side in one call. Use this to grasp a large template before pulling element_list or page_get_layout. Operates on the default site unless site_id is provided. |
|
|
845
854
|
|
|
846
855
|
<!-- TOOL-CATALOG:END -->
|