Files
janssen/Outlook/TRASH/mcp_owa_v1.1.md
T
2026-06-04 11:40:45 +02:00

69 lines
3.0 KiB
Markdown

# 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("<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`