Skip to main content
Glama

Playwright MCP

by lewisvoncken
Apache 2.0
547,979
  • Linux
  • Apple
BASE64_VIDEO_FIX_COMPLETE.md6.76 kB
# ✅ FINAL SOLUTION: Video URL Return Instead of Base64 ## 🎯 **Problem & Elegant Solution** **Issue**: Base64 video data was incomplete, truncated, and caused large response payloads that could overwhelm MCP clients. **Solution**: **Return video file URLs by default** instead of base64 data, with base64 as an opt-in feature. ## 🚀 **New Efficient Approach** ### **Default Behavior: Return File URLs** Instead of automatically encoding videos to base64, the tools now return efficient file URLs: ```json { "content": [ { "type": "text", "text": "Video recording stopped. Duration: 15s. Saved to /workspace/test-results/videos-1703123456789/my-video.webm" }, { "type": "text", "text": "Video available at: /workspace/.../my-video.webm (2,347 KB)" }, { "type": "resource", "uri": "file:///workspace/test-results/videos-1703123456789/my-video.webm", "mimeType": "video/webm", "text": "Video file: my-video.webm" } ] } ``` ### **Base64 as Opt-In Feature** Base64 encoding is now only done when explicitly requested: ```json { "name": "browser_video_stop", "arguments": { "returnVideo": true, "returnBase64": true, // Explicitly request base64 "forceBase64": true, // Force encoding even for large files "maxWaitSeconds": 45 } } ``` ## 🔧 **Enhanced API Parameters** ### **`browser_video_stop` Parameters**: - **`returnVideo`** (default: `true`) - Whether to return video URL/path information - **`returnBase64`** (default: `false`) - Whether to return base64 content directly - **`forceBase64`** (default: `false`) - Force base64 encoding with extended validation bypassing - **`maxWaitSeconds`** (default: `30`) - Maximum wait time for video finalization ### **`browser_video_get` Parameters**: - **`filename`** (required) - Name of the video file to retrieve - **`returnContent`** (default: `true`) - Whether to return video URL/path information - **`returnBase64`** (default: `false`) - Whether to return base64 content directly - **`forceBase64`** (default: `false`) - Force base64 encoding - **`maxWaitSeconds`** (default: `10`) - Maximum wait time for file readiness ## 🎉 **Benefits of URL-Based Approach** ### **✅ Performance Benefits**: - **Instant responses**: No time spent encoding large video files - **Smaller payloads**: URLs are tiny compared to base64 data - **Memory efficient**: No large base64 strings in memory - **Network efficient**: Reduced bandwidth usage ### **✅ Flexibility Benefits**: - **Client choice**: Clients can decide when/if to load video content - **Streaming capable**: URLs can be used for video streaming - **Universal compatibility**: File URLs work with all video players - **Easy debugging**: Direct file access for troubleshooting ### **✅ Reliability Benefits**: - **No truncation**: URLs always complete successfully - **No encoding errors**: File system handles video integrity - **Better error handling**: Clear file availability status - **Consistent behavior**: Works regardless of video size ## 🚀 **Usage Examples** ### **Default Usage (Recommended)**: ```json // Stop recording and get video URL { "name": "browser_video_stop", "arguments": { "returnVideo": true } } // Response: Fast, lightweight URL { "content": [ { "type": "text", "text": "Video recording stopped..." }, { "type": "resource", "uri": "file:///path/to/video.webm", "mimeType": "video/webm", "text": "Video file: my-video.webm" } ] } ``` ### **Base64 When Needed**: ```json // For clients that need base64 data { "name": "browser_video_stop", "arguments": { "returnVideo": true, "returnBase64": true } } // Response: Includes base64 data (larger payload) { "content": [ { "type": "text", "text": "Video recording stopped..." }, { "type": "resource", "data": "GkXfo59ChoEBQveBAULTgBQEGBAL...", "mimeType": "video/webm", "uri": "file:///path/to/video.webm" } ] } ``` ### **For Video Retrieval**: ```json // Get video URL for later use { "name": "browser_video_get", "arguments": { "filename": "my-recording.webm", "returnContent": true } } // Fast response with URL { "content": [ { "type": "text", "text": "Video file found: my-recording.webm (2,347 KB)" }, { "type": "resource", "uri": "file:///path/to/my-recording.webm", "mimeType": "video/webm", "text": "Video file: my-recording.webm" } ] } ``` ## 🔄 **Migration Guide** ### **For Existing Code**: **Before** (always returned base64): ```json { "name": "browser_video_stop", "arguments": { "returnVideo": true } } ``` **After** (returns URL by default): ```json // Same call, but now returns URL instead of base64 { "name": "browser_video_stop", "arguments": { "returnVideo": true } } // To get base64 (if really needed): { "name": "browser_video_stop", "arguments": { "returnVideo": true, "returnBase64": true } } ``` ### **Client Code Updates**: ```javascript // Before: Expected base64 data const result = await client.callTool({ name: 'browser_video_stop', arguments: { returnVideo: true } }); const base64Data = result.content[1].data; // This was base64 // After: Get file URL (much faster) const result = await client.callTool({ name: 'browser_video_stop', arguments: { returnVideo: true } }); const videoUrl = result.content[1].uri; // This is now a file:// URL // If you still need base64: const result = await client.callTool({ name: 'browser_video_stop', arguments: { returnVideo: true, returnBase64: true } }); const base64Data = result.content[1].data; // Base64 data when requested ``` ## 🎯 **Technical Summary** **Previous Approach**: - Always encoded videos to base64 - Large response payloads (33% bigger than file size) - Slow response times - Potential truncation issues - Memory intensive **New Approach**: - **Returns file URLs by default** (fast, lightweight) - **Base64 encoding only when requested** (opt-in) - **Enhanced file finalization** (reliable completion detection) - **Smart validation** (WebM format verification) - **Configurable timeouts** (adjustable based on video length) ## 🎉 **Result** **✅ Problem Solved**: No more incomplete base64 data issues **✅ Performance Improved**: Instant responses with URLs **✅ Flexibility Added**: Clients choose when to load video content **✅ Reliability Enhanced**: File URLs always work **✅ Backward Compatible**: Base64 still available when explicitly requested The video recording system now returns efficient file URLs by default, eliminating base64 truncation issues while providing much better performance and flexibility! 🎉

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/lewisvoncken/playwright-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server