Overview
The extension package (@tempad-dev/extension) is a browser extension that runs on https://www.figma.com/* and implements MCP tool behavior for AI-powered code generation.
Location: packages/extension/
Responsibilities
- Implementing MCP tool behavior (
get_code,get_structure,get_screenshot,token) - Maintaining UI code generation features
- Keeping Figma script rewrite rules stable
- Asset upload integration
- WebSocket communication with MCP server
Tech Stack
- Language: TypeScript
- UI Framework: Vue 3
- Build Tool: WXT (Web Extension Toolkit)
- Codegen: Web Worker +
@tempad-dev/plugins - MCP Integration:
@modelcontextprotocol/sdk(via hub), WebSocket transport - Styling: Tailwind-compatible class generation
Directory Structure
Key Commands
Development
Building
Testing
Quality Checks
Worker Sandbox Validation
MCP Tool Implementation
Tool Structure
Tools are implemented inmcp/tools/ and registered in mcp/runtime.ts:
Tool Routing
mcp/runtime.ts handles:
- Tool validation
- Parameter parsing
- Error handling
- Result formatting
Asset Pipeline
mcp/assets.ts manages:
- Asset upload to MCP server
asset://URI generation- Omission of large binaries from results
Code Generation
UI Code Generation
Separate pipeline from MCP tools:- Directory:
codegen/ - Worker:
worker/ - Output: Tailwind-compatible classes
MCP Code Generation
Viaget_code tool:
- Uses
@tempad-dev/pluginsfor transformations - Supports React, Vue, HTML output formats
- Includes variable transformation hooks
Rewrite Rules
Purpose
Rewrite rules intercept and modify Figma script execution for enhanced functionality.Implementation
- Source:
rewrite/figma.ts - Build: esbuild compiles to IIFE format
- Output:
dist/figma.js - Manifest:
public/rules/figma.legacy.json
Build Command
Code Style Guidelines
Prefer Explicit Helpers
Good:Omit Empty Fields in MCP Results
Good:Testing Strategy
Node Runtime Tests
File pattern:tests/**/*.test.ts
Use for:
- Pure logic
- Utilities
- Formatters
- MCP tool logic (non-DOM)
Browser Runtime Tests
File pattern:tests/**/*.browser.test.ts
Use for:
- DOM manipulation
- Vue components
- Browser APIs
- Extension UI
vitest.browser.config.ts
Test Determinism
- No system clock dependence
- No random IDs without fixed seed
- No network or filesystem side effects in unit tests
- Behavior-driven assertions
Boundaries and Constraints
Schema Changes
Never changepackages/shared schemas without:
- Updating
packages/mcp-server - Documenting the change
- Validating cross-package compatibility
Dependencies
Do not add new dependencies without approval.Asset Handling
Do not embed large binaries in MCP results. Use the asset pipeline:Pipeline Separation
Do not conflate UI codegen and MCP codegen pipelines unless there’s a clear reason.Verification Checklist
Always Run
UI/Codegen Changes
- Open TemPad Dev panel
- Test impacted section (e.g., “Inspect → Code”)
Build/Packaging Changes
Rewrite Subsystem Changes
FIGMA_EMAIL, FIGMA_PASSWORD, FIGMA_FILE_KEY
Related Documentation
In source repo:- MCP get_code requirements:
docs/extension/requirements.md - MCP get_code design:
docs/extension/design.md - MCP context/output strategy:
docs/extension/mcp-context-strategy.md - Testing architecture:
docs/testing/architecture.md