Orchestra MCP Panels — Electron BrowserWindow management with driver-based panel registry, open/close/focus/resize/move, position persistence, and MCP tools

Fund package maintenance!
fadymondy

Installs: 29

Dependents: 4

Suggesters: 0

Security: 0

Stars: 0

Watchers: 0

Forks: 0

Open Issues: 0

pkg:composer/orchestra-mcp/panels

v0.0.1 2026-02-11 13:17 UTC

This package is auto-updated.

Last update: 2026-02-11 13:18:51 UTC


README

Screenshot

Panels

Orchestra MCP Panels plugin — Electron BrowserWindow management with a driver-based architecture, panel registry, position/size persistence, and MCP tools.

Features

  • Driver Pattern — Swappable panel backends: NativePanelDriver (NativePHP Window), NullPanelDriver (no-op for testing), or auto-detection
  • Panel Registry — Register panel definitions with full BrowserWindow configuration (dimensions, position, behavior flags)
  • Base Panel Layout — Shared Blade layout (panels::layouts.panel) with automatic live theme injection for all windows
  • Window Management — Open, close, focus, minimize, maximize, restore, resize, and move panels programmatically
  • 5 EventsPanelOpened, PanelClosed, PanelFocused, PanelResized, PanelMoved
  • Plugin Integration — Plugins implement HasPanels to contribute panel definitions
  • Desktop Integration — Implements HasNativeBootCallbacks for automatic panel boot via the desktop package
  • 4 MCP Tools — List, info, open, and close panels

Installation

composer require orchestra-mcp/panels
php artisan orchestra:desktop-install

The service provider is auto-discovered. The install command (from the desktop package) publishes the config and creates the NativeAppServiceProvider. Then publish the panels config:

php artisan vendor:publish --tag=orchestra-panels-config

Quick Start

Register a Panel

use OrchestraMcp\Panels\Data\PanelDefinition;
use OrchestraMcp\Panels\Facades\Panels;

Panels::register(new PanelDefinition(
    id: 'settings',
    title: 'Settings',
    url: '/settings',
    width: 800,
    height: 600,
));

Open a Panel

Panels::open('settings');

Close a Panel

Panels::close('settings');
Panels::closeAll(); // close all open panels

Contribute Panels from a Plugin

use OrchestraMcp\Panels\Contracts\HasPanels;
use OrchestraMcp\Panels\Data\PanelDefinition;
use OrchestraMcp\Plugins\Plugin\Plugin;

class MyPlugin extends Plugin implements HasPanels
{
    public function panels(): array
    {
        return [
            new PanelDefinition(
                id: 'my-plugin-panel',
                title: 'My Plugin',
                url: '/my-plugin',
                width: 640,
                height: 480,
            ),
        ];
    }
}

MCP Tools

Tool Annotation Description
panel-list #[IsReadOnly] List registered panels with open/closed status
panel-info #[IsReadOnly] Get panel definition and runtime state
panel-open #[IsIdempotent] Open a registered panel
panel-close #[IsIdempotent] Close an open panel or all panels

Artisan Commands

Command Description
make:panel Generate a new panel definition class
orchestra:panels-status Show panel service status, driver, registered/open panels

Configuration

Publish the config:

php artisan vendor:publish --tag=orchestra-panels-config
Key Default Env Variable Description
enabled true ORCHESTRA_PANELS_ENABLED Enable/disable panels plugin
driver 'auto' ORCHESTRA_PANELS_DRIVER Driver: 'auto', 'native', 'null'
default_width 800 Default panel width
default_height 600 Default panel height
marketplace false Marketplace visibility

Documentation

Full documentation is available in the docs/ directory:

Development

# Install dependencies
composer install

# Run tests
composer test

# Format code
composer format

# Static analysis
composer check

# Lint
composer lint

License

MIT