# mcp_owa_v1.1 MCP server pro OWA (outlook.cloud.microsoft) — drží persistentní Playwright session a umožňuje claude-cowork: - vyhledat email v MongoDB `OperativniEmailyJNJ.messages`, - otevřít ho v OWA UI, - udělat Forward, vepsat úvodní text na začátek těla, - zavřít původní čtecí panel. Odeslání forwardu **dělá uživatel ručně** v okně, které zůstává otevřené. ## Změny v1.1 - Sync Playwright v dedikovaném worker threadu místo `async_playwright`. Důvod: na Windows s persistent contextem `async_playwright` selhává — Chrome se zavře hned po startu (problém s asyncio ProactorEventLoop + `--remote-debugging-pipe`). Sync API funguje spolehlivě (potvrzeno v `import_emails_to_mongo_v1.0.py`). - FastMCP tooly jsou synchronní, dispatch na worker přes `queue.Queue` + `concurrent.futures.Future`. ## Spuštění Registrace v `.mcp.json`: ```json "owa": { "command": "python", "args": ["U:\\PythonProject\\Janssen\\Outlook\\mcp_owa_v1.1.py"], "cwd": "U:\\PythonProject\\Janssen\\Outlook" } ``` Profil sdílí s `import_emails_to_mongo_v1.0.py` (`outlook_profile/`). Pokud profil neexistuje, spusť nejdřív `outlook_login_v1.0.py`. ## Tools | Tool | Účel | |------|------| | `start_owa` | Spustí Playwright + otevře OWA | | `stop_owa` | Zavře okno | | `status` | Stav session | | `find_emails(query, from_email, folder, since_iso, limit)` | Hledání v MongoDB | | `find_last_email(from_email, folder)` | Nejnovější email | | `open_email_by_subject(subject)` | Otevře v OWA přes search | | `forward_current(body_prefix, subject_prefix)` | Ctrl+Shift+F, předvyplní | | `write_at_top(text)` | Vepíše text na začátek body draftu | | `set_recipients(to, cc)` | Doplní To/Cc | | `close_reading_pane` | Escape (zavře čtecí panel) | | `screenshot(path)` | Diagnostický screenshot | ## Typický flow ``` start_owa find_last_email(from_email="...") → vrátí subject + metadata open_email_by_subject("") → otevře v reading pane forward_current(body_prefix="Posílám dále, prosím o vyjádření.\n") → Ctrl+Shift+F, vepíše úvod set_recipients(to=["adresat@..."]) → vyplní příjemce → uživatel zkontroluje a odešle ručně close_reading_pane (až po odeslání) ``` ## Poznámky / známá omezení - Forward draft = stejný tab jako reading pane (inline composer). - Podpis se vkládá automaticky podle nastavení OWA. - OWA si sám předřadí `FW: ` k předmětu; `subject_prefix` se přidá před to. - Hledání emailu v UI přes search bar (subject substring). - Pokud OWA změní lokalizaci aria-labelů, uprav selektory v `_forward`, `_write_at_top`, `_set_recipients`. ## TODO pro další verzi - Otevření přímo z `message_id` - Detekce, zda forward composer otevřel popup tab místo inline - `send_forward()` tool s explicitním potvrzením - Volba složky před `open_email_by_subject`