docs: def stop(self):
          """Shutdown the MCP and child processes cleanly"""
          LOGGER.info('Shutting down controller')
          self.set_state(self.STATE_STOP_REQUESTED)
  
          # Clear out the timer
          signal.setitimer(signal.ITIMER_PROF, 0, 0)
  
          self._mcp.stop_processes()
  
          if self._mcp.is_running:
              LOGGER.info('Waiting up to 3 seconds for MCP to shut things down')
              signal.setitimer(signal.ITIMER_REAL, 3, 0)
              signal.pause()
              LOGGER.info('Post pause')
  
          # Force MCP to stop
          if self._mcp.is_running:
              LOGGER.warning('MCP is taking too long, requesting process kills')
              self._mcp.stop_processes()
              del self._mcp
          else:
              LOGGER.info('MCP exited cleanly')
  
          # Change our state
          self._stopped()
          LOGGER.info('Shutdown complete')