From fddc22e55e398f15125e37c1d94e03e4534be5b9 Mon Sep 17 00:00:00 2001 From: m3tm3re Date: Tue, 3 Feb 2026 18:55:15 +0100 Subject: [PATCH] Add outlook skill with Graph API documentation - Create skills/outlook/SKILL.md with comprehensive Outlook Graph API documentation - Document mail CRUD operations: list, get, create, send, reply, forward, update, delete - Document folder management: list, create, update, delete, move, copy - Document calendar events: list, get, create, update, delete, accept/decline - Document contacts: list, get, create, update, delete, folder management - Include search operations for mail, contacts, and events - Provide common workflows for email, inbox organization, meeting invitations - Include IDs and discovery guidance - Set compatibility to opencode - Close issue AGENTS-ch2 --- .beads/issues.jsonl | 3 + skills/outlook/SKILL.md | 172 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 175 insertions(+) create mode 100644 skills/outlook/SKILL.md diff --git a/.beads/issues.jsonl b/.beads/issues.jsonl index 0e21a55..8ed4c89 100644 --- a/.beads/issues.jsonl +++ b/.beads/issues.jsonl @@ -1,7 +1,10 @@ {"id":"AGENTS-1jw","title":"Athena prompt: Convert to numbered responsibility format","description":"Athena prompt uses bullet points under 'Core Capabilities' section instead of numbered lists. Per agent-development skill best practices, responsibilities should be numbered (1, 2, 3) for clarity. Update prompts/athena.txt to use numbered format.","status":"closed","priority":2,"issue_type":"task","owner":"p@m3ta.dev","created_at":"2026-01-24T19:32:16.133701271+01:00","created_by":"m3tm3re","updated_at":"2026-01-26T19:32:26.165270695+01:00","closed_at":"2026-01-26T19:32:26.165270695+01:00","close_reason":"Converted responsibility subsections from ### numbered headers to numbered list format (1., 2., 3., 4.) with bold titles"} +{"id":"AGENTS-27m","title":"Create prompts/chiron-forge.txt with Chiron-Forge's build/execution mode system prompt","status":"closed","priority":2,"issue_type":"task","owner":"p@m3ta.dev","created_at":"2026-02-03T18:47:31.083994237+01:00","created_by":"m3tm3re","updated_at":"2026-02-03T18:48:45.012894731+01:00","closed_at":"2026-02-03T18:48:45.012894731+01:00","close_reason":"Created prompts/chiron-forge.txt with Chiron-Forge's build/execution mode system prompt (3185 chars, 67 lines)"} {"id":"AGENTS-7gt","title":"Athena prompt: Rename Core Capabilities to exact header","description":"Athena prompt uses 'Core Capabilities' section header instead of 'Your Core Responsibilities:'. Per agent-development skill guidelines, the exact header 'Your Core Responsibilities:' should be used for consistency. Update prompts/athena.txt to use the exact recommended header.","status":"closed","priority":1,"issue_type":"task","owner":"p@m3ta.dev","created_at":"2026-01-24T19:32:07.223102836+01:00","created_by":"m3tm3re","updated_at":"2026-01-26T19:31:19.080626796+01:00","closed_at":"2026-01-26T19:31:19.080626796+01:00","close_reason":"Renamed 'Core Capabilities' section header to exact 'Your Core Responsibilities:' in prompts/athena.txt"} {"id":"AGENTS-8ie","title":"Set up PARA work structure with 10 Basecamp projects","description":"Create 01-projects/work/ structure with project folders for all Basecamp projects. Each project needs: _index.md (MOC with Basecamp link), meetings/, decisions/, notes/. Also set up 02-areas/work/ for ongoing responsibilities.","status":"closed","priority":0,"issue_type":"task","owner":"p@m3ta.dev","created_at":"2026-01-28T18:47:56.048622809+01:00","created_by":"m3tm3re","updated_at":"2026-01-28T18:57:09.033627658+01:00","closed_at":"2026-01-28T18:57:09.033627658+01:00","close_reason":"Created complete PARA work structure: 01-projects/work/ with 10 project folders (each with _index.md, meetings/, decisions/, notes/), 02-areas/work/ with 5 area files. Projects use placeholder names - user can customize with actual Basecamp data."} {"id":"AGENTS-9cs","title":"Configure basecamp skill with real projects","description":"Configure basecamp skill to work with real projects. Need to: get user's Basecamp projects, map them to PARA structure, test morning planning workflow with Basecamp todos.","status":"closed","priority":0,"issue_type":"task","owner":"p@m3ta.dev","created_at":"2026-01-28T18:47:56.04844425+01:00","created_by":"m3tm3re","updated_at":"2026-01-28T18:57:14.097333313+01:00","closed_at":"2026-01-28T18:57:14.097333313+01:00","close_reason":"Enhanced basecamp skill with project mapping configuration. Added section on mapping Basecamp projects to PARA structure, with configuration examples and usage patterns. Ready for user to fetch actual projects and set up mappings."} +{"id":"AGENTS-b74","title":"Create skills/msteams/SKILL.md with MS Teams Graph API integration documentation","status":"closed","priority":2,"issue_type":"task","owner":"p@m3ta.dev","created_at":"2026-02-03T18:50:21.728376088+01:00","created_by":"m3tm3re","updated_at":"2026-02-03T18:52:08.609302234+01:00","closed_at":"2026-02-03T18:52:08.609302234+01:00","close_reason":"Created skills/msteams/SKILL.md with complete MS Teams Graph API integration documentation covering channels, messages, meetings, and chat operations"} +{"id":"AGENTS-ch2","title":"Create skills/outlook/SKILL.md with Outlook Graph API documentation","status":"closed","priority":2,"issue_type":"task","owner":"p@m3ta.dev","created_at":"2026-02-03T18:49:24.814232462+01:00","created_by":"m3tm3re","updated_at":"2026-02-03T18:54:30.910986438+01:00","closed_at":"2026-02-03T18:54:30.910986438+01:00","close_reason":"Completed: Created skills/outlook/SKILL.md with Outlook Graph API documentation including mail CRUD, calendar, contacts, folders, and workflow examples. Validation passed."} {"id":"AGENTS-der","title":"Create Outline skill for MCP integration","status":"closed","priority":2,"issue_type":"feature","owner":"p@m3ta.dev","created_at":"2026-01-28T18:47:56.042886345+01:00","created_by":"m3tm3re","updated_at":"2026-01-28T18:51:21.662507568+01:00","closed_at":"2026-01-28T18:51:21.662507568+01:00","close_reason":"Created outline/SKILL.md with comprehensive workflows, tool references, and integration patterns. Added references/outline-workflows.md and references/export-patterns.md for detailed examples."} {"id":"AGENTS-fac","title":"Design Teams transcript processing workflow (manual)","description":"Design manual workflow for Teams transcript processing: DOCX upload → extract text → AI analysis → meeting note + action items → optional Basecamp sync. Create templates and integration points.","status":"closed","priority":2,"issue_type":"task","owner":"p@m3ta.dev","created_at":"2026-01-28T18:47:56.052076817+01:00","created_by":"m3tm3re","updated_at":"2026-01-28T18:56:34.567325504+01:00","closed_at":"2026-01-28T18:56:34.567325504+01:00","close_reason":"Created comprehensive Teams transcript workflow guide in skills/meeting-notes/references/teams-transcript-workflow.md. Includes: manual step-by-step process, Python script for DOCX extraction, AI analysis prompts, Obsidian templates, Basecamp sync integration, troubleshooting guide."} {"id":"AGENTS-in5","title":"Athena prompt: Standardize section headers","description":"Athena prompt uses 'Ethical Guidelines' and 'Methodological Rigor' headers instead of standard 'Quality Standards' and 'Edge Cases' headers. While semantically equivalent, skill recommends exact headers for consistency. Consider renaming in prompts/athena.txt.","status":"closed","priority":2,"issue_type":"task","owner":"p@m3ta.dev","created_at":"2026-01-24T19:32:21.720932741+01:00","created_by":"m3tm3re","updated_at":"2026-01-26T19:33:15.959382333+01:00","closed_at":"2026-01-26T19:33:15.959382333+01:00","close_reason":"Renamed '## Ethical Guidelines' to '## Quality Standards' for consistency with agent-development skill guidelines"} diff --git a/skills/outlook/SKILL.md b/skills/outlook/SKILL.md new file mode 100644 index 0000000..9690e97 --- /dev/null +++ b/skills/outlook/SKILL.md @@ -0,0 +1,172 @@ +--- +name: outlook +description: "Outlook Graph API email integration via MCP. Use when: (1) Reading or sending emails, (2) Managing inbox folders and organization, (3) Working with calendar events, (4) Managing contacts, (5) Searching mail content, (6) Managing email rules and filters. Triggers: 'email', 'Outlook', 'inbox', 'calendar', 'contacts', 'folder', 'mail', 'message'." +compatibility: opencode +--- + +# Outlook Graph API Integration + +Integration with Microsoft Outlook via Graph API through MCP. Provides comprehensive access to email, calendar, contacts, and folder management. + +## Core Operations + +### Mail Access + +**List messages**: `list_messages(folder_id=None, top=25, skip=0)` - Returns messages from a folder. Use `folder_id` to target specific folders (defaults to Inbox). + +**Get message**: `get_message(message_id)` - Full message details including body, headers, and attachments. + +**Get message content**: `get_message_content(message_id)` - Retrieve message body (HTML/Text). + +**List attachments**: `list_attachments(message_id)` - All attachments for a message. + +**Get attachment**: `get_attachment(message_id, attachment_id)` - Download attachment content. + +### Mail CRUD + +**Create draft**: `create_draft(subject, body, to_recipients, cc_recipients=None, bcc_recipients=None, importance=None, is_html=True)` - Create email draft. + +**Send email**: `send_email(subject, body, to_recipients, cc_recipients=None, bcc_recipients=None, importance=None, is_html=True)` - Send email directly. + +**Send draft**: `send_draft(message_id)` - Send an existing draft. + +**Reply to email**: `reply_to_message(message_id, body, is_html=True)` - Reply to sender. + +**Reply all**: `reply_all_message(message_id, body, is_html=True)` - Reply to sender and all recipients. + +**Forward email**: `forward_message(message_id, to_recipients, body=None, is_html=True)` - Forward message to new recipients. + +**Update message**: `update_message(message_id, subject=None, body=None, importance=None, is_read=None)` - Update message properties. + +**Delete message**: `delete_message(message_id)` - Move to deleted items. + +**Delete permanently**: `delete_message_permanently(message_id)` - Permanently remove message. + +### Folder Management + +**List folders**: `list_folders()` - All accessible folders including custom ones. + +**Get folder**: `get_folder(folder_id)` - Folder details and metadata. + +**Create folder**: `create_folder(name, parent_folder_id=None)` - Create new folder. + +**Update folder**: `update_folder(folder_id, name=None)` - Rename folder. + +**Delete folder**: `delete_folder(folder_id)` - Remove folder and all contents. + +**Move messages**: `move_messages(message_ids, destination_folder_id)` - Move messages between folders. + +**Copy messages**: `copy_messages(message_ids, destination_folder_id)` - Copy messages to another folder. + +### Calendar Events + +**List events**: `list_events(calendar_id=None, top=25, skip=0)` - Events from calendar (defaults to primary calendar). + +**Get event**: `get_event(event_id)` - Full event details including attendees and location. + +**Create event**: `create_event(subject, start_time, end_time, body=None, location=None, attendees=None, is_all_day=False)` - Create calendar event. + +**Update event**: `update_event(event_id, subject=None, start_time=None, end_time=None, body=None, location=None, attendees=None)` - Modify event. + +**Delete event**: `delete_event(event_id)` - Remove event. + +**Accept event**: `accept_event(event_id, response_comment=None, send_response=True)` - Accept meeting invitation. + +**Decline event**: `decline_event(event_id, response_comment=None, send_response=True)` - Decline meeting invitation. + +**Tentatively accept**: `tentatively_accept_event(event_id, response_comment=None, send_response=True)` - Tentatively accept invitation. + +**List calendars**: `list_calendars()` - All user calendars. + +### Contacts + +**List contacts**: `list_contacts(folder_id=None, top=25, skip=0)` - Contacts from folder (defaults to default contacts folder). + +**Get contact**: `get_contact(contact_id)` - Full contact details. + +**Create contact**: `create_contact(given_name, surname, email_addresses, phone_numbers=None, business_address=None)` - Create new contact. + +**Update contact**: `update_contact(contact_id, given_name=None, surname=None, email_addresses=None, phone_numbers=None, business_address=None)` - Modify contact. + +**Delete contact**: `delete_contact(contact_id)` - Remove contact. + +**List contact folders**: `list_contact_folders()` - All contact folders. + +**Create contact folder**: `create_contact_folder(name)` - Create new contact folder. + +### Search + +**Search mail**: `search_mail(query, folder_id=None, top=25)` - Search emails by content across folders. + +**Search contacts**: `search_contacts(query)` - Search contacts by name, email, or other properties. + +**Search events**: `search_events(query)` - Search calendar events by subject or location. + +## Common Workflows + +### Send an email + +1. Compose email: `send_email("Subject", "Body content", ["recipient@example.com"])` +2. For complex emails with attachments, use `create_draft()` first, then `send_draft()` + +### Organize inbox + +1. List folders: `list_folders()` to see available folders +2. Create new folder: `create_folder("Project Alpha")` +3. Move messages: `move_messages(["msg-id-1", "msg-id-2"], "new-folder-id")` + +### Process meeting invitation + +1. Check invitation: `get_message(message_id)` to view details +2. Accept: `accept_event(event_id, response_comment="I'll attend")` +3. Or decline: `decline_event(event_id, response_comment="Cannot make it")` + +### Search for old emails + +1. Use `search_mail("project deadline", top=50)` for broad search +2. Use `list_messages(folder_id="sent-items")` to check sent folder +3. Combine with filters: `search_mail("report", folder_id="archive")` + +### Create recurring meeting + +1. Use `create_event()` with appropriate `start_time` and `end_time` +2. Set up multiple events or use calendar-specific recurrence features + +### Manage project correspondence + +1. Create project folder: `create_folder("Q4 Project")` +2. Search for related emails: `search_mail("Q4 Project")` +3. Move relevant emails: `move_messages(message_ids, "project-folder-id")` +4. Track contacts: `create_contact("John", "Doe", ["john@partner.com"])` + +## IDs and Discovery + +Outlook Graph API uses resource IDs. When operations require IDs: + +1. **Messages**: Start with `list_messages()` to get message IDs +2. **Folders**: Use `list_folders()` to discover folder IDs +3. **Events**: Use `list_events()` to get event IDs +4. **Contacts**: Use `list_contacts()` to get contact IDs + +Most IDs are returned in list operations and can be used directly in CRUD operations. + +## Important Notes + +**Email body format**: The `is_html` parameter controls whether email body is HTML (default) or plain text. HTML provides rich formatting but plain text is more universal. + +**Recipients format**: Email addresses should be provided as arrays of strings: `["user1@example.com", "user2@example.com"]`. + +**Date/time format**: All datetime values should be in ISO 8601 format (e.g., `2024-12-25T14:30:00`). + +**Batch operations**: Some operations like `move_messages()` and `copy_messages()` accept arrays of IDs for batch processing. + +**Pagination**: List operations support `top` (max results) and `skip` (offset) parameters for handling large datasets. + +**Folder IDs**: Common folder IDs include: +- Inbox (default for most operations) +- Sent Items +- Drafts +- Deleted Items +- Archive + +Use `list_folders()` to get exact IDs and discover custom folders.