
Add Office365
Connect Office 365 Outlook to a Power Apps code app so the agent can read mail, calendars, and events.
Install
npx skills add https://github.com/microsoft/power-platform-skills --skill add-office365What is this skill?
- Six-step workflow: Memory Bank → add connector → review generated service → configure → build → update Memory Bank
- Uses `npx power-apps add-data-source -a office365 -c <connection-id>` after resolving a connection via `/list-connection
- Covers calendars, outbound email, inbox read, and Outlook event management in code apps
- Points users to environment-specific Connections URL when no Office 365 connection exists
- Tied to shared Microsoft Power Platform instructions and connector reference docs
Adoption & trust: 87 installs on skills.sh; 349 GitHub stars; 3/3 security scanners passed (skills.sh audits).
Recommended Skills
Agent Browservercel-labs/agent-browser
Lark Imlarksuite/cli
Lark Calendarlarksuite/cli
Lark Sheetslarksuite/cli
Lark Vclarksuite/cli
Lark Contactlarksuite/cli
Journey fit
Common Questions / FAQ
Is Add Office365 safe to install?
skills.sh reports 3 of 3 security scanners passed. Review the Security Audits panel on this page before installing in production.
SKILL.md
READMESKILL.md - Add Office365
**📋 Shared Instructions: [shared-instructions.md](${CLAUDE_PLUGIN_ROOT}/shared/shared-instructions.md)** - Cross-cutting concerns. # Add Office 365 Outlook ## Workflow 1. Check Memory Bank -> 2. Add Connector -> 3. Review Generated Service -> 4. Configure -> 5. Build -> 6. Update Memory Bank --- ### Step 1: Check Memory Bank Check for `memory-bank.md` per [shared-instructions.md](${CLAUDE_PLUGIN_ROOT}/shared/shared-instructions.md). ### Step 2: Add Connector **First, find the connection ID** (see [connector-reference.md](${CLAUDE_PLUGIN_ROOT}/shared/connector-reference.md)): Run the `/list-connections` skill. Find the Office 365 Outlook connection in the output (API name contains `office365`). If none exists, direct the user to create one using the environment-specific Connections URL — construct it from the active environment ID in context (from `power.config.json` or a prior step): `https://make.powerapps.com/environments/<environment-id>/connections` → **+ New connection** → search for the connector → Create. ```bash npx power-apps add-data-source -a office365 -c <connection-id> ``` ### Step 3: Review Generated Service The generated service file (`src/generated/services/Office365OutlookService.ts`) is large. **Use `Grep` to find specific methods** instead of reading the entire file: ``` Grep pattern="async \w+" path="src/generated/services/Office365OutlookService.ts" ``` Key methods (sorted by common usage): #### Calendar Operations | Method | Purpose | Key Parameters | | ------------------------- | -------------------------- | -------------------------------------------------------- | | `GetEventsCalendarViewV2` | Get events in a date range | `calendarId`, `startDateTimeOffset`, `endDateTimeOffset` | | `V3CalendarPostItem` | Create a calendar event | `table` (calendar ID), `item` (CalendarEventHtmlClient) | | `CalendarDeleteItem` | Delete an event | `table` (calendar ID), `id` (event ID) | | `CalendarPatchItem` | Update an event | `table`, `id`, `item` | | `V2CalendarGetTables` | List available calendars | (none) | #### Email Operations | Method | Purpose | Key Parameters | | ----------------- | ------------------ | ---------------------------------------- | | `SendEmailV2` | Send an email | `emailMessage` (body, to, subject, etc.) | | `GetEmails` | Get inbox emails | `folderPath`, `fetchOnlyUnread`, `top` | | `GetEmail` | Get single email | `messageId` | | `MarkAsRead` | Mark email as read | `messageId` | | `ReplyToV3` | Reply to an email | `messageId`, `body` | | `Flag` / `Unflag` | Flag/unflag email | `messageId` | #### Contact Operations | Method | Purpose | | ------------------- | -------------------- | | `GetContactFolders` | List contact folders | | `ContactGetTables` | List contact tables | ### Step 4: Configure Ask the user what Office 365 Outlook operations they need (skip if already specified by caller). **Calendar -- Get events for a date range:** ```typescript import { Office365OutlookService } from "../generated/services/Office365OutlookService"; const result = await Office365OutlookService.GetEventsCalendarViewV2( "Calendar", // calendarId -- "Calendar" for default startDate.toISOString(),