# mcp_owa_v1.2 MCP server pro OWA (outlook.cloud.microsoft) — drží persistentní Playwright session ve **vlastním profilu** `owa_mcp_profile/`. ## Změny v1.2 - **Vlastní profil** `owa_mcp_profile/` — nesdílí se s `import_emails_to_mongo_v1.0.py`. Lze tak používat oba současně bez konfliktu zámku Chrome. - **Nový tool `login()`** — pro první přihlášení / přepnutí účtu. Otevře okno, počká až 5 minut, než dokončíš login ručně. Profil se uloží automaticky. - `start_owa` vrátí `no_profile`, pokud `owa_mcp_profile/` neexistuje — pak zavolej `login`. - `status` vrací i `profile_exists` + `profile_dir`. ## Změny v1.1 - Sync Playwright v dedikovaném worker threadu místo `async_playwright` (na Windows + persistent context async API padá hned po startu Chrome). ## První použití 1. Zavolej `login` → otevře se Chrome s OWA. 2. Přihlas se ručně (Microsoft SSO atd.). 3. Po načtení inboxu se tool vrátí `logged_in` (nebo `window_open_login_pending` při timeoutu — to neva, profil se i tak ukládá průběžně). 4. Příště stačí `start_owa`. ## Spuštění Registrace v `.mcp.json`: ```json "owa": { "command": "python", "args": ["U:\\PythonProject\\Janssen\\Outlook\\mcp_owa_v1.2.py"], "cwd": "U:\\PythonProject\\Janssen\\Outlook" } ``` ## Tools | Tool | Účel | |------|------| | `login` | První přihlášení; otevře OWA na 5 min, profil se uloží | | `start_owa` | Spustí Playwright + otevře OWA (vyžaduje existující profil) | | `stop_owa` | Zavře okno (profil zůstává uložený) | | `status` | Stav session + existuje profil? | | `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 | | `screenshot(path)` | Diagnostický screenshot | ## Typický flow (po prvním loginu) ``` start_owa find_last_email(from_email="...") open_email_by_subject("") forward_current(body_prefix="Posílám dále, prosím o vyjádření.\n") set_recipients(to=["adresat@..."]) # uživatel zkontroluje a odešle ručně ``` ## Známá omezení - Forward draft je inline composer ve stejném tabu. - Podpis vkládá OWA automaticky podle nastavení účtu. - OWA si sám předřadí `FW:` k předmětu; `subject_prefix` se přidá před to. - Pokud OWA změní lokalizaci aria-labelů, uprav selektory v `_forward`, `_write_at_top`, `_set_recipients`. ## TODO - Otevření přímo z `message_id` - Detekce popup composer vs. inline - `send_forward()` s explicitním potvrzením - Volba složky před `open_email_by_subject` - `logout()` (smaže profil)