@visual-layer/mcp-server 1.0.1 → 1.1.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.
@@ -0,0 +1,35 @@
1
+ import type { Bbox } from '@visual-layer/core';
2
+ export interface DiffOptions {
3
+ /** Per-channel abs difference (0-255) above which a pixel counts as changed. Default 30. */
4
+ pixelTolerance?: number;
5
+ /** Fraction of scanned pixels changed above which `changed` is true. Default 0.005 (0.5%). */
6
+ changeThreshold?: number;
7
+ /** Viewport-space bbox to restrict the scan to (e.g. the clicked element). Omit = full image. */
8
+ region?: Bbox;
9
+ /** Viewport the region bbox is in. Required when region is set. */
10
+ viewport?: {
11
+ width: number;
12
+ height: number;
13
+ };
14
+ }
15
+ export interface DiffResult {
16
+ changed: boolean;
17
+ /** Fraction of scanned pixels that differ, in [0, 1]. */
18
+ changeRatio: number;
19
+ differingPixels: number;
20
+ totalPixels: number;
21
+ /** The screenshot-space region actually scanned, when a region was given. */
22
+ region?: {
23
+ x: number;
24
+ y: number;
25
+ width: number;
26
+ height: number;
27
+ scale: number;
28
+ };
29
+ }
30
+ /**
31
+ * Decode before/after to raw RGB, force after to before's dimensions, and count
32
+ * pixels differing beyond pixelTolerance within the scan window (region or full).
33
+ */
34
+ export declare function diffScreenshots(before: Buffer, after: Buffer, opts?: DiffOptions): Promise<DiffResult>;
35
+ //# sourceMappingURL=perceptual-diff.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"perceptual-diff.d.ts","sourceRoot":"","sources":["../src/perceptual-diff.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAE/C,MAAM,WAAW,WAAW;IAC1B,4FAA4F;IAC5F,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,8FAA8F;IAC9F,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iGAAiG;IACjG,MAAM,CAAC,EAAE,IAAI,CAAC;IACd,mEAAmE;IACnE,QAAQ,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CAC9C;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,yDAAyD;IACzD,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,6EAA6E;IAC7E,MAAM,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CACjF;AAED;;;GAGG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,IAAI,GAAE,WAAgB,GACrB,OAAO,CAAC,UAAU,CAAC,CA6DrB"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * Perceptual screenshot diff — region-aware pixel comparison of two ingested
3
+ * screenshots. Replaces the coarse sha256-identity check in verify_action with
4
+ * an actual pixel diff, optionally scoped to the clicked element's bbox so a
5
+ * small visual change is not drowned out by an unrelated full-page animation.
6
+ *
7
+ * ponytail: per-pixel threshold scan over raw RGB. O(W*H) per call, fine for
8
+ * viewport-sized PNGs. Upgrade to block-hash / pHash if very large screenshots
9
+ * or repeated calls show measurable cost.
10
+ */
11
+ import sharp from 'sharp';
12
+ /**
13
+ * Decode before/after to raw RGB, force after to before's dimensions, and count
14
+ * pixels differing beyond pixelTolerance within the scan window (region or full).
15
+ */
16
+ export async function diffScreenshots(before, after, opts = {}) {
17
+ const pixelTol = opts.pixelTolerance ?? 30;
18
+ const changeThreshold = opts.changeThreshold ?? 0.005;
19
+ const beforeImg = await sharp(before).removeAlpha().raw().toBuffer({ resolveWithObject: true });
20
+ const W = beforeImg.info.width;
21
+ const H = beforeImg.info.height;
22
+ const ch = beforeImg.info.channels;
23
+ // Force after to identical dimensions/channels — before/after come from the
24
+ // same viewport, but JPEG re-encode or a 1px scroll can shift size by 1.
25
+ const afterImg = await sharp(after)
26
+ .removeAlpha()
27
+ .resize(W, H, { fit: 'fill' })
28
+ .raw()
29
+ .toBuffer({ resolveWithObject: true });
30
+ let x0 = 0;
31
+ let y0 = 0;
32
+ let x1 = W;
33
+ let y1 = H;
34
+ let region;
35
+ if (opts.region && opts.viewport && opts.viewport.width > 0 && opts.viewport.height > 0) {
36
+ const sx = W / opts.viewport.width;
37
+ const sy = H / opts.viewport.height;
38
+ const s = Math.min(sx, sy);
39
+ const [bx, by, bw, bh] = opts.region;
40
+ x0 = clamp(Math.floor(bx * s), 0, W);
41
+ y0 = clamp(Math.floor(by * s), 0, H);
42
+ x1 = clamp(Math.ceil((bx + bw) * s), 0, W);
43
+ y1 = clamp(Math.ceil((by + bh) * s), 0, H);
44
+ region = { x: x0, y: y0, width: x1 - x0, height: y1 - y0, scale: s };
45
+ }
46
+ const a = beforeImg.data;
47
+ const b = afterImg.data;
48
+ let differing = 0;
49
+ let total = 0;
50
+ for (let y = y0; y < y1; y++) {
51
+ for (let x = x0; x < x1; x++) {
52
+ const i = (y * W + x) * ch;
53
+ for (let c = 0; c < ch; c++) {
54
+ if (Math.abs(a[i + c] - b[i + c]) > pixelTol) {
55
+ differing++;
56
+ break;
57
+ }
58
+ }
59
+ total++;
60
+ }
61
+ }
62
+ if (total === 0)
63
+ total = 1;
64
+ const changeRatio = differing / total;
65
+ return {
66
+ changed: changeRatio > changeThreshold,
67
+ changeRatio,
68
+ differingPixels: differing,
69
+ totalPixels: total,
70
+ region,
71
+ };
72
+ }
73
+ function clamp(v, min, max) {
74
+ return v < min ? min : v > max ? max : v;
75
+ }
76
+ //# sourceMappingURL=perceptual-diff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"perceptual-diff.js","sourceRoot":"","sources":["../src/perceptual-diff.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,MAAM,OAAO,CAAC;AAwB1B;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,MAAc,EACd,KAAa,EACb,OAAoB,EAAE;IAEtB,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,IAAI,EAAE,CAAC;IAC3C,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,IAAI,KAAK,CAAC;IAEtD,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAC;IAChG,MAAM,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;IAC/B,MAAM,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC;IAChC,MAAM,EAAE,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;IAEnC,4EAA4E;IAC5E,yEAAyE;IACzE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC;SAChC,WAAW,EAAE;SACb,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;SAC7B,GAAG,EAAE;SACL,QAAQ,CAAC,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAC;IAEzC,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,IAAI,MAA4B,CAAC;IAEjC,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxF,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QACnC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QACpC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAC3B,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;QACrC,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACrC,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACrC,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3C,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3C,MAAM,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;IACvE,CAAC;IAED,MAAM,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC;IACzB,MAAM,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC;IACxB,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7B,KAAK,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7B,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;YAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC5B,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC,GAAG,QAAQ,EAAE,CAAC;oBAC/C,SAAS,EAAE,CAAC;oBACZ,MAAM;gBACR,CAAC;YACH,CAAC;YACD,KAAK,EAAE,CAAC;QACV,CAAC;IACH,CAAC;IACD,IAAI,KAAK,KAAK,CAAC;QAAE,KAAK,GAAG,CAAC,CAAC;IAC3B,MAAM,WAAW,GAAG,SAAS,GAAG,KAAK,CAAC;IAEtC,OAAO;QACL,OAAO,EAAE,WAAW,GAAG,eAAe;QACtC,WAAW;QACX,eAAe,EAAE,SAAS;QAC1B,WAAW,EAAE,KAAK;QAClB,MAAM;KACP,CAAC;AACJ,CAAC;AAED,SAAS,KAAK,CAAC,CAAS,EAAE,GAAW,EAAE,GAAW;IAChD,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3C,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAWpE,OAAO,EAAE,WAAW,EAAqB,MAAM,YAAY,CAAC;AAE5D,eAAO,MAAM,kBAAkB,UAAU,CAAC;AAE1C,MAAM,WAAW,mBAAmB;IAClC,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,4FAA4F;IAC5F,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,YAAY,CAAC,IAAI,GAAE,mBAAwB,GAAG;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,WAAW,CAAA;CAAE,CA0NtG"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAsBpE,OAAO,EAAE,WAAW,EAAqB,MAAM,YAAY,CAAC;AAG5D,eAAO,MAAM,kBAAkB,UAAU,CAAC;AAE1C,MAAM,WAAW,mBAAmB;IAClC,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,4FAA4F;IAC5F,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,YAAY,CAAC,IAAI,GAAE,mBAAwB,GAAG;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,WAAW,CAAA;CAAE,CAiWtG"}
package/dist/server.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * MCP stdio server. Exposes 7 VisualLayer tools usable from Claude Code and Codex.
2
+ * MCP stdio server. Exposes 9 VisualLayer tools usable from Claude Code and Codex.
3
3
  * Wraps core/figma-rest/grounding; contains no business logic of its own.
4
4
  *
5
5
  * Logs MUST go to stderr (§18.3) — stdout is the JSON-RPC transport.
@@ -9,9 +9,10 @@ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
9
9
  import { createHash } from 'node:crypto';
10
10
  import { readFile as readFileBuffer } from 'node:fs/promises';
11
11
  import { snapshotToScreenGraph, structuredError, ErrorCodes, } from '@visual-layer/core';
12
- import { groundInstruction, compareGraphs, evalGrounding } from '@visual-layer/grounding';
12
+ import { groundInstruction, gateGrounding, buildConsensus, compareGraphs, evalGrounding, } from '@visual-layer/grounding';
13
13
  import { HttpFigmaClient, MockFigmaClient, captureFigma } from '@visual-layer/figma-rest';
14
14
  import { ServerState } from './state.js';
15
+ import { diffScreenshots } from './perceptual-diff.js';
15
16
  export const MCP_SERVER_VERSION = '0.1.0';
16
17
  export function createServer(opts = {}) {
17
18
  const state = opts.state ?? new ServerState();
@@ -95,15 +96,136 @@ export function createServer(opts = {}) {
95
96
  }
96
97
  });
97
98
  /* 3. ground_instruction */
98
- server.tool('ground_instruction', 'Rank interactables in a ScreenGraph against a natural-language instruction. Returns top-K candidates with score breakdown.', {
99
+ server.tool('ground_instruction', 'Rank interactables in a ScreenGraph against a natural-language instruction. Returns top-K candidates + a gate verdict. verdict.status: "accepted" (safe to act), "needs_visual_confirm" (structure ambiguous — look at the screenshot, then call confirm_grounding), "rejected" (no viable candidate). This gate is how accuracy approaches 100%: actions only fire when structure is confident or vision confirms it.', {
99
100
  screenGraphId: z.string().min(1),
100
101
  instruction: z.string().min(1),
101
102
  topK: z.number().int().positive().max(50).optional(),
103
+ gate: z
104
+ .object({
105
+ acceptConfidence: z.number().min(0).max(1).optional(),
106
+ minGap: z.number().min(0).max(1).optional(),
107
+ rejectConfidence: z.number().min(0).max(1).optional(),
108
+ })
109
+ .optional()
110
+ .describe('Gate thresholds. Defaults: acceptConfidence 0.85, minGap 0.2, rejectConfidence 0.3.'),
102
111
  }, async (args) => {
103
112
  try {
104
- const { graph, runId } = state.get(args.screenGraphId);
113
+ const { graph } = state.get(args.screenGraphId);
105
114
  const result = groundInstruction(graph, args.instruction, { topK: args.topK ?? 5 });
106
- return state.respond(result, []);
115
+ const verdict = gateGrounding(result, graph, (args.gate ?? {}));
116
+ return state.respond({
117
+ candidates: result.candidates,
118
+ verdict,
119
+ screenshot: graph.screenshot ?? null,
120
+ }, result.warnings);
121
+ }
122
+ catch (e) {
123
+ return err(toCode(e), msg(e));
124
+ }
125
+ });
126
+ /* 3b. confirm_grounding — vision second-opinion (the agent IS the VLM) */
127
+ server.tool('confirm_grounding', 'Vision second-opinion on an ambiguous grounding verdict. Call ONLY after ground_instruction returned verdict.status "needs_visual_confirm". Re-runs the gate with the same instruction and applies your visual verdict. Pass confirmed=true + the interactableId you see is the right target (use the bbox from the candidates); confirmed=false to block. Returns consensus.status: "act" (proceed) or "blocked".', {
128
+ screenGraphId: z.string().min(1),
129
+ instruction: z.string().min(1),
130
+ confirmed: z.boolean(),
131
+ interactableId: z.string().optional().describe('The interactable id vision confirms. Required when confirmed=true.'),
132
+ reason: z.string().optional(),
133
+ gate: z
134
+ .object({
135
+ acceptConfidence: z.number().min(0).max(1).optional(),
136
+ minGap: z.number().min(0).max(1).optional(),
137
+ rejectConfidence: z.number().min(0).max(1).optional(),
138
+ })
139
+ .optional(),
140
+ }, async (args) => {
141
+ try {
142
+ const { graph, trace } = state.get(args.screenGraphId);
143
+ const result = groundInstruction(graph, args.instruction, { topK: 5 });
144
+ const verdict = gateGrounding(result, graph, (args.gate ?? {}));
145
+ if (verdict.status === 'accepted') {
146
+ // Structure already confident — vision not needed, but harmless.
147
+ trace.info('confirm_grounding', { note: 'structure already accepted, vision verdict ignored' });
148
+ }
149
+ if (args.confirmed && !args.interactableId) {
150
+ return err(ErrorCodes.snapshot_missing_fields, 'confirmed=true requires interactableId');
151
+ }
152
+ const visual = {
153
+ confirmed: args.confirmed,
154
+ interactableId: args.interactableId,
155
+ reason: args.reason,
156
+ };
157
+ const consensus = buildConsensus(verdict, visual);
158
+ trace.info('confirm_grounding', {
159
+ gateStatus: verdict.status,
160
+ visualConfirmed: args.confirmed,
161
+ consensus: consensus.status,
162
+ interactableId: consensus.interactableId,
163
+ });
164
+ await trace.flush(state.store);
165
+ return state.respond({
166
+ consensus,
167
+ verdict,
168
+ screenshot: graph.screenshot ?? null,
169
+ });
170
+ }
171
+ catch (e) {
172
+ return err(toCode(e), msg(e));
173
+ }
174
+ });
175
+ /* 3c. verify_action — did the action take effect? (perceptual before/after diff) */
176
+ server.tool('verify_action', 'Confirm an action took visible effect via a perceptual pixel diff of before/after screenshots ingested through capture_browser. Pass interactableId to scope the diff to the clicked element bbox (recommended — isolates the change from page-wide noise). Returns changed=true iff the changed-pixel ratio exceeds threshold (default 0.5%). changed=false means no visible state change — the action likely missed or was a no-op.', {
177
+ screenGraphId: z.string().min(1),
178
+ beforeArtifactId: z.string().min(1),
179
+ afterArtifactId: z.string().min(1),
180
+ interactableId: z
181
+ .string()
182
+ .optional()
183
+ .describe('The clicked interactable. When set, the diff scans only its bbox region.'),
184
+ pixelTolerance: z.number().min(0).max(255).optional().describe('Per-channel diff (0-255) to count as changed. Default 30.'),
185
+ changeThreshold: z.number().min(0).max(1).optional().describe('Changed-pixel fraction for changed=true. Default 0.005 (0.5%).'),
186
+ }, async (args) => {
187
+ try {
188
+ const { graph, runId, trace } = state.get(args.screenGraphId);
189
+ const before = await state.store.lookup(runId, args.beforeArtifactId);
190
+ const after = await state.store.lookup(runId, args.afterArtifactId);
191
+ if (!before)
192
+ return err('artifact_not_found', `before artifact ${args.beforeArtifactId} not in run ${runId}`, runId);
193
+ if (!after)
194
+ return err('artifact_not_found', `after artifact ${args.afterArtifactId} not in run ${runId}`, runId);
195
+ const beforeBuf = await state.store.read(runId, args.beforeArtifactId, before.filename);
196
+ const afterBuf = await state.store.read(runId, args.afterArtifactId, after.filename);
197
+ let region = null;
198
+ if (args.interactableId) {
199
+ const inter = graph.interactables.find((i) => i.id === args.interactableId);
200
+ if (!inter)
201
+ return err('element_not_found', `interactable ${args.interactableId} not in graph`);
202
+ region = pickRegion(inter.bbox, graph.viewport);
203
+ }
204
+ const diff = await diffScreenshots(beforeBuf, afterBuf, {
205
+ pixelTolerance: args.pixelTolerance,
206
+ changeThreshold: args.changeThreshold,
207
+ region: region?.bbox,
208
+ viewport: region?.viewport,
209
+ });
210
+ trace.info('verify_action', {
211
+ changed: diff.changed,
212
+ changeRatio: Number(diff.changeRatio.toFixed(4)),
213
+ differingPixels: diff.differingPixels,
214
+ scoped: !!region,
215
+ });
216
+ await trace.flush(state.store);
217
+ return state.respond({
218
+ changed: diff.changed,
219
+ changeRatio: diff.changeRatio,
220
+ differingPixels: diff.differingPixels,
221
+ totalPixels: diff.totalPixels,
222
+ region: diff.region ?? null,
223
+ reason: diff.changed
224
+ ? `pixel change ${(diff.changeRatio * 100).toFixed(2)}% of scanned region`
225
+ : 'no perceptible pixel change — action likely had no visible effect',
226
+ before: { sha256: before.sha256 ?? '', byteSize: before.byteSize, mimeType: before.mimeType },
227
+ after: { sha256: after.sha256 ?? '', byteSize: after.byteSize, mimeType: after.mimeType },
228
+ });
107
229
  }
108
230
  catch (e) {
109
231
  return err(toCode(e), msg(e));
@@ -202,6 +324,16 @@ function toCode(e) {
202
324
  function msg(e) {
203
325
  return e instanceof Error ? e.message : String(e);
204
326
  }
327
+ /**
328
+ * Map a viewport-space bbox to a screenshot-space scan region. Returns null
329
+ * when no viewport is set on the graph — caller then falls back to a full-image
330
+ * diff instead of a scoped one.
331
+ */
332
+ function pickRegion(bbox, viewport) {
333
+ if (!viewport || !viewport.width || !viewport.height)
334
+ return null;
335
+ return { bbox, viewport: { width: viewport.width, height: viewport.height } };
336
+ }
205
337
  async function readFile(p) {
206
338
  const { readFile: rf } = await import('node:fs/promises');
207
339
  return rf(p, 'utf8');
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@visual-layer/mcp-server",
3
- "version": "1.0.1",
3
+ "version": "1.1.0",
4
4
  "description": "MCP stdio server exposing VisualLayer tools (Claude Code + Codex)",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -28,10 +28,11 @@
28
28
  ],
29
29
  "dependencies": {
30
30
  "@modelcontextprotocol/sdk": "^1.0.4",
31
+ "sharp": "^0.33.5",
31
32
  "zod": "^3.23.8",
32
33
  "@visual-layer/core": "1.0.1",
33
34
  "@visual-layer/figma-rest": "1.0.1",
34
- "@visual-layer/grounding": "1.0.1"
35
+ "@visual-layer/grounding": "1.1.0"
35
36
  },
36
37
  "scripts": {
37
38
  "build": "tsc -b",