@elementor/elementor-kit-mcp 4.3.0-963 → 4.3.0-964

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.js CHANGED
@@ -227,11 +227,11 @@ async function createElementorKitServer() {
227
227
  };
228
228
  }
229
229
  );
230
- const availableTabs = await getAvailableTabs();
231
230
  server.registerResource(
232
231
  RESOURCE_NAME_KIT_SCHEMA,
233
232
  new import_editor_mcp.ResourceTemplate(RESOURCE_URI_KIT_SCHEMA_TEMPLATE, {
234
233
  list: async () => {
234
+ const availableTabs = await getAvailableTabs();
235
235
  return {
236
236
  resources: availableTabs.map((tab) => {
237
237
  return {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/elementor-kit-mcp-server.ts","../src/mcp-description-resource.ts","../src/init.ts"],"sourcesContent":["export { createElementorKitServer } from './elementor-kit-mcp-server';\nexport { init } from './init';\n","import { getAngieSdk, McpServer, ResourceTemplate } from '@elementor/editor-mcp';\nimport { callWpApi, requireConfirmationMessage, waitForElementorEditor } from '@elementor/elementor-mcp-common';\nimport { z } from '@elementor/schema';\n\nimport { addKitDescriptionResource, KIT_DESCRIPTION_URI } from './mcp-description-resource';\n\nconst RESOURCE_NAME_KIT_FONTS = 'elementor-kit-fonts';\nconst RESOURCE_URI_KIT_FONTS = 'elementor://kit/fonts';\nconst RESOURCE_NAME_KIT_SCHEMA = 'elementor-kit-schema';\nconst RESOURCE_URI_KIT_SCHEMA_TEMPLATE = 'elementor://kit/schema/{tab}';\nconst RESOURCE_NAME_KIT_SETTINGS = 'elementor-kit-settings';\nconst RESOURCE_URI_KIT_SETTINGS = 'elementor://kit/settings';\n\ntype KitFontsResponse = {\n\tfonts: Record< string, unknown >;\n};\n\ntype KitSchemaResponse = Record< string, unknown >;\n\nconst VERSION = '2.0.0';\nasync function fetchKitFonts() {\n\treturn callWpApi< KitFontsResponse >( `/angie/v1/elementor-kit/fonts`, 'GET' );\n}\n\nasync function fetchKitSchema() {\n\treturn callWpApi< KitSchemaResponse >( `/angie/v1/elementor-kit/schema`, 'GET' );\n}\n\nasync function fetchKitSettings() {\n\treturn callWpApi( `/angie/v1/elementor-kit`, 'GET' );\n}\n\ntype TypographyItem = {\n\ttypography_font_family?: string;\n};\n\nasync function validateFonts(\n\tsystemTypography: TypographyItem[] | null | undefined,\n\tcustomTypography: TypographyItem[] | null | undefined\n) {\n\tconst fontsResponse = await fetchKitFonts();\n\tconst availableFonts = Object.keys( fontsResponse.data.fonts || {} );\n\tconst invalidFonts: string[] = [];\n\n\t[ systemTypography, customTypography ].forEach( ( typography ) => {\n\t\tif ( typography ) {\n\t\t\ttypography.forEach( ( item ) => {\n\t\t\t\tif ( item.typography_font_family && ! availableFonts.includes( item.typography_font_family ) ) {\n\t\t\t\t\tinvalidFonts.push( item.typography_font_family );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\t} );\n\n\tif ( invalidFonts.length > 0 ) {\n\t\treturn `Please use available fonts only. Invalid fonts: ${ invalidFonts.join(\n\t\t\t', '\n\t\t) }. Available fonts: ${ availableFonts.join( ', ' ) }`;\n\t}\n\n\treturn '';\n}\n\nfunction sanitizeMediaFields( obj: Record< string, unknown > ): Record< string, unknown > {\n\tconst mediaFields = [ 'site_logo', 'site_icon' ];\n\tconst sanitized = { ...obj };\n\n\tfor ( const field of mediaFields ) {\n\t\tif ( field in sanitized && sanitized[ field ] === '' ) {\n\t\t\tsanitized[ field ] = 0;\n\t\t}\n\t}\n\n\treturn sanitized;\n}\n\nconst baseColorSchema = z.object( {\n\ttitle: z.string(),\n\tcolor: z.string(),\n} );\n\nconst baseTypographySchema = z\n\t.object( {\n\t\ttitle: z.string(),\n\t\ttypography_typography: z.string(),\n\t\ttypography_font_family: z\n\t\t\t.string()\n\t\t\t.describe(\n\t\t\t\t'Font family name that must be from the available Elementor fonts list. Use the get-fonts endpoint (/angie/v1/elementor-kit/fonts) to get the complete list of available fonts. Only use fonts that exist in this list to avoid validation errors.'\n\t\t\t),\n\t\ttypography_font_weight: z.string(),\n\t\ttypography_font_size: z\n\t\t\t.object( {\n\t\t\t\tunit: z.string(),\n\t\t\t\tsize: z.number(),\n\t\t\t} )\n\t\t\t.optional(),\n\t\ttypography_font_size_tablet: z\n\t\t\t.object( {\n\t\t\t\tunit: z.string(),\n\t\t\t\tsize: z.number(),\n\t\t\t} )\n\t\t\t.optional(),\n\t\ttypography_font_size_mobile: z\n\t\t\t.object( {\n\t\t\t\tunit: z.string(),\n\t\t\t\tsize: z.number(),\n\t\t\t} )\n\t\t\t.optional(),\n\t\ttypography_line_height: z\n\t\t\t.object( {\n\t\t\t\tunit: z.string(),\n\t\t\t\tsize: z.number(),\n\t\t\t} )\n\t\t\t.optional(),\n\t} )\n\t.passthrough();\n\nconst systemColorItemSchema = baseColorSchema.extend( {\n\t_id: z.enum( [ 'primary', 'secondary', 'text', 'accent' ] ),\n} );\n\nconst systemTypographyItemSchema = baseTypographySchema.extend( {\n\t_id: z.enum( [ 'primary', 'secondary', 'text', 'accent' ] ),\n} );\n\nconst customColorItemSchema = baseColorSchema.extend( {\n\t_id: z.string(),\n} );\n\nconst customTypographyItemSchema = baseTypographySchema.extend( {\n\t_id: z.string(),\n} );\n\nconst systemColorsSchema = z.array( systemColorItemSchema ).length( 4 );\nconst systemTypographySchema = z.array( systemTypographyItemSchema ).length( 4 );\nconst customColorsSchema = z.array( customColorItemSchema );\nconst customTypographySchema = z.array( customTypographyItemSchema );\n\nconst generalPatchSchema = z\n\t.record( z.unknown() )\n\t.describe(\n\t\t'General patch object for any other Elementor kit settings like spacing, buttons, forms, layout settings, etc.'\n\t);\n\nconst SERVER_INSTRUCTIONS = 'Manages Elementor global design system: colors, typography, and site identity.';\nexport async function createElementorKitServer(): Promise< McpServer > {\n\tawait waitForElementorEditor();\n\tconst server = new McpServer(\n\t\t{\n\t\t\tname: 'elementor-kit-server',\n\t\t\tversion: VERSION,\n\t\t\ttitle: 'Elementor Kit',\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\taddKitDescriptionResource( server );\n\n\tconst getAvailableTabs = async (): Promise< string[] > => {\n\t\tconst kitSchema = await fetchKitSchema();\n\t\treturn Object.keys( kitSchema.data || {} );\n\t};\n\n\tserver.registerResource(\n\t\tRESOURCE_NAME_KIT_FONTS,\n\t\tRESOURCE_URI_KIT_FONTS,\n\t\t{\n\t\t\ttitle: 'Elementor Kit Available Fonts',\n\t\t\tdescription:\n\t\t\t\t'Complete list of all available font families that can be used in Elementor, including system fonts, Google fonts, and custom uploaded fonts',\n\t\t},\n\t\tasync ( uri ) => {\n\t\t\tconst fontsResponse = await fetchKitFonts();\n\t\t\treturn {\n\t\t\t\tcontents: [\n\t\t\t\t\t{\n\t\t\t\t\t\turi: uri.href,\n\t\t\t\t\t\tmimeType: 'application/json',\n\t\t\t\t\t\ttext: JSON.stringify( fontsResponse, null, 2 ),\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t};\n\t\t}\n\t);\n\n\tserver.registerResource(\n\t\tRESOURCE_NAME_KIT_SETTINGS,\n\t\tRESOURCE_URI_KIT_SETTINGS,\n\t\t{\n\t\t\ttitle: 'Elementor Kit Current Settings',\n\t\t\tdescription:\n\t\t\t\t'Complete current Elementor global kit configuration including all system and custom colors, typography settings, spacing, buttons, forms, and other site-wide design settings',\n\t\t},\n\t\tasync ( uri ) => {\n\t\t\tconst currentSettings = await fetchKitSettings();\n\t\t\treturn {\n\t\t\t\tcontents: [\n\t\t\t\t\t{\n\t\t\t\t\t\turi: uri.href,\n\t\t\t\t\t\tmimeType: 'application/json',\n\t\t\t\t\t\ttext: JSON.stringify( currentSettings, null, 2 ),\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t};\n\t\t}\n\t);\n\n\tconst availableTabs = await getAvailableTabs();\n\n\tserver.registerResource(\n\t\tRESOURCE_NAME_KIT_SCHEMA,\n\t\tnew ResourceTemplate( RESOURCE_URI_KIT_SCHEMA_TEMPLATE, {\n\t\t\tlist: async () => {\n\t\t\t\treturn {\n\t\t\t\t\tresources: availableTabs.map( ( tab ) => {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\turi: `elementor://kit/schema/${ tab }`,\n\t\t\t\t\t\t\tname: `${ RESOURCE_NAME_KIT_SCHEMA }-${ tab }`,\n\t\t\t\t\t\t\ttitle: `Elementor Kit Schema - ${ tab }`,\n\t\t\t\t\t\t\tdescription: `Schema definition for Elementor kit ${ tab } settings tab`,\n\t\t\t\t\t\t\tmimeType: 'application/json',\n\t\t\t\t\t\t};\n\t\t\t\t\t} ),\n\t\t\t\t};\n\t\t\t},\n\t\t} ),\n\t\t{\n\t\t\ttitle: 'Elementor Kit Schema',\n\t\t\tdescription:\n\t\t\t\t'Complete schema definition for a specific Elementor kit settings tab, showing all available fields, their types, valid values, and configuration options',\n\t\t},\n\t\tasync ( uri, variables ) => {\n\t\t\tconst tab = Array.isArray( variables.tab ) ? variables.tab[ 0 ] : variables.tab;\n\n\t\t\tif ( ! tab ) {\n\t\t\t\tthrow new Error( 'Tab parameter is required' );\n\t\t\t}\n\n\t\t\tconst kitSchema = await fetchKitSchema();\n\t\t\tconst tabSchema = kitSchema.data?.[ tab ];\n\n\t\t\tif ( ! tabSchema ) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`No schema found for tab '${ tab }'. Available tabs: ${ Object.keys( kitSchema.data ).join(\n\t\t\t\t\t\t', '\n\t\t\t\t\t) }`\n\t\t\t\t);\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: JSON.stringify( tabSchema, null, 2 ),\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t};\n\t\t}\n\t);\n\n\tserver.registerTool(\n\t\t'update-elementor-kit-settings-colors-and-fonts',\n\t\t{\n\t\t\tdescription: `This tool applies configuration changes to Elementor global kit settings that control site-wide design elements. Use this when you need to modify global colors, typography, spacing, buttons, form fields, or other theme-wide settings that affect the entire website appearance.\n\nThe tool will permanently update the site's global design settings and return a success confirmation with the updated configuration data.`,\n\t\t\tinputSchema: {\n\t\t\t\tsystemColors: systemColorsSchema\n\t\t\t\t\t.optional()\n\t\t\t\t\t.nullable()\n\t\t\t\t\t.describe(\n\t\t\t\t\t\t'System colors array with exactly 4 items having IDs: primary, secondary, text, accent'\n\t\t\t\t\t),\n\t\t\t\tsystemTypography: systemTypographySchema\n\t\t\t\t\t.optional()\n\t\t\t\t\t.nullable()\n\t\t\t\t\t.describe(\n\t\t\t\t\t\t'System typography array with exactly 4 items having IDs: primary, secondary, text, accent'\n\t\t\t\t\t),\n\t\t\t\tcustomColors: customColorsSchema\n\t\t\t\t\t.optional()\n\t\t\t\t\t.nullable()\n\t\t\t\t\t.describe( 'Custom colors array - flexible structure for additional color definitions' ),\n\t\t\t\tcustomTypography: customTypographySchema\n\t\t\t\t\t.optional()\n\t\t\t\t\t.nullable()\n\t\t\t\t\t.describe(\n\t\t\t\t\t\t'Custom typography array - flexible structure for additional font definitions (no color field needed)'\n\t\t\t\t\t),\n\t\t\t\tpatchObject: generalPatchSchema\n\t\t\t\t\t.optional()\n\t\t\t\t\t.nullable()\n\t\t\t\t\t.describe(\n\t\t\t\t\t\t'General patch object for any other Elementor kit settings like spacing, buttons, forms, layout settings, etc.'\n\t\t\t\t\t),\n\t\t\t\tconfirmationMessage: z\n\t\t\t\t\t.string()\n\t\t\t\t\t.describe(\n\t\t\t\t\t\t'REQUIRED: Provide a clear explanation in **markdown format** of what Elementor kit settings will be changed and their potential impact on the site\\'s global design. This message will be shown to the user before proceeding. Be specific about which design elements are being modified (colors, typography, spacing, etc.) and how they will affect the entire website. Examples: \"You\\'re about to update the global **primary color** from `blue` to `green`. This will change **buttons**, **links**, and **accent colors** throughout your entire site.\" or \"You\\'re about to change the **primary font** from `Roboto` to `Open Sans`. This will affect **headings** across all pages.\"'\n\t\t\t\t\t),\n\t\t\t},\n\t\t\tannotations: {\n\t\t\t\ttitle: 'Update Elementor Kit Settings',\n\t\t\t\tdestructiveHint: true,\n\t\t\t},\n\t\t\t_meta: {\n\t\t\t\t'angie/requiredResources': [\n\t\t\t\t\t{\n\t\t\t\t\t\turi: KIT_DESCRIPTION_URI,\n\t\t\t\t\t\twhenToUse: 'Read first for kit capabilities and limitations',\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t},\n\t\tasync ( {\n\t\t\tsystemColors,\n\t\t\tsystemTypography,\n\t\t\tcustomColors,\n\t\t\tcustomTypography,\n\t\t\tpatchObject,\n\t\t\tconfirmationMessage,\n\t\t} ) => {\n\t\t\trequireConfirmationMessage( confirmationMessage, 'Elementor kit settings' );\n\n\t\t\tconst invalidFonts = await validateFonts( systemTypography, customTypography );\n\t\t\tif ( invalidFonts ) {\n\t\t\t\tthrow new Error( invalidFonts );\n\t\t\t}\n\n\t\t\tconst completePatchObject = {\n\t\t\t\t...( systemColors && { system_colors: systemColors } ),\n\t\t\t\t...( systemTypography && { system_typography: systemTypography } ),\n\t\t\t\t...( customColors && { custom_colors: customColors } ),\n\t\t\t\t...( customTypography && { custom_typography: customTypography } ),\n\t\t\t\t...sanitizeMediaFields( patchObject || {} ),\n\t\t\t};\n\n\t\t\tif ( Object.keys( completePatchObject ).length === 0 ) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t'At least one update must be provided (systemColors, systemTypography, customColors, customTypography, or patchObject)'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst response = await callWpApi( `/angie/v1/elementor-kit`, 'POST', completePatchObject );\n\n\t\t\treturn {\n\t\t\t\tcontent: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: 'text' as const,\n\t\t\t\t\t\ttext: JSON.stringify(\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tsuccess: true,\n\t\t\t\t\t\t\t\tmessage: 'Settings updated successfully',\n\t\t\t\t\t\t\t\tdata: response,\n\t\t\t\t\t\t\t\tappliedSettings: completePatchObject,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\t2\n\t\t\t\t\t\t),\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t};\n\t\t}\n\t);\n\n\tconst sdk = getAngieSdk();\n\tawait sdk.waitForReady();\n\tsdk.registerLocalServer( {\n\t\tserver,\n\t\tversion: VERSION,\n\t\tdescription: SERVER_INSTRUCTIONS,\n\t\tname: 'elementor-kit-server',\n\t} );\n\treturn server;\n}\n","import { type McpServer } from '@elementor/editor-mcp';\n\nexport const KIT_DESCRIPTION_URI = 'elementor://kit/server-description';\n\nexport const KIT_DESCRIPTION = `## Elementor Kit Settings Management\n\n### Capabilities:\n**Global Design System:**\n- Create, update, name, and delete global colors (both system and custom)\n- Create, update, name, and delete global fonts (both system and custom)\n\n**Site Identity:**\n- Insert site logo\n- Set site favicon\n- Update site name\n- Modify site description\n\n### Limitations:\n**Theme Style Settings:**\n- Cannot set or update Elementor Theme Style settings including typography, buttons, images, form fields, Hello Theme header, or Hello Theme footer that affect the entire website appearance\n\n**Site-Wide Settings:**\n- Cannot set site-wide background (color or image)\n- Cannot configure mobile browser background\n- Cannot modify global layout settings such as content width, container padding, and widget gaps (the default space between widgets)\n\n**Note**: Angie can adjust all of these layout properties at the container or page level - just not site-wide.`;\n\nexport function addKitDescriptionResource( server: McpServer ) {\n\tserver.registerResource(\n\t\t'elementor-kit-server-description',\n\t\tKIT_DESCRIPTION_URI,\n\t\t{\n\t\t\ttitle: 'Elementor Kit Server Description',\n\t\t\tdescription: 'Elementor Kit capabilities and limitations',\n\t\t\tmimeType: 'text/plain',\n\t\t},\n\t\tasync ( uri ) => ( {\n\t\t\tcontents: [ { uri: uri.href, mimeType: 'text/plain', text: KIT_DESCRIPTION } ],\n\t\t} )\n\t);\n}\n","import { createElementorKitServer } from './elementor-kit-mcp-server';\n\nexport function init() {\n\tcreateElementorKitServer();\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/index.ts","../src/elementor-kit-mcp-server.ts","../src/mcp-description-resource.ts","../src/init.ts"],"sourcesContent":["export { createElementorKitServer } from './elementor-kit-mcp-server';\nexport { init } from './init';\n","import { getAngieSdk, McpServer, ResourceTemplate } from '@elementor/editor-mcp';\nimport { callWpApi, requireConfirmationMessage, waitForElementorEditor } from '@elementor/elementor-mcp-common';\nimport { z } from '@elementor/schema';\n\nimport { addKitDescriptionResource, KIT_DESCRIPTION_URI } from './mcp-description-resource';\n\nconst RESOURCE_NAME_KIT_FONTS = 'elementor-kit-fonts';\nconst RESOURCE_URI_KIT_FONTS = 'elementor://kit/fonts';\nconst RESOURCE_NAME_KIT_SCHEMA = 'elementor-kit-schema';\nconst RESOURCE_URI_KIT_SCHEMA_TEMPLATE = 'elementor://kit/schema/{tab}';\nconst RESOURCE_NAME_KIT_SETTINGS = 'elementor-kit-settings';\nconst RESOURCE_URI_KIT_SETTINGS = 'elementor://kit/settings';\n\ntype KitFontsResponse = {\n\tfonts: Record< string, unknown >;\n};\n\ntype KitSchemaResponse = Record< string, unknown >;\n\nconst VERSION = '2.0.0';\nasync function fetchKitFonts() {\n\treturn callWpApi< KitFontsResponse >( `/angie/v1/elementor-kit/fonts`, 'GET' );\n}\n\nasync function fetchKitSchema() {\n\treturn callWpApi< KitSchemaResponse >( `/angie/v1/elementor-kit/schema`, 'GET' );\n}\n\nasync function fetchKitSettings() {\n\treturn callWpApi( `/angie/v1/elementor-kit`, 'GET' );\n}\n\ntype TypographyItem = {\n\ttypography_font_family?: string;\n};\n\nasync function validateFonts(\n\tsystemTypography: TypographyItem[] | null | undefined,\n\tcustomTypography: TypographyItem[] | null | undefined\n) {\n\tconst fontsResponse = await fetchKitFonts();\n\tconst availableFonts = Object.keys( fontsResponse.data.fonts || {} );\n\tconst invalidFonts: string[] = [];\n\n\t[ systemTypography, customTypography ].forEach( ( typography ) => {\n\t\tif ( typography ) {\n\t\t\ttypography.forEach( ( item ) => {\n\t\t\t\tif ( item.typography_font_family && ! availableFonts.includes( item.typography_font_family ) ) {\n\t\t\t\t\tinvalidFonts.push( item.typography_font_family );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\t} );\n\n\tif ( invalidFonts.length > 0 ) {\n\t\treturn `Please use available fonts only. Invalid fonts: ${ invalidFonts.join(\n\t\t\t', '\n\t\t) }. Available fonts: ${ availableFonts.join( ', ' ) }`;\n\t}\n\n\treturn '';\n}\n\nfunction sanitizeMediaFields( obj: Record< string, unknown > ): Record< string, unknown > {\n\tconst mediaFields = [ 'site_logo', 'site_icon' ];\n\tconst sanitized = { ...obj };\n\n\tfor ( const field of mediaFields ) {\n\t\tif ( field in sanitized && sanitized[ field ] === '' ) {\n\t\t\tsanitized[ field ] = 0;\n\t\t}\n\t}\n\n\treturn sanitized;\n}\n\nconst baseColorSchema = z.object( {\n\ttitle: z.string(),\n\tcolor: z.string(),\n} );\n\nconst baseTypographySchema = z\n\t.object( {\n\t\ttitle: z.string(),\n\t\ttypography_typography: z.string(),\n\t\ttypography_font_family: z\n\t\t\t.string()\n\t\t\t.describe(\n\t\t\t\t'Font family name that must be from the available Elementor fonts list. Use the get-fonts endpoint (/angie/v1/elementor-kit/fonts) to get the complete list of available fonts. Only use fonts that exist in this list to avoid validation errors.'\n\t\t\t),\n\t\ttypography_font_weight: z.string(),\n\t\ttypography_font_size: z\n\t\t\t.object( {\n\t\t\t\tunit: z.string(),\n\t\t\t\tsize: z.number(),\n\t\t\t} )\n\t\t\t.optional(),\n\t\ttypography_font_size_tablet: z\n\t\t\t.object( {\n\t\t\t\tunit: z.string(),\n\t\t\t\tsize: z.number(),\n\t\t\t} )\n\t\t\t.optional(),\n\t\ttypography_font_size_mobile: z\n\t\t\t.object( {\n\t\t\t\tunit: z.string(),\n\t\t\t\tsize: z.number(),\n\t\t\t} )\n\t\t\t.optional(),\n\t\ttypography_line_height: z\n\t\t\t.object( {\n\t\t\t\tunit: z.string(),\n\t\t\t\tsize: z.number(),\n\t\t\t} )\n\t\t\t.optional(),\n\t} )\n\t.passthrough();\n\nconst systemColorItemSchema = baseColorSchema.extend( {\n\t_id: z.enum( [ 'primary', 'secondary', 'text', 'accent' ] ),\n} );\n\nconst systemTypographyItemSchema = baseTypographySchema.extend( {\n\t_id: z.enum( [ 'primary', 'secondary', 'text', 'accent' ] ),\n} );\n\nconst customColorItemSchema = baseColorSchema.extend( {\n\t_id: z.string(),\n} );\n\nconst customTypographyItemSchema = baseTypographySchema.extend( {\n\t_id: z.string(),\n} );\n\nconst systemColorsSchema = z.array( systemColorItemSchema ).length( 4 );\nconst systemTypographySchema = z.array( systemTypographyItemSchema ).length( 4 );\nconst customColorsSchema = z.array( customColorItemSchema );\nconst customTypographySchema = z.array( customTypographyItemSchema );\n\nconst generalPatchSchema = z\n\t.record( z.unknown() )\n\t.describe(\n\t\t'General patch object for any other Elementor kit settings like spacing, buttons, forms, layout settings, etc.'\n\t);\n\nconst SERVER_INSTRUCTIONS = 'Manages Elementor global design system: colors, typography, and site identity.';\nexport async function createElementorKitServer(): Promise< McpServer > {\n\tawait waitForElementorEditor();\n\tconst server = new McpServer(\n\t\t{\n\t\t\tname: 'elementor-kit-server',\n\t\t\tversion: VERSION,\n\t\t\ttitle: 'Elementor Kit',\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\taddKitDescriptionResource( server );\n\n\tconst getAvailableTabs = async (): Promise< string[] > => {\n\t\tconst kitSchema = await fetchKitSchema();\n\t\treturn Object.keys( kitSchema.data || {} );\n\t};\n\n\tserver.registerResource(\n\t\tRESOURCE_NAME_KIT_FONTS,\n\t\tRESOURCE_URI_KIT_FONTS,\n\t\t{\n\t\t\ttitle: 'Elementor Kit Available Fonts',\n\t\t\tdescription:\n\t\t\t\t'Complete list of all available font families that can be used in Elementor, including system fonts, Google fonts, and custom uploaded fonts',\n\t\t},\n\t\tasync ( uri ) => {\n\t\t\tconst fontsResponse = await fetchKitFonts();\n\t\t\treturn {\n\t\t\t\tcontents: [\n\t\t\t\t\t{\n\t\t\t\t\t\turi: uri.href,\n\t\t\t\t\t\tmimeType: 'application/json',\n\t\t\t\t\t\ttext: JSON.stringify( fontsResponse, null, 2 ),\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t};\n\t\t}\n\t);\n\n\tserver.registerResource(\n\t\tRESOURCE_NAME_KIT_SETTINGS,\n\t\tRESOURCE_URI_KIT_SETTINGS,\n\t\t{\n\t\t\ttitle: 'Elementor Kit Current Settings',\n\t\t\tdescription:\n\t\t\t\t'Complete current Elementor global kit configuration including all system and custom colors, typography settings, spacing, buttons, forms, and other site-wide design settings',\n\t\t},\n\t\tasync ( uri ) => {\n\t\t\tconst currentSettings = await fetchKitSettings();\n\t\t\treturn {\n\t\t\t\tcontents: [\n\t\t\t\t\t{\n\t\t\t\t\t\turi: uri.href,\n\t\t\t\t\t\tmimeType: 'application/json',\n\t\t\t\t\t\ttext: JSON.stringify( currentSettings, null, 2 ),\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t};\n\t\t}\n\t);\n\n\tserver.registerResource(\n\t\tRESOURCE_NAME_KIT_SCHEMA,\n\t\tnew ResourceTemplate( RESOURCE_URI_KIT_SCHEMA_TEMPLATE, {\n\t\t\tlist: async () => {\n\t\t\t\tconst availableTabs = await getAvailableTabs();\n\t\t\t\treturn {\n\t\t\t\t\tresources: availableTabs.map( ( tab ) => {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\turi: `elementor://kit/schema/${ tab }`,\n\t\t\t\t\t\t\tname: `${ RESOURCE_NAME_KIT_SCHEMA }-${ tab }`,\n\t\t\t\t\t\t\ttitle: `Elementor Kit Schema - ${ tab }`,\n\t\t\t\t\t\t\tdescription: `Schema definition for Elementor kit ${ tab } settings tab`,\n\t\t\t\t\t\t\tmimeType: 'application/json',\n\t\t\t\t\t\t};\n\t\t\t\t\t} ),\n\t\t\t\t};\n\t\t\t},\n\t\t} ),\n\t\t{\n\t\t\ttitle: 'Elementor Kit Schema',\n\t\t\tdescription:\n\t\t\t\t'Complete schema definition for a specific Elementor kit settings tab, showing all available fields, their types, valid values, and configuration options',\n\t\t},\n\t\tasync ( uri, variables ) => {\n\t\t\tconst tab = Array.isArray( variables.tab ) ? variables.tab[ 0 ] : variables.tab;\n\n\t\t\tif ( ! tab ) {\n\t\t\t\tthrow new Error( 'Tab parameter is required' );\n\t\t\t}\n\n\t\t\tconst kitSchema = await fetchKitSchema();\n\t\t\tconst tabSchema = kitSchema.data?.[ tab ];\n\n\t\t\tif ( ! tabSchema ) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`No schema found for tab '${ tab }'. Available tabs: ${ Object.keys( kitSchema.data ).join(\n\t\t\t\t\t\t', '\n\t\t\t\t\t) }`\n\t\t\t\t);\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: JSON.stringify( tabSchema, null, 2 ),\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t};\n\t\t}\n\t);\n\n\tserver.registerTool(\n\t\t'update-elementor-kit-settings-colors-and-fonts',\n\t\t{\n\t\t\tdescription: `This tool applies configuration changes to Elementor global kit settings that control site-wide design elements. Use this when you need to modify global colors, typography, spacing, buttons, form fields, or other theme-wide settings that affect the entire website appearance.\n\nThe tool will permanently update the site's global design settings and return a success confirmation with the updated configuration data.`,\n\t\t\tinputSchema: {\n\t\t\t\tsystemColors: systemColorsSchema\n\t\t\t\t\t.optional()\n\t\t\t\t\t.nullable()\n\t\t\t\t\t.describe(\n\t\t\t\t\t\t'System colors array with exactly 4 items having IDs: primary, secondary, text, accent'\n\t\t\t\t\t),\n\t\t\t\tsystemTypography: systemTypographySchema\n\t\t\t\t\t.optional()\n\t\t\t\t\t.nullable()\n\t\t\t\t\t.describe(\n\t\t\t\t\t\t'System typography array with exactly 4 items having IDs: primary, secondary, text, accent'\n\t\t\t\t\t),\n\t\t\t\tcustomColors: customColorsSchema\n\t\t\t\t\t.optional()\n\t\t\t\t\t.nullable()\n\t\t\t\t\t.describe( 'Custom colors array - flexible structure for additional color definitions' ),\n\t\t\t\tcustomTypography: customTypographySchema\n\t\t\t\t\t.optional()\n\t\t\t\t\t.nullable()\n\t\t\t\t\t.describe(\n\t\t\t\t\t\t'Custom typography array - flexible structure for additional font definitions (no color field needed)'\n\t\t\t\t\t),\n\t\t\t\tpatchObject: generalPatchSchema\n\t\t\t\t\t.optional()\n\t\t\t\t\t.nullable()\n\t\t\t\t\t.describe(\n\t\t\t\t\t\t'General patch object for any other Elementor kit settings like spacing, buttons, forms, layout settings, etc.'\n\t\t\t\t\t),\n\t\t\t\tconfirmationMessage: z\n\t\t\t\t\t.string()\n\t\t\t\t\t.describe(\n\t\t\t\t\t\t'REQUIRED: Provide a clear explanation in **markdown format** of what Elementor kit settings will be changed and their potential impact on the site\\'s global design. This message will be shown to the user before proceeding. Be specific about which design elements are being modified (colors, typography, spacing, etc.) and how they will affect the entire website. Examples: \"You\\'re about to update the global **primary color** from `blue` to `green`. This will change **buttons**, **links**, and **accent colors** throughout your entire site.\" or \"You\\'re about to change the **primary font** from `Roboto` to `Open Sans`. This will affect **headings** across all pages.\"'\n\t\t\t\t\t),\n\t\t\t},\n\t\t\tannotations: {\n\t\t\t\ttitle: 'Update Elementor Kit Settings',\n\t\t\t\tdestructiveHint: true,\n\t\t\t},\n\t\t\t_meta: {\n\t\t\t\t'angie/requiredResources': [\n\t\t\t\t\t{\n\t\t\t\t\t\turi: KIT_DESCRIPTION_URI,\n\t\t\t\t\t\twhenToUse: 'Read first for kit capabilities and limitations',\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t},\n\t\tasync ( {\n\t\t\tsystemColors,\n\t\t\tsystemTypography,\n\t\t\tcustomColors,\n\t\t\tcustomTypography,\n\t\t\tpatchObject,\n\t\t\tconfirmationMessage,\n\t\t} ) => {\n\t\t\trequireConfirmationMessage( confirmationMessage, 'Elementor kit settings' );\n\n\t\t\tconst invalidFonts = await validateFonts( systemTypography, customTypography );\n\t\t\tif ( invalidFonts ) {\n\t\t\t\tthrow new Error( invalidFonts );\n\t\t\t}\n\n\t\t\tconst completePatchObject = {\n\t\t\t\t...( systemColors && { system_colors: systemColors } ),\n\t\t\t\t...( systemTypography && { system_typography: systemTypography } ),\n\t\t\t\t...( customColors && { custom_colors: customColors } ),\n\t\t\t\t...( customTypography && { custom_typography: customTypography } ),\n\t\t\t\t...sanitizeMediaFields( patchObject || {} ),\n\t\t\t};\n\n\t\t\tif ( Object.keys( completePatchObject ).length === 0 ) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t'At least one update must be provided (systemColors, systemTypography, customColors, customTypography, or patchObject)'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst response = await callWpApi( `/angie/v1/elementor-kit`, 'POST', completePatchObject );\n\n\t\t\treturn {\n\t\t\t\tcontent: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: 'text' as const,\n\t\t\t\t\t\ttext: JSON.stringify(\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tsuccess: true,\n\t\t\t\t\t\t\t\tmessage: 'Settings updated successfully',\n\t\t\t\t\t\t\t\tdata: response,\n\t\t\t\t\t\t\t\tappliedSettings: completePatchObject,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\t2\n\t\t\t\t\t\t),\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t};\n\t\t}\n\t);\n\n\tconst sdk = getAngieSdk();\n\tawait sdk.waitForReady();\n\tsdk.registerLocalServer( {\n\t\tserver,\n\t\tversion: VERSION,\n\t\tdescription: SERVER_INSTRUCTIONS,\n\t\tname: 'elementor-kit-server',\n\t} );\n\treturn server;\n}\n","import { type McpServer } from '@elementor/editor-mcp';\n\nexport const KIT_DESCRIPTION_URI = 'elementor://kit/server-description';\n\nexport const KIT_DESCRIPTION = `## Elementor Kit Settings Management\n\n### Capabilities:\n**Global Design System:**\n- Create, update, name, and delete global colors (both system and custom)\n- Create, update, name, and delete global fonts (both system and custom)\n\n**Site Identity:**\n- Insert site logo\n- Set site favicon\n- Update site name\n- Modify site description\n\n### Limitations:\n**Theme Style Settings:**\n- Cannot set or update Elementor Theme Style settings including typography, buttons, images, form fields, Hello Theme header, or Hello Theme footer that affect the entire website appearance\n\n**Site-Wide Settings:**\n- Cannot set site-wide background (color or image)\n- Cannot configure mobile browser background\n- Cannot modify global layout settings such as content width, container padding, and widget gaps (the default space between widgets)\n\n**Note**: Angie can adjust all of these layout properties at the container or page level - just not site-wide.`;\n\nexport function addKitDescriptionResource( server: McpServer ) {\n\tserver.registerResource(\n\t\t'elementor-kit-server-description',\n\t\tKIT_DESCRIPTION_URI,\n\t\t{\n\t\t\ttitle: 'Elementor Kit Server Description',\n\t\t\tdescription: 'Elementor Kit capabilities and limitations',\n\t\t\tmimeType: 'text/plain',\n\t\t},\n\t\tasync ( uri ) => ( {\n\t\t\tcontents: [ { uri: uri.href, mimeType: 'text/plain', text: KIT_DESCRIPTION } ],\n\t\t} )\n\t);\n}\n","import { createElementorKitServer } from './elementor-kit-mcp-server';\n\nexport function init() {\n\tcreateElementorKitServer();\n}\n"],"mappings":"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","names":[]}
package/dist/index.mjs CHANGED
@@ -200,11 +200,11 @@ async function createElementorKitServer() {
200
200
  };
201
201
  }
202
202
  );
203
- const availableTabs = await getAvailableTabs();
204
203
  server.registerResource(
205
204
  RESOURCE_NAME_KIT_SCHEMA,
206
205
  new ResourceTemplate(RESOURCE_URI_KIT_SCHEMA_TEMPLATE, {
207
206
  list: async () => {
207
+ const availableTabs = await getAvailableTabs();
208
208
  return {
209
209
  resources: availableTabs.map((tab) => {
210
210
  return {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/elementor-kit-mcp-server.ts","../src/mcp-description-resource.ts","../src/init.ts"],"sourcesContent":["import { getAngieSdk, McpServer, ResourceTemplate } from '@elementor/editor-mcp';\nimport { callWpApi, requireConfirmationMessage, waitForElementorEditor } from '@elementor/elementor-mcp-common';\nimport { z } from '@elementor/schema';\n\nimport { addKitDescriptionResource, KIT_DESCRIPTION_URI } from './mcp-description-resource';\n\nconst RESOURCE_NAME_KIT_FONTS = 'elementor-kit-fonts';\nconst RESOURCE_URI_KIT_FONTS = 'elementor://kit/fonts';\nconst RESOURCE_NAME_KIT_SCHEMA = 'elementor-kit-schema';\nconst RESOURCE_URI_KIT_SCHEMA_TEMPLATE = 'elementor://kit/schema/{tab}';\nconst RESOURCE_NAME_KIT_SETTINGS = 'elementor-kit-settings';\nconst RESOURCE_URI_KIT_SETTINGS = 'elementor://kit/settings';\n\ntype KitFontsResponse = {\n\tfonts: Record< string, unknown >;\n};\n\ntype KitSchemaResponse = Record< string, unknown >;\n\nconst VERSION = '2.0.0';\nasync function fetchKitFonts() {\n\treturn callWpApi< KitFontsResponse >( `/angie/v1/elementor-kit/fonts`, 'GET' );\n}\n\nasync function fetchKitSchema() {\n\treturn callWpApi< KitSchemaResponse >( `/angie/v1/elementor-kit/schema`, 'GET' );\n}\n\nasync function fetchKitSettings() {\n\treturn callWpApi( `/angie/v1/elementor-kit`, 'GET' );\n}\n\ntype TypographyItem = {\n\ttypography_font_family?: string;\n};\n\nasync function validateFonts(\n\tsystemTypography: TypographyItem[] | null | undefined,\n\tcustomTypography: TypographyItem[] | null | undefined\n) {\n\tconst fontsResponse = await fetchKitFonts();\n\tconst availableFonts = Object.keys( fontsResponse.data.fonts || {} );\n\tconst invalidFonts: string[] = [];\n\n\t[ systemTypography, customTypography ].forEach( ( typography ) => {\n\t\tif ( typography ) {\n\t\t\ttypography.forEach( ( item ) => {\n\t\t\t\tif ( item.typography_font_family && ! availableFonts.includes( item.typography_font_family ) ) {\n\t\t\t\t\tinvalidFonts.push( item.typography_font_family );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\t} );\n\n\tif ( invalidFonts.length > 0 ) {\n\t\treturn `Please use available fonts only. Invalid fonts: ${ invalidFonts.join(\n\t\t\t', '\n\t\t) }. Available fonts: ${ availableFonts.join( ', ' ) }`;\n\t}\n\n\treturn '';\n}\n\nfunction sanitizeMediaFields( obj: Record< string, unknown > ): Record< string, unknown > {\n\tconst mediaFields = [ 'site_logo', 'site_icon' ];\n\tconst sanitized = { ...obj };\n\n\tfor ( const field of mediaFields ) {\n\t\tif ( field in sanitized && sanitized[ field ] === '' ) {\n\t\t\tsanitized[ field ] = 0;\n\t\t}\n\t}\n\n\treturn sanitized;\n}\n\nconst baseColorSchema = z.object( {\n\ttitle: z.string(),\n\tcolor: z.string(),\n} );\n\nconst baseTypographySchema = z\n\t.object( {\n\t\ttitle: z.string(),\n\t\ttypography_typography: z.string(),\n\t\ttypography_font_family: z\n\t\t\t.string()\n\t\t\t.describe(\n\t\t\t\t'Font family name that must be from the available Elementor fonts list. Use the get-fonts endpoint (/angie/v1/elementor-kit/fonts) to get the complete list of available fonts. Only use fonts that exist in this list to avoid validation errors.'\n\t\t\t),\n\t\ttypography_font_weight: z.string(),\n\t\ttypography_font_size: z\n\t\t\t.object( {\n\t\t\t\tunit: z.string(),\n\t\t\t\tsize: z.number(),\n\t\t\t} )\n\t\t\t.optional(),\n\t\ttypography_font_size_tablet: z\n\t\t\t.object( {\n\t\t\t\tunit: z.string(),\n\t\t\t\tsize: z.number(),\n\t\t\t} )\n\t\t\t.optional(),\n\t\ttypography_font_size_mobile: z\n\t\t\t.object( {\n\t\t\t\tunit: z.string(),\n\t\t\t\tsize: z.number(),\n\t\t\t} )\n\t\t\t.optional(),\n\t\ttypography_line_height: z\n\t\t\t.object( {\n\t\t\t\tunit: z.string(),\n\t\t\t\tsize: z.number(),\n\t\t\t} )\n\t\t\t.optional(),\n\t} )\n\t.passthrough();\n\nconst systemColorItemSchema = baseColorSchema.extend( {\n\t_id: z.enum( [ 'primary', 'secondary', 'text', 'accent' ] ),\n} );\n\nconst systemTypographyItemSchema = baseTypographySchema.extend( {\n\t_id: z.enum( [ 'primary', 'secondary', 'text', 'accent' ] ),\n} );\n\nconst customColorItemSchema = baseColorSchema.extend( {\n\t_id: z.string(),\n} );\n\nconst customTypographyItemSchema = baseTypographySchema.extend( {\n\t_id: z.string(),\n} );\n\nconst systemColorsSchema = z.array( systemColorItemSchema ).length( 4 );\nconst systemTypographySchema = z.array( systemTypographyItemSchema ).length( 4 );\nconst customColorsSchema = z.array( customColorItemSchema );\nconst customTypographySchema = z.array( customTypographyItemSchema );\n\nconst generalPatchSchema = z\n\t.record( z.unknown() )\n\t.describe(\n\t\t'General patch object for any other Elementor kit settings like spacing, buttons, forms, layout settings, etc.'\n\t);\n\nconst SERVER_INSTRUCTIONS = 'Manages Elementor global design system: colors, typography, and site identity.';\nexport async function createElementorKitServer(): Promise< McpServer > {\n\tawait waitForElementorEditor();\n\tconst server = new McpServer(\n\t\t{\n\t\t\tname: 'elementor-kit-server',\n\t\t\tversion: VERSION,\n\t\t\ttitle: 'Elementor Kit',\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\taddKitDescriptionResource( server );\n\n\tconst getAvailableTabs = async (): Promise< string[] > => {\n\t\tconst kitSchema = await fetchKitSchema();\n\t\treturn Object.keys( kitSchema.data || {} );\n\t};\n\n\tserver.registerResource(\n\t\tRESOURCE_NAME_KIT_FONTS,\n\t\tRESOURCE_URI_KIT_FONTS,\n\t\t{\n\t\t\ttitle: 'Elementor Kit Available Fonts',\n\t\t\tdescription:\n\t\t\t\t'Complete list of all available font families that can be used in Elementor, including system fonts, Google fonts, and custom uploaded fonts',\n\t\t},\n\t\tasync ( uri ) => {\n\t\t\tconst fontsResponse = await fetchKitFonts();\n\t\t\treturn {\n\t\t\t\tcontents: [\n\t\t\t\t\t{\n\t\t\t\t\t\turi: uri.href,\n\t\t\t\t\t\tmimeType: 'application/json',\n\t\t\t\t\t\ttext: JSON.stringify( fontsResponse, null, 2 ),\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t};\n\t\t}\n\t);\n\n\tserver.registerResource(\n\t\tRESOURCE_NAME_KIT_SETTINGS,\n\t\tRESOURCE_URI_KIT_SETTINGS,\n\t\t{\n\t\t\ttitle: 'Elementor Kit Current Settings',\n\t\t\tdescription:\n\t\t\t\t'Complete current Elementor global kit configuration including all system and custom colors, typography settings, spacing, buttons, forms, and other site-wide design settings',\n\t\t},\n\t\tasync ( uri ) => {\n\t\t\tconst currentSettings = await fetchKitSettings();\n\t\t\treturn {\n\t\t\t\tcontents: [\n\t\t\t\t\t{\n\t\t\t\t\t\turi: uri.href,\n\t\t\t\t\t\tmimeType: 'application/json',\n\t\t\t\t\t\ttext: JSON.stringify( currentSettings, null, 2 ),\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t};\n\t\t}\n\t);\n\n\tconst availableTabs = await getAvailableTabs();\n\n\tserver.registerResource(\n\t\tRESOURCE_NAME_KIT_SCHEMA,\n\t\tnew ResourceTemplate( RESOURCE_URI_KIT_SCHEMA_TEMPLATE, {\n\t\t\tlist: async () => {\n\t\t\t\treturn {\n\t\t\t\t\tresources: availableTabs.map( ( tab ) => {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\turi: `elementor://kit/schema/${ tab }`,\n\t\t\t\t\t\t\tname: `${ RESOURCE_NAME_KIT_SCHEMA }-${ tab }`,\n\t\t\t\t\t\t\ttitle: `Elementor Kit Schema - ${ tab }`,\n\t\t\t\t\t\t\tdescription: `Schema definition for Elementor kit ${ tab } settings tab`,\n\t\t\t\t\t\t\tmimeType: 'application/json',\n\t\t\t\t\t\t};\n\t\t\t\t\t} ),\n\t\t\t\t};\n\t\t\t},\n\t\t} ),\n\t\t{\n\t\t\ttitle: 'Elementor Kit Schema',\n\t\t\tdescription:\n\t\t\t\t'Complete schema definition for a specific Elementor kit settings tab, showing all available fields, their types, valid values, and configuration options',\n\t\t},\n\t\tasync ( uri, variables ) => {\n\t\t\tconst tab = Array.isArray( variables.tab ) ? variables.tab[ 0 ] : variables.tab;\n\n\t\t\tif ( ! tab ) {\n\t\t\t\tthrow new Error( 'Tab parameter is required' );\n\t\t\t}\n\n\t\t\tconst kitSchema = await fetchKitSchema();\n\t\t\tconst tabSchema = kitSchema.data?.[ tab ];\n\n\t\t\tif ( ! tabSchema ) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`No schema found for tab '${ tab }'. Available tabs: ${ Object.keys( kitSchema.data ).join(\n\t\t\t\t\t\t', '\n\t\t\t\t\t) }`\n\t\t\t\t);\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: JSON.stringify( tabSchema, null, 2 ),\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t};\n\t\t}\n\t);\n\n\tserver.registerTool(\n\t\t'update-elementor-kit-settings-colors-and-fonts',\n\t\t{\n\t\t\tdescription: `This tool applies configuration changes to Elementor global kit settings that control site-wide design elements. Use this when you need to modify global colors, typography, spacing, buttons, form fields, or other theme-wide settings that affect the entire website appearance.\n\nThe tool will permanently update the site's global design settings and return a success confirmation with the updated configuration data.`,\n\t\t\tinputSchema: {\n\t\t\t\tsystemColors: systemColorsSchema\n\t\t\t\t\t.optional()\n\t\t\t\t\t.nullable()\n\t\t\t\t\t.describe(\n\t\t\t\t\t\t'System colors array with exactly 4 items having IDs: primary, secondary, text, accent'\n\t\t\t\t\t),\n\t\t\t\tsystemTypography: systemTypographySchema\n\t\t\t\t\t.optional()\n\t\t\t\t\t.nullable()\n\t\t\t\t\t.describe(\n\t\t\t\t\t\t'System typography array with exactly 4 items having IDs: primary, secondary, text, accent'\n\t\t\t\t\t),\n\t\t\t\tcustomColors: customColorsSchema\n\t\t\t\t\t.optional()\n\t\t\t\t\t.nullable()\n\t\t\t\t\t.describe( 'Custom colors array - flexible structure for additional color definitions' ),\n\t\t\t\tcustomTypography: customTypographySchema\n\t\t\t\t\t.optional()\n\t\t\t\t\t.nullable()\n\t\t\t\t\t.describe(\n\t\t\t\t\t\t'Custom typography array - flexible structure for additional font definitions (no color field needed)'\n\t\t\t\t\t),\n\t\t\t\tpatchObject: generalPatchSchema\n\t\t\t\t\t.optional()\n\t\t\t\t\t.nullable()\n\t\t\t\t\t.describe(\n\t\t\t\t\t\t'General patch object for any other Elementor kit settings like spacing, buttons, forms, layout settings, etc.'\n\t\t\t\t\t),\n\t\t\t\tconfirmationMessage: z\n\t\t\t\t\t.string()\n\t\t\t\t\t.describe(\n\t\t\t\t\t\t'REQUIRED: Provide a clear explanation in **markdown format** of what Elementor kit settings will be changed and their potential impact on the site\\'s global design. This message will be shown to the user before proceeding. Be specific about which design elements are being modified (colors, typography, spacing, etc.) and how they will affect the entire website. Examples: \"You\\'re about to update the global **primary color** from `blue` to `green`. This will change **buttons**, **links**, and **accent colors** throughout your entire site.\" or \"You\\'re about to change the **primary font** from `Roboto` to `Open Sans`. This will affect **headings** across all pages.\"'\n\t\t\t\t\t),\n\t\t\t},\n\t\t\tannotations: {\n\t\t\t\ttitle: 'Update Elementor Kit Settings',\n\t\t\t\tdestructiveHint: true,\n\t\t\t},\n\t\t\t_meta: {\n\t\t\t\t'angie/requiredResources': [\n\t\t\t\t\t{\n\t\t\t\t\t\turi: KIT_DESCRIPTION_URI,\n\t\t\t\t\t\twhenToUse: 'Read first for kit capabilities and limitations',\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t},\n\t\tasync ( {\n\t\t\tsystemColors,\n\t\t\tsystemTypography,\n\t\t\tcustomColors,\n\t\t\tcustomTypography,\n\t\t\tpatchObject,\n\t\t\tconfirmationMessage,\n\t\t} ) => {\n\t\t\trequireConfirmationMessage( confirmationMessage, 'Elementor kit settings' );\n\n\t\t\tconst invalidFonts = await validateFonts( systemTypography, customTypography );\n\t\t\tif ( invalidFonts ) {\n\t\t\t\tthrow new Error( invalidFonts );\n\t\t\t}\n\n\t\t\tconst completePatchObject = {\n\t\t\t\t...( systemColors && { system_colors: systemColors } ),\n\t\t\t\t...( systemTypography && { system_typography: systemTypography } ),\n\t\t\t\t...( customColors && { custom_colors: customColors } ),\n\t\t\t\t...( customTypography && { custom_typography: customTypography } ),\n\t\t\t\t...sanitizeMediaFields( patchObject || {} ),\n\t\t\t};\n\n\t\t\tif ( Object.keys( completePatchObject ).length === 0 ) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t'At least one update must be provided (systemColors, systemTypography, customColors, customTypography, or patchObject)'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst response = await callWpApi( `/angie/v1/elementor-kit`, 'POST', completePatchObject );\n\n\t\t\treturn {\n\t\t\t\tcontent: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: 'text' as const,\n\t\t\t\t\t\ttext: JSON.stringify(\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tsuccess: true,\n\t\t\t\t\t\t\t\tmessage: 'Settings updated successfully',\n\t\t\t\t\t\t\t\tdata: response,\n\t\t\t\t\t\t\t\tappliedSettings: completePatchObject,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\t2\n\t\t\t\t\t\t),\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t};\n\t\t}\n\t);\n\n\tconst sdk = getAngieSdk();\n\tawait sdk.waitForReady();\n\tsdk.registerLocalServer( {\n\t\tserver,\n\t\tversion: VERSION,\n\t\tdescription: SERVER_INSTRUCTIONS,\n\t\tname: 'elementor-kit-server',\n\t} );\n\treturn server;\n}\n","import { type McpServer } from '@elementor/editor-mcp';\n\nexport const KIT_DESCRIPTION_URI = 'elementor://kit/server-description';\n\nexport const KIT_DESCRIPTION = `## Elementor Kit Settings Management\n\n### Capabilities:\n**Global Design System:**\n- Create, update, name, and delete global colors (both system and custom)\n- Create, update, name, and delete global fonts (both system and custom)\n\n**Site Identity:**\n- Insert site logo\n- Set site favicon\n- Update site name\n- Modify site description\n\n### Limitations:\n**Theme Style Settings:**\n- Cannot set or update Elementor Theme Style settings including typography, buttons, images, form fields, Hello Theme header, or Hello Theme footer that affect the entire website appearance\n\n**Site-Wide Settings:**\n- Cannot set site-wide background (color or image)\n- Cannot configure mobile browser background\n- Cannot modify global layout settings such as content width, container padding, and widget gaps (the default space between widgets)\n\n**Note**: Angie can adjust all of these layout properties at the container or page level - just not site-wide.`;\n\nexport function addKitDescriptionResource( server: McpServer ) {\n\tserver.registerResource(\n\t\t'elementor-kit-server-description',\n\t\tKIT_DESCRIPTION_URI,\n\t\t{\n\t\t\ttitle: 'Elementor Kit Server Description',\n\t\t\tdescription: 'Elementor Kit capabilities and limitations',\n\t\t\tmimeType: 'text/plain',\n\t\t},\n\t\tasync ( uri ) => ( {\n\t\t\tcontents: [ { uri: uri.href, mimeType: 'text/plain', text: KIT_DESCRIPTION } ],\n\t\t} )\n\t);\n}\n","import { createElementorKitServer } from './elementor-kit-mcp-server';\n\nexport function init() {\n\tcreateElementorKitServer();\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/elementor-kit-mcp-server.ts","../src/mcp-description-resource.ts","../src/init.ts"],"sourcesContent":["import { getAngieSdk, McpServer, ResourceTemplate } from '@elementor/editor-mcp';\nimport { callWpApi, requireConfirmationMessage, waitForElementorEditor } from '@elementor/elementor-mcp-common';\nimport { z } from '@elementor/schema';\n\nimport { addKitDescriptionResource, KIT_DESCRIPTION_URI } from './mcp-description-resource';\n\nconst RESOURCE_NAME_KIT_FONTS = 'elementor-kit-fonts';\nconst RESOURCE_URI_KIT_FONTS = 'elementor://kit/fonts';\nconst RESOURCE_NAME_KIT_SCHEMA = 'elementor-kit-schema';\nconst RESOURCE_URI_KIT_SCHEMA_TEMPLATE = 'elementor://kit/schema/{tab}';\nconst RESOURCE_NAME_KIT_SETTINGS = 'elementor-kit-settings';\nconst RESOURCE_URI_KIT_SETTINGS = 'elementor://kit/settings';\n\ntype KitFontsResponse = {\n\tfonts: Record< string, unknown >;\n};\n\ntype KitSchemaResponse = Record< string, unknown >;\n\nconst VERSION = '2.0.0';\nasync function fetchKitFonts() {\n\treturn callWpApi< KitFontsResponse >( `/angie/v1/elementor-kit/fonts`, 'GET' );\n}\n\nasync function fetchKitSchema() {\n\treturn callWpApi< KitSchemaResponse >( `/angie/v1/elementor-kit/schema`, 'GET' );\n}\n\nasync function fetchKitSettings() {\n\treturn callWpApi( `/angie/v1/elementor-kit`, 'GET' );\n}\n\ntype TypographyItem = {\n\ttypography_font_family?: string;\n};\n\nasync function validateFonts(\n\tsystemTypography: TypographyItem[] | null | undefined,\n\tcustomTypography: TypographyItem[] | null | undefined\n) {\n\tconst fontsResponse = await fetchKitFonts();\n\tconst availableFonts = Object.keys( fontsResponse.data.fonts || {} );\n\tconst invalidFonts: string[] = [];\n\n\t[ systemTypography, customTypography ].forEach( ( typography ) => {\n\t\tif ( typography ) {\n\t\t\ttypography.forEach( ( item ) => {\n\t\t\t\tif ( item.typography_font_family && ! availableFonts.includes( item.typography_font_family ) ) {\n\t\t\t\t\tinvalidFonts.push( item.typography_font_family );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\t} );\n\n\tif ( invalidFonts.length > 0 ) {\n\t\treturn `Please use available fonts only. Invalid fonts: ${ invalidFonts.join(\n\t\t\t', '\n\t\t) }. Available fonts: ${ availableFonts.join( ', ' ) }`;\n\t}\n\n\treturn '';\n}\n\nfunction sanitizeMediaFields( obj: Record< string, unknown > ): Record< string, unknown > {\n\tconst mediaFields = [ 'site_logo', 'site_icon' ];\n\tconst sanitized = { ...obj };\n\n\tfor ( const field of mediaFields ) {\n\t\tif ( field in sanitized && sanitized[ field ] === '' ) {\n\t\t\tsanitized[ field ] = 0;\n\t\t}\n\t}\n\n\treturn sanitized;\n}\n\nconst baseColorSchema = z.object( {\n\ttitle: z.string(),\n\tcolor: z.string(),\n} );\n\nconst baseTypographySchema = z\n\t.object( {\n\t\ttitle: z.string(),\n\t\ttypography_typography: z.string(),\n\t\ttypography_font_family: z\n\t\t\t.string()\n\t\t\t.describe(\n\t\t\t\t'Font family name that must be from the available Elementor fonts list. Use the get-fonts endpoint (/angie/v1/elementor-kit/fonts) to get the complete list of available fonts. Only use fonts that exist in this list to avoid validation errors.'\n\t\t\t),\n\t\ttypography_font_weight: z.string(),\n\t\ttypography_font_size: z\n\t\t\t.object( {\n\t\t\t\tunit: z.string(),\n\t\t\t\tsize: z.number(),\n\t\t\t} )\n\t\t\t.optional(),\n\t\ttypography_font_size_tablet: z\n\t\t\t.object( {\n\t\t\t\tunit: z.string(),\n\t\t\t\tsize: z.number(),\n\t\t\t} )\n\t\t\t.optional(),\n\t\ttypography_font_size_mobile: z\n\t\t\t.object( {\n\t\t\t\tunit: z.string(),\n\t\t\t\tsize: z.number(),\n\t\t\t} )\n\t\t\t.optional(),\n\t\ttypography_line_height: z\n\t\t\t.object( {\n\t\t\t\tunit: z.string(),\n\t\t\t\tsize: z.number(),\n\t\t\t} )\n\t\t\t.optional(),\n\t} )\n\t.passthrough();\n\nconst systemColorItemSchema = baseColorSchema.extend( {\n\t_id: z.enum( [ 'primary', 'secondary', 'text', 'accent' ] ),\n} );\n\nconst systemTypographyItemSchema = baseTypographySchema.extend( {\n\t_id: z.enum( [ 'primary', 'secondary', 'text', 'accent' ] ),\n} );\n\nconst customColorItemSchema = baseColorSchema.extend( {\n\t_id: z.string(),\n} );\n\nconst customTypographyItemSchema = baseTypographySchema.extend( {\n\t_id: z.string(),\n} );\n\nconst systemColorsSchema = z.array( systemColorItemSchema ).length( 4 );\nconst systemTypographySchema = z.array( systemTypographyItemSchema ).length( 4 );\nconst customColorsSchema = z.array( customColorItemSchema );\nconst customTypographySchema = z.array( customTypographyItemSchema );\n\nconst generalPatchSchema = z\n\t.record( z.unknown() )\n\t.describe(\n\t\t'General patch object for any other Elementor kit settings like spacing, buttons, forms, layout settings, etc.'\n\t);\n\nconst SERVER_INSTRUCTIONS = 'Manages Elementor global design system: colors, typography, and site identity.';\nexport async function createElementorKitServer(): Promise< McpServer > {\n\tawait waitForElementorEditor();\n\tconst server = new McpServer(\n\t\t{\n\t\t\tname: 'elementor-kit-server',\n\t\t\tversion: VERSION,\n\t\t\ttitle: 'Elementor Kit',\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\taddKitDescriptionResource( server );\n\n\tconst getAvailableTabs = async (): Promise< string[] > => {\n\t\tconst kitSchema = await fetchKitSchema();\n\t\treturn Object.keys( kitSchema.data || {} );\n\t};\n\n\tserver.registerResource(\n\t\tRESOURCE_NAME_KIT_FONTS,\n\t\tRESOURCE_URI_KIT_FONTS,\n\t\t{\n\t\t\ttitle: 'Elementor Kit Available Fonts',\n\t\t\tdescription:\n\t\t\t\t'Complete list of all available font families that can be used in Elementor, including system fonts, Google fonts, and custom uploaded fonts',\n\t\t},\n\t\tasync ( uri ) => {\n\t\t\tconst fontsResponse = await fetchKitFonts();\n\t\t\treturn {\n\t\t\t\tcontents: [\n\t\t\t\t\t{\n\t\t\t\t\t\turi: uri.href,\n\t\t\t\t\t\tmimeType: 'application/json',\n\t\t\t\t\t\ttext: JSON.stringify( fontsResponse, null, 2 ),\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t};\n\t\t}\n\t);\n\n\tserver.registerResource(\n\t\tRESOURCE_NAME_KIT_SETTINGS,\n\t\tRESOURCE_URI_KIT_SETTINGS,\n\t\t{\n\t\t\ttitle: 'Elementor Kit Current Settings',\n\t\t\tdescription:\n\t\t\t\t'Complete current Elementor global kit configuration including all system and custom colors, typography settings, spacing, buttons, forms, and other site-wide design settings',\n\t\t},\n\t\tasync ( uri ) => {\n\t\t\tconst currentSettings = await fetchKitSettings();\n\t\t\treturn {\n\t\t\t\tcontents: [\n\t\t\t\t\t{\n\t\t\t\t\t\turi: uri.href,\n\t\t\t\t\t\tmimeType: 'application/json',\n\t\t\t\t\t\ttext: JSON.stringify( currentSettings, null, 2 ),\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t};\n\t\t}\n\t);\n\n\tserver.registerResource(\n\t\tRESOURCE_NAME_KIT_SCHEMA,\n\t\tnew ResourceTemplate( RESOURCE_URI_KIT_SCHEMA_TEMPLATE, {\n\t\t\tlist: async () => {\n\t\t\t\tconst availableTabs = await getAvailableTabs();\n\t\t\t\treturn {\n\t\t\t\t\tresources: availableTabs.map( ( tab ) => {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\turi: `elementor://kit/schema/${ tab }`,\n\t\t\t\t\t\t\tname: `${ RESOURCE_NAME_KIT_SCHEMA }-${ tab }`,\n\t\t\t\t\t\t\ttitle: `Elementor Kit Schema - ${ tab }`,\n\t\t\t\t\t\t\tdescription: `Schema definition for Elementor kit ${ tab } settings tab`,\n\t\t\t\t\t\t\tmimeType: 'application/json',\n\t\t\t\t\t\t};\n\t\t\t\t\t} ),\n\t\t\t\t};\n\t\t\t},\n\t\t} ),\n\t\t{\n\t\t\ttitle: 'Elementor Kit Schema',\n\t\t\tdescription:\n\t\t\t\t'Complete schema definition for a specific Elementor kit settings tab, showing all available fields, their types, valid values, and configuration options',\n\t\t},\n\t\tasync ( uri, variables ) => {\n\t\t\tconst tab = Array.isArray( variables.tab ) ? variables.tab[ 0 ] : variables.tab;\n\n\t\t\tif ( ! tab ) {\n\t\t\t\tthrow new Error( 'Tab parameter is required' );\n\t\t\t}\n\n\t\t\tconst kitSchema = await fetchKitSchema();\n\t\t\tconst tabSchema = kitSchema.data?.[ tab ];\n\n\t\t\tif ( ! tabSchema ) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`No schema found for tab '${ tab }'. Available tabs: ${ Object.keys( kitSchema.data ).join(\n\t\t\t\t\t\t', '\n\t\t\t\t\t) }`\n\t\t\t\t);\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: JSON.stringify( tabSchema, null, 2 ),\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t};\n\t\t}\n\t);\n\n\tserver.registerTool(\n\t\t'update-elementor-kit-settings-colors-and-fonts',\n\t\t{\n\t\t\tdescription: `This tool applies configuration changes to Elementor global kit settings that control site-wide design elements. Use this when you need to modify global colors, typography, spacing, buttons, form fields, or other theme-wide settings that affect the entire website appearance.\n\nThe tool will permanently update the site's global design settings and return a success confirmation with the updated configuration data.`,\n\t\t\tinputSchema: {\n\t\t\t\tsystemColors: systemColorsSchema\n\t\t\t\t\t.optional()\n\t\t\t\t\t.nullable()\n\t\t\t\t\t.describe(\n\t\t\t\t\t\t'System colors array with exactly 4 items having IDs: primary, secondary, text, accent'\n\t\t\t\t\t),\n\t\t\t\tsystemTypography: systemTypographySchema\n\t\t\t\t\t.optional()\n\t\t\t\t\t.nullable()\n\t\t\t\t\t.describe(\n\t\t\t\t\t\t'System typography array with exactly 4 items having IDs: primary, secondary, text, accent'\n\t\t\t\t\t),\n\t\t\t\tcustomColors: customColorsSchema\n\t\t\t\t\t.optional()\n\t\t\t\t\t.nullable()\n\t\t\t\t\t.describe( 'Custom colors array - flexible structure for additional color definitions' ),\n\t\t\t\tcustomTypography: customTypographySchema\n\t\t\t\t\t.optional()\n\t\t\t\t\t.nullable()\n\t\t\t\t\t.describe(\n\t\t\t\t\t\t'Custom typography array - flexible structure for additional font definitions (no color field needed)'\n\t\t\t\t\t),\n\t\t\t\tpatchObject: generalPatchSchema\n\t\t\t\t\t.optional()\n\t\t\t\t\t.nullable()\n\t\t\t\t\t.describe(\n\t\t\t\t\t\t'General patch object for any other Elementor kit settings like spacing, buttons, forms, layout settings, etc.'\n\t\t\t\t\t),\n\t\t\t\tconfirmationMessage: z\n\t\t\t\t\t.string()\n\t\t\t\t\t.describe(\n\t\t\t\t\t\t'REQUIRED: Provide a clear explanation in **markdown format** of what Elementor kit settings will be changed and their potential impact on the site\\'s global design. This message will be shown to the user before proceeding. Be specific about which design elements are being modified (colors, typography, spacing, etc.) and how they will affect the entire website. Examples: \"You\\'re about to update the global **primary color** from `blue` to `green`. This will change **buttons**, **links**, and **accent colors** throughout your entire site.\" or \"You\\'re about to change the **primary font** from `Roboto` to `Open Sans`. This will affect **headings** across all pages.\"'\n\t\t\t\t\t),\n\t\t\t},\n\t\t\tannotations: {\n\t\t\t\ttitle: 'Update Elementor Kit Settings',\n\t\t\t\tdestructiveHint: true,\n\t\t\t},\n\t\t\t_meta: {\n\t\t\t\t'angie/requiredResources': [\n\t\t\t\t\t{\n\t\t\t\t\t\turi: KIT_DESCRIPTION_URI,\n\t\t\t\t\t\twhenToUse: 'Read first for kit capabilities and limitations',\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t},\n\t\tasync ( {\n\t\t\tsystemColors,\n\t\t\tsystemTypography,\n\t\t\tcustomColors,\n\t\t\tcustomTypography,\n\t\t\tpatchObject,\n\t\t\tconfirmationMessage,\n\t\t} ) => {\n\t\t\trequireConfirmationMessage( confirmationMessage, 'Elementor kit settings' );\n\n\t\t\tconst invalidFonts = await validateFonts( systemTypography, customTypography );\n\t\t\tif ( invalidFonts ) {\n\t\t\t\tthrow new Error( invalidFonts );\n\t\t\t}\n\n\t\t\tconst completePatchObject = {\n\t\t\t\t...( systemColors && { system_colors: systemColors } ),\n\t\t\t\t...( systemTypography && { system_typography: systemTypography } ),\n\t\t\t\t...( customColors && { custom_colors: customColors } ),\n\t\t\t\t...( customTypography && { custom_typography: customTypography } ),\n\t\t\t\t...sanitizeMediaFields( patchObject || {} ),\n\t\t\t};\n\n\t\t\tif ( Object.keys( completePatchObject ).length === 0 ) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t'At least one update must be provided (systemColors, systemTypography, customColors, customTypography, or patchObject)'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst response = await callWpApi( `/angie/v1/elementor-kit`, 'POST', completePatchObject );\n\n\t\t\treturn {\n\t\t\t\tcontent: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: 'text' as const,\n\t\t\t\t\t\ttext: JSON.stringify(\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tsuccess: true,\n\t\t\t\t\t\t\t\tmessage: 'Settings updated successfully',\n\t\t\t\t\t\t\t\tdata: response,\n\t\t\t\t\t\t\t\tappliedSettings: completePatchObject,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\t2\n\t\t\t\t\t\t),\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t};\n\t\t}\n\t);\n\n\tconst sdk = getAngieSdk();\n\tawait sdk.waitForReady();\n\tsdk.registerLocalServer( {\n\t\tserver,\n\t\tversion: VERSION,\n\t\tdescription: SERVER_INSTRUCTIONS,\n\t\tname: 'elementor-kit-server',\n\t} );\n\treturn server;\n}\n","import { type McpServer } from '@elementor/editor-mcp';\n\nexport const KIT_DESCRIPTION_URI = 'elementor://kit/server-description';\n\nexport const KIT_DESCRIPTION = `## Elementor Kit Settings Management\n\n### Capabilities:\n**Global Design System:**\n- Create, update, name, and delete global colors (both system and custom)\n- Create, update, name, and delete global fonts (both system and custom)\n\n**Site Identity:**\n- Insert site logo\n- Set site favicon\n- Update site name\n- Modify site description\n\n### Limitations:\n**Theme Style Settings:**\n- Cannot set or update Elementor Theme Style settings including typography, buttons, images, form fields, Hello Theme header, or Hello Theme footer that affect the entire website appearance\n\n**Site-Wide Settings:**\n- Cannot set site-wide background (color or image)\n- Cannot configure mobile browser background\n- Cannot modify global layout settings such as content width, container padding, and widget gaps (the default space between widgets)\n\n**Note**: Angie can adjust all of these layout properties at the container or page level - just not site-wide.`;\n\nexport function addKitDescriptionResource( server: McpServer ) {\n\tserver.registerResource(\n\t\t'elementor-kit-server-description',\n\t\tKIT_DESCRIPTION_URI,\n\t\t{\n\t\t\ttitle: 'Elementor Kit Server Description',\n\t\t\tdescription: 'Elementor Kit capabilities and limitations',\n\t\t\tmimeType: 'text/plain',\n\t\t},\n\t\tasync ( uri ) => ( {\n\t\t\tcontents: [ { uri: uri.href, mimeType: 'text/plain', text: KIT_DESCRIPTION } ],\n\t\t} )\n\t);\n}\n","import { createElementorKitServer } from './elementor-kit-mcp-server';\n\nexport function init() {\n\tcreateElementorKitServer();\n}\n"],"mappings":";AAAA,SAAS,aAAa,WAAW,wBAAwB;AACzD,SAAS,WAAW,4BAA4B,8BAA8B;AAC9E,SAAS,SAAS;;;ACAX,IAAM,sBAAsB;AAE5B,IAAM,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAwBxB,SAAS,0BAA2B,QAAoB;AAC9D,SAAO;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,MACC,OAAO;AAAA,MACP,aAAa;AAAA,MACb,UAAU;AAAA,IACX;AAAA,IACA,OAAQ,SAAW;AAAA,MAClB,UAAU,CAAE,EAAE,KAAK,IAAI,MAAM,UAAU,cAAc,MAAM,gBAAgB,CAAE;AAAA,IAC9E;AAAA,EACD;AACD;;;ADnCA,IAAM,0BAA0B;AAChC,IAAM,yBAAyB;AAC/B,IAAM,2BAA2B;AACjC,IAAM,mCAAmC;AACzC,IAAM,6BAA6B;AACnC,IAAM,4BAA4B;AAQlC,IAAM,UAAU;AAChB,eAAe,gBAAgB;AAC9B,SAAO,UAA+B,iCAAiC,KAAM;AAC9E;AAEA,eAAe,iBAAiB;AAC/B,SAAO,UAAgC,kCAAkC,KAAM;AAChF;AAEA,eAAe,mBAAmB;AACjC,SAAO,UAAW,2BAA2B,KAAM;AACpD;AAMA,eAAe,cACd,kBACA,kBACC;AACD,QAAM,gBAAgB,MAAM,cAAc;AAC1C,QAAM,iBAAiB,OAAO,KAAM,cAAc,KAAK,SAAS,CAAC,CAAE;AACnE,QAAM,eAAyB,CAAC;AAEhC,GAAE,kBAAkB,gBAAiB,EAAE,QAAS,CAAE,eAAgB;AACjE,QAAK,YAAa;AACjB,iBAAW,QAAS,CAAE,SAAU;AAC/B,YAAK,KAAK,0BAA0B,CAAE,eAAe,SAAU,KAAK,sBAAuB,GAAI;AAC9F,uBAAa,KAAM,KAAK,sBAAuB;AAAA,QAChD;AAAA,MACD,CAAE;AAAA,IACH;AAAA,EACD,CAAE;AAEF,MAAK,aAAa,SAAS,GAAI;AAC9B,WAAO,mDAAoD,aAAa;AAAA,MACvE;AAAA,IACD,CAAE,sBAAuB,eAAe,KAAM,IAAK,CAAE;AAAA,EACtD;AAEA,SAAO;AACR;AAEA,SAAS,oBAAqB,KAA4D;AACzF,QAAM,cAAc,CAAE,aAAa,WAAY;AAC/C,QAAM,YAAY,EAAE,GAAG,IAAI;AAE3B,aAAY,SAAS,aAAc;AAClC,QAAK,SAAS,aAAa,UAAW,KAAM,MAAM,IAAK;AACtD,gBAAW,KAAM,IAAI;AAAA,IACtB;AAAA,EACD;AAEA,SAAO;AACR;AAEA,IAAM,kBAAkB,EAAE,OAAQ;AAAA,EACjC,OAAO,EAAE,OAAO;AAAA,EAChB,OAAO,EAAE,OAAO;AACjB,CAAE;AAEF,IAAM,uBAAuB,EAC3B,OAAQ;AAAA,EACR,OAAO,EAAE,OAAO;AAAA,EAChB,uBAAuB,EAAE,OAAO;AAAA,EAChC,wBAAwB,EACtB,OAAO,EACP;AAAA,IACA;AAAA,EACD;AAAA,EACD,wBAAwB,EAAE,OAAO;AAAA,EACjC,sBAAsB,EACpB,OAAQ;AAAA,IACR,MAAM,EAAE,OAAO;AAAA,IACf,MAAM,EAAE,OAAO;AAAA,EAChB,CAAE,EACD,SAAS;AAAA,EACX,6BAA6B,EAC3B,OAAQ;AAAA,IACR,MAAM,EAAE,OAAO;AAAA,IACf,MAAM,EAAE,OAAO;AAAA,EAChB,CAAE,EACD,SAAS;AAAA,EACX,6BAA6B,EAC3B,OAAQ;AAAA,IACR,MAAM,EAAE,OAAO;AAAA,IACf,MAAM,EAAE,OAAO;AAAA,EAChB,CAAE,EACD,SAAS;AAAA,EACX,wBAAwB,EACtB,OAAQ;AAAA,IACR,MAAM,EAAE,OAAO;AAAA,IACf,MAAM,EAAE,OAAO;AAAA,EAChB,CAAE,EACD,SAAS;AACZ,CAAE,EACD,YAAY;AAEd,IAAM,wBAAwB,gBAAgB,OAAQ;AAAA,EACrD,KAAK,EAAE,KAAM,CAAE,WAAW,aAAa,QAAQ,QAAS,CAAE;AAC3D,CAAE;AAEF,IAAM,6BAA6B,qBAAqB,OAAQ;AAAA,EAC/D,KAAK,EAAE,KAAM,CAAE,WAAW,aAAa,QAAQ,QAAS,CAAE;AAC3D,CAAE;AAEF,IAAM,wBAAwB,gBAAgB,OAAQ;AAAA,EACrD,KAAK,EAAE,OAAO;AACf,CAAE;AAEF,IAAM,6BAA6B,qBAAqB,OAAQ;AAAA,EAC/D,KAAK,EAAE,OAAO;AACf,CAAE;AAEF,IAAM,qBAAqB,EAAE,MAAO,qBAAsB,EAAE,OAAQ,CAAE;AACtE,IAAM,yBAAyB,EAAE,MAAO,0BAA2B,EAAE,OAAQ,CAAE;AAC/E,IAAM,qBAAqB,EAAE,MAAO,qBAAsB;AAC1D,IAAM,yBAAyB,EAAE,MAAO,0BAA2B;AAEnE,IAAM,qBAAqB,EACzB,OAAQ,EAAE,QAAQ,CAAE,EACpB;AAAA,EACA;AACD;AAED,IAAM,sBAAsB;AAC5B,eAAsB,2BAAiD;AACtE,QAAM,uBAAuB;AAC7B,QAAM,SAAS,IAAI;AAAA,IAClB;AAAA,MACC,MAAM;AAAA,MACN,SAAS;AAAA,MACT,OAAO;AAAA,IACR;AAAA,IACA;AAAA,MACC,cAAc;AAAA,MACd,cAAc;AAAA,QACb,WAAW;AAAA,UACV,WAAW;AAAA,QACZ;AAAA,MACD;AAAA,IACD;AAAA,EACD;AAEA,4BAA2B,MAAO;AAElC,QAAM,mBAAmB,YAAiC;AACzD,UAAM,YAAY,MAAM,eAAe;AACvC,WAAO,OAAO,KAAM,UAAU,QAAQ,CAAC,CAAE;AAAA,EAC1C;AAEA,SAAO;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,MACC,OAAO;AAAA,MACP,aACC;AAAA,IACF;AAAA,IACA,OAAQ,QAAS;AAChB,YAAM,gBAAgB,MAAM,cAAc;AAC1C,aAAO;AAAA,QACN,UAAU;AAAA,UACT;AAAA,YACC,KAAK,IAAI;AAAA,YACT,UAAU;AAAA,YACV,MAAM,KAAK,UAAW,eAAe,MAAM,CAAE;AAAA,UAC9C;AAAA,QACD;AAAA,MACD;AAAA,IACD;AAAA,EACD;AAEA,SAAO;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,MACC,OAAO;AAAA,MACP,aACC;AAAA,IACF;AAAA,IACA,OAAQ,QAAS;AAChB,YAAM,kBAAkB,MAAM,iBAAiB;AAC/C,aAAO;AAAA,QACN,UAAU;AAAA,UACT;AAAA,YACC,KAAK,IAAI;AAAA,YACT,UAAU;AAAA,YACV,MAAM,KAAK,UAAW,iBAAiB,MAAM,CAAE;AAAA,UAChD;AAAA,QACD;AAAA,MACD;AAAA,IACD;AAAA,EACD;AAEA,SAAO;AAAA,IACN;AAAA,IACA,IAAI,iBAAkB,kCAAkC;AAAA,MACvD,MAAM,YAAY;AACjB,cAAM,gBAAgB,MAAM,iBAAiB;AAC7C,eAAO;AAAA,UACN,WAAW,cAAc,IAAK,CAAE,QAAS;AACxC,mBAAO;AAAA,cACN,KAAK,0BAA2B,GAAI;AAAA,cACpC,MAAM,GAAI,wBAAyB,IAAK,GAAI;AAAA,cAC5C,OAAO,0BAA2B,GAAI;AAAA,cACtC,aAAa,uCAAwC,GAAI;AAAA,cACzD,UAAU;AAAA,YACX;AAAA,UACD,CAAE;AAAA,QACH;AAAA,MACD;AAAA,IACD,CAAE;AAAA,IACF;AAAA,MACC,OAAO;AAAA,MACP,aACC;AAAA,IACF;AAAA,IACA,OAAQ,KAAK,cAAe;AAC3B,YAAM,MAAM,MAAM,QAAS,UAAU,GAAI,IAAI,UAAU,IAAK,CAAE,IAAI,UAAU;AAE5E,UAAK,CAAE,KAAM;AACZ,cAAM,IAAI,MAAO,2BAA4B;AAAA,MAC9C;AAEA,YAAM,YAAY,MAAM,eAAe;AACvC,YAAM,YAAY,UAAU,OAAQ,GAAI;AAExC,UAAK,CAAE,WAAY;AAClB,cAAM,IAAI;AAAA,UACT,4BAA6B,GAAI,sBAAuB,OAAO,KAAM,UAAU,IAAK,EAAE;AAAA,YACrF;AAAA,UACD,CAAE;AAAA,QACH;AAAA,MACD;AAEA,aAAO;AAAA,QACN,UAAU;AAAA,UACT;AAAA,YACC,KAAK,IAAI,SAAS;AAAA,YAClB,UAAU;AAAA,YACV,MAAM,KAAK,UAAW,WAAW,MAAM,CAAE;AAAA,UAC1C;AAAA,QACD;AAAA,MACD;AAAA,IACD;AAAA,EACD;AAEA,SAAO;AAAA,IACN;AAAA,IACA;AAAA,MACC,aAAa;AAAA;AAAA;AAAA,MAGb,aAAa;AAAA,QACZ,cAAc,mBACZ,SAAS,EACT,SAAS,EACT;AAAA,UACA;AAAA,QACD;AAAA,QACD,kBAAkB,uBAChB,SAAS,EACT,SAAS,EACT;AAAA,UACA;AAAA,QACD;AAAA,QACD,cAAc,mBACZ,SAAS,EACT,SAAS,EACT,SAAU,2EAA4E;AAAA,QACxF,kBAAkB,uBAChB,SAAS,EACT,SAAS,EACT;AAAA,UACA;AAAA,QACD;AAAA,QACD,aAAa,mBACX,SAAS,EACT,SAAS,EACT;AAAA,UACA;AAAA,QACD;AAAA,QACD,qBAAqB,EACnB,OAAO,EACP;AAAA,UACA;AAAA,QACD;AAAA,MACF;AAAA,MACA,aAAa;AAAA,QACZ,OAAO;AAAA,QACP,iBAAiB;AAAA,MAClB;AAAA,MACA,OAAO;AAAA,QACN,2BAA2B;AAAA,UAC1B;AAAA,YACC,KAAK;AAAA,YACL,WAAW;AAAA,UACZ;AAAA,QACD;AAAA,MACD;AAAA,IACD;AAAA,IACA,OAAQ;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD,MAAO;AACN,iCAA4B,qBAAqB,wBAAyB;AAE1E,YAAM,eAAe,MAAM,cAAe,kBAAkB,gBAAiB;AAC7E,UAAK,cAAe;AACnB,cAAM,IAAI,MAAO,YAAa;AAAA,MAC/B;AAEA,YAAM,sBAAsB;AAAA,QAC3B,GAAK,gBAAgB,EAAE,eAAe,aAAa;AAAA,QACnD,GAAK,oBAAoB,EAAE,mBAAmB,iBAAiB;AAAA,QAC/D,GAAK,gBAAgB,EAAE,eAAe,aAAa;AAAA,QACnD,GAAK,oBAAoB,EAAE,mBAAmB,iBAAiB;AAAA,QAC/D,GAAG,oBAAqB,eAAe,CAAC,CAAE;AAAA,MAC3C;AAEA,UAAK,OAAO,KAAM,mBAAoB,EAAE,WAAW,GAAI;AACtD,cAAM,IAAI;AAAA,UACT;AAAA,QACD;AAAA,MACD;AAEA,YAAM,WAAW,MAAM,UAAW,2BAA2B,QAAQ,mBAAoB;AAEzF,aAAO;AAAA,QACN,SAAS;AAAA,UACR;AAAA,YACC,MAAM;AAAA,YACN,MAAM,KAAK;AAAA,cACV;AAAA,gBACC,SAAS;AAAA,gBACT,SAAS;AAAA,gBACT,MAAM;AAAA,gBACN,iBAAiB;AAAA,cAClB;AAAA,cACA;AAAA,cACA;AAAA,YACD;AAAA,UACD;AAAA,QACD;AAAA,MACD;AAAA,IACD;AAAA,EACD;AAEA,QAAM,MAAM,YAAY;AACxB,QAAM,IAAI,aAAa;AACvB,MAAI,oBAAqB;AAAA,IACxB;AAAA,IACA,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM;AAAA,EACP,CAAE;AACF,SAAO;AACR;;;AE5XO,SAAS,OAAO;AACtB,2BAAyB;AAC1B;","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elementor/elementor-kit-mcp",
3
- "version": "4.3.0-963",
3
+ "version": "4.3.0-964",
4
4
  "private": false,
5
5
  "author": "Elementor Team",
6
6
  "homepage": "https://elementor.com/",
@@ -42,8 +42,8 @@
42
42
  "tsup": "^8.3.5"
43
43
  },
44
44
  "dependencies": {
45
- "@elementor/editor-mcp": "4.3.0-963",
46
- "@elementor/elementor-mcp-common": "4.3.0-963",
47
- "@elementor/schema": "4.3.0-963"
45
+ "@elementor/editor-mcp": "4.3.0-964",
46
+ "@elementor/elementor-mcp-common": "4.3.0-964",
47
+ "@elementor/schema": "4.3.0-964"
48
48
  }
49
49
  }
@@ -213,12 +213,11 @@ export async function createElementorKitServer(): Promise< McpServer > {
213
213
  }
214
214
  );
215
215
 
216
- const availableTabs = await getAvailableTabs();
217
-
218
216
  server.registerResource(
219
217
  RESOURCE_NAME_KIT_SCHEMA,
220
218
  new ResourceTemplate( RESOURCE_URI_KIT_SCHEMA_TEMPLATE, {
221
219
  list: async () => {
220
+ const availableTabs = await getAvailableTabs();
222
221
  return {
223
222
  resources: availableTabs.map( ( tab ) => {
224
223
  return {