Updated UI with minimised footprint, smart log summaries, audit export#56
Open
dgc-tree wants to merge 127 commits intosouthleft:mainfrom
Open
Updated UI with minimised footprint, smart log summaries, audit export#56dgc-tree wants to merge 127 commits intosouthleft:mainfrom
dgc-tree wants to merge 127 commits intosouthleft:mainfrom
Conversation
Implements actual data compression to prevent context exhaustion in Claude Desktop. Problem: Previous implementation detected large responses but only warned - did not actually reduce payload size. This caused context window exhaustion with large datasets (e.g., 410 variables × 19 modes = 538KB uncompressed). Solution: - Added compressionCallback to all adaptive tools (figma_get_file_data, figma_get_variables, figma_get_styles, figma_get_file_for_plugin) - Compression callbacks re-filter data with lower verbosity when thresholds exceeded - Maps compression levels to verbosity: emergency→inventory, critical/warning→summary - Achieves 93% size reduction in real-world test (538KB → 38KB) Thresholds: - ≤5MB: No compression - >5MB: Info (standard maintained) - >10MB: Warning (downgrade to summary) - >15MB: Critical (downgrade to summary) - >20MB: Emergency (downgrade to inventory) Updated: - src/core/figma-tools.ts: Added compression callbacks with type safety - README.md: Updated adaptive response sizing documentation with real metrics Testing: Verified with CDS-Tokens file (410 variables, 19 modes): - Original: 538KB (would exhaust context) - Compressed: 38KB (93% reduction, context-safe) Resolves context window exhaustion for enterprise-scale design systems.
This commit implements a complete OAuth 2.0 authentication flow for the Figma Console MCP server, allowing users to authenticate with their own Figma accounts instead of requiring personal access tokens.
## Key Features
### OAuth Authentication Flow
- Automatic OAuth flow triggered on first design system tool use
- Browser-based authorization with Figma
- Secure token storage in Cloudflare Workers KV namespace
- Session persistence across MCP server reconnections
### Session Management
- Fixed session ID ("figma-console-mcp-default-session") for all MCP connections
- Session ID stored in Durable Object storage for persistence
- OAuth tokens stored in KV namespace with session-scoped keys
- Tokens persist across MCP client reconnections
### Token Refresh Support
- Automatic token refresh when expired
- Refresh tokens stored alongside access tokens
- Graceful fallback to re-authentication if refresh fails
### Documentation Updates
- Updated README.md to remove FIGMA_ACCESS_TOKEN from cloud mode configurations
- Clarified OAuth vs personal token usage (cloud vs local mode)
- Enhanced Quick Start guide (4 steps instead of 5, no token creation needed)
- Updated all MCP client configuration examples (Claude Code, Cursor, Windsurf, Zed, Claude Desktop)
- Added comprehensive OAuth authentication flow documentation
## Technical Implementation
### Changes to src/index.ts
- Added sessionId field and ensureSessionId() method
- Implemented refreshOAuthToken() method for token refresh flow
- Made generateStateToken() public static for use in static fetch handler
- Updated getFigmaAPI() to use ensureSessionId() and load session ID from storage
- Updated ensureInitialized() to call ensureSessionId()
- OAuth token retrieval from KV namespace with session-scoped keys
### Changes to README.md
- Removed FIGMA_ACCESS_TOKEN from Quick Start for cloud mode
- Updated all cloud mode installation examples (no env vars needed)
- Enhanced OAuth Authentication Flow section with clear benefits
- Added authentication notes to all MCP client configurations
- Clarified cloud mode (OAuth) vs local mode (personal token) distinction
### Changes to src/browser-manager.ts
- Minor updates for OAuth integration
### Changes to wrangler.jsonc
- Configuration updates for OAuth support
## Testing
- ✅ OAuth flow tested successfully
- ✅ Token persistence verified across MCP reconnections
- ✅ Variable API access working with OAuth tokens
- ✅ Deployment successful to Cloudflare Workers
Closes OAuth implementation for cloud mode users.
Major improvements for public launch readiness: ## README.md - Streamlined Quick Start with most popular MCP clients - Claude Desktop UI-based setup (no JSON editing required) - Clear Remote vs Local mode comparison table - Plugin limitation warnings (Desktop Bridge only works locally) - Beginner-friendly language for designers and developers - Accurate MCP client installation instructions verified via Context7 ## New Documentation - MODE_COMPARISON.md: Comprehensive feature matrix and decision guide - CLAUDE_DESKTOP_SETUP_UPDATED.md: Modern UI method + legacy JSON method - Reorganized all docs into docs/ directory ## Landing Pages - Redesigned home page (/) with Figma-style minimal design - Redesigned OAuth success page with clean, accessible UI - Custom favicon support ## Code Changes - src/index.ts: Added favicon endpoint and clean landing pages - Proper icon serving for MCP connectors ## Documentation Organization - Moved all markdown files from root to docs/ - Cleaned up development artifacts - Maintained only README.md and RELEASE_NOTES.md in root This prepares the project for public announcement with clear, accurate, and beginner-friendly installation instructions. 🤖 Generated with Claude Code Co-Authored-By: Claude <noreply@anthropic.com>
Removed 19 files preparing for public launch: Root directory cleanup: - RELEASE_NOTES.md (outdated plugin setup instructions) - verify-phase3.sh (development verification script) Development/planning docs removed from docs/: - CONSOLE_EXTRACTION_IMPROVEMENTS.md - DOM_BASED_VARIABLE_EXTRACTION_FEASIBILITY.md - DUAL_MODE_SETUP.md (redundant with MODE_COMPARISON.md) - FIGMA_DESKTOP_API_SOLUTION.md - IMPLEMENTATION_COMPLETE.md - OAUTH_IMPLEMENTATION.md - PHASE3_SUMMARY.md - PHASE5_PLAN.md - PHASE5_TESTING.md - PHASE5_TESTING_INSTRUCTIONS.md - PLUGIN_LOGGING_BRIDGE.md - PRODUCT_PLAN.md - STYLE_EXTRACTION_METHOD.md - TOKEN_OPTIMIZATION.md Outdated setup docs removed from docs/: - CLAUDE_CODE_SETUP.md (outdated tool names and counts) - FIGMA_API_SETUP.md (pre-OAuth setup instructions) - QUICK_SETUP.md (early testing instructions) Remaining docs are all public-facing and current: - ARCHITECTURE.md - CLAUDE_DESKTOP_SETUP_UPDATED.md - DEPLOYMENT_COMPARISON.md - DEPLOYMENT.md - LOCAL_MODE_SETUP.md - MODE_COMPARISON.md - OAUTH_SETUP.md - ROADMAP.md - SELF_HOSTING.md - TOOLS.md - TROUBLESHOOTING.md - USE_CASES.md
… descriptions The Desktop Bridge plugin was never being invoked due to a chicken-and-egg problem where browserManager was checked before ensureInitialized() was called. This caused component descriptions to always fall back to REST API (which doesn't include description fields). Fixed by calling ensureInitialized() first, then getting browserManager. Also added comprehensive AI decision-making guides to prevent future tool-hopping issues. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This update addresses misleading "simpler/zero-setup" claims about NPX installation and clarifies the three distinct installation methods available. Key Changes: - Updated NPX-INSTALLATION.md to remove "simpler" claims and emphasize that NPX has identical authentication requirements to Local Git mode - Restructured MODE_COMPARISON.md to clearly distinguish between execution modes (2), installation methods (3), and authentication methods (2) - Updated README.md to present all three installation methods (Remote SSE, NPX, Local Git) with accurate comparison table - Added explicit messaging that only Remote SSE offers true zero-setup via OAuth - Clarified that both NPX and Local Git require manual FIGMA_ACCESS_TOKEN setup Architecture Clarification: - Execution: Remote (cloud) vs Local (desktop) - Authentication: OAuth (Remote SSE only) vs PAT (NPX + Local Git) - Distribution: URL vs npm vs git The key insight: authentication method, NOT installation method, determines setup complexity. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
… discoverability Added detailed description strings to 9 tools (64% of total) that were missing them: - figma_watch_console - figma_reload_plugin - figma_clear_console - figma_navigate - figma_get_variables - figma_get_styles - figma_get_component_image - figma_get_component_for_development - figma_get_file_for_plugin Each description includes: - Primary purpose and use cases - Trigger keywords for AI tool selection - Key warnings (token limits, API requirements) - Anti-patterns (what NOT to use it for) - Redirects to appropriate alternative tools This enables AI assistants to efficiently select the correct tool based on user prompts without needing to read all parameter schemas, reducing confusion and improving tool selection accuracy. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
…e to README BREAKING CHANGES - File Structure: - Renamed: docs/CLAUDE_DESKTOP_SETUP_UPDATED.md → docs/SETUP.md - Removed: docs/LOCAL_MODE_SETUP.md (redundant, consolidated into SETUP.md) Documentation Improvements: - Added complete step-by-step Local Mode setup directly in README.md * Prerequisites, installation, token setup, Figma restart, verification * No longer requires users to navigate to separate docs for basic setup - Updated SETUP.md title to be professional (removed "Updated 2025") - Updated all internal documentation links to reference new file structure - Consolidated redundant setup guides into single comprehensive SETUP.md Why These Changes: - Installation is step 1 - users need clear, immediate guidance in README - "UPDATED" in filename sounds unprofessional and temporary - Having setup split across multiple files was confusing - Local Mode setup was buried in separate docs instead of being prominent Updated Files: - README.md: Added 6-step Local Mode setup guide - docs/SETUP.md: Renamed and updated title - docs/NPX-INSTALLATION.md: Updated all file references - Removed docs/LOCAL_MODE_SETUP.md (consolidated) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
…unning PROBLEM: When Claude Desktop starts with Local Mode MCP configured, if Figma Desktop is not running with --remote-debugging-port=9222, the MCP crashes with process.exit(1), causing errors in Claude Desktop. This creates terrible UX where users cannot even have Claude Desktop open unless Figma is also running with the debug flag. ROOT CAUSE: In src/local.ts line 781, the start() method called checkFigmaDesktop() and if it failed, it would crash the entire MCP server with process.exit(1). FIX: - Wrapped checkFigmaDesktop() in try/catch during startup - Changed from fatal error to warning log when Figma is not accessible - MCP now starts successfully and registers all tools - Tools will fail gracefully with helpful error messages when called - Users see clear instructions on how to start Figma Desktop correctly BEHAVIOR NOW: - MCP starts even if Figma Desktop is not running - Logs warning with instructions if Figma not detected - Tools return friendly errors when called without Figma - Auto-connects when Figma Desktop is later started with debug flag This matches the expected behavior: the MCP should always start successfully and only show errors when tools are actually used. Co-Authored-By: Claude <noreply@anthropic.com>
Previously, console logs were cached indefinitely and persisted across page navigations, causing users to see stale logs from previous sessions (sometimes 45+ hours old) instead of fresh console output. This fix adds a 'framenavigated' event listener that: - Detects when the main frame navigates to a new URL - Clears the logs array to remove stale cached data - Adds a diagnostic marker for transparency - Only triggers on main frame navigation (not iframe navigations) Users no longer need to manually clear logs or restart the MCP server to see fresh console output after navigating between Figma files. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
CRITICAL FIX: The previous navigation-based log clearing was too aggressive. It cleared logs on EVERY framenavigated event, including: - Hash changes within the same file (#component-1 to #component-2) - SPA navigations within Figma's UI - Any internal frame navigation This caused console logs to be cleared during long-running plugin executions (5-10+ minutes), making it impossible to retrieve plugin logs even when they were successfully captured. Changes: - Track the last URL to compare base paths (origin + pathname without hash/query) - Only clear logs when navigating to a DIFFERENT Figma file (file ID changes) - Preserve logs during hash changes and SPA navigations within the same file - Add detailed logging to show when/why logs are cleared This fixes the issue where users running long plugins would see: "[MCP DIAGNOSTIC] Page navigated to... Console logs cleared" instead of their actual plugin console output. Testing: - Long-running plugins (5-10+ min) now preserve logs correctly - Hash navigation within same file no longer clears logs - Actual file navigation still clears stale logs as intended 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
CRITICAL FIX: When computer goes to sleep, the Chrome DevTools Protocol connection to Figma Desktop (localhost:9222) is severed, causing console monitoring to stop working even though Figma is still running. Root Cause: - Computer sleep breaks the WebSocket connection to CDP - Puppeteer page object becomes stale - Console event listeners are disconnected - Logs stop being captured until manual reconnection Solution: - Add isConnectionAlive() health check that tests the connection - Add ensureConnection() that auto-reconnects if connection is dead - Call ensureConnection() before all operations (getPage, navigate, etc.) - Restart console monitoring if connection was recovered User Impact: - No more manual navigation/reload after computer wakes from sleep - MCP automatically detects and recovers from connection loss - Console logs continue working seamlessly after wake Testing: 1. Start MCP and verify logs work 2. Put computer to sleep 3. Wake computer and try to read logs 4. MCP should auto-reconnect and logs work immediately 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
…onnection issues When AI encounters errors like 'No active page' or empty console logs after connection loss (e.g., computer sleep), it now receives specific recovery steps: 1. Enhanced figma_get_console_logs to detect when monitoring is inactive - Adds ai_recovery_steps with numbered action items - Guides AI to call figma_get_status then figma_navigate to reconnect 2. Enhanced figma_reload_plugin error handling - Detects 'No active page' errors specifically - Provides context-aware recovery instructions - Explains that computer sleep likely caused the issue This allows the AI to automatically recover from connection issues without getting confused or going down unproductive paths. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
…ale page reference Critical fix for console log capture after connection loss (e.g., computer sleep). PROBLEM: When connection is lost and then recovered via figma_navigate, the ConsoleMonitor would still have isMonitoring=true with a reference to the OLD stale page object. The restart logic checked '!isMonitoring' which would be FALSE, so monitoring never restarted with the fresh page. This caused console logs to never appear even after successful reconnection. SOLUTION: Track connection state before and after ensureConnection(): - If connection WAS dead (!wasAlive) but is NOW alive (isAliveNow), we know reconnection just happened - FORCE restart monitoring by calling stopMonitoring() first to clear stale state - Then start fresh monitoring with the new page object from browserManager This ensures that after ANY connection recovery (via navigate, reload, etc.), the ConsoleMonitor gets a fresh page object and console logs will be captured. Fixes issue where AI would call figma_navigate, reconnect successfully, but still see empty logs because monitoring never restarted. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
…not page CRITICAL BUG FIX - Previous fix (95198a0) didn't work! THE BUG: After computer sleep, when ensureConnection() reconnects: 1. It calls launch() which sets this.browser ✓ 2. But this.page remains NULL (not fetched yet) 3. isConnectionAlive() checks: if (!this.browser || !this.page) 4. Returns FALSE because page is null! 5. Condition 'if (!wasAlive && isAliveNow)' fails 6. Monitoring NEVER restarts 7. User runs plugin, no logs appear REAL-WORLD IMPACT: Users reported that after computer sleep, even after calling figma_navigate to reconnect, console logs remained empty forever. The AI would say 'I'm connected to the right page with 4 workers' but see zero logs, even when the plugin was actively running. THE FIX: Use isRunning() instead of isConnectionAlive() after ensureConnection(): - isRunning() checks if BROWSER is connected (browser.isConnected()) - isConnectionAlive() checks if PAGE is alive (requires page object) - After reconnection, browser IS connected but page not fetched yet - So check browser connection, not page connection ADDITIONAL FIX: Clear lastUrl in stopMonitoring() to prevent stale URL comparisons when monitoring restarts. This ensures that after ANY computer sleep: 1. wasAlive = false (old connection dead) 2. ensureConnection() reconnects browser 3. isRunning() = true (browser connected) 4. Condition succeeds, monitoring restarts 5. Fresh page fetched and monitored 6. Logs appear immediately when plugin runs 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
…in integration Major Features: 1. Console Log Persistence (src/local.ts) - Dynamic page switching to follow workers across Figma tabs - Automatically switches to pages with active workers for persistent monitoring - Prevents console log loss when users navigate between files 2. Reconstruction Format (src/core/figma-reconstruction-spec.ts) - New format parameter for figma_get_component tool - Exports plugin-compatible node tree specifications - Enables direct reconstruction in Figma Component Reconstructor plugin - Validates specs against plugin requirements - Extracts clean node trees without metadata bloat 3. COMPONENT_SET Validation - Added validation for figma_get_component (reconstruction format) - Added validation for figma_get_component_image - Provides helpful error messages with variant selection instructions - Lists available variants when COMPONENT_SET is encountered - Prevents API errors by catching COMPONENT_SET before rendering Documentation: - Added RECONSTRUCTION_FORMAT.md with format specifications - Updated TOOLS.md with new format parameter documentation - Updated README.md with reconstruction workflow examples - Added testing artifacts in docs/testing/ Technical Details: - Reconstruction format returns clean ComponentSpecification JSON - COMPONENT_SET detection with variant enumeration - Image rendering validation before API calls - Comprehensive error messages with actionable instructions Files Changed: - src/local.ts: Console persistence feature - src/core/figma-tools.ts: Format parameter + COMPONENT_SET validation - src/core/figma-reconstruction-spec.ts: Spec extraction and validation - docs/RECONSTRUCTION_FORMAT.md: Format documentation - docs/TOOLS.md: Tool documentation updates - README.md: Updated examples - docs/testing/: Test specs and reference images This work enables seamless integration between Figma Console MCP and Figma Component Reconstructor plugin for automated component recreation.
Variables API now correctly uses REST API first for enterprise users: - Detects FIGMA_ACCESS_TOKEN presence to determine auth method - REST API used first when token exists (complete enterprise data) - Desktop Bridge used as fallback when REST fails or no token - Fixes issue where enterprise users got cached Desktop Bridge data (280 vars) instead of complete REST API data (422 vars) Styles API unchanged - uses REST API only as designed. Tested with: - CDS-Tokens (enterprise): 422 variables via REST API - Altitude Design System: 244 styles via REST API
Establishes proof-of-concept for the production workflow: React/CSS → Code Scanner → Figma Spec → Plugin → Figma Canvas Test files created: - tokens.css: Design tokens as CSS custom properties - Button.tsx: Production-style React component - button.module.css: CSS module with token references - button-rendered.html: Browser-rendered output - button-primary-md-spec.json: Figma spec for Primary button - button-secondary-md-spec.json: Figma spec for Secondary button - README.md: CSS → Figma property mapping reference Key insight: Storybook addon will be thin client calling Figma Console MCP for all conversion logic - single source of truth for CSS → Figma mapping. Both button variants tested successfully in Component Reconstructor plugin.
Implements core conversion logic to transform HTML + computed CSS styles into Figma-compatible specification JSON. Key features: - CSS property normalization (hyphenated to camelCase) - Flexible selector matching (.class, #id, tagName) - Color parsing (hex, rgb, rgba, named colors) - Layout mapping (flex to layoutMode, gap to itemSpacing) - Font weight to style name conversion - Padding, border-radius, fills, strokes support - Recursive child element processing Tested successfully with button component rendering in Figma.
- Delete AI decision-making guides (internal prompting docs) - Delete internal troubleshooting and deployment docs - Remove docs/testing/ from tracking (test fixtures, issue tracking) - Update .gitignore to exclude docs/testing/ and docs/analysis/ Keeps public-facing documentation: SETUP, TOOLS, ARCHITECTURE, etc.
Console monitoring: - Add auto-connect to Figma Desktop at MCP startup - Enables "get latest logs" workflow without manual setup - Background connection with graceful fallback if unavailable Code-to-spec improvements: - Fix color format: use color.a inside object (plugin requirement) - Add layoutMode to all frames (required for child layoutSizing) - Flatten single-text elements: TEXT directly instead of FRAME>TEXT - Add needsFrameWrapper() to detect when frames are required - Add createTextNode() for direct text node generation These changes enable cleaner Figma component generation that matches the actual coded component structure without unnecessary wrapper frames.
Remove code_to_figma_spec tool and related code-to-spec.ts module. This experimental feature for converting HTML/CSS to Figma specs is better served by existing solutions like divRIOTS story.to.design. Focus remains on core Figma → Code functionality for AI development workflows.
Previously, requesting component data for a variant (COMPONENT inside a COMPONENT_SET) would fail because variants cannot access the componentPropertyDefinitions property. This fix: - Detects if a node is a variant by checking if its parent is a COMPONENT_SET - Only attempts to access componentPropertyDefinitions for component sets and non-variant components - Adds isVariant flag to the response for clarity - Variants can still have their own description, which is now properly returned
Figma's plugin sandbox uses an older JavaScript runtime that doesn't support optional chaining (?.). Changed to traditional null checks.
Implements the ability to modify Figma documents through the MCP server: **New MCP Tools:** - `figma_execute` - Execute arbitrary Figma Plugin API code (power tool) - `figma_update_variable` - Update variable values in specific modes - `figma_create_variable` - Create new variables in collections - `figma_create_variable_collection` - Create new collections with modes - `figma_delete_variable` - Delete variables (with warning) - `figma_delete_variable_collection` - Delete collections (with warning) **Architecture:** - Desktop Bridge plugin now handles write operations via postMessage - FigmaDesktopConnector extended with write methods - Two-way communication with request/response tracking - Timeout handling for code execution safety **Features:** - Hex color auto-conversion for COLOR variables - Support for all variable types (COLOR, FLOAT, STRING, BOOLEAN) - Mode management for multi-theme design systems - Arbitrary code execution with configurable timeout
…tructions-RZB9L feat: Add write capabilities to control Figma via MCP
Add new MCP tools for variable/mode management: - figma_rename_variable: Rename variables while preserving values - figma_add_mode: Add modes to collections (e.g., "Dark", "Mobile") - figma_rename_mode: Rename existing modes Improvements: - Fix memory leak in ui.html by clearing timeouts on response - Add comprehensive AI decision guide to docs/TOOLS.md - Update README with write capabilities and example prompts - Add detailed documentation for all 14 tools The documentation now includes clear guidance on when to use each tool, prerequisites checklist, and code examples.
Always recreate FigmaDesktopConnector with a fresh page reference instead of caching. This fixes detached Frame errors that occur when Figma page is navigated or refreshed while MCP server runs.
All write operation functions now catch rejections and return plain objects instead of throwing Error objects. This fixes the 'Not available' error in puppeteer BiDi mode which can't serialize Error objects properly.
…ment - Added global reset for .rule-left at 768px breakpoint - Removed all left padding from grid cells on mobile - Elements now align flush left on single-column mobile layout - Only horizontal rules remain for section separation Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Changed to uppercase with letter-spacing to match "WHAT AI CAN ACCESS" style - Adjusted font-size and weight for consistency Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Fixed Card href URLs in index.mdx and introduction.md - Changed /SETUP to /setup - Changed /MODE_COMPARISON to /mode-comparison - Changed /INTRODUCTION to /introduction - Changed /USE_CASES to /use-cases - Changed /TOOLS to /tools - Changed /TROUBLESHOOTING to /troubleshooting - Fixed landing page /capabilities link to /tools Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Landing page: 30px → 35px - Mintlify docs: added height: 28 to logo config Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Created custom.css with logo height override - Added css property to mint.json Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The documentation lists 42 tools, updated references to use 40+ for accuracy. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Added og-image.jpg to docs/images/ - Updated mint.json with og:image and twitter:image metadata - Added complete OG and Twitter meta tags to landing page - Consistent title, description, and thumbnail across both sites Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Shortened sentence to avoid "effectively." hanging alone on last line. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add comprehensive GitHub Copilot (VS Code) section to setup.md - Include CLI method (recommended) and manual mcp.json configuration - Document enterprise policy considerations for organizations - Add troubleshooting section specific to Copilot - Update introduction.md to mention Copilot in examples and FAQ - Add .env.mcp and .vscode/mcp.json to .gitignore for token protection
- Add extractFigmaUrlInfo() to parse both path-based (/branch/{key}/) and
query-based (?branch-id=) Figma branch URL formats
- Add withTimeout() helper for API call timeouts (30s default)
- Add getBranchKey() method for branch key resolution via REST API
- Integrate branch support into figma_get_variables tool
- Add frame detachment protection with isDetached() checks
- Add enhanced error handling for 429 rate limits and auth errors
- Graceful fallback to Desktop Bridge when REST API fails
Addresses feedback from Angelo Guardia regarding branch connections
and figma_get_variables stability issues.
- Document branch URL support for figma_get_variables - Include examples for both path-based and query-based formats - Document auto-detection via figma_navigate - Version bump to 1.3.0
- Remove MINTLIFY_ISSUES.md (internal tracking) - Remove ARCHITECTURE.md (duplicate of docs/architecture.md) - Move ROADMAP.md to .notes/ (unverified/draft content) - Add .notes/ to .gitignore for internal drafts
- Remove docs/changelog.md (duplicate) - Add Changelog anchor linking to GitHub - Keep root CHANGELOG.md as single source of truth
- Add SECURITY.md for GitHub (vulnerability reporting, security overview) - Add docs/security.md for Mintlify (detailed security architecture) - Cover data handling, authentication, code execution sandbox - Include enterprise compliance considerations - Document responsible disclosure process
Introduce extensible MCP Apps architecture for rich interactive UI experiences rendered inline in Claude Desktop, powered by the @modelcontextprotocol/ext-apps SDK. - MCP Apps Framework: modular multi-app build system using Vite with single-file HTML output, parameterized via APP_NAME env var, gated behind ENABLE_MCP_APPS=true for zero impact on existing tools - Token Browser App: interactive design token explorer with collection grouping, type filtering, search, per-collection mode columns, color swatches, alias resolution, and click-to-copy - Hello World App: minimal reference implementation for building new apps - Documentation: MCP Apps guide, updated changelog, README section, release banner, and Mintlify navigation
The hello-world app was a development reference and should not ship with the MCP server. Removes source files, build script entry, import, and registration call. Updates vite.config.ts default to token-browser.
Replace Claude Desktop-specific references with generic ext-apps protocol language. Add ENABLE_MCP_APPS configuration note to the Local Mode setup guide so users can discover the feature.
…WCAG AA compliance Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
tpitre
added a commit
that referenced
this pull request
Mar 29, 2026
…tyle discovery (#56) - figma_add_text_to_slide: 8 new params (fontFamily, fontStyle, color, textAlign, width, lineHeight, letterSpacing, textCase) - figma_set_slide_background: new tool, creates/updates 1920x1080 bg rectangle - figma_get_text_styles: new tool, returns all local text styles with IDs and font info - 14 new tests (49 total slides tests, 713 total)
…dit export Reduce plugin overlay size by ~75% padding/font reduction so it sits unobtrusively on the canvas. Log now shows human-readable command descriptions instead of raw type names, with full session export via clipboard for audit purposes. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Use execCommand('copy') instead of navigator.clipboard.writeText which
is blocked in Figma's sandboxed iframe. Success message now reads
"Copied to pasteboard". Added v0.2.0 screenshots for PR review.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Context
The existing Desktop Bridge UI is solid and works well. These changes aren't a criticism of it - they came about from screen-sharing sessions where people kept asking "but what is it doing?" and "is it connected?". The current UI answers those questions if you know where to look, but for people seeing it for the first time during a demo, the status wasn't immediately obvious.
This update goes further: the plugin sits on top of the user's canvas, so every pixel matters. We've reduced the footprint to a single compact row by default and made the log actually useful for understanding what the AI agent is doing.
What changed
v0.2.0 (latest)
--text-dimand--log-errortokens updated for both dark and light themes to pass 4.5:1 at the smaller font sizesv0.1.0 (previous)
Screenshots
Default collapsed state
Toolbar expanded
Info panel (filename hidden)
Info panel (filename visible)
Log panel
Log features
Audit export
Test plan