@yashwant.dharmdas/elementor-mcp 3.16.0 → 3.17.0
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 +71 -0
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -4005,6 +4005,77 @@ function createMcpServer(sites) {
|
|
|
4005
4005
|
return { content: [{ type: "text", text: `Error setting button: ${error.response?.data?.message || error.message}` }], isError: true };
|
|
4006
4006
|
}
|
|
4007
4007
|
});
|
|
4008
|
+
// ── set-css-filters ───────────────────────────────────────────────────────
|
|
4009
|
+
server.tool("set-css-filters", "Apply CSS filter effects to an image widget (or any widget via the Advanced tab) — blur, brightness, contrast, saturation, hue rotation. Use this when a Figma layer has image adjustments applied (Saturation slider, Contrast, Exposure, etc.).\n\nFIGMA → ELEMENTOR VALUE MAPPING (caller must convert):\n • Figma Saturation -100..+100 → Elementor saturation 0..200 (formula: 100 + figma_value). A fully-desaturated Figma image (-100) → Elementor saturation=0 (B&W).\n • Figma Contrast -100..+100 → Elementor contrast 0..200.\n • Figma Exposure -100..+100 → Elementor brightness 0..200 (closest CSS-filter equivalent).\n • Figma Highlights / Shadows / Temperature / Tint → no clean CSS-filter equivalent. Surface as a TODO; do NOT improvise with brightness/contrast.\n • Figma Blur → Elementor blur in px.\n\nELEMENTOR-NATIVE RANGES (what this tool accepts directly):\n • blur: 0..30 (px, 0 = none)\n • brightness: 0..200 (100 = neutral, <100 darker, >100 brighter)\n • contrast: 0..200 (100 = neutral)\n • saturation: 0..200 (100 = neutral, 0 = B&W, 200 = oversaturated)\n • hue: 0..360 (degrees, 0 = no rotation)\n\nAutomatically sets `css_filters_css_filter='custom'` so the values take effect. Pass `reset=true` to clear all filters (returns the widget to the default 'normal' filter mode). For non-image widgets, set `apply_to='any-widget'` to use the Advanced-tab `_css_filters_*` keys instead of the image-widget Style-tab `css_filters_*` keys.", {
|
|
4010
|
+
page_id: z.string().describe("WordPress Page ID"),
|
|
4011
|
+
element_id: z.string().describe("Element ID (typically an image widget; or any widget when apply_to='any-widget')"),
|
|
4012
|
+
blur: z.number().optional().describe("Blur in px (0..30). 0 = no blur."),
|
|
4013
|
+
brightness: z.number().optional().describe("Brightness 0..200 (100 = neutral)"),
|
|
4014
|
+
contrast: z.number().optional().describe("Contrast 0..200 (100 = neutral)"),
|
|
4015
|
+
saturation: z.number().optional().describe("Saturation 0..200 (100 = neutral, 0 = B&W). For a Figma layer with Saturation=-100, pass 0 here."),
|
|
4016
|
+
hue: z.number().optional().describe("Hue rotation in degrees 0..360"),
|
|
4017
|
+
hover_blur: z.number().optional().describe("Blur on hover (px)"),
|
|
4018
|
+
hover_brightness: z.number().optional().describe("Brightness on hover (0..200)"),
|
|
4019
|
+
hover_contrast: z.number().optional().describe("Contrast on hover (0..200)"),
|
|
4020
|
+
hover_saturation: z.number().optional().describe("Saturation on hover (0..200)"),
|
|
4021
|
+
hover_hue: z.number().optional().describe("Hue on hover (degrees)"),
|
|
4022
|
+
apply_to: z.enum(["image-widget", "any-widget"]).optional().describe("Default 'image-widget' (Style-tab keys, css_filters_*). Use 'any-widget' for filters on a non-image widget via the Advanced tab (_css_filters_*)."),
|
|
4023
|
+
reset: z.boolean().optional().describe("Clear all filters and set css_filter mode back to 'normal'. All numeric params are ignored when reset=true."),
|
|
4024
|
+
site: siteParam,
|
|
4025
|
+
}, async ({ page_id, element_id, blur, brightness, contrast, saturation, hue, hover_blur, hover_brightness, hover_contrast, hover_saturation, hover_hue, apply_to, reset, site }) => {
|
|
4026
|
+
try {
|
|
4027
|
+
const { wpUrl, authHeader } = resolveSite(sites, site);
|
|
4028
|
+
const prefix = (apply_to ?? "image-widget") === "any-widget" ? "_css_filters_" : "css_filters_";
|
|
4029
|
+
const slider = (n, unit = "px") => ({ unit, size: n, sizes: [] });
|
|
4030
|
+
const s = {};
|
|
4031
|
+
if (reset === true) {
|
|
4032
|
+
s[`${prefix}css_filter`] = "normal";
|
|
4033
|
+
// Zero out values explicitly so the editor doesn't keep showing stale settings
|
|
4034
|
+
s[`${prefix}blur`] = slider(0);
|
|
4035
|
+
s[`${prefix}brightness`] = slider(100);
|
|
4036
|
+
s[`${prefix}contrast`] = slider(100);
|
|
4037
|
+
s[`${prefix}saturation`] = slider(100);
|
|
4038
|
+
s[`${prefix}hue`] = slider(0);
|
|
4039
|
+
}
|
|
4040
|
+
else {
|
|
4041
|
+
// Any filter param triggers 'custom' mode
|
|
4042
|
+
const anySet = blur !== undefined || brightness !== undefined || contrast !== undefined ||
|
|
4043
|
+
saturation !== undefined || hue !== undefined ||
|
|
4044
|
+
hover_blur !== undefined || hover_brightness !== undefined || hover_contrast !== undefined ||
|
|
4045
|
+
hover_saturation !== undefined || hover_hue !== undefined;
|
|
4046
|
+
if (!anySet) {
|
|
4047
|
+
return { content: [{ type: "text", text: "No filter parameters provided. Pass at least one of blur/brightness/contrast/saturation/hue (or hover_*) — or pass reset=true." }], isError: true };
|
|
4048
|
+
}
|
|
4049
|
+
s[`${prefix}css_filter`] = "custom";
|
|
4050
|
+
if (blur !== undefined)
|
|
4051
|
+
s[`${prefix}blur`] = slider(blur);
|
|
4052
|
+
if (brightness !== undefined)
|
|
4053
|
+
s[`${prefix}brightness`] = slider(brightness);
|
|
4054
|
+
if (contrast !== undefined)
|
|
4055
|
+
s[`${prefix}contrast`] = slider(contrast);
|
|
4056
|
+
if (saturation !== undefined)
|
|
4057
|
+
s[`${prefix}saturation`] = slider(saturation);
|
|
4058
|
+
if (hue !== undefined)
|
|
4059
|
+
s[`${prefix}hue`] = slider(hue);
|
|
4060
|
+
// Hover variants
|
|
4061
|
+
if (hover_blur !== undefined)
|
|
4062
|
+
s[`${prefix}hover_blur`] = slider(hover_blur);
|
|
4063
|
+
if (hover_brightness !== undefined)
|
|
4064
|
+
s[`${prefix}hover_brightness`] = slider(hover_brightness);
|
|
4065
|
+
if (hover_contrast !== undefined)
|
|
4066
|
+
s[`${prefix}hover_contrast`] = slider(hover_contrast);
|
|
4067
|
+
if (hover_saturation !== undefined)
|
|
4068
|
+
s[`${prefix}hover_saturation`] = slider(hover_saturation);
|
|
4069
|
+
if (hover_hue !== undefined)
|
|
4070
|
+
s[`${prefix}hover_hue`] = slider(hover_hue);
|
|
4071
|
+
}
|
|
4072
|
+
const result = await applyElementSettings(wpUrl, authHeader, page_id, element_id, s);
|
|
4073
|
+
return { content: [{ type: "text", text: JSON.stringify({ applied: s, result }, null, 2) }] };
|
|
4074
|
+
}
|
|
4075
|
+
catch (error) {
|
|
4076
|
+
return { content: [{ type: "text", text: `Error setting CSS filters: ${error.response?.data?.message || error.message}` }], isError: true };
|
|
4077
|
+
}
|
|
4078
|
+
});
|
|
4008
4079
|
// ── validate-page-structure ───────────────────────────────────────────────
|
|
4009
4080
|
server.tool("validate-page-structure", "Post-build sanity check on a page. Returns a report of structural / standards violations: header widgets in page body (should be a template), images with external URLs missing WP attachment IDs, hardcoded fonts/colors that should use kit globals, legacy _element_width on flex children, missing image alt text, suspicious min-heights. Call this AFTER building a page from Figma. If errors are found, fix them with the typed tools and re-run. If only warnings remain, surface them to the human for review.", {
|
|
4010
4081
|
page_id: z.string().describe("WordPress Page ID to validate"),
|
package/package.json
CHANGED