69 lines
2.9 KiB
Markdown
69 lines
2.9 KiB
Markdown
# 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("<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)
|