# mcp_vbcz_email_v1.6.md **Verze:** 1.6 **Datum:** 2026-06-09 **Soubor:** `OutlookVBCZ/mcp_vbcz_email_v1.6.py` ## Popis MCP server pro schránku **vladimir.buzalka@buzalka.cz** přes Microsoft Graph API (application permissions, tenant TrialHelp s.r.o., app **PythonMailer** `4b222bfd-…`). Sdílí credentials s `Knihovny/EmailMessagingGraph.py`. ## Tooly | Tool | Popis | |------|-------| | `list_emails` | Seznam posledních emailů (folder, limit, search, from_email, unread_only) | | `get_email` | Plné tělo + metadata emailu podle `message_id` | | `list_attachments` | Seznam příloh emailu | | `get_attachment` | Stáhne přílohu do `downloads/`, vrátí cestu | | `create_draft_eml` | Vygeneruje `.eml` draft (X-Unsent) k ruční kontrole a odeslání (+ přílohy, + forward originálu, + odříznutí self-forward obalu) | | `create_event` | **(v1.6)** Vytvoří událost v kalendáři schránky (+ připomínka) | | `create_contact` | **(v1.6)** Založí kontakt ve schránce | ## Důležité — kam co jde - **E-maily lékařům / CTA** = i nadále **`.eml` drafty** (`create_draft_eml`), které se odesílají přes **JNJ server** (vbuzalka@its.jnj.com). NE přes tuto osobní schránku. - **Kalendář (připomínky) + kontakty** = `create_event` / `create_contact` píšou **přímo do osobní schránky** vladimir.buzalka@buzalka.cz (Graph POST). ## create_event ``` create_event( subject, # název události start, # ISO bez offsetu, lokální čas: "2026-06-11T09:00:00" end=None, # ISO; když None, dopočítá z duration_minutes duration_minutes=30, body=None, # poznámka (plain text nebo HTML) location=None, # místo, např. "tel. 0911 926 046" reminder_minutes_before=0, # připomínka N min předem (0 = v čase začátku) timezone="Central European Standard Time", is_all_day=False, body_is_html=False, ) -> {id, web_link, subject, start, end, reminder_minutes_before} ``` Vyžaduje **Calendars.ReadWrite** (application). Připomínka je vždy zapnutá. ## create_contact ``` create_contact( given_name, surname, # povinné display_name=None, # def " " email=None, mobile_phone=None, business_phone=None, company=None, # firma / pracoviště job_title=None, note=None, # personalNotes ) -> {id, display_name, email} ``` Vyžaduje **Contacts.ReadWrite** (application). ## Graph oprávnění (app PythonMailer) — Granted 2026-06-09 - Mail.ReadWrite (Application) - Mail.Send (Application) - Calendars.ReadWrite (Application) ← v1.6 - Contacts.ReadWrite (Application) ← v1.6 - User.Read (Delegated) ## Kódování draftů (od v1.3) - Tělo i plain fallback → **base64** (`cte="base64"`), zápis přes **`policy.SMTP`** (CRLF) → správná diakritika v Outlooku. ## Konfigurace `.mcp.json` ```json "vbcz-email": { "command": "python", "args": ["U:\\PythonProject\\Janssen\\OutlookVBCZ\\mcp_vbcz_email_v1.6.py"], "cwd": "U:\\PythonProject\\Janssen\\OutlookVBCZ" } ``` ## Historie verzí - **v1.0** — list_emails, get_email, list_attachments, get_attachment - **v1.1** — + create_draft_eml - **v1.2** — create_draft_eml: + `attachments` - **v1.3** — oprava kódování: base64 cte + CRLF (policy.SMTP) - **v1.4** — create_draft_eml: + `original_message_id` (forward styl) - **v1.5** — create_draft_eml: + `strip_self_forward` (default True) - **v1.6** — + `create_event` (kalendář + připomínka), + `create_contact`; helper `_graph_post`; přidána oprávnění Calendars.ReadWrite + Contacts.ReadWrite. E-maily lékařům zůstávají jako `.eml` drafty (JNJ server).