Skip to main content
Glama

debug_window_detection

Diagnose window detection issues by providing detailed PowerShell environment diagnostics, process enumeration, and detection capability analysis.

Instructions

Comprehensive debugging information for window detection issues.

Returns:
    JSON string with detailed diagnostics about PowerShell environment,
    process enumeration, and window detection capabilities.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Implementation Reference

  • MCP tool handler for debug_window_detection. Collects environment info, delegates to WindowsWindowManager for detailed diagnostics if available, lists current windows, and returns formatted JSON.
    @mcp.tool()
    async def debug_window_detection() -> str:
        """
        Comprehensive debugging information for window detection issues.
        
        Returns:
            JSON string with detailed diagnostics about PowerShell environment,
            process enumeration, and window detection capabilities.
        """
        try:
            wm = get_window_manager()
            
            # Get basic environment info
            env_info = wm.get_environment_info()
            
            debug_result = {
                "status": "success",
                "environment": env_info,
                "window_detection_debug": {}
            }
            
            # If using Windows manager, get detailed debug info
            if hasattr(wm.manager, 'debug_window_detection'):
                logger.info("Running comprehensive window detection debug...")
                debug_info = wm.manager.debug_window_detection()
                debug_result["window_detection_debug"] = debug_info
            else:
                debug_result["window_detection_debug"] = {
                    "message": "Debug functionality only available for Windows Window Manager"
                }
            
            # Also include current window list for comparison
            current_windows = wm.list_windows()
            debug_result["current_window_list"] = current_windows
            debug_result["current_window_count"] = len(current_windows)
            
            logger.info(f"Debug complete: found {len(current_windows)} windows")
            
            return json.dumps(debug_result, indent=2)
            
        except Exception as e:
            logger.error(f"Failed to run debug window detection: {e}")
            return json.dumps({
                "status": "error", 
                "error": str(e),
                "environment": {"error": "Could not determine environment"}
            })
  • Core helper method in WindowsWindowManager class that provides comprehensive PowerShell-based diagnostics for Windows window detection, including process counts, window filtering logic, and raw outputs for troubleshooting.
        def debug_window_detection(self) -> Dict[str, any]:
            """
            Comprehensive debugging information for window detection.
            Returns detailed diagnostics about the PowerShell environment and window detection.
            """
            debug_info = {
                'powershell_available': self.powershell_available,
                'detection_methods': [],
                'raw_powershell_output': '',
                'parsing_errors': [],
                'process_info': {}
            }
            
            if not self.powershell_available:
                debug_info['error'] = 'PowerShell not available'
                return debug_info
            
            try:
                # Test basic PowerShell functionality
                basic_test = subprocess.run(
                    ['powershell.exe', '-Command', 'Get-Process | Select-Object -First 5 Name, Id | ConvertTo-Json'],
                    capture_output=True,
                    text=True,
                    check=True,
                    timeout=10
                )
                debug_info['basic_powershell_test'] = 'SUCCESS'
                debug_info['sample_processes'] = basic_test.stdout.strip()[:200] + '...'
                
            except Exception as e:
                debug_info['basic_powershell_test'] = f'FAILED: {str(e)}'
                return debug_info
            
            # Test our enhanced window detection script with verbose output
            try:
                debug_script = '''
                $VerbosePreference = "Continue"
                Write-Verbose "Starting window detection debug..."
                
                Add-Type -TypeDefinition @"
                    using System;
                    using System.Runtime.InteropServices;
                    using System.Text;
                    
                    public class Win32 {
                        [DllImport("user32.dll")]
                        public static extern bool IsWindowVisible(IntPtr hWnd);
                        
                        [DllImport("user32.dll")]
                        public static extern bool IsIconic(IntPtr hWnd);
                        
                        [DllImport("user32.dll")]
                        public static extern bool IsZoomed(IntPtr hWnd);
                        
                        [DllImport("user32.dll")]
                        public static extern int GetWindowText(IntPtr hWnd, StringBuilder lpString, int nMaxCount);
                        
                        [DllImport("user32.dll")]
                        public static extern int GetWindowTextLength(IntPtr hWnd);
                    }
    "@
                
                $allProcesses = Get-Process | Measure-Object | Select-Object -ExpandProperty Count
                Write-Verbose "Total processes found: $allProcesses"
                
                $processesWithWindows = Get-Process | Where-Object { $_.MainWindowHandle -ne 0 } | Measure-Object | Select-Object -ExpandProperty Count
                Write-Verbose "Processes with windows: $processesWithWindows"
                
                $windows = @()
                Get-Process | Where-Object { 
                    $_.MainWindowHandle -ne 0 -and $_.ProcessName -notmatch "^(dwm|csrss|winlogon|wininit)$"
                } | ForEach-Object {
                    Write-Verbose "Processing: $($_.ProcessName) (ID: $($_.Id))"
                    
                    $handle = [IntPtr]$_.MainWindowHandle
                    $isVisible = [Win32]::IsWindowVisible($handle)
                    $isMinimized = [Win32]::IsIconic($handle)
                    $isMaximized = [Win32]::IsZoomed($handle)
                    
                    # Only include capturable windows (same logic as main script)
                    if (-not ($isVisible -or $isMinimized)) {
                        Write-Verbose "Skipping hidden window: $($_.ProcessName)"
                        return
                    }
                    
                    $windows += @{
                        process_name = $_.ProcessName
                        process_id = $_.Id
                        window_handle = $_.MainWindowHandle.ToString()
                        main_window_title = $_.MainWindowTitle
                        is_visible = $isVisible
                        is_minimized = $isMinimized
                        is_maximized = $isMaximized
                        window_state = if ($isMinimized) { "minimized" } elseif ($isMaximized) { "maximized" } else { "normal" }
                    }
                }
                
                Write-Host "PROCESS_COUNT:$allProcesses"
                Write-Host "WINDOWS_COUNT:$processesWithWindows"
                Write-Host "FILTERED_COUNT:$($windows.Count)"
                $windows | ConvertTo-Json -Depth 2
                '''
                
                result = subprocess.run(
                    ['powershell.exe', '-Command', debug_script],
                    capture_output=True,
                    text=True,
                    timeout=30
                )
                
                debug_info['enhanced_script_exit_code'] = result.returncode
                debug_info['raw_powershell_output'] = result.stdout
                debug_info['powershell_stderr'] = result.stderr
                
                # Parse the debug output
                lines = result.stdout.split('\n')
                for line in lines:
                    if line.startswith('PROCESS_COUNT:'):
                        debug_info['total_processes'] = int(line.split(':')[1])
                    elif line.startswith('WINDOWS_COUNT:'):
                        debug_info['processes_with_windows'] = int(line.split(':')[1])
                    elif line.startswith('FILTERED_COUNT:'):
                        debug_info['filtered_windows'] = int(line.split(':')[1])
                
            except Exception as e:
                debug_info['enhanced_script_error'] = str(e)
            
            return debug_info
  • server.py:608-608 (registration)
    FastMCP tool registration decorator for the debug_window_detection tool.
    @mcp.tool()

Latest Blog Posts

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/PovedaAqui/auto-snap-mcp'

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