社用ドキュメント印刷キュー管理アプリ — WinUI MCP サーバー連携
PrintQueueApp は、XLSX/XLS/PDF ファイルをドラッグ&ドロップでキューに追加し、WinUI 3 の GUI でステータスを管理しながら社内プリンターへ印刷するためのアプリケーションです。
- クロスプラットフォーム: Python 部分は Windows/Mac/Linux で動作
- WinUI 3 GUI: Windows ネイティブのモダンなインターフェース
- MCP プロトコル: Model Context Protocol による柔軟なサーバー/クライアント分離
- 多形式対応: Excel (XLSX/XLS) と PDF ファイルをサポート
┌─────────────────────────────────────────────────────────┐
│ Python PrintQueueApp (クロスプラットフォーム) │
│ ├── キュー管理 │
│ ├── ファイル処理 (openpyxl, xlrd, PyMuPDF) │
│ └── 印刷実行 (Windows API / lp) │
│ │ │
│ │ MCP (HTTP または stdio) │
│ ▼ │
│ WinUI MCP サーバー (C# / WinUI 3) │
│ ├── MCP ツール → WinUI ウィジェット実装 │
│ └── GUI ウィンドウホスティング │
└─────────────────────────────────────────────────────────┘
- ファイルのドラッグ&ドロップ追加
- キュー内のファイル一覧表示
- 個別/全体の印刷操作
- 印刷状況のリアルタイム表示
| 形式 | ライブラリ | 備考 |
|---|---|---|
| XLSX | openpyxl | Excel 2007+ |
| XLS | xlrd + xlwt | Excel 97-2003 (レガシー) |
| PyMuPDF | そのまま印刷または画像化 |
PENDING → PROCESSING → PRINTING → DONE / ERROR
- Python 3.11+
- .NET 8 SDK (WinUI GUI を使用する場合)
- Windows 10/11 (WinUI GUI の場合、または Windows 印刷 API の場合)
# リポジトリのクローン
git clone https://github.com/nsh1l/print-queue-app.git
cd print-queue-app
# 仮想環境の作成とアクティベート
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
# 依存関係のインストール
pip install -r requirements.txt# ランチャーを使用 (WinUI サーバー + Python クライアントを自動起動)
python run_app.py
# または直接
python -m src --gui# Windows 不要のモックサーバーを使用
python run_app.py --mock# コマンドラインからファイルを指定
python run_app.py --cli report.xlsx invoice.pdf| 変数 | 説明 | デフォルト |
|---|---|---|
PRINT_QUEUE_MCP_URL |
MCP サーバー URL | http://localhost:8765 |
DOTNET_PATH |
dotnet CLI のパス | dotnet |
WinUI サーバーは以下の MCP ツールを公開します:
| ツール | 説明 |
|---|---|
winui_create_window |
メインウィンドウ作成 |
winui_add_drop_zone |
ファイルドロップゾーン追加 |
winui_update_file_list |
キュー一覧更新 |
winui_add_button |
ツールバーボタン追加 |
winui_add_label |
テキストラベル追加 |
winui_set_status_text |
ステータスバー更新 |
winui_set_progress |
進捗バー更新 |
winui_poll_events |
UI イベントポーリング |
- 開発/テスト: stdio (JSON-RPC over stdin/stdout)
- 本番: HTTP POST
http://localhost:8765/mcp
print-queue-app/
├── run_app.py # アプリランチャー
├── winui_mcp_server.py # WinUI MCP サーバー (Python)
├── winui_bridge.py # WinUI ブリッジ (Windows ネイティブ)
├── requirements.txt # Python 依存関係
├── src/
│ ├── __main__.py # エントリーポイント
│ ├── main.py # メインアプリケーション
│ ├── queue_item.py # キューアイテム定義
│ ├── file_processor.py # ファイル処理
│ ├── print_engine.py # 印刷エンジン
│ ├── winui_client.py # WinUI クライアント
│ └── mock_mcp_server.py # モック MCP サーバー
└── WinUIMCPServer/
├── Program.cs # C# エントリーポイント
├── MCPServer.cs # MCP サーバー実装
├── MainWindow.xaml.cs # メインウィンドウ
└── PrintQueueApp.WinUI.csproj
# サーバー単体テスト
python test_server.pyリモートサーバーへの接続設定は CONNECTION.md を参照してください。
# リモートサーバーに接続
python -m src --mock --url http://print.soichi.ro/ --token <token>- WinUI GUI を使用する場合は Windows 環境が必要です
- Mac/Linux では
--mockまたは--cliモードを使用してください - 印刷機能は Windows プリンタードライバーに依存します
- Unix/Linux では
lpコマンドを使用した印刷が可能です
MIT License
Issue や Pull Request を歓迎します!
ご質問や問題がありましたら、GitHub Issues までお知らせください。