@efectoapp/mcp-server 0.1.19 → 0.1.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +18 -5
- package/dist/tools/discovery.d.ts.map +1 -1
- package/dist/tools/discovery.js +127 -0
- package/dist/tools/discovery.js.map +1 -1
- package/dist/tools/images.d.ts.map +1 -1
- package/dist/tools/images.js +102 -0
- package/dist/tools/images.js.map +1 -1
- package/dist/tools/output.d.ts +1 -4
- package/dist/tools/output.d.ts.map +1 -1
- package/dist/tools/output.js +51 -64
- package/dist/tools/output.js.map +1 -1
- package/dist/tools/render.d.ts +22 -0
- package/dist/tools/render.d.ts.map +1 -0
- package/dist/tools/render.js +148 -0
- package/dist/tools/render.js.map +1 -0
- package/dist/tools/state.d.ts +91 -2
- package/dist/tools/state.d.ts.map +1 -1
- package/dist/tools/state.js +2013 -73
- package/dist/tools/state.js.map +1 -1
- package/package.json +3 -2
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Local Poster Rendering
|
|
3
|
+
*
|
|
4
|
+
* Uses Puppeteer to render posters locally via headless Chrome.
|
|
5
|
+
* This allows the MCP server to return actual images that agents can see.
|
|
6
|
+
*/
|
|
7
|
+
export interface RenderOptions {
|
|
8
|
+
width?: number;
|
|
9
|
+
height?: number;
|
|
10
|
+
format?: string;
|
|
11
|
+
quality?: number;
|
|
12
|
+
}
|
|
13
|
+
export interface RenderResult {
|
|
14
|
+
base64: string;
|
|
15
|
+
mimeType: string;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Render a poster by navigating to its URL in headless Chrome.
|
|
19
|
+
* The URL should already include `_render=1` for clean rendering.
|
|
20
|
+
*/
|
|
21
|
+
export declare function renderPoster(url: string, options?: RenderOptions): Promise<RenderResult>;
|
|
22
|
+
//# sourceMappingURL=render.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/tools/render.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA6FH,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAChC,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,YAAY,CAAC,CA2DvB"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Local Poster Rendering
|
|
4
|
+
*
|
|
5
|
+
* Uses Puppeteer to render posters locally via headless Chrome.
|
|
6
|
+
* This allows the MCP server to return actual images that agents can see.
|
|
7
|
+
*/
|
|
8
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
9
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.renderPoster = renderPoster;
|
|
13
|
+
const puppeteer_1 = __importDefault(require("puppeteer"));
|
|
14
|
+
const fs_1 = require("fs");
|
|
15
|
+
// Common Chrome/Chromium paths by platform
|
|
16
|
+
const CHROME_PATHS = {
|
|
17
|
+
darwin: [
|
|
18
|
+
'/Applications/Google Chrome.app/Contents/MacOS/Google Chrome',
|
|
19
|
+
'/Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary',
|
|
20
|
+
'/Applications/Chromium.app/Contents/MacOS/Chromium',
|
|
21
|
+
],
|
|
22
|
+
linux: [
|
|
23
|
+
'/usr/bin/google-chrome',
|
|
24
|
+
'/usr/bin/google-chrome-stable',
|
|
25
|
+
'/usr/bin/chromium-browser',
|
|
26
|
+
'/usr/bin/chromium',
|
|
27
|
+
],
|
|
28
|
+
win32: [
|
|
29
|
+
'C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe',
|
|
30
|
+
'C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe',
|
|
31
|
+
],
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Find a Chrome/Chromium executable on the system.
|
|
35
|
+
* Falls back to puppeteer's bundled Chromium.
|
|
36
|
+
*/
|
|
37
|
+
function findChrome() {
|
|
38
|
+
const platform = process.platform;
|
|
39
|
+
const paths = CHROME_PATHS[platform] || [];
|
|
40
|
+
for (const p of paths) {
|
|
41
|
+
if ((0, fs_1.existsSync)(p)) {
|
|
42
|
+
return p;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
// Fall back to puppeteer's bundled Chromium
|
|
46
|
+
return undefined; // puppeteer will use its bundled browser
|
|
47
|
+
}
|
|
48
|
+
// Reusable browser instance with launch guard to prevent concurrent launches
|
|
49
|
+
let browserInstance = null;
|
|
50
|
+
let launchPromise = null;
|
|
51
|
+
async function getBrowser() {
|
|
52
|
+
if (browserInstance?.connected) {
|
|
53
|
+
return browserInstance;
|
|
54
|
+
}
|
|
55
|
+
// Prevent concurrent launches — reuse in-flight promise
|
|
56
|
+
if (launchPromise) {
|
|
57
|
+
return launchPromise;
|
|
58
|
+
}
|
|
59
|
+
const executablePath = findChrome();
|
|
60
|
+
launchPromise = puppeteer_1.default.launch({
|
|
61
|
+
headless: true,
|
|
62
|
+
...(executablePath ? { executablePath } : {}),
|
|
63
|
+
// --no-sandbox is required for headless environments without a display server
|
|
64
|
+
args: [
|
|
65
|
+
'--no-sandbox',
|
|
66
|
+
'--disable-setuid-sandbox',
|
|
67
|
+
'--disable-dev-shm-usage',
|
|
68
|
+
'--disable-gpu',
|
|
69
|
+
'--disable-extensions',
|
|
70
|
+
'--no-first-run',
|
|
71
|
+
],
|
|
72
|
+
}).then(browser => {
|
|
73
|
+
browserInstance = browser;
|
|
74
|
+
launchPromise = null;
|
|
75
|
+
return browser;
|
|
76
|
+
}).catch(err => {
|
|
77
|
+
launchPromise = null;
|
|
78
|
+
throw err;
|
|
79
|
+
});
|
|
80
|
+
return launchPromise;
|
|
81
|
+
}
|
|
82
|
+
// Clean up browser on process exit
|
|
83
|
+
function cleanupBrowser() {
|
|
84
|
+
if (browserInstance) {
|
|
85
|
+
browserInstance.close().catch(() => { });
|
|
86
|
+
browserInstance = null;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
process.on('exit', cleanupBrowser);
|
|
90
|
+
process.on('SIGINT', () => { cleanupBrowser(); process.exit(0); });
|
|
91
|
+
process.on('SIGTERM', () => { cleanupBrowser(); process.exit(0); });
|
|
92
|
+
/**
|
|
93
|
+
* Render a poster by navigating to its URL in headless Chrome.
|
|
94
|
+
* The URL should already include `_render=1` for clean rendering.
|
|
95
|
+
*/
|
|
96
|
+
async function renderPoster(url, options = {}) {
|
|
97
|
+
const { width = 1080, height = 1920, format = 'png', quality = 90 } = options;
|
|
98
|
+
const mimeType = format === 'jpeg' ? 'image/jpeg' : format === 'webp' ? 'image/webp' : 'image/png';
|
|
99
|
+
const browser = await getBrowser();
|
|
100
|
+
const page = await browser.newPage();
|
|
101
|
+
page.setDefaultTimeout(30000);
|
|
102
|
+
try {
|
|
103
|
+
// Set viewport to requested dimensions
|
|
104
|
+
await page.setViewport({ width, height, deviceScaleFactor: 1 });
|
|
105
|
+
// Navigate to the poster URL
|
|
106
|
+
await page.goto(url, { waitUntil: 'networkidle2', timeout: 60000 });
|
|
107
|
+
// Wait for the render-ready signal from SceneRenderer
|
|
108
|
+
try {
|
|
109
|
+
await page.waitForSelector('[data-render-ready="true"]', { timeout: 30000 });
|
|
110
|
+
}
|
|
111
|
+
catch {
|
|
112
|
+
// If no render-ready signal, wait a bit for rendering
|
|
113
|
+
console.error('Warning: render-ready signal not found, waiting 3s...');
|
|
114
|
+
await new Promise(r => setTimeout(r, 3000));
|
|
115
|
+
}
|
|
116
|
+
// Extra wait for fonts/images to settle
|
|
117
|
+
await new Promise(r => setTimeout(r, 1500));
|
|
118
|
+
// Primary: extract canvas content via toDataURL
|
|
119
|
+
// Uses string evaluation because this runs in browser context (no DOM types in Node tsconfig)
|
|
120
|
+
// Select the LAST canvas: when dither effects are active, a WebGPU overlay canvas is
|
|
121
|
+
// appended after the Three.js canvas and contains the final composited output.
|
|
122
|
+
const evalScript = `(() => {
|
|
123
|
+
const canvases = document.querySelectorAll('canvas');
|
|
124
|
+
const c = canvases[canvases.length - 1];
|
|
125
|
+
if (!c) return null;
|
|
126
|
+
try { return c.toDataURL(${JSON.stringify(mimeType)}); } catch { return null; }
|
|
127
|
+
})()`;
|
|
128
|
+
const dataUrl = await page.evaluate(evalScript);
|
|
129
|
+
if (dataUrl) {
|
|
130
|
+
// Strip the data URL prefix to get raw base64
|
|
131
|
+
const base64 = dataUrl.replace(/^data:image\/[^;]+;base64,/, '');
|
|
132
|
+
return { base64, mimeType };
|
|
133
|
+
}
|
|
134
|
+
// Fallback: take a screenshot
|
|
135
|
+
console.error('Canvas toDataURL failed, falling back to screenshot');
|
|
136
|
+
const screenshotBuffer = await page.screenshot({
|
|
137
|
+
type: format === 'jpeg' ? 'jpeg' : format === 'webp' ? 'webp' : 'png',
|
|
138
|
+
...(format !== 'png' ? { quality } : {}),
|
|
139
|
+
fullPage: false,
|
|
140
|
+
});
|
|
141
|
+
const base64 = Buffer.from(screenshotBuffer).toString('base64');
|
|
142
|
+
return { base64, mimeType };
|
|
143
|
+
}
|
|
144
|
+
finally {
|
|
145
|
+
await page.close();
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=render.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/tools/render.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/state.d.ts
CHANGED
|
@@ -12,9 +12,18 @@
|
|
|
12
12
|
* All state follows the LayerShareState contract for API compatibility.
|
|
13
13
|
*/
|
|
14
14
|
import type { Tool } from '@modelcontextprotocol/sdk/types.js';
|
|
15
|
-
type AspectRatio = '16:9' | '9:16' | '1:1' | '4:3' | 'full';
|
|
15
|
+
type AspectRatio = '16:9' | '9:16' | '1:1' | '4:3' | '3:4' | 'full';
|
|
16
|
+
type LayoutMode = 'absolute' | 'row' | 'column';
|
|
17
|
+
type JustifyContent = 'start' | 'center' | 'end' | 'space-between' | 'space-around' | 'space-evenly';
|
|
18
|
+
type AlignItems = 'start' | 'center' | 'end';
|
|
19
|
+
interface LayoutPadding {
|
|
20
|
+
top: number;
|
|
21
|
+
right: number;
|
|
22
|
+
bottom: number;
|
|
23
|
+
left: number;
|
|
24
|
+
}
|
|
16
25
|
type EffectId = 'none' | 'ascii-standard' | 'ascii-blocks' | 'ascii-braille' | 'ascii-hatching' | 'ascii-matrix' | 'ascii-technical' | 'ascii-dense' | 'ascii-minimal' | 'dither-floyd-steinberg' | 'dither-atkinson' | 'dither-jarvis-judice-ninke' | 'dither-stucki' | 'dither-burkes' | 'dither-sierra' | 'dither-two-row-sierra' | 'dither-sierra-lite' | 'halftone-mono' | 'halftone-cmyk' | 'glitch-chromatic' | 'glitch-digital' | 'glitch-vhs' | 'glitch-weird' | 'art-kuwahara' | 'art-crosshatch' | 'art-lineart' | 'art-engraving' | 'art-stipple';
|
|
17
|
-
type PostProcessType = 'scanlines' | 'vignette' | 'chromatic-aberration' | 'curvature' | 'grain' | 'noise' | 'pixelate' | 'wave' | 'rgb-glitch' | 'brightness-contrast' | 'color-tint' | 'palette' | 'jitter' | 'bloom' | 'dot-screen' | 'sepia' | 'grid' | 'light-beams' | 'motion-blur';
|
|
26
|
+
type PostProcessType = 'scanlines' | 'vignette' | 'chromatic-aberration' | 'curvature' | 'grain' | 'noise' | 'pixelate' | 'wave' | 'rgb-glitch' | 'brightness-contrast' | 'color-tint' | 'palette' | 'jitter' | 'bloom' | 'dot-screen' | 'sepia' | 'grid' | 'light-beams' | 'motion-blur' | 'blob-tracking';
|
|
18
27
|
type TextAnimationType = 'wave' | 'rotate' | 'scale' | 'orbit' | 'bounce' | 'shake' | 'spiral' | 'typewriter' | 'glitch' | 'elastic' | 'cascade' | 'neon';
|
|
19
28
|
type StaggerMode = 'sequential' | 'random' | 'center-out' | 'edges-in';
|
|
20
29
|
interface TextAnimationSettings {
|
|
@@ -31,6 +40,9 @@ interface BaseAnimationParams {
|
|
|
31
40
|
loop: boolean;
|
|
32
41
|
}
|
|
33
42
|
type TextAnimationParams = BaseAnimationParams & Record<string, unknown>;
|
|
43
|
+
type FlexChildPositioning = 'flow' | 'absolute';
|
|
44
|
+
type FlexChildSizeMode = 'hug' | 'fixed' | 'fill';
|
|
45
|
+
type FlexChildAlignSelf = 'auto' | 'start' | 'center' | 'end' | 'stretch';
|
|
34
46
|
interface LayerTransform {
|
|
35
47
|
x: number;
|
|
36
48
|
y: number;
|
|
@@ -38,6 +50,8 @@ interface LayerTransform {
|
|
|
38
50
|
height: number;
|
|
39
51
|
rotation: number;
|
|
40
52
|
opacity: number;
|
|
53
|
+
originX?: number;
|
|
54
|
+
originY?: number;
|
|
41
55
|
}
|
|
42
56
|
interface BaseLayer {
|
|
43
57
|
id: string;
|
|
@@ -45,18 +59,54 @@ interface BaseLayer {
|
|
|
45
59
|
type: string;
|
|
46
60
|
visible: boolean;
|
|
47
61
|
locked: boolean;
|
|
62
|
+
positioning?: FlexChildPositioning;
|
|
63
|
+
flexSizeMode?: FlexChildSizeMode;
|
|
64
|
+
flexWidthMode?: FlexChildSizeMode;
|
|
65
|
+
flexHeightMode?: FlexChildSizeMode;
|
|
66
|
+
alignSelf?: FlexChildAlignSelf;
|
|
67
|
+
flexGrow?: number;
|
|
48
68
|
transform: LayerTransform;
|
|
69
|
+
shadow?: {
|
|
70
|
+
offsetX: number;
|
|
71
|
+
offsetY: number;
|
|
72
|
+
blur: number;
|
|
73
|
+
color: string;
|
|
74
|
+
opacity: number;
|
|
75
|
+
};
|
|
76
|
+
blendMode?: string;
|
|
77
|
+
margin?: {
|
|
78
|
+
top: number;
|
|
79
|
+
right: number;
|
|
80
|
+
bottom: number;
|
|
81
|
+
left: number;
|
|
82
|
+
};
|
|
83
|
+
minWidth?: number;
|
|
84
|
+
maxWidth?: number;
|
|
85
|
+
minHeight?: number;
|
|
86
|
+
maxHeight?: number;
|
|
49
87
|
}
|
|
50
88
|
interface TextLayer extends BaseLayer {
|
|
51
89
|
type: 'text';
|
|
90
|
+
textType?: 'point' | 'frame';
|
|
52
91
|
content: string;
|
|
53
92
|
fontFamily: string;
|
|
54
93
|
fontSize: number;
|
|
55
94
|
fontWeight: string;
|
|
56
95
|
color: string;
|
|
57
96
|
textAlign: 'left' | 'center' | 'right';
|
|
97
|
+
verticalAlign?: 'top' | 'middle' | 'bottom';
|
|
58
98
|
letterSpacing: number;
|
|
59
99
|
lineHeight: number;
|
|
100
|
+
textTransformMode?: 'scale' | 'box';
|
|
101
|
+
textBoxWidth?: number;
|
|
102
|
+
frameWidthPx?: number;
|
|
103
|
+
frameHeightPx?: number;
|
|
104
|
+
autoSize?: 'none' | 'height' | 'widthAndHeight';
|
|
105
|
+
clipContent?: boolean;
|
|
106
|
+
textTransform?: 'uppercase' | 'lowercase' | 'capitalize';
|
|
107
|
+
textDecoration?: 'underline' | 'line-through' | 'overline';
|
|
108
|
+
textDecorationColor?: string;
|
|
109
|
+
textDecorationThickness?: number;
|
|
60
110
|
animation?: TextAnimationSettings;
|
|
61
111
|
}
|
|
62
112
|
interface ImageLayer extends BaseLayer {
|
|
@@ -78,10 +128,36 @@ interface VideoLayer extends BaseLayer {
|
|
|
78
128
|
playbackSpeed: number;
|
|
79
129
|
}
|
|
80
130
|
type BackgroundContentType = 'solid' | 'image' | 'video' | '3d' | 'shader';
|
|
131
|
+
interface GradientStop {
|
|
132
|
+
color: string;
|
|
133
|
+
opacity: number;
|
|
134
|
+
position: number;
|
|
135
|
+
}
|
|
136
|
+
interface SolidFill {
|
|
137
|
+
type: 'solid';
|
|
138
|
+
color: string;
|
|
139
|
+
opacity: number;
|
|
140
|
+
}
|
|
141
|
+
interface LinearGradientFill {
|
|
142
|
+
type: 'linear';
|
|
143
|
+
angle: number;
|
|
144
|
+
stops: GradientStop[];
|
|
145
|
+
}
|
|
146
|
+
interface RadialGradientFill {
|
|
147
|
+
type: 'radial';
|
|
148
|
+
center: {
|
|
149
|
+
x: number;
|
|
150
|
+
y: number;
|
|
151
|
+
};
|
|
152
|
+
radius: number;
|
|
153
|
+
stops: GradientStop[];
|
|
154
|
+
}
|
|
155
|
+
type Fill = SolidFill | LinearGradientFill | RadialGradientFill;
|
|
81
156
|
interface BackgroundLayer extends BaseLayer {
|
|
82
157
|
type: 'background';
|
|
83
158
|
contentType: BackgroundContentType;
|
|
84
159
|
solidColor: string;
|
|
160
|
+
fill?: Fill;
|
|
85
161
|
inputMedia?: {
|
|
86
162
|
mediaUrl: string;
|
|
87
163
|
mediaType: 'image' | 'video';
|
|
@@ -102,6 +178,14 @@ interface PosterState {
|
|
|
102
178
|
canvas: {
|
|
103
179
|
aspectRatio: AspectRatio;
|
|
104
180
|
backgroundColor: string;
|
|
181
|
+
canvasColor?: string;
|
|
182
|
+
overflow?: 'visible' | 'hidden' | 'translucent';
|
|
183
|
+
layoutMode?: LayoutMode;
|
|
184
|
+
justifyContent?: JustifyContent;
|
|
185
|
+
alignItems?: AlignItems;
|
|
186
|
+
wrap?: boolean;
|
|
187
|
+
gap?: number;
|
|
188
|
+
padding?: LayoutPadding;
|
|
105
189
|
};
|
|
106
190
|
layers: Layer[];
|
|
107
191
|
effect?: {
|
|
@@ -123,6 +207,11 @@ interface PosterState {
|
|
|
123
207
|
};
|
|
124
208
|
postProcesses: PostProcessInstance[];
|
|
125
209
|
}
|
|
210
|
+
/**
|
|
211
|
+
* Ensure a poster exists. Restores from persisted file if needed,
|
|
212
|
+
* or auto-creates a default poster as a last resort.
|
|
213
|
+
*/
|
|
214
|
+
export declare function ensurePoster(): PosterState;
|
|
126
215
|
export declare function resetState(): void;
|
|
127
216
|
export declare function getCurrentState(): PosterState | null;
|
|
128
217
|
export declare const stateTools: Tool[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/tools/state.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAA;
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/tools/state.ts"],"names":[],"mappings":"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"}
|