Q4: confirm personal-scope discriminators (chat_facing, delegates_to=[ceo-planb], sovereign_only=false) Q5: drop google-workspace cred — builtin manages own OAuth via Hermes hub (not credctl vault) Q6: split proton-bridge-imap → proton-bridge-imap-user + proton-bridge-imap-pass (vault exact-match) Q7: rename perplexity-api → perplexity (vault exact-match) Q8: add 3 proton vault entries (account-email, account-password, mailbox-password) Q9: install.sh F6 — MCP allowlist materialization; wires 3 proton MCPs, removes bte (hard-rule leak) Q10: macOS-only externals annotated os_constraint:darwin; install.sh F7 emits INFO on non-Darwin credbridge.sh: drop google-workspace case, rewrite proton-bridge to use 2 vault entries, rename perplexity case Disclosure §7 rewritten with 6 credentials matching vault exact-name policy (DISCLOSURE-SCHEMA §4.5) Disclosure §12 PAUSE table marked all 8 rows RESOLVED (rows 1-7 Wave 8, row 8 Wave 7) Untracked skills/proton-tools/SKILL.md (90 lines, declared in manifest since Wave 4) — committed for clone-ability Verified: hermes -p steev skills list → 6 enabled (matches disclosure.skills declaration) hermes -p steev mcp list → 3 entries (proton-calendar, proton-email, proton-contacts); bte removed F7 on Linux host correctly suppresses macOS-only externals Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
4.5 KiB
4.5 KiB
| name | description | metadata | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| proton-tools | When Steev needs to access JP's Proton account — Calendar, Mail, or Contacts. Use this skill to discover which tool answers the user's question, and how to call it. Covers all 24 Proton MCP tools across the three cortex MCP servers (proton-calendar, proton-email, proton-contacts). Triggers: any request involving JP's calendar (events, meetings, availability), mail (inbox, send, reply, search, folders), or contacts (lookup, add, search). Drive is NOT in scope — defer Drive requests. |
|
Proton Tools — Calendar + Mail + Contacts
Authoritative reference for the 24 tools exposed by three cortex MCP servers — proton-calendar (8 tools), proton-email (10 tools), proton-contacts (6 tools). Each MCP facade dials a long-running gRPC gate that holds the Proton session.
Hard rules
- Drive is out of scope. If the user asks about Proton Drive files/folders, say so and defer — there is no
drive_*tool. Roadmap:rclone-moduleMCP wrap. - Destructive tools require explicit confirmation.
email_send,email_reply,email_forward,calendar_delete,contacts_delete. Never call these without quoting back the action + target + asking JP to confirm. - Date inputs are ISO 8601 (
2026-05-23T14:00:00-04:00). Convert relative dates ("tomorrow", "next Tuesday") into ISO before tool call. - Pagination:
email_list,calendar_events,contacts_listare paginated. Default page size is small (~20). Fetch additional pages only when the user asks for more.
When to use which tool
Calendar (8 tools)
| User intent | Tool |
|---|---|
| "What calendars do I have?" | calendar_list |
| "What's on my calendar today/this week?" | calendar_events with date range |
| "What's coming up?" "Next few meetings?" | calendar_upcoming |
| "Find meetings about X" | calendar_search |
| "Show me details of [event]" | calendar_event_get |
| "Schedule a meeting with…" | calendar_create (confirm first) |
| "Move my 3pm to 4pm" | calendar_update |
| "Cancel my 3pm" | calendar_delete (DESTRUCTIVE — confirm) |
Mail (10 tools)
| User intent | Tool |
|---|---|
| "How many unread?" "What folders?" | email_folders |
| "Show me my inbox" "Latest emails" | email_list (folder=INBOX) |
| "Open that email" | email_read by UID |
| "Search inbox for…" | email_search |
| "Send an email to…" | email_send (DESTRUCTIVE — draft + confirm) |
| "Reply to that" | email_reply (DESTRUCTIVE — draft + confirm) |
| "Forward this to…" | email_forward (DESTRUCTIVE — confirm) |
| "Archive that" | email_archive |
| "Mark as read/unread" | email_mark_read / email_mark_unread |
Contacts (6 tools)
| User intent | Tool |
|---|---|
| "Who do I have in contacts?" | contacts_list |
| "Look up [person]" | contacts_search |
| "Pull up [person]'s details" | contacts_get |
| "Add [person] to contacts" | contacts_create |
| "Update [person]'s email/phone" | contacts_update |
| "Remove [person]" | contacts_delete (DESTRUCTIVE — confirm) |
Daily briefing — tool order
When JP asks for the morning briefing, query in this order:
calendar_upcoming(hours=24) → events todayemail_folders→ unread countsemail_list(folder=INBOX, limit=10) → recent inboxemail_search(folder=INBOX, query="from:important-person OR is:flagged") → priorities
Don't dump raw output. Synthesize. Lead with what's actionable in JP's voice.
Search composition
For broad questions like "anything from [person] this week":
email_search(folder=INBOX, query="from:")calendar_search(query="")contacts_search(query="") Run in parallel. Merge results. Group by source.
Error handling
- "WaitReady timeout" → proton connector still booting. Retry once after 2-3s. If still failing, say so + suggest JP check
hermes mcp test proton. - 403 / scope error → proton session expired. Tool handler should re-auth automatically; if not, JP needs to re-run setup.
- Network / 5xx → transient. Retry once. If persistent, report and stop.
What NOT to do
- Don't paginate aggressively — fetch one page, summarize, ask if JP wants more.
- Don't auto-send drafts. Even after JP says "send" once, re-quote subject + recipient on the next compose.
- Don't synthesize calendar events from email content unless JP explicitly asks ("add this to my calendar").
- Don't enumerate every contact when JP asks "who's [person]" — use search, not list.