github TypeScript re-analysis due

vicmaster/framesmith

github

Open-source MCP server that gives AI assistants a visual design canvas, rendering HTML/CSS scene graphs to PNG via headless Chromium.

maintainer
vicmaster
license
MIT
first seen
2026-06-10
last seen
2026-09-04
releases · 30d
3
short id

Drift inferred · capture-to-capture

No drift recorded — single capability capture; advisories appear once its surface changes.

capabilities 60 tools
transport stdio · http counts 60 tools · 0 res · 0 prompts permission surface via code analysis

tools

  • apply_preset
  • apply_structure
  • batch_design
  • canvas_add_variant
  • canvas_archive
  • canvas_autofix
  • canvas_bind
  • canvas_check_drift
  • canvas_create
  • canvas_delete
  • canvas_diff
  • canvas_evaluate
  • canvas_import_html
  • canvas_import_url
  • canvas_list
  • canvas_move
  • canvas_revise
  • canvas_set_genre
  • canvas_stress
  • canvas_sync_from_url
  • canvas_unarchive
  • canvas_version
  • copy_nodes
  • create_component
  • export
  • find_nodes
  • generate_color_system
  • generate_design_system
  • generate_scale
  • get_feedback
  • get_fonts
  • get_variables
  • import_design_md
  • init
  • list_presets
  • list_structures
  • project_apply_preset
  • project_create
  • project_delete
  • project_evaluate
  • project_get_design_system
  • project_list
  • project_rename
  • project_set_design_system
  • read_nodes
  • replace_matching_properties
  • resolve_feedback
  • screenshot
  • screenshot_responsive
  • set_fonts
  • set_variables
  • snapshot_layout
  • viewer_url
  • workspace_apply_preset
  • workspace_create
  • workspace_delete
  • workspace_get_design_system
  • workspace_list
  • workspace_rename
  • workspace_set_design_system
code evidence vv2.0.0 · github-tarball
evidence-backed findings quoted directly from the published source artifact — not inferred

code files: 144

filesystem 47

  • fs (weak) vicmaster-framesmith-0dd3811/benchmark/run.ts :9 import { readFile, writeFile } from 'node:fs/promises';
  • fs (weak) vicmaster-framesmith-0dd3811/scripts/build-bloom-landing.ts :17 import { mkdir, writeFile } from 'node:fs/promises';
  • fs (weak) vicmaster-framesmith-0dd3811/scripts/build-hero.ts :8 import { mkdir, writeFile } from 'node:fs/promises';
  • fs (weak) vicmaster-framesmith-0dd3811/scripts/build-phase8-release.ts :20 import { mkdir, writeFile } from 'node:fs/promises';
  • fs (weak) vicmaster-framesmith-0dd3811/scripts/build-phase9-showcase.ts :19 import { mkdir, writeFile } from 'node:fs/promises';
  • fs (weak) vicmaster-framesmith-0dd3811/scripts/build-viewer-mock.ts :11 import { mkdir, writeFile } from 'node:fs/promises';
  • fs (weak) vicmaster-framesmith-0dd3811/scripts/generate-tailwind-palette.ts :16 import { readFileSync, writeFileSync } from 'node:fs';
  • fs vicmaster-framesmith-0dd3811/src/aggregate.ts :20 import { watch, existsSync, type FSWatcher } from 'node:fs';
  • fs vicmaster-framesmith-0dd3811/src/assets.ts :13 import { mkdirSync, writeFileSync, readFileSync, existsSync, renameSync } from 'node:fs';
  • fs vicmaster-framesmith-0dd3811/src/bind.ts :11 import { existsSync } from 'node:fs';
  • fs vicmaster-framesmith-0dd3811/src/fonts.ts :21 import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
  • fs vicmaster-framesmith-0dd3811/src/icons.ts :1 import { readFileSync, readdirSync, existsSync } from 'node:fs';
  • fs vicmaster-framesmith-0dd3811/src/import.ts :15 import { readdirSync, readFileSync } from 'node:fs';
  • fs vicmaster-framesmith-0dd3811/src/index.ts :3 import { readFile } from 'node:fs/promises';
  • fs vicmaster-framesmith-0dd3811/src/repo-store.ts :21 import { mkdirSync, writeFileSync, readFileSync, readdirSync, unlinkSync, existsSync, renameSync, statSync } from 'node:fs';
  • fs vicmaster-framesmith-0dd3811/src/scene-graph.ts :2 import { mkdirSync, writeFileSync, readFileSync, readdirSync, unlinkSync, existsSync, statSync } from 'node:fs';
  • fs vicmaster-framesmith-0dd3811/src/screenshot.ts :1 import { writeFile, mkdir } from 'node:fs/promises';
  • fs vicmaster-framesmith-0dd3811/src/viewer-standalone.ts :22 import { mkdirSync } from 'node:fs';
  • fs vicmaster-framesmith-0dd3811/src/workspaces.ts :12 import { mkdirSync, writeFileSync, readFileSync, existsSync } from 'node:fs';
  • fs (weak) vicmaster-framesmith-0dd3811/test-archive-view.ts :9 import { mkdtempSync, rmSync } from 'node:fs';
  • fs (weak) vicmaster-framesmith-0dd3811/test-build-log.ts :14 import { mkdtempSync, existsSync, readFileSync } from 'node:fs';
  • fs (weak) vicmaster-framesmith-0dd3811/test-cli.ts :9 import { mkdtempSync, rmSync } from 'node:fs';
  • fs (weak) vicmaster-framesmith-0dd3811/test-design-system-inheritance.ts :17 import { mkdtempSync, rmSync } from 'node:fs';
  • fs (weak) vicmaster-framesmith-0dd3811/test-discoverability.ts :18 import { readFileSync } from 'node:fs';
  • fs (weak) vicmaster-framesmith-0dd3811/test-empty-thumbnail.ts :7 import { mkdtempSync, rmSync } from 'node:fs';
  • fs (weak) vicmaster-framesmith-0dd3811/test-env.ts :12 import { mkdtempSync } from 'node:fs';
  • fs (weak) vicmaster-framesmith-0dd3811/test-feedback.ts :13 import { existsSync, readFileSync, writeFileSync, utimesSync } from 'node:fs';
  • fs (weak) vicmaster-framesmith-0dd3811/test-fonts-by-name.ts :14 import { existsSync, readFileSync } from 'node:fs';
  • fs (weak) vicmaster-framesmith-0dd3811/test-gradient-shadow-move-fixes.ts :10 import { mkdtempSync, existsSync, readdirSync } from 'node:fs';
  • fs (weak) vicmaster-framesmith-0dd3811/test-guidelines.ts :11 import { access, readFile } from 'node:fs/promises';
  • fs (weak) vicmaster-framesmith-0dd3811/test-import-core.ts :10 import { readFileSync } from 'node:fs';
  • fs (weak) vicmaster-framesmith-0dd3811/test-init.ts :10 import { mkdtempSync, existsSync, readdirSync } from 'node:fs';
  • fs (weak) vicmaster-framesmith-0dd3811/test-repo-assets.ts :11 import { mkdtempSync, existsSync, readFileSync, readdirSync } from 'node:fs';
  • fs (weak) vicmaster-framesmith-0dd3811/test-repo-canvases.ts :13 import { mkdirSync, mkdtempSync, existsSync, readFileSync, readdirSync } from 'node:fs';
  • fs (weak) vicmaster-framesmith-0dd3811/test-repo-external-change.ts :10 import { mkdtempSync, writeFileSync, unlinkSync, utimesSync, readFileSync, existsSync } from 'node:fs';
  • fs (weak) vicmaster-framesmith-0dd3811/test-responsive.ts :12 import { writeFile, mkdir } from 'node:fs/promises';
  • fs (weak) vicmaster-framesmith-0dd3811/test-viewer-feedback.ts :11 import { mkdtempSync, existsSync, readFileSync } from 'node:fs';
  • fs (weak) vicmaster-framesmith-0dd3811/test-viewer-logo-favicon.ts :10 import { mkdtempSync, rmSync } from 'node:fs';
  • fs (weak) vicmaster-framesmith-0dd3811/test-viewer-navbar.ts :8 import { writeFile, mkdir } from 'node:fs/promises';
  • fs (weak) vicmaster-framesmith-0dd3811/test-viewer-repo-aggregation.ts :10 import { mkdtempSync, existsSync, readFileSync } from 'node:fs';
  • fs (weak) vicmaster-framesmith-0dd3811/test-viewer-repo-lifecycle.ts :10 import { mkdtempSync, existsSync, readFileSync } from 'node:fs';
  • fs (weak) vicmaster-framesmith-0dd3811/test-viewer-resolves-workspace-tokens.ts :19 import { mkdtempSync, rmSync } from 'node:fs';
  • fs (weak) vicmaster-framesmith-0dd3811/test-viewer-sidebar.ts :8 import { mkdtempSync, rmSync } from 'node:fs';
  • fs (weak) vicmaster-framesmith-0dd3811/test-viewer-watch.ts :10 import { mkdirSync, writeFileSync } from 'node:fs';
  • fs (weak) vicmaster-framesmith-0dd3811/test-visual.ts :14 import { writeFile, mkdir } from 'node:fs/promises';
  • fs (weak) vicmaster-framesmith-0dd3811/test-workspace-mcp-tools.ts :10 import { mkdtempSync, rmSync, existsSync } from 'node:fs';
  • fs (weak) vicmaster-framesmith-0dd3811/test-workspace-migration.ts :11 import { mkdirSync, readFileSync, writeFileSync, existsSync, rmSync } from 'node:fs';

shell / exec 1

  • shell (weak) vicmaster-framesmith-0dd3811/test-cli.ts :12 import { spawn } from 'node:child_process';

network 9

  • net vicmaster-framesmith-0dd3811/src/index.ts :2360 const res = await fetch(`http://localhost:${port}/api/canvases`, { signal: AbortSignal.timeout(1000) });
  • net vicmaster-framesmith-0dd3811/src/viewer.ts :1 import { createServer, type IncomingMessage, type Server } from 'node:http';
  • net (weak) vicmaster-framesmith-0dd3811/test-check-drift-url.ts :10 import { createServer, type Server } from 'node:http';
  • net (weak) vicmaster-framesmith-0dd3811/test-cli.ts :13 import { createServer, type Server } from 'node:http';
  • net (weak) vicmaster-framesmith-0dd3811/test-import-url.ts :10 import { createServer, type Server } from 'node:http';
  • net (weak) vicmaster-framesmith-0dd3811/test-sync-drift.ts :10 import { createServer, type Server } from 'node:http';
  • net (weak) vicmaster-framesmith-0dd3811/test-viewer-feedback.ts :36 const api = (suffix: string, init?: RequestInit) => fetch(`${base}/api/canvas/${canvas.id}${suffix}`, init);
  • net (weak) vicmaster-framesmith-0dd3811/test-viewer-navbar.ts :18 const list = await (await fetch(`${base}/api/canvases`)).json();
  • net (weak) vicmaster-framesmith-0dd3811/test-viewer.ts :74 const galleryRes = await fetch(`http://localhost:${PORT}/`);

secrets 3

  • secrets vicmaster-framesmith-0dd3811/src/llm-judge.ts :80 if (process.env.ANTHROPIC_API_KEY) return 'anthropic';
  • secrets (weak) vicmaster-framesmith-0dd3811/test-flow-critique.ts :76 const saved = { p: process.env.FRAMESMITH_LLM_PROVIDER, a: process.env.ANTHROPIC_API_KEY, o: process.env.OPENAI_API_KEY };
  • secrets (weak) vicmaster-framesmith-0dd3811/test-llm-judge.ts :81 const saved = { f: process.env.FRAMESMITH_LLM_PROVIDER, a: process.env.ANTHROPIC_API_KEY, o: process.env.OPENAI_API_KEY };

tool registrations 60

  • canvas_create vicmaster-framesmith-0dd3811/src/index.ts :161
  • canvas_list vicmaster-framesmith-0dd3811/src/index.ts :194
  • canvas_add_variant vicmaster-framesmith-0dd3811/src/index.ts :212
  • canvas_move vicmaster-framesmith-0dd3811/src/index.ts :247
  • canvas_archive vicmaster-framesmith-0dd3811/src/index.ts :263
  • canvas_unarchive vicmaster-framesmith-0dd3811/src/index.ts :275
  • canvas_delete vicmaster-framesmith-0dd3811/src/index.ts :287
  • workspace_create vicmaster-framesmith-0dd3811/src/index.ts :299
  • workspace_list vicmaster-framesmith-0dd3811/src/index.ts :310
  • workspace_rename vicmaster-framesmith-0dd3811/src/index.ts :320
  • workspace_delete vicmaster-framesmith-0dd3811/src/index.ts :335
  • project_create vicmaster-framesmith-0dd3811/src/index.ts :354
  • project_list vicmaster-framesmith-0dd3811/src/index.ts :369
  • project_rename vicmaster-framesmith-0dd3811/src/index.ts :379
  • project_delete vicmaster-framesmith-0dd3811/src/index.ts :394
  • workspace_set_design_system vicmaster-framesmith-0dd3811/src/index.ts :431
  • workspace_get_design_system vicmaster-framesmith-0dd3811/src/index.ts :446
  • workspace_apply_preset vicmaster-framesmith-0dd3811/src/index.ts :457
  • project_set_design_system vicmaster-framesmith-0dd3811/src/index.ts :474
  • project_get_design_system vicmaster-framesmith-0dd3811/src/index.ts :489
  • project_apply_preset vicmaster-framesmith-0dd3811/src/index.ts :500
  • batch_design vicmaster-framesmith-0dd3811/src/index.ts :517
  • find_nodes vicmaster-framesmith-0dd3811/src/index.ts :590
  • replace_matching_properties vicmaster-framesmith-0dd3811/src/index.ts :623
  • create_component vicmaster-framesmith-0dd3811/src/index.ts :676
  • copy_nodes vicmaster-framesmith-0dd3811/src/index.ts :708
  • screenshot vicmaster-framesmith-0dd3811/src/index.ts :773
  • read_nodes vicmaster-framesmith-0dd3811/src/index.ts :808
  • snapshot_layout vicmaster-framesmith-0dd3811/src/index.ts :836
  • get_variables vicmaster-framesmith-0dd3811/src/index.ts :861
  • set_variables vicmaster-framesmith-0dd3811/src/index.ts :873
  • generate_scale vicmaster-framesmith-0dd3811/src/index.ts :917
  • generate_color_system vicmaster-framesmith-0dd3811/src/index.ts :991
  • generate_design_system vicmaster-framesmith-0dd3811/src/index.ts :1065
  • get_fonts vicmaster-framesmith-0dd3811/src/index.ts :1143
  • set_fonts vicmaster-framesmith-0dd3811/src/index.ts :1155
  • export vicmaster-framesmith-0dd3811/src/index.ts :1225
  • screenshot_responsive vicmaster-framesmith-0dd3811/src/index.ts :1266
  • canvas_diff vicmaster-framesmith-0dd3811/src/index.ts :1314
  • list_presets vicmaster-framesmith-0dd3811/src/index.ts :1363
  • list_structures vicmaster-framesmith-0dd3811/src/index.ts :1373
  • apply_structure vicmaster-framesmith-0dd3811/src/index.ts :1395
  • apply_preset vicmaster-framesmith-0dd3811/src/index.ts :1445
  • canvas_import_html vicmaster-framesmith-0dd3811/src/index.ts :1542
  • canvas_import_url vicmaster-framesmith-0dd3811/src/index.ts :1586
  • canvas_sync_from_url vicmaster-framesmith-0dd3811/src/index.ts :1646
  • canvas_check_drift vicmaster-framesmith-0dd3811/src/index.ts :1703
  • canvas_version vicmaster-framesmith-0dd3811/src/index.ts :1754
  • import_design_md vicmaster-framesmith-0dd3811/src/index.ts :1781
  • get_feedback vicmaster-framesmith-0dd3811/src/index.ts :1835
  • resolve_feedback vicmaster-framesmith-0dd3811/src/index.ts :1864
  • canvas_set_genre vicmaster-framesmith-0dd3811/src/index.ts :1883
  • canvas_evaluate vicmaster-framesmith-0dd3811/src/index.ts :1913
  • canvas_autofix vicmaster-framesmith-0dd3811/src/index.ts :1994
  • canvas_stress vicmaster-framesmith-0dd3811/src/index.ts :2060
  • project_evaluate vicmaster-framesmith-0dd3811/src/index.ts :2136
  • canvas_revise vicmaster-framesmith-0dd3811/src/index.ts :2209
  • viewer_url vicmaster-framesmith-0dd3811/src/index.ts :2244
  • canvas_bind vicmaster-framesmith-0dd3811/src/index.ts :2270
  • init vicmaster-framesmith-0dd3811/src/index.ts :2298

install hooks 1

  • prepublishOnly vicmaster-framesmith-0dd3811/package.json :17 npm run build

declared dependencies 11

  • @modelcontextprotocol/sdk@^1.12.1
  • @anthropic-ai/sdk@^0.96.0
  • @material-symbols/svg-400@^0.44.12
  • lucide-static@^0.577.0
  • nanoid@^5.1.5
  • openai@^6.38.0
  • puppeteer@^24.7.2
  • zod@^3.24.4
  • @types/node@^22.15.3
  • tsx@^4.19.4
  • typescript@^5.8.3

perm:untrusted 1

  • untrusted (weak) vicmaster-framesmith-0dd3811/test-viewer-navbar.ts :18 const list = await (await fetch(`${base}/api/canvases`)).json();