Skip to content

Releases: itk-dev/mcp-claude-code-browser-feedback

v0.6.6

22 Apr 11:59
309d744

Choose a tag to compare

Fixed

  • Fix browser extension losing connection and feedback after MCP reconnect (/mcp) — session IDs are now derived deterministically from the project directory, so reconnecting preserves WebSocket connections and pending feedback (#43)
  • Add process ID guard on session unregistration to prevent race conditions when old and new MCP processes overlap
  • Add feedback migration when a new session registers with the same project directory as an existing session
  • Browser extension now validates cached session IDs on page navigation and auto-refreshes stale sessions

v0.6.5

21 Apr 18:18
c17b5e6

Choose a tag to compare

Fixed

  • Fix plugin dependency resolution for ES modules — NODE_PATH is ignored by Node.js ESM, so the SessionStart hook now symlinks node_modules into the plugin root instead

v0.6.4

21 Apr 17:56
13b7dfe

Choose a tag to compare

Fixed

  • Install plugin dependencies via SessionStart hook into the plugin data directory, and resolve html2canvas using createRequire so it works when node_modules lives outside the plugin root

v0.6.3

21 Apr 17:13
79fb95c

Choose a tag to compare

Fixed

  • Add mcpServers config to plugin.json so the plugin correctly registers as an MCP server — the .mcp.json removal in v0.6.2 accidentally broke MCP server discovery

v0.6.2

21 Apr 17:03
ec1c0bd

Choose a tag to compare

Removed

  • Remove .mcp.json dev override from the published package — the plugin now uses its default launch mechanism (npx) instead of a hardcoded node src/server.js

v0.6.1

21 Apr 16:34
850dcc5

Choose a tag to compare

Fixed

  • Handle EPERM error as port-in-use when binding HTTP server, allowing proxy mode to work on macOS

v0.6.0

20 Apr 13:10
ff42d60

Choose a tag to compare

Added

  • Session isolation for multi-project support — each Claude Code session gets a unique session ID, preventing feedback from one project appearing in another project's widget
  • New /sessions HTTP endpoint listing all active sessions with project metadata
  • Session registry with /register-session and /unregister-session endpoints for proxy instances
  • Browser extension auto-matches tabs to sessions based on detected project URL; shows a session picker when multiple sessions are ambiguous
  • Session ID included in widget URL, WebSocket connections, and all feedback messages for full isolation
  • Test infrastructure with Vitest — unit tests for utils and integration tests for HTTP endpoints
  • GitHub Actions CI workflow running tests on Node 22 LTS
  • WebSocket session routing tests verifying correct session bucket assignment and duplicate-tab warnings
  • Duplicate-tab warning — widget notifies when connecting to a session that already has clients
  • Extension popup shows active session name with a "Change" button to switch sessions
  • Extension popup only shows connection details when widget is enabled — clean two-state UX
  • Extension badge shows "OFF" in gray when widget is inactive

Changed

  • Removed unused sessionId fields from widget WebSocket messages (session is derived from the WebSocket connection URL)
  • Extracted parseJsonBody() helper to reduce code duplication in HTTP POST endpoints
  • Added UUID format validation on /register-session and /unregister-session endpoints
  • Extracted isValidSessionId, getPendingSummary, detectProjectUrl, and formatFeedbackAsContent into src/utils.js for testability

Fixed

  • WebSocket connections without a ?session= param no longer silently land in a 'default' bucket — they are placed in 'unmatched' with a warning, preventing phantom "no clients connected" errors
  • get_connection_status in proxy mode now returns session-scoped client count instead of misleading global total
  • Extension popup now shows session-scoped client count instead of global count across all sessions
  • Extension popup shows just "Connected" when no session is active (no misleading client counts)
  • Duplicate-tab warning moved from widget toast to inline text in extension popup
  • Demo page no longer embeds widget script — use the browser extension to inject the widget for testing
  • Stale MCP processes no longer block port binding — on EADDRINUSE, the server now health-checks the existing process and retries up to 3 times before falling back to proxy mode

v0.5.0

13 Apr 07:06
4b98c9d

Choose a tag to compare

Added

  • Blue highlight indicator on selected element while feedback panel is open, so users can see which element they picked

Fixed

  • Keyboard events (arrow keys, typing, etc.) no longer leak to the host page when the feedback panel, annotation mode, or queue panel is active
  • Shift+C keyboard shortcut no longer fires while typing in the feedback textarea (Shadow DOM focus detection)
  • html2canvas loading in browser extension context - uses fetch instead of script injection to avoid CSP restrictions
  • CSS isolation wrapper (.cf-root) inside Shadow DOM - uses all: initial to fully break CSS inheritance from host page, preventing dark-themed sites from affecting widget appearance
  • Shadow DOM isolation for widget - host page CSS no longer leaks into the widget UI
  • Tooltip selector truncation - long CSS selectors in hover tooltip are now truncated to 2 levels
  • Improved tooltip positioning - tooltip moves below element when it would go above the viewport
  • Full DOM path selector (fullSelector) included in feedback element metadata for AI agents
  • Offline annotation support - widget now works without a server connection, storing feedback locally
  • Export to Markdown and GitHub Issue from the queue panel
  • Claude Code plugin wrapper for direct installation via claude plugin add
  • Browser extension (Chrome MV3 + Firefox MV3) for widget injection without modifying project files
  • setup_extension MCP tool to help install the browser extension
  • destroy() method on widget for clean teardown

Full Changelog: v0.4.4...v0.5.0

v0.4.3

26 Jan 07:41

Choose a tag to compare

What's Changed

Improvements

  • Smarter widget visibility check: When installing the widget, now uses the detected project URL's hostname for an exact match check instead of always using regex-based pattern matching
    • If URL is detected (e.g., APP_URL from .env): uses simple exact match like h === 'app.local.itkdev.dk'
    • If no URL detected: falls back to regex pattern matching with allowed_hostnames
    • Provides simpler, more precise hostname checks with less overhead

Fixes

  • Updated button description in install messages from "🎯 Report Issue" to "Add annotation" to match the actual button text

Full Changelog: v0.4.2...v0.4.3

v0.4.2

26 Jan 07:21

Choose a tag to compare

Bug Fixes

  • Fixed wildcard pattern matching for multi-segment hostnames (#12)
    • The wildcard * in hostname patterns now correctly matches any characters including dots
    • Previously *.local.* wouldn't match hostnames like deltag.local.itkdev.dk
    • Patterns like *.local.* now properly match any domain with .local. in it