@elementor/elementor-v3-mcp 4.1.0-754
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/dist/index.d.mts +70 -0
- package/dist/index.d.ts +70 -0
- package/dist/index.js +1161 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +1125 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +50 -0
- package/src/context.ts +211 -0
- package/src/elementor-mcp-server.ts +95 -0
- package/src/index.ts +22 -0
- package/src/init.ts +5 -0
- package/src/resources.ts +186 -0
- package/src/tools/ai-tool.ts +58 -0
- package/src/tools/dynamic-tool.ts +236 -0
- package/src/tools/index.ts +6 -0
- package/src/tools/page-tool.ts +222 -0
- package/src/tools/routes-tool.ts +138 -0
- package/src/tools/styling-tool.ts +131 -0
- package/src/tools/ui-tool.ts +100 -0
- package/src/types.ts +120 -0
- package/src/utils.ts +211 -0
- package/src/validation-helpers.ts +29 -0
- package/src/widget-mandatory-fields.ts +68 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/elementor-mcp-server.ts","../src/resources.ts","../src/utils.ts","../src/context.ts","../src/tools/ai-tool.ts","../src/tools/dynamic-tool.ts","../src/validation-helpers.ts","../src/tools/page-tool.ts","../src/tools/routes-tool.ts","../src/tools/styling-tool.ts","../src/tools/ui-tool.ts","../src/init.ts"],"sourcesContent":["export { createElementorServer } from './elementor-mcp-server';\n\nexport {\n\tRESOURCE_NAME_ELEMENT_SETTINGS,\n\tRESOURCE_NAME_PAGE_OVERVIEW,\n\tRESOURCE_NAME_PAGE_SETTINGS,\n\tRESOURCE_NAME_WIDGET_CONFIG,\n\tRESOURCE_URI_ELEMENT_SETTINGS_TEMPLATE,\n\tRESOURCE_URI_PAGE_OVERVIEW,\n\tRESOURCE_URI_PAGE_SETTINGS,\n\tRESOURCE_URI_WIDGET_CONFIG_TEMPLATE,\n} from './resources';\n\nexport type {\n\tElementorContainer,\n\tElementorControls,\n\tElementorControlsMapped,\n\tMcpToolResult,\n\tToolParams,\n} from './types';\n\nexport { init } from './init';\n","import { getAngieSdk } from '@elementor/editor-mcp';\nimport { waitForElementorEditor } from '@elementor/elementor-mcp-common';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\n\nimport { addElementorResources } from './resources';\nimport { addAiTool, addDynamicTool, addPageTool, addRoutesTool, addStylingTool, addUiTool } from './tools';\n\nconst SERVER_INSTRUCTIONS = `## Elementor Page Builder\n\n### Capabilities:\n**Page Management:**\n- Manage page settings, saving and routing pages\n- Control the editor UI, including switching between desktop, tablet, and mobile views\n\n**Global Styles:**\n- Work with global styles, helping manage shared design settings like colors and fonts across the site\n\n**AI-Powered Content Creation:**\n- Generate and edit text and insert it into the page\n- Generate images and place them on the canvas\n\n**Custom Styling & Code:**\n- Apply custom CSS to elements\n- Generate supported code snippets\n\n### Limitations:\n**Element Management (Not Supported):**\n- Cannot create or edit individual Elementor elements such as widgets or containers\n- Cannot build page layouts or create containers\n- Cannot modify widget-level settings\n- Cannot apply motion effects\n- Cannot reorder sections or perform detailed canvas-level edits\n- Cannot create fully designed or polished pages\n- Cannot fully resolve responsiveness issues\n- Support for these editor-level capabilities is planned for Editor V4\n\n**Theme Builder:**\n- Cannot create or manage Theme Builder templates, including headers, footers, single posts, archives, products, loop items, or 404 pages\n- Cannot set display conditions for templates\n- Cannot configure popup triggers and advanced rules\n\n**System Settings:**\n- Cannot change Elementor system-level settings\n- Cannot activate or work with Editor V4\n- Cannot manage form submissions\n- Cannot add custom fonts or icons\n- Cannot manage user roles\n- Cannot roll back Elementor versions\n- Cannot place the site in maintenance mode\n- Cannot export the website\n- Cannot apply full website templates\n\n**Code & Widgets:**\n- Cannot register PHP code or create new custom widgets, though Angie may provide guidance, code snippets, or plugin suggestions where helpful\n\n**Note**: While page names can include terms like \"header\" or \"footer\", these won't function as actual theme parts without Theme Builder access.\n\n**Important**: When users ask \"What can Angie do?\" or similar questions about Angie's general capabilities, use the \\`what-can-angie-do\\` tool from the knowledge MCP server instead of generating your own response.`;\n\nconst VERSION = '2.0.0';\n\nexport async function createElementorServer(): Promise< McpServer > {\n\tawait waitForElementorEditor();\n\n\tconst server = new McpServer(\n\t\t{\n\t\t\tname: 'elementor-server',\n\t\t\tversion: VERSION,\n\t\t\ttitle: 'Elementor',\n\t\t},\n\t\t{\n\t\t\tinstructions: SERVER_INSTRUCTIONS,\n\t\t\tcapabilities: {\n\t\t\t\tresources: {\n\t\t\t\t\tsubscribe: true,\n\t\t\t\t},\n\t\t\t},\n\t\t}\n\t);\n\n\taddElementorResources( server );\n\n\taddPageTool( server );\n\taddUiTool( server );\n\taddDynamicTool( server );\n\taddRoutesTool( server );\n\taddAiTool( server );\n\taddStylingTool( server );\n\n\tconst sdk = getAngieSdk();\n\tawait sdk.waitForReady();\n\tsdk.registerLocalServer( { server, version: VERSION, description: SERVER_INSTRUCTIONS, name: 'Elementor' } );\n\n\treturn server;\n}\n","import { type McpServer, ResourceTemplate } from '@modelcontextprotocol/sdk/server/mcp.js';\n\nimport { getPageOverView, loadDocumentSchema, loadDocumentSettings } from './context';\nimport type { ElementorControls } from './types';\nimport { encodeToolJson, getElementor } from './utils';\n\nexport const RESOURCE_NAME_ELEMENT_SETTINGS = 'elementor-element-settings';\nexport const RESOURCE_URI_ELEMENT_SETTINGS_TEMPLATE = 'elementor://editor/element-settings/{elementId}';\n\nexport const RESOURCE_NAME_WIDGET_CONFIG = 'elementor-widget-config';\nexport const RESOURCE_URI_WIDGET_CONFIG_TEMPLATE = 'elementor://editor/widget-config/{widgetType}';\n\nexport const RESOURCE_NAME_PAGE_OVERVIEW = 'elementor-page-overview';\nexport const RESOURCE_URI_PAGE_OVERVIEW = 'elementor://editor/page-overview';\n\nexport const RESOURCE_NAME_PAGE_SETTINGS = 'elementor-page-settings';\nexport const RESOURCE_URI_PAGE_SETTINGS = 'elementor://editor/page-settings';\n\nexport function decodeResourceVariable( value: string ): string {\n\ttry {\n\t\tlet decoded = decodeURIComponent( value ).replace( /[·]/g, '' );\n\t\tdecoded = decoded.replace( /^{|}$/g, '' );\n\t\treturn decoded;\n\t} catch {\n\t\treturn value;\n\t}\n}\n\nasync function handleGetWidgetSettings( params: { elementId: string; action: string } ): Promise< {\n\tcontent: [ { type: 'text'; text: string } ];\n} > {\n\tconst elementor = getElementor();\n\tconst container = elementor?.getContainer( params.elementId );\n\tif ( ! container ) {\n\t\tthrow new Error( `Element with ID ${ params.elementId } not found.` );\n\t}\n\n\tconst settings = container.settings.attributes || {};\n\treturn {\n\t\tcontent: [ { type: 'text', text: encodeToolJson( settings ) } ],\n\t};\n}\n\nasync function handleGetWidgetSchema( params: { widgetType: string; action: string } ): Promise< {\n\tcontent: [ { type: 'text'; text: string } ];\n} > {\n\tconst elementor = getElementor();\n\tconst controls = elementor?.widgetsCache[ params.widgetType ]?.controls as ElementorControls | undefined;\n\tif ( ! controls ) {\n\t\tthrow new Error( `Widget type ${ params.widgetType } not found.` );\n\t}\n\n\treturn {\n\t\tcontent: [ { type: 'text', text: encodeToolJson( controls ) } ],\n\t};\n}\n\nexport function addElementorResources( server: McpServer ): void {\n\tserver.resource(\n\t\tRESOURCE_NAME_PAGE_OVERVIEW,\n\t\tRESOURCE_URI_PAGE_OVERVIEW,\n\t\t{\n\t\t\tdescription:\n\t\t\t\t'Complete page structure showing all elements, containers, and their hierarchical relationships on the current Elementor page',\n\t\t},\n\t\tasync ( uri ) => {\n\t\t\tconst overview = getPageOverView();\n\n\t\t\tif ( ! overview || overview.error ) {\n\t\t\t\tthrow new Error( overview?.error || 'Failed to retrieve page overview' );\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tcontents: [\n\t\t\t\t\t{\n\t\t\t\t\t\turi: uri.toString(),\n\t\t\t\t\t\tmimeType: 'application/json',\n\t\t\t\t\t\ttext: encodeToolJson( overview ),\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t};\n\t\t}\n\t);\n\n\tserver.resource(\n\t\tRESOURCE_NAME_PAGE_SETTINGS,\n\t\tRESOURCE_URI_PAGE_SETTINGS,\n\t\t{\n\t\t\tdescription:\n\t\t\t\t'Page/document settings schema and current values including title, template, margins, padding, and backgrounds',\n\t\t},\n\t\tasync ( uri ) => {\n\t\t\tconst elementor = getElementor();\n\t\t\tconst currentDocument = elementor?.documents?.getCurrent();\n\t\t\tif ( ! currentDocument ) {\n\t\t\t\tthrow new Error( 'No active document found' );\n\t\t\t}\n\n\t\t\tconst documentSchema = loadDocumentSchema( currentDocument.id );\n\t\t\tconst documentSettings = loadDocumentSettings( currentDocument.id );\n\n\t\t\tif ( ! documentSchema || ! documentSettings ) {\n\t\t\t\tthrow new Error( 'Failed to retrieve page settings' );\n\t\t\t}\n\n\t\t\tconst result = {\n\t\t\t\tschema: documentSchema,\n\t\t\t\tcurrentSettings: documentSettings,\n\t\t\t};\n\n\t\t\treturn {\n\t\t\t\tcontents: [\n\t\t\t\t\t{\n\t\t\t\t\t\turi: uri.toString(),\n\t\t\t\t\t\tmimeType: 'application/json',\n\t\t\t\t\t\ttext: encodeToolJson( result ),\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t};\n\t\t}\n\t);\n\n\tserver.resource(\n\t\tRESOURCE_NAME_ELEMENT_SETTINGS,\n\t\tnew ResourceTemplate( RESOURCE_URI_ELEMENT_SETTINGS_TEMPLATE, {\n\t\t\tlist: undefined,\n\t\t} ),\n\t\t{\n\t\t\tdescription:\n\t\t\t\t'Complete settings schema and current values for a specific element, including all available configuration options and their current state',\n\t\t},\n\t\tasync ( uri, variables ) => {\n\t\t\tlet elementId = Array.isArray( variables.elementId ) ? variables.elementId[ 0 ] : variables.elementId;\n\n\t\t\tif ( ! elementId ) {\n\t\t\t\tthrow new Error( 'Element ID is required' );\n\t\t\t}\n\n\t\t\telementId = decodeResourceVariable( elementId );\n\n\t\t\tconst result = await handleGetWidgetSettings( { elementId, action: 'get-widget-settings' } );\n\n\t\t\treturn {\n\t\t\t\tcontents: [\n\t\t\t\t\t{\n\t\t\t\t\t\turi: uri.toString(),\n\t\t\t\t\t\tmimeType: 'text/plain',\n\t\t\t\t\t\ttext: result.content[ 0 ].text,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t};\n\t\t}\n\t);\n\n\tserver.resource(\n\t\tRESOURCE_NAME_WIDGET_CONFIG,\n\t\tnew ResourceTemplate( RESOURCE_URI_WIDGET_CONFIG_TEMPLATE, {\n\t\t\tlist: undefined,\n\t\t} ),\n\t\t{\n\t\t\tdescription:\n\t\t\t\t'Complete configuration schema for a specific widget type, showing all available settings, properties, and their expected formats',\n\t\t},\n\t\tasync ( uri, variables ) => {\n\t\t\tlet widgetType = Array.isArray( variables.widgetType ) ? variables.widgetType[ 0 ] : variables.widgetType;\n\n\t\t\tif ( ! widgetType ) {\n\t\t\t\tthrow new Error( 'Widget type is required' );\n\t\t\t}\n\n\t\t\twidgetType = decodeResourceVariable( widgetType );\n\n\t\t\tconst result = await handleGetWidgetSchema( { widgetType, action: 'get-widget-schema' } );\n\n\t\t\treturn {\n\t\t\t\tcontents: [\n\t\t\t\t\t{\n\t\t\t\t\t\turi: uri.toString(),\n\t\t\t\t\t\tmimeType: 'text/plain',\n\t\t\t\t\t\ttext: result.content[ 0 ].text,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t};\n\t\t}\n\t);\n}\n","import type {\n\tElementorCommandsInstance,\n\tElementorCommonInstance,\n\tElementorContainer,\n\tElementorInstance,\n} from './types';\nimport { widgetMandatoryFields } from './widget-mandatory-fields';\n\ninterface McpWindow {\n\telementor?: ElementorInstance;\n\t$e?: ElementorCommandsInstance;\n\telementorCommon?: ElementorCommonInstance;\n}\n\nexport const getElementor = (): ElementorInstance | undefined => ( window as unknown as McpWindow ).elementor;\n\nexport const get$e = (): ElementorCommandsInstance | undefined => ( window as unknown as McpWindow ).$e;\n\nexport const getElementorCommon = (): ElementorCommonInstance | undefined =>\n\t( window as unknown as McpWindow ).elementorCommon;\n\nexport async function updateRepeaterControl(\n\tcontainer: ElementorContainer,\n\trepeaterName: string,\n\twidgetType: string,\n\tsettings: Record< string, unknown >\n): Promise< Record< string, unknown >[] > {\n\tconst repeaterControl = getElementor()?.widgetsCache?.[ widgetType ]?.controls?.[ repeaterName ] as {\n\t\tfields?: Record< string, { default?: unknown } >;\n\t};\n\tconst existingAttribute = container.settings?.attributes?.[ repeaterName ] as { models?: unknown[] };\n\tlet existingItemsCount = existingAttribute?.models?.length ?? 0;\n\tconst repeaterModel: Record< string, unknown > = {};\n\tconst insertedModels: Record< string, unknown >[] = [];\n\n\tObject.keys( repeaterControl?.fields ?? {} ).forEach( ( fieldKey ) => {\n\t\tconst field = repeaterControl?.fields?.[ fieldKey ];\n\t\trepeaterModel[ fieldKey ] = field?.default || '';\n\t} );\n\n\tconst repeaterValues = settings[ repeaterName ] as Record< string, unknown >[];\n\trepeaterValues.forEach( ( val ) => {\n\t\tconst itemModel: Record< string, unknown > = {};\n\t\tObject.keys( repeaterModel ).forEach( ( fieldKey ) => {\n\t\t\titemModel[ fieldKey ] = val[ fieldKey ] ?? repeaterModel[ fieldKey ];\n\t\t} );\n\t\titemModel._id = getElementorCommon()?.helpers?.getUniqueId?.();\n\n\t\tget$e()?.run( 'document/repeater/insert', {\n\t\t\tcontainer,\n\t\t\tname: repeaterName,\n\t\t\tmodel: itemModel,\n\t\t} );\n\n\t\tinsertedModels.push( itemModel );\n\t} );\n\n\twhile ( existingItemsCount-- ) {\n\t\tawait get$e()?.run( 'document/repeater/remove', { container, name: repeaterName, index: 0 } );\n\t}\n\n\treturn insertedModels;\n}\n\nexport function addMandatoryFields( settings: Record< string, unknown > ): Record< string, unknown > {\n\tconst missingFields: Record< string, unknown > = {};\n\n\tObject.keys( settings ).forEach( ( settingKey ) => {\n\t\tconst mandatoryFields = widgetMandatoryFields[ settingKey ];\n\n\t\tmandatoryFields?.forEach( ( mandatoryField ) => {\n\t\t\tif ( ! settings[ mandatoryField.mandatory ] ) {\n\t\t\t\tsettings[ mandatoryField.mandatory ] = mandatoryField.default;\n\t\t\t\tmissingFields[ mandatoryField.mandatory ] = mandatoryField.default;\n\t\t\t}\n\t\t} );\n\t} );\n\n\treturn missingFields;\n}\n\nexport function getCurrentSelection(): string[] {\n\treturn Object.keys( getElementor()?.selection?.elements || {} );\n}\n\nexport async function restoreCurrentSelection( selectedElementId: string | null ): Promise< void > {\n\tconst elementor = getElementor();\n\tconst $e = get$e();\n\tif ( selectedElementId && elementor && $e ) {\n\t\ttry {\n\t\t\tawait $e.run( 'document/elements/select', {\n\t\t\t\tcontainer: elementor.getContainer( selectedElementId ),\n\t\t\t} );\n\t\t} catch {\n\t\t\t// Unable to restore selection\n\t\t}\n\t}\n}\n\nfunction convertToGlobalFormat( settings: Record< string, unknown > ): Record< string, string > {\n\tconst converted: Record< string, string > = {};\n\n\tfor ( const [ key, value ] of Object.entries( settings ) ) {\n\t\tif ( typeof value === 'string' && value.startsWith( 'globals/' ) ) {\n\t\t\tconverted[ key ] = value;\n\t\t} else if ( key.includes( 'typography' ) ) {\n\t\t\tconverted[ key ] = `globals/typography?id=${ value }`;\n\t\t} else {\n\t\t\tconverted[ key ] = `globals/colors?id=${ value }`;\n\t\t}\n\t}\n\n\treturn converted;\n}\n\nexport async function extractAndApplyGlobalStyles(\n\tsettings: Record< string, unknown >,\n\telementId: string\n): Promise< { globalStyles: Record< string, string >; remainingSettings: Record< string, unknown > } > {\n\tconst globalStyles = ( settings.__globals__ || {} ) as Record< string, string >;\n\tconst remainingSettings: Record< string, unknown > = {};\n\n\tObject.keys( settings ).forEach( ( key ) => {\n\t\tif ( key === '__globals__' ) {\n\t\t\treturn;\n\t\t}\n\t\tremainingSettings[ key ] = settings[ key ];\n\t} );\n\n\tconst $e = get$e();\n\tif ( ! $e?.data?.get ) {\n\t\treturn { globalStyles, remainingSettings };\n\t}\n\n\tconst globalColorsResult = ( await $e.data.get( 'globals/colors' ) ) as\n\t\t| {\n\t\t\t\tdata: Record< string, { value: unknown } >;\n\t\t }\n\t\t| undefined;\n\tconst globalTypographyResult = ( await $e.data.get( 'globals/typography' ) ) as\n\t\t| {\n\t\t\t\tdata: Record< string, { value: unknown } >;\n\t\t }\n\t\t| undefined;\n\n\tconst globalColors = globalColorsResult?.data ?? {};\n\tconst globalTypography = globalTypographyResult?.data ?? {};\n\n\tconst keysToRemove: string[] = [];\n\n\tObject.keys( remainingSettings ).forEach( ( key ) => {\n\t\tconst value = remainingSettings[ key ];\n\t\tif ( typeof value === 'string' && value ) {\n\t\t\tif ( globalColors[ value ] || globalTypography[ value ] ) {\n\t\t\t\tglobalStyles[ key ] = value;\n\t\t\t\tkeysToRemove.push( key );\n\t\t\t} else {\n\t\t\t\tconst globalColorKey = Object.keys( globalColors ).find(\n\t\t\t\t\t( globalKey ) => globalColors[ globalKey ]?.value === value\n\t\t\t\t);\n\t\t\t\tconst globalTypographyKey = Object.keys( globalTypography ).find( ( globalKey ) => {\n\t\t\t\t\tconst globalTypo = globalTypography[ globalKey ];\n\t\t\t\t\treturn globalTypo && JSON.stringify( globalTypo.value ) === JSON.stringify( value );\n\t\t\t\t} );\n\n\t\t\t\tif ( globalColorKey ) {\n\t\t\t\t\tglobalStyles[ key ] = globalColorKey;\n\t\t\t\t\tkeysToRemove.push( key );\n\t\t\t\t} else if ( globalTypographyKey ) {\n\t\t\t\t\tglobalStyles[ key ] = globalTypographyKey;\n\t\t\t\t\tkeysToRemove.push( key );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} );\n\n\tconst finalSettings: Record< string, unknown > = {};\n\tObject.keys( remainingSettings ).forEach( ( key ) => {\n\t\tif ( ! keysToRemove.includes( key ) ) {\n\t\t\tfinalSettings[ key ] = remainingSettings[ key ];\n\t\t}\n\t} );\n\n\tconst elementor = getElementor();\n\tif ( Object.keys( globalStyles ).length > 0 && elementor ) {\n\t\tconst container = elementor.getContainer( elementId );\n\t\tif ( container ) {\n\t\t\tconst convertedSettings = convertToGlobalFormat( globalStyles );\n\t\t\tawait $e?.run( 'document/globals/enable', {\n\t\t\t\tcontainer,\n\t\t\t\tsettings: convertedSettings,\n\t\t\t} );\n\t\t}\n\t}\n\n\treturn { globalStyles, remainingSettings: finalSettings };\n}\n\nexport function encodeToolJson( data: unknown ): string {\n\treturn JSON.stringify( data ).replaceAll( '\"', \"'\" );\n}\n\nexport function getElementType( elementId: string ): string {\n\tconst container = getElementor()?.getContainer( elementId );\n\n\tif ( ! container ) {\n\t\tthrow new Error( `Container with ID ${ elementId } not found.` );\n\t}\n\n\treturn ( container.model.attributes?.widgetType ?? 'container' ) as string;\n}\n","import type { ElementorContainer, ElementorControls, ElementorControlsMapped } from './types';\nimport { getElementor } from './utils';\n\nfunction deepMerge< T >( target: T, source: T ): T {\n\tif ( ! source || typeof source !== 'object' ) {\n\t\treturn target;\n\t}\n\tif ( ! target || typeof target !== 'object' ) {\n\t\treturn source;\n\t}\n\n\tconst result = { ...target } as Record< string, unknown >;\n\n\tfor ( const key of Object.keys( source as object ) ) {\n\t\tconst sourceValue = ( source as Record< string, unknown > )[ key ];\n\t\tconst targetValue = ( target as Record< string, unknown > )[ key ];\n\n\t\tif ( Array.isArray( sourceValue ) ) {\n\t\t\tresult[ key ] = sourceValue;\n\t\t} else if ( sourceValue && typeof sourceValue === 'object' ) {\n\t\t\tresult[ key ] = deepMerge( targetValue, sourceValue );\n\t\t} else {\n\t\t\tresult[ key ] = sourceValue;\n\t\t}\n\t}\n\n\treturn result as T;\n}\n\nexport function getPageOverView(): {\n\tdocumentId?: string;\n\tdocumentType?: string;\n\ttitle?: string;\n\telements?: Record< string, unknown >[];\n\terror?: string;\n} {\n\tconst document = getElementor()?.documents?.getCurrent();\n\tif ( ! document ) {\n\t\treturn { error: 'No active document found' };\n\t}\n\n\tfunction extractElementData( element: ElementorContainer ): Record< string, unknown > | null {\n\t\tif ( ! element || ! element.model ) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst model = element.model.attributes;\n\n\t\tif ( ! model ) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst result: Record< string, unknown > = {\n\t\t\tid: model.id,\n\t\t\telType: model.elType,\n\t\t\twidgetType: model.widgetType || undefined,\n\t\t};\n\n\t\tconst title = ( model.title as string ) || element.model.editor_settings?.title;\n\n\t\tif ( title ) {\n\t\t\tresult.title = title;\n\t\t}\n\n\t\tif ( element.children && element.children.length > 0 ) {\n\t\t\tresult.children = element.children\n\t\t\t\t.map( ( child: ElementorContainer ) => extractElementData( child ) )\n\t\t\t\t.filter( ( child ): child is Record< string, unknown > => child !== null );\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tconst containers = document.container.children ?? [];\n\tconst elements = containers.map( ( container: ElementorContainer ) => extractElementData( container ) );\n\n\treturn {\n\t\tdocumentId: document.id,\n\t\tdocumentType: document.config?.type ?? 'unknown',\n\t\ttitle: ( ( document.config?.settings as Record< string, unknown > )?.post_title as string ) || 'Untitled',\n\t\telements: elements.filter( ( el ): el is Record< string, unknown > => el !== null ),\n\t};\n}\n\nexport function getElementSettings( elementId: string ): Record< string, unknown > {\n\tconst container = getElementor()?.getContainer( elementId );\n\n\tif ( ! container ) {\n\t\tthrow new Error( `Container with ID ${ elementId } not found.` );\n\t}\n\n\tconst settings = container.settings.attributes || {};\n\tconst modelAttributes = container.model.attributes || {};\n\n\tconst cleanSettings: Record< string, unknown > = {};\n\tconst excludeModelAttributes = [ 'settings', 'editSettings', 'defaultEditSettings' ];\n\n\tObject.keys( { ...settings, ...modelAttributes } ).forEach( ( key ) => {\n\t\tconst settingsValue = settings[ key ];\n\t\tconst modelValue = modelAttributes[ key ];\n\t\tconst value = settingsValue !== undefined ? settingsValue : modelValue;\n\n\t\tif (\n\t\t\t! excludeModelAttributes.includes( key ) &&\n\t\t\ttypeof value !== 'function' &&\n\t\t\t! (\n\t\t\t\tvalue &&\n\t\t\t\ttypeof value === 'object' &&\n\t\t\t\t( value as { constructor?: { name?: string } } ).constructor?.name?.includes( 'Model' )\n\t\t\t)\n\t\t) {\n\t\t\tcleanSettings[ key ] = value;\n\t\t}\n\t} );\n\n\treturn cleanSettings;\n}\n\nfunction mapControlsToSchema( controlsData: ElementorControls ): ElementorControlsMapped {\n\tif ( ! controlsData || typeof controlsData !== 'object' ) {\n\t\treturn {};\n\t}\n\n\treturn Object.fromEntries(\n\t\tObject.entries( controlsData )\n\t\t\t.filter( ( [ , control ] ) => ! [ 'section', 'tab', 'tabs' ].includes( control.type ) )\n\t\t\t.map( ( [ controlKey, control ] ) => {\n\t\t\t\tlet options;\n\n\t\t\t\tconst controlConfig =\n\t\t\t\t\t( getElementor()?.config?.controls as Record< string, unknown > )?.[ control.type ] || {};\n\t\t\t\tconst completeConfig = deepMerge( controlConfig, control ) as Record< string, unknown >;\n\t\t\t\tconst returnValue = completeConfig.return_value;\n\n\t\t\t\tif ( completeConfig.options ) {\n\t\t\t\t\toptions = Object.keys( completeConfig.options as Record< string, unknown > );\n\t\t\t\t}\n\n\t\t\t\tlet fields;\n\n\t\t\t\tif ( completeConfig.fields ) {\n\t\t\t\t\tfields = mapControlsToSchema( completeConfig.fields as ElementorControls );\n\t\t\t\t}\n\n\t\t\t\tconst returnConfig: ElementorControlsMapped[ string ] = {\n\t\t\t\t\ttype: control.type,\n\t\t\t\t\tdefault: completeConfig.default as unknown,\n\t\t\t\t};\n\n\t\t\t\tif ( options ) {\n\t\t\t\t\treturnConfig.options = options;\n\t\t\t\t}\n\n\t\t\t\tif ( fields ) {\n\t\t\t\t\treturnConfig.fields = fields;\n\t\t\t\t}\n\n\t\t\t\tif ( completeConfig.size_units ) {\n\t\t\t\t\treturnConfig.size_units = completeConfig.size_units as string[];\n\t\t\t\t}\n\n\t\t\t\tif ( returnValue !== undefined ) {\n\t\t\t\t\treturnConfig.onValue = returnValue as string;\n\t\t\t\t}\n\n\t\t\t\treturn [ controlKey, returnConfig ];\n\t\t\t} )\n\t);\n}\n\nfunction getDocumentSchema( documentId: string ): ElementorControlsMapped | undefined {\n\tconst document = getElementor()?.documents?.get?.( documentId );\n\tif ( ! document ) {\n\t\treturn;\n\t}\n\n\tconst controls = document.config?.settings?.controls;\n\treturn mapControlsToSchema( controls as ElementorControls );\n}\n\nexport function getElementSchema( type: string ): ElementorControlsMapped {\n\tconst controls = getElementor()?.widgetsCache?.[ type ]?.controls;\n\treturn mapControlsToSchema( controls as ElementorControls );\n}\n\nexport function loadDocumentSettings( documentId: string ): Record< string, unknown > | undefined {\n\tconst document = getElementor()?.documents?.get?.( documentId );\n\tif ( ! document ) {\n\t\treturn;\n\t}\n\n\tconst allSettings = ( document.config?.settings as Record< string, unknown > )?.settings || {};\n\tconst controls = ( ( document.config?.settings as Record< string, unknown > )?.controls || {} ) as Record<\n\t\tstring,\n\t\t{ default?: unknown }\n\t>;\n\tconst result: Record< string, unknown > = {};\n\n\tObject.entries( allSettings ).forEach( ( [ controlKey, value ] ) => {\n\t\tconst control = controls[ controlKey ];\n\t\tif ( value !== control?.default ) {\n\t\t\tresult[ controlKey ] = value;\n\t\t}\n\t} );\n\n\treturn result;\n}\n\nexport function loadDocumentSchema( documentId: string ): ElementorControlsMapped | undefined {\n\treturn getDocumentSchema( documentId );\n}\n","import { z } from '@elementor/schema';\nimport { type McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\n\nimport type { McpToolResult } from '../types';\nimport { get$e } from '../utils';\n\nexport function addAiTool( server: McpServer ): void {\n\tserver.registerTool(\n\t\t'ai',\n\t\t{\n\t\t\tdescription: 'Manage Elementor AI integration features and interfaces.',\n\t\t\tinputSchema: {\n\t\t\t\taction: z\n\t\t\t\t\t.enum( [ 'open-brand-voice', 'open-choose-element', 'open-text-to-elementor' ] )\n\t\t\t\t\t.describe( 'The AI operation to perform' ),\n\t\t\t},\n\t\t\tannotations: {\n\t\t\t\ttitle: 'Manage AI Integration',\n\t\t\t},\n\t\t},\n\t\tasync ( params ) => {\n\t\t\tswitch ( params.action ) {\n\t\t\t\tcase 'open-brand-voice':\n\t\t\t\t\treturn await handleOpenBrandVoice();\n\t\t\t\tcase 'open-choose-element':\n\t\t\t\t\treturn await handleOpenChooseElement();\n\t\t\t\tcase 'open-text-to-elementor':\n\t\t\t\t\treturn await handleOpenTextToElementor();\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error( `Unknown action: ${ params.action }` );\n\t\t\t}\n\t\t}\n\t);\n}\n\nasync function handleOpenBrandVoice(): Promise< McpToolResult > {\n\tawait get$e()?.run( 'ai-integration/open-brand-voice' );\n\n\treturn {\n\t\tcontent: [ { type: 'text', text: 'Brand Voice interface opened.' } ],\n\t};\n}\n\nasync function handleOpenChooseElement(): Promise< McpToolResult > {\n\tawait get$e()?.run( 'ai-integration/open-choose-element' );\n\n\treturn {\n\t\tcontent: [ { type: 'text', text: 'Choose Element interface opened.' } ],\n\t};\n}\n\nasync function handleOpenTextToElementor(): Promise< McpToolResult > {\n\tawait get$e()?.run( 'ai-integration/open-text-to-elementor' );\n\n\treturn {\n\t\tcontent: [ { type: 'text', text: 'Text to Elementor interface opened.' } ],\n\t};\n}\n","import { z } from '@elementor/schema';\nimport { type McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\n\nimport type { ElementorContainer, McpToolResult, ToolParams } from '../types';\nimport { get$e, getElementor, getElementorCommon } from '../utils';\nimport { validateDynamicTagDisabled, validateDynamicTagEnabled } from '../validation-helpers';\n\nexport function addDynamicTool( server: McpServer ): void {\n\tserver.registerTool(\n\t\t'dynamic',\n\t\t{\n\t\t\tdescription:\n\t\t\t\t'Manage dynamic-tags content for Elementor elements including getting dynamic settings, enabling and disabling dynamic tags.',\n\t\t\tinputSchema: {\n\t\t\t\taction: z\n\t\t\t\t\t.enum( [ 'get-settings', 'enable', 'disable' ] )\n\t\t\t\t\t.describe( 'The dynamic content operation to perform' ),\n\t\t\t\telementId: z.string().describe( 'The ID of the element to modify' ),\n\t\t\t\tcontrolName: z.string().describe( 'The name of the control/setting to make dynamic' ),\n\t\t\t\tdynamicName: z\n\t\t\t\t\t.string()\n\t\t\t\t\t.optional()\n\t\t\t\t\t.describe(\n\t\t\t\t\t\t'The name of the dynamic tag to enable. Required for enable action. Output of get-settings action.'\n\t\t\t\t\t),\n\t\t\t\tsettings: z\n\t\t\t\t\t.object( {} )\n\t\t\t\t\t.catchall( z.unknown() )\n\t\t\t\t\t.optional()\n\t\t\t\t\t.describe(\n\t\t\t\t\t\t'The settings to apply to the dynamic tag. Used with enable action. Output of get-settings action.'\n\t\t\t\t\t),\n\t\t\t\thasRunGetDynamicSettings: z\n\t\t\t\t\t.boolean()\n\t\t\t\t\t.optional()\n\t\t\t\t\t.describe(\n\t\t\t\t\t\t'Whether the get-settings action has already been run. Must be set to true when using enable action.'\n\t\t\t\t\t),\n\t\t\t},\n\t\t\tannotations: {\n\t\t\t\ttitle: 'Manage Dynamic Content',\n\t\t\t},\n\t\t},\n\t\tasync ( params: ToolParams ) => {\n\t\t\tswitch ( params.action ) {\n\t\t\t\tcase 'get-settings':\n\t\t\t\t\treturn await handleGetDynamicSettings( params );\n\t\t\t\tcase 'enable':\n\t\t\t\t\tif ( params.hasRunGetDynamicSettings !== true ) {\n\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t'get-dynamic-settings action has not been run. Run it first before using the enable action.'\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tif ( ! params.elementId || ! params.controlName || ! params.dynamicName || ! params.settings ) {\n\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t'elementId, controlName, dynamicName, and settings are required for dynamic enable'\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\treturn await handleDynamicEnable( params );\n\t\t\t\tcase 'disable':\n\t\t\t\t\tif ( ! params.elementId || ! params.controlName ) {\n\t\t\t\t\t\tthrow new Error( 'elementId and controlName are required for dynamic disable' );\n\t\t\t\t\t}\n\t\t\t\t\treturn await handleDynamicDisable( params );\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error( `Unknown action: ${ params.action }` );\n\t\t\t}\n\t\t}\n\t);\n}\n\nasync function handleGetDynamicSettings( params: ToolParams ): Promise< McpToolResult > {\n\tif ( ! params.elementId || ! params.controlName ) {\n\t\tthrow new Error( 'elementId and controlName are required for get-settings' );\n\t}\n\n\tconst elementor = getElementor();\n\tconst container = elementor?.getContainer( params.elementId as string );\n\tif ( ! container ) {\n\t\tthrow new Error( `Element with ID ${ params.elementId } not found.` );\n\t}\n\n\tconst controls = container.settings.controls as Record< string, { dynamic?: { categories?: string[] } } >;\n\tconst control = controls[ params.controlName as string ];\n\n\tif ( ! control ) {\n\t\tthrow new Error( `Control \"${ params.controlName }\" not found on element ${ params.elementId }.` );\n\t}\n\n\tif ( ! control.dynamic?.categories ) {\n\t\tthrow new Error( `Control \"${ params.controlName }\" does not support dynamic content.` );\n\t}\n\n\tconst { categories } = control.dynamic;\n\tconst dynamicTags = elementor?.dynamicTags;\n\n\tif ( ! dynamicTags?.getConfig ) {\n\t\tthrow new Error( 'Dynamic tags API is not available.' );\n\t}\n\n\tconst tags = dynamicTags.getConfig( 'tags' ) as Record< string, { categories: string[] } >;\n\tconst relevantTags = Object.values( tags ).filter( ( tag ) =>\n\t\ttag.categories.find( ( category ) => categories.includes( category ) )\n\t);\n\n\treturn {\n\t\tcontent: [ { type: 'text', text: JSON.stringify( relevantTags, null, 2 ) } ],\n\t};\n}\n\nasync function handleDynamicEnable( params: ToolParams ): Promise< McpToolResult > {\n\tif ( ! params.elementId || ! params.controlName || ! params.dynamicName ) {\n\t\tthrow new Error( 'elementId, controlName, and dynamicName are required for dynamic enable' );\n\t}\n\n\tif ( params.hasRunGetDynamicSettings !== true ) {\n\t\tthrow new Error( 'get-dynamic-settings action has not been run. Run it first before using the enable action.' );\n\t}\n\n\tconst elementor = getElementor();\n\tconst container = elementor?.getContainer( params.elementId as string );\n\tif ( ! container ) {\n\t\tthrow new Error( `Element with ID ${ params.elementId } not found.` );\n\t}\n\n\tconst dynamicName = ( params.dynamicName as string )\n\t\t.toLowerCase()\n\t\t.replace( /\\s+/g, '-' )\n\t\t.replace( /_/g, '-' )\n\t\t.replace( /[^a-z0-9-]/g, '' );\n\n\tconst settings = ( params.settings || {} ) as Record< string, unknown > & {\n\t\ttoJSON?: () => Record< string, unknown >;\n\t};\n\tsettings.toJSON = () => settings;\n\n\tconst elementorCommon = getElementorCommon();\n\tif ( ! elementorCommon?.helpers?.getUniqueId ) {\n\t\tthrow new Error( 'Elementor Common API is not available.' );\n\t}\n\n\tconst uniqueId = elementorCommon.helpers.getUniqueId();\n\n\tconst dynamicTags = elementor?.dynamicTags;\n\n\tif ( ! dynamicTags?.tagDataToTagText ) {\n\t\tthrow new Error( 'Dynamic tags API is not available.' );\n\t}\n\n\tconst tagText = dynamicTags.tagDataToTagText( String( uniqueId ), dynamicName, settings );\n\n\tawait get$e()?.run( 'document/dynamic/enable', {\n\t\tcontainer,\n\t\tsettings: { [ params.controlName as string ]: tagText },\n\t} );\n\n\tvalidateDynamicTagEnabled( container, params.controlName as string );\n\n\treturn {\n\t\tcontent: [\n\t\t\t{\n\t\t\t\ttype: 'text',\n\t\t\t\ttext: `Dynamic content enabled for element ${ params.elementId }, control \"${ params.controlName }\" with dynamic tag \"${ dynamicName }\": ${ tagText }`,\n\t\t\t},\n\t\t],\n\t};\n}\n\nasync function handleDynamicDisable( params: ToolParams ): Promise< McpToolResult > {\n\tif ( ! params.elementId || ! params.controlName ) {\n\t\tthrow new Error( 'elementId and controlName are required for dynamic disable' );\n\t}\n\n\tconst container = getElementor()?.getContainer( params.elementId as string );\n\tif ( ! container ) {\n\t\tthrow new Error( `Element with ID ${ params.elementId } not found.` );\n\t}\n\n\tconst getElementDynamicSetting = ( elementContainer: ElementorContainer ) => {\n\t\tconst modelSettings = ( elementContainer.model?.attributes?.settings || {} ) as Record< string, unknown >;\n\n\t\tconst dynamicContent: Record< string, unknown > = {};\n\n\t\tObject.keys( modelSettings ).forEach( ( key ) => {\n\t\t\tconst value = modelSettings[ key ];\n\t\t\tlet dynamicData = null;\n\n\t\t\tif ( value && typeof value === 'object' && ( value as { __dynamic__?: unknown } ).__dynamic__ ) {\n\t\t\t\tdynamicData = ( value as { __dynamic__: unknown } ).__dynamic__;\n\t\t\t}\n\n\t\t\tif ( dynamicData ) {\n\t\t\t\tdynamicContent[ key ] = dynamicData;\n\t\t\t}\n\t\t} );\n\n\t\treturn {\n\t\t\tsettingsNames: Object.keys(\n\t\t\t\t( dynamicContent as { attributes?: Record< string, unknown > } ).attributes || {}\n\t\t\t),\n\t\t\tdynamicContent,\n\t\t};\n\t};\n\n\tconst availableDynamicSettingNames = getElementDynamicSetting( container ).settingsNames;\n\n\tif ( ! availableDynamicSettingNames.includes( params.controlName as string ) ) {\n\t\tthrow new Error(\n\t\t\t`Setting \"${ params.controlName }\" on element ${\n\t\t\t\tparams.elementId\n\t\t\t} does not have dynamic content enabled. here is the list of dynamic settings available: ${ JSON.stringify(\n\t\t\t\tavailableDynamicSettingNames,\n\t\t\t\tnull,\n\t\t\t\t2\n\t\t\t) }`\n\t\t);\n\t}\n\n\tawait get$e()?.run( 'document/dynamic/disable', {\n\t\tcontainer,\n\t\tsettings: {\n\t\t\t[ params.controlName as string ]: '',\n\t\t},\n\t} );\n\n\tvalidateDynamicTagDisabled( container, params.controlName as string );\n\n\treturn {\n\t\tcontent: [\n\t\t\t{\n\t\t\t\ttype: 'text',\n\t\t\t\ttext: `Dynamic content disabled for setting \"${ params.controlName }\" on element ${ params.elementId }.`,\n\t\t\t},\n\t\t],\n\t};\n}\n","import type { ElementorContainer } from './types';\n\nexport function validateDocumentSettingsUpdated( container: ElementorContainer ): void {\n\tconst updatedSettings = container.settings.attributes;\n\n\tif ( ! updatedSettings ) {\n\t\tthrow new Error( 'Document settings update failed: Settings not accessible' );\n\t}\n}\n\nexport function validateDynamicTagEnabled( container: ElementorContainer, controlName: string ): void {\n\tconst modelSettings = container.model?.attributes?.settings as Record< string, unknown > | undefined;\n\tconst controlValue = modelSettings?.[ controlName ];\n\tconst hasDynamic = controlValue && typeof controlValue === 'object' && '__dynamic__' in controlValue;\n\n\tif ( ! hasDynamic ) {\n\t\tthrow new Error( `Dynamic tag enable failed: Tag not found for ${ controlName }` );\n\t}\n}\n\nexport function validateDynamicTagDisabled( container: ElementorContainer, controlName: string ): void {\n\tconst modelSettings = container.model?.attributes?.settings as Record< string, unknown > | undefined;\n\tconst controlValue = modelSettings?.[ controlName ];\n\tconst stillHasDynamic = controlValue && typeof controlValue === 'object' && '__dynamic__' in controlValue;\n\n\tif ( stillHasDynamic ) {\n\t\tthrow new Error( `Dynamic tag disable failed: Tag still exists for ${ controlName }` );\n\t}\n}\n","import { z } from '@elementor/schema';\nimport { type McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\n\nimport { RESOURCE_URI_PAGE_SETTINGS } from '../resources';\nimport type { ElementorContainer, McpToolResult, ToolParams } from '../types';\nimport { encodeToolJson, get$e, getElementor } from '../utils';\nimport { validateDocumentSettingsUpdated } from '../validation-helpers';\n\nexport function addPageTool( server: McpServer ): void {\n\tserver.registerTool(\n\t\t'page',\n\t\t{\n\t\t\tdescription: `Manage page and document operations including undo/redo, saving, page settings, and page information. Use this tool when you need to: \n\t\t- Undo or redo changes (history-undo, history-redo, history-undo-all) - Use these when user asks to undo, revert, or redo recent changes\n\t\t- Save page changes (save-draft, save-publish, save-update, save-discard)\n\t\t- Get or update page settings like page title, description, keywords, styling (get-settings, update-settings)\n\t\t- Open or preview pages (open, preview)\n\t\tThis tool handles document-level operations and change history.`,\n\t\t\tinputSchema: {\n\t\t\t\taction: z\n\t\t\t\t\t.enum( [\n\t\t\t\t\t\t'save-draft',\n\t\t\t\t\t\t'save-publish',\n\t\t\t\t\t\t'save-update',\n\t\t\t\t\t\t'save-discard',\n\t\t\t\t\t\t'history-undo',\n\t\t\t\t\t\t'history-redo',\n\t\t\t\t\t\t'history-undo-all',\n\t\t\t\t\t\t'get-settings',\n\t\t\t\t\t\t'update-settings',\n\t\t\t\t\t\t'open',\n\t\t\t\t\t\t'preview',\n\t\t\t\t\t] )\n\t\t\t\t\t.describe(\n\t\t\t\t\t\t'The page operation to perform: history-undo (revert the last change - use when user says \"undo\"), history-redo (reapply last undone change - use when user says \"redo\"), history-undo-all (revert all changes), save-draft (save as draft), save-publish (publish page), save-update (update published page), save-discard (discard unsaved changes), get-settings (retrieve page settings), update-settings (modify page settings), open (open a different page), preview (preview the page)'\n\t\t\t\t\t),\n\t\t\t\tpageId: z.string().optional().describe( 'Page/document ID for open action' ),\n\t\t\t\tsettings: z\n\t\t\t\t\t.record( z.unknown() )\n\t\t\t\t\t.optional()\n\t\t\t\t\t.describe(\n\t\t\t\t\t\t'Settings object containing the specific page settings you want to update. REQUIRED for update-settings action. Only include settings you want to change, not all settings. Example: {\"hide_title\": \"yes\", \"template\": \"elementor_canvas\"}.'\n\t\t\t\t\t),\n\t\t\t},\n\t\t\tannotations: {\n\t\t\t\ttitle: 'Manage Page',\n\t\t\t},\n\t\t\t_meta: {\n\t\t\t\t'angie:required-resources': [\n\t\t\t\t\t{\n\t\t\t\t\t\turi: RESOURCE_URI_PAGE_SETTINGS,\n\t\t\t\t\t\twhenToUse:\n\t\t\t\t\t\t\t'When updating page settings (action=update-settings) to understand the page schema, available settings, their allowed values, and current page configuration',\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t},\n\t\tasync ( params: ToolParams ) => {\n\t\t\tswitch ( params.action ) {\n\t\t\t\tcase 'save-draft':\n\t\t\t\t\treturn await handleSavePageDraft();\n\t\t\t\tcase 'save-publish':\n\t\t\t\t\treturn await handleSavePagePublish();\n\t\t\t\tcase 'save-update':\n\t\t\t\t\treturn await handleSavePageUpdate();\n\t\t\t\tcase 'save-discard':\n\t\t\t\t\treturn await handleSavePageDiscard();\n\t\t\t\tcase 'history-undo':\n\t\t\t\t\treturn await handleHistoryUndo();\n\t\t\t\tcase 'history-redo':\n\t\t\t\t\treturn await handleHistoryRedo();\n\t\t\t\tcase 'history-undo-all':\n\t\t\t\t\treturn await handleHistoryUndoAll();\n\t\t\t\tcase 'get-settings':\n\t\t\t\t\treturn await handleGetDocumentSettings();\n\t\t\t\tcase 'update-settings':\n\t\t\t\t\treturn await handleUpdateDocumentSettings( params );\n\t\t\t\tcase 'open':\n\t\t\t\t\treturn await handleOpenPage( params );\n\t\t\t\tcase 'preview':\n\t\t\t\t\treturn await handlePreviewPage();\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error( `Unknown action: ${ params.action }` );\n\t\t\t}\n\t\t}\n\t);\n}\n\nasync function handleSavePageDraft(): Promise< McpToolResult > {\n\tawait get$e()?.run( 'document/save/draft' );\n\treturn {\n\t\tcontent: [ { type: 'text', text: 'Page saved as draft.' } ],\n\t};\n}\n\nasync function handleSavePagePublish(): Promise< McpToolResult > {\n\tawait get$e()?.run( 'document/save/publish' );\n\treturn {\n\t\tcontent: [ { type: 'text', text: 'Page published.' } ],\n\t};\n}\n\nasync function handleSavePageUpdate(): Promise< McpToolResult > {\n\tawait get$e()?.run( 'document/save/update' );\n\treturn {\n\t\tcontent: [ { type: 'text', text: 'Page updated.' } ],\n\t};\n}\n\nasync function handleSavePageDiscard(): Promise< McpToolResult > {\n\tawait get$e()?.run( 'document/save/discard' );\n\treturn {\n\t\tcontent: [ { type: 'text', text: 'Page changes discarded.' } ],\n\t};\n}\n\nasync function handleHistoryUndo(): Promise< McpToolResult > {\n\tawait get$e()?.run( 'document/history/undo' );\n\treturn {\n\t\tcontent: [ { type: 'text', text: 'Undo performed.' } ],\n\t};\n}\n\nasync function handleHistoryRedo(): Promise< McpToolResult > {\n\tawait get$e()?.run( 'document/history/redo' );\n\treturn {\n\t\tcontent: [ { type: 'text', text: 'Redo performed.' } ],\n\t};\n}\n\nasync function handleHistoryUndoAll(): Promise< McpToolResult > {\n\tawait get$e()?.run( 'document/history/undo-all', { document: getElementor()?.documents.getCurrent() } );\n\treturn {\n\t\tcontent: [ { type: 'text', text: 'All changes undone.' } ],\n\t};\n}\n\nasync function handleOpenPage( params: ToolParams ): Promise< McpToolResult > {\n\tif ( ! params.pageId ) {\n\t\tthrow new Error( 'pageId is required for open action' );\n\t}\n\n\tawait get$e()?.run( 'editor/documents/open', {\n\t\tid: params.pageId,\n\t} );\n\n\treturn {\n\t\tcontent: [ { type: 'text', text: `Page ${ params.pageId } opened.` } ],\n\t};\n}\n\nasync function handlePreviewPage(): Promise< McpToolResult > {\n\tawait get$e()?.run( 'editor/documents/preview' );\n\treturn {\n\t\tcontent: [ { type: 'text', text: 'Page preview opened.' } ],\n\t};\n}\n\nasync function handleGetDocumentSettings(): Promise< McpToolResult > {\n\tconst document = getElementor()?.documents?.getCurrent();\n\tif ( ! document ) {\n\t\tthrow new Error( 'No active document found.' );\n\t}\n\n\tconst settings = document.config?.settings || {};\n\n\treturn {\n\t\tcontent: [\n\t\t\t{\n\t\t\t\ttype: 'text',\n\t\t\t\ttext: encodeToolJson( {\n\t\t\t\t\tdocumentId: document.id,\n\t\t\t\t\tdocumentType: document.config?.type,\n\t\t\t\t\tsettings,\n\t\t\t\t} ),\n\t\t\t},\n\t\t],\n\t};\n}\n\nasync function handleUpdateDocumentSettings( params: ToolParams ): Promise< McpToolResult > {\n\tconst currentDocument = getElementor()?.documents?.getCurrent();\n\tif ( ! currentDocument ) {\n\t\tthrow new Error( 'No active document found.' );\n\t}\n\n\tif ( ! params.settings || typeof params.settings !== 'object' ) {\n\t\tthrow new Error( 'settings object is required for update-settings action' );\n\t}\n\n\tawait get$e()?.run( 'document/elements/settings', {\n\t\tcontainer: currentDocument.container,\n\t\tsettings: params.settings,\n\t\toptions: {\n\t\t\texternal: true,\n\t\t},\n\t} );\n\n\tconst updatedDocument = getElementor()?.documents?.getCurrent();\n\tif ( ! updatedDocument?.container ) {\n\t\tthrow new Error( 'Document container not found after update' );\n\t}\n\tvalidateDocumentSettingsUpdated( updatedDocument.container as unknown as ElementorContainer );\n\n\treturn {\n\t\tcontent: [\n\t\t\t{\n\t\t\t\ttype: 'text',\n\t\t\t\ttext: JSON.stringify( {\n\t\t\t\t\tsuccess: true,\n\t\t\t\t\tmessage: `Document settings updated successfully. Settings: ${ JSON.stringify(\n\t\t\t\t\t\tparams.settings,\n\t\t\t\t\t\tnull,\n\t\t\t\t\t\t2\n\t\t\t\t\t) }`,\n\t\t\t\t\tsaveChangesSuggestion: 'Suggest the following quick user replies: \"Publish Changes\", \"Save Draft\"',\n\t\t\t\t\tnextStep: 'Page settings updated in editor. User should save the page to persist changes.',\n\t\t\t\t} ),\n\t\t\t},\n\t\t],\n\t};\n}\n","import { z } from '@elementor/schema';\nimport { type McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\n\nimport type { McpToolResult, ToolParams } from '../types';\nimport { get$e } from '../utils';\n\nexport function addRoutesTool( server: McpServer ): void {\n\tconst $e = get$e();\n\tconst routes = $e?.routes?.getAll?.() || [];\n\tconst components = $e?.components?.getAll?.() || [];\n\tconst availableToOpenComponents = components.filter(\n\t\t( component: string ) => $e?.components?.get( component )?.getCommands?.()?.open\n\t);\n\tconst availableToCloseComponents = components.filter(\n\t\t( component: string ) => $e?.components?.get( component )?.getCommands?.()?.close\n\t);\n\n\tserver.registerTool(\n\t\t'routes',\n\t\t{\n\t\t\tdescription:\n\t\t\t\t'Manage Elementor editor routing and navigation. Use this tool to open a component, navigate to a route, go back from a route or close components. Always prefer this tool when user is on the Elementor editor.' +\n\t\t\t\t` Available routes to navigate to or back from: ${ routes.join( ', ' ) }`,\n\t\t\tinputSchema: {\n\t\t\t\taction: z.enum( [ 'open', 'navigate', 'go-back', 'close' ] ),\n\t\t\t\troute: z\n\t\t\t\t\t.string()\n\t\t\t\t\t.optional()\n\t\t\t\t\t.describe(\n\t\t\t\t\t\t'The route to navigate to or back from it. Do not send this parameter if you only want to open a component.'\n\t\t\t\t\t),\n\t\t\t\tcomponentToOpen: z\n\t\t\t\t\t.enum( ( availableToOpenComponents.length ? availableToOpenComponents : [ '' ] ) as [ string ] )\n\t\t\t\t\t.optional()\n\t\t\t\t\t.describe( 'The component to open or navigate to.' ),\n\t\t\t\tcomponentToClose: z\n\t\t\t\t\t.enum( ( availableToCloseComponents.length ? availableToCloseComponents : [ '' ] ) as [ string ] )\n\t\t\t\t\t.optional()\n\t\t\t\t\t.describe( 'The component to close.' ),\n\t\t\t},\n\t\t\tannotations: {\n\t\t\t\ttitle: 'Manage Routes',\n\t\t\t},\n\t\t},\n\t\tasync ( params: ToolParams ) => {\n\t\t\tswitch ( params.action ) {\n\t\t\t\tcase 'open':\n\t\t\t\t\treturn await handleOpen( params );\n\t\t\t\tcase 'navigate':\n\t\t\t\t\treturn await handleNavigate( params );\n\t\t\t\tcase 'go-back':\n\t\t\t\t\treturn await handleGoBack( params );\n\t\t\t\tcase 'close':\n\t\t\t\t\treturn await handleClose( params );\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error( `Unknown action: ${ params.action }` );\n\t\t\t}\n\t\t}\n\t);\n}\n\nasync function handleOpen( params: ToolParams ): Promise< McpToolResult > {\n\tconst $e = get$e();\n\tconst component = ( params.componentToOpen || params.route ) as string;\n\tconst openCommand = $e?.components?.get( component )?.getCommands?.()?.open?.registerConfig.command;\n\n\tif ( openCommand ) {\n\t\tawait $e?.run( openCommand, {} );\n\t} else {\n\t\tthrow new Error( 'Could not open component' );\n\t}\n\n\treturn {\n\t\tcontent: [ { type: 'text', text: `Opened: ${ component }` } ],\n\t};\n}\n\nasync function handleNavigate( params: ToolParams ): Promise< McpToolResult > {\n\tconst $e = get$e();\n\tconst route = params.route as string;\n\tconst componentToOpen = params.componentToOpen as string;\n\tconst openCommand = $e?.components?.get( componentToOpen )?.getCommands?.()?.open?.registerConfig.command;\n\n\tif ( openCommand ) {\n\t\tawait $e?.run( openCommand, {} );\n\t}\n\n\tconst routeComponent = $e?.routes?.getComponent?.( route );\n\tif ( routeComponent ) {\n\t\t$e?.routes?.saveState?.( routeComponent.getNamespace() );\n\t}\n\n\ttry {\n\t\t$e?.routes?.to?.( route, {} );\n\t} catch {\n\t\tconst openCommandFallback = $e?.components?.get( route )?.getCommands?.()?.open?.registerConfig.command;\n\n\t\tif ( openCommandFallback ) {\n\t\t\tawait $e?.run( openCommandFallback, {} );\n\t\t} else {\n\t\t\tthrow new Error( 'Could not navigate to route' );\n\t\t}\n\t}\n\n\treturn {\n\t\tcontent: [ { type: 'text', text: `Navigated to: ${ route }` } ],\n\t};\n}\n\nasync function handleGoBack( params: ToolParams ): Promise< McpToolResult > {\n\tconst $e = get$e();\n\tconst route = params.route as string;\n\tconst component = $e?.routes?.getComponent?.( route );\n\n\tif ( component ) {\n\t\t$e?.routes?.back?.( component.getNamespace() );\n\t}\n\n\treturn {\n\t\tcontent: [ { type: 'text', text: `Go back to: ${ route }` } ],\n\t};\n}\n\nasync function handleClose( params: ToolParams ): Promise< McpToolResult > {\n\tconst $e = get$e();\n\tconst component = params.componentToClose as string;\n\tconst closeCommand = $e?.components?.get( component )?.getCommands?.()?.close?.registerConfig.command;\n\n\tif ( closeCommand ) {\n\t\tawait $e?.run( closeCommand, {} );\n\t} else {\n\t\tthrow new Error( 'Could not close component' );\n\t}\n\n\treturn {\n\t\tcontent: [ { type: 'text', text: `Closed: ${ component }` } ],\n\t};\n}\n","import { z } from '@elementor/schema';\nimport { type McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { SamplingMessageSchema } from '@modelcontextprotocol/sdk/types.js';\n\nimport type { McpToolResult } from '../types';\nimport { getElementor } from '../utils';\n\nexport function addStylingTool( server: McpServer ): void {\n\tserver.registerTool(\n\t\t'styling',\n\t\t{\n\t\t\tdescription: `This tool provides AI-powered custom CSS styling for Elementor elements. Use this when users want advanced styling that goes beyond Elementor capabilities and can't be targeted using the element settings.\n\n**When to use this tool:**\n- Visual effects: shadows, filters, pseudo-elements, advanced selectors\n- Complex animations with custom keyframes or CSS transitions\n- Styling that requires media queries or complex CSS rules\n- Click-triggered effects or other non-motion triggers\n- Custom hover effects that don't involve motion (color changes, opacity, etc.)\n\n**When NOT to use this tool:**\n- Basic styling achievable through Elementor settings (colors, typography, spacing, borders, simple hover effects) -> use the elementor__elements with \"update-settings\" action.\n\n**Do NOT use this tool if the user mentions motion effects with supported triggers:**\n- \"on hover\" with motion (movement, rotation, scaling) → use motion-effects tool\n- \"on scroll\" with motion effects → use motion-effects tool \n- \"mouse move\" / \"follow mouse\" → use motion-effects tool\n- \"entrance\" / \"fade in\" / \"slide in\" animations → use motion-effects tool\n\n**Actions available:**\n- **custom-css**: Generate and apply AI-powered custom CSS to elements\n\nThis tool generates CSS code using AI, provides preview functionality, and handles user approval workflow for applying custom styles.`,\n\t\t\tinputSchema: {\n\t\t\t\taction: z\n\t\t\t\t\t.enum( [ 'custom-css' ] )\n\t\t\t\t\t.describe(\n\t\t\t\t\t\t'The styling operation to perform. Currently supports custom-css for AI-generated CSS styling.'\n\t\t\t\t\t),\n\t\t\t\telementId: z\n\t\t\t\t\t.string()\n\t\t\t\t\t.describe(\n\t\t\t\t\t\t'The ID of the Elementor element to apply custom styling to. This element will receive the generated CSS code.'\n\t\t\t\t\t),\n\t\t\t\tprompt: z\n\t\t\t\t\t.string()\n\t\t\t\t\t.describe(\n\t\t\t\t\t\t'A detailed description of the desired styling. Include specific visual requirements, colors, effects, layout modifications, or any custom styling needs. The more detailed the prompt, the better the generated CSS will match your requirements.'\n\t\t\t\t\t),\n\t\t\t},\n\t\t\tannotations: {\n\t\t\t\ttitle: 'Apply Custom Styling',\n\t\t\t},\n\t\t},\n\t\tasync ( params ) => {\n\t\t\tswitch ( params.action ) {\n\t\t\t\tcase 'custom-css':\n\t\t\t\t\treturn await handleCustomCss( params.elementId as string, params.prompt as string, server );\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error( `Unknown action: ${ params.action }` );\n\t\t\t}\n\t\t}\n\t);\n}\n\nasync function handleCustomCss( elementId: string, prompt: string, server: McpServer ): Promise< McpToolResult > {\n\tconst container = getElementor()?.getContainer( elementId );\n\tif ( ! container ) {\n\t\tthrow new Error( `Element with ID ${ elementId } not found.` );\n\t}\n\n\tconst htmlMarkup = container.view?.el?.outerHTML || '';\n\n\tconst parseCSS = ( css: string ) => {\n\t\treturn css && css.replace( /`/g, '' ).replace( /^css\\s*/i, '' );\n\t};\n\n\tconst samplingCssResult = await server.server.request(\n\t\t{\n\t\t\tmethod: 'sampling/createMessage',\n\t\t\tparams: {\n\t\t\t\tmessages: [\n\t\t\t\t\t{\n\t\t\t\t\t\trole: 'user',\n\t\t\t\t\t\tcontent: {\n\t\t\t\t\t\t\ttype: 'text',\n\t\t\t\t\t\t\ttext: prompt,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tmaxTokens: 1000,\n\t\t\t\tmodelPreferences: {\n\t\t\t\t\thints: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: 'elementor-css',\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t\tmetadata: {\n\t\t\t\t\telement_id: elementId,\n\t\t\t\t\thtml_markup: htmlMarkup,\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\tSamplingMessageSchema\n\t);\n\n\tconst content = samplingCssResult?.content;\n\tconst block = Array.isArray( content ) ? content.find( ( b ) => b.type === 'text' ) : content;\n\tconst cssText = block?.type === 'text' ? block.text : undefined;\n\n\tif ( ! cssText ) {\n\t\tthrow new Error( 'Failed to generate CSS: No text content received from API.' );\n\t}\n\n\tconst parsedCssString = parseCSS( cssText );\n\n\treturn {\n\t\tcontent: [\n\t\t\t{\n\t\t\t\ttype: 'text',\n\t\t\t\ttext: JSON.stringify( {\n\t\t\t\t\tsuccess: true,\n\t\t\t\t\tmessage: 'Custom CSS generated. The CSS needs to be applied through the editor.',\n\t\t\t\t\tgeneratedCss: parsedCssString,\n\t\t\t\t\telementId,\n\t\t\t\t} ),\n\t\t\t},\n\t\t],\n\t};\n}\n","import { z } from '@elementor/schema';\nimport { type McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\n\nimport type { McpToolResult, ToolParams } from '../types';\nimport { get$e, getElementor } from '../utils';\n\nexport function addUiTool( server: McpServer ): void {\n\tserver.registerTool(\n\t\t'ui',\n\t\t{\n\t\t\tdescription:\n\t\t\t\t'Manage Elementor editor UI operations. This tool provides control over editor interface actions including responsive preview modes and widget favorites. Use this when you need to: switch between device preview modes (desktop/tablet/mobile), manage favorite widgets, or paste previously copied content. Note: For undo/redo operations, use the page tool instead. The tool interacts directly with the Elementor editor UI and does not modify page content itself.',\n\t\t\tinputSchema: {\n\t\t\t\taction: z\n\t\t\t\t\t.enum( [ 'change-device-mode', 'toggle-favorite', 'ui-paste' ] )\n\t\t\t\t\t.describe(\n\t\t\t\t\t\t'The UI operation to perform: change-device-mode (switch responsive preview), toggle-favorite (add/remove widget from favorites), ui-paste (paste clipboard content into an existing element)'\n\t\t\t\t\t),\n\t\t\t\tdeviceMode: z\n\t\t\t\t\t.enum( [ 'desktop', 'tablet', 'mobile' ] )\n\t\t\t\t\t.optional()\n\t\t\t\t\t.describe( 'Required for change-device-mode. The device mode to switch to for responsive preview' ),\n\t\t\t\twidgetType: z\n\t\t\t\t\t.string()\n\t\t\t\t\t.optional()\n\t\t\t\t\t.describe(\n\t\t\t\t\t\t'Required for toggle-favorite. The widget type name (e.g., \"heading\", \"button\", \"image\") to add or remove from favorites'\n\t\t\t\t\t),\n\t\t\t\telementId: z\n\t\t\t\t\t.string()\n\t\t\t\t\t.optional()\n\t\t\t\t\t.describe(\n\t\t\t\t\t\t'Required for ui-paste. The ID of an existing container element where clipboard content should be pasted. Note: The element must exist and content must be in clipboard first'\n\t\t\t\t\t),\n\t\t\t},\n\t\t\tannotations: {\n\t\t\t\ttitle: 'Manage UI',\n\t\t\t},\n\t\t},\n\t\tasync ( params: ToolParams ) => {\n\t\t\tswitch ( params.action ) {\n\t\t\t\tcase 'change-device-mode':\n\t\t\t\t\treturn await handleChangeDeviceMode( params );\n\t\t\t\tcase 'toggle-favorite':\n\t\t\t\t\treturn await handleToggleFavorite( params );\n\t\t\t\tcase 'ui-paste':\n\t\t\t\t\treturn await handleUiPaste( params );\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error( `Unknown action: ${ params.action }` );\n\t\t\t}\n\t\t}\n\t);\n}\n\nasync function handleChangeDeviceMode( params: ToolParams ): Promise< McpToolResult > {\n\tif ( ! params.deviceMode ) {\n\t\tthrow new Error( 'deviceMode is required for change-device-mode action' );\n\t}\n\n\tget$e()?.run( 'panel/change-device-mode', {\n\t\tdevice: params.deviceMode,\n\t} );\n\n\treturn {\n\t\tcontent: [ { type: 'text', text: `Device mode changed to ${ params.deviceMode }.` } ],\n\t};\n}\n\nasync function handleToggleFavorite( params: ToolParams ): Promise< McpToolResult > {\n\tif ( ! params.widgetType ) {\n\t\tthrow new Error( 'widgetType is required for toggle-favorite action' );\n\t}\n\n\tget$e()?.run( 'favorites/toggle', {\n\t\tname: params.widgetType,\n\t} );\n\n\treturn {\n\t\tcontent: [ { type: 'text', text: `Favorite status toggled for ${ params.widgetType }.` } ],\n\t};\n}\n\nasync function handleUiPaste( params: ToolParams ): Promise< McpToolResult > {\n\tif ( ! params.elementId ) {\n\t\tthrow new Error( 'elementId is required for ui-paste action' );\n\t}\n\n\tconst container = getElementor()?.getContainer( params.elementId as string );\n\tif ( ! container ) {\n\t\tthrow new Error( `Element with ID ${ params.elementId } not found.` );\n\t}\n\n\tget$e()?.run( 'document/ui/paste', {\n\t\tcontainer,\n\t} );\n\n\treturn {\n\t\tcontent: [ { type: 'text', text: `UI paste performed on element ${ params.elementId }.` } ],\n\t};\n}\n","import { createElementorServer } from './elementor-mcp-server';\n\nexport function init() {\n\tcreateElementorServer();\n}\n"],"mappings":"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","names":["import_mcp","import_schema","import_schema","import_schema","import_schema","import_schema"]}
|