Skip to content
Development
Skill

/add-office365

Adds Office 365 Outlook connector to a Power Apps code app. Use when accessing calendars, sending emails, reading inbox, or managing Outlook events.

From plugin
power-platform-skills
1.1k110 skills25 agents5 MCP

Claude Code

$ npx -y skills add microsoft/power-platform-skills --skill add-office365 --agent claude-code

SKILL.md

add-office365.SKILL.md
name: add-office365
description: Adds Office 365 Outlook connector to a Power Apps code app. Use when accessing calendars, sending emails, reading inbox, or managing Outlook events.
user-invocable: true
allowed-tools: Read, Edit, Write, Grep, Glob, Bash, LSP, TaskCreate, TaskUpdate, TaskList, TaskGet, AskUserQuestion, Skill
model: sonnet

**📋 Shared Instructions: [shared-instructions.md](../../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](../../shared/shared-instructions.md).

Step 2: Add Connector

Get the connection as described in [connector-reference.md](../../shared/connector-reference.md#connections).

**CLI 1.3.0+ (`PA_INLINE_CONNECTIONS=yes`):** tell the user that adding Office 365 Outlook may create a connection with their account, then run the add without `-c` and handle the result with the outcome table in connector-reference.md:

pa app add data-source --connector office365 --non-interactive

**Older CLIs:** run `/list-connections` to find the Office 365 Outlook connection ID (API name contains `office365`; if none exists, create one with `pa connection create` as described in connector-reference.md), then:

pa app add data-source --connector 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:**

import { Office365OutlookService } from "../generated/services/Office365OutlookService";

const result = await Office365OutlookService.GetEventsCalendarViewV2(
  "Calendar", // calendarId -- "Calendar" for default
  startDate.toISOString(),
  endDate.toISOString()
);
const events = result.data?.value || [];

**Calendar -- Create an event:**

await Office365OutlookService.V3CalendarPostItem("Calendar", {
  Subject: "Focus Time",
  Start: "2025-06-15T10:00:00", // ISO 8601 format
  End: "2025-06-15T11:00:00",
  ShowAs: "Busy",
  Importance: "Normal",
  IsAllDay: false,
  Body: "<p>Blocked for focus work</p>",
  Reminder: 5
});

**Calendar -- Delete an event:**

await Office365OutlookService.CalendarDeleteItem("Calendar", eventId);

**Email -- Send an email:**

await Office365OutlookService.SendEmailV2({
  To: "<recipient-address>",
  Subject: "Subject line",
  Body: "<p>HTML email body</p>",
  Importance: "Normal"
});

**Key types:**

| Type | Purpose | | ---------------------------------------------------------- | ------------------------------------------------------------------------------------------------------ | | `CalendarEventClientReceiveStringEnums` | Read model -- has `Subject`, `Start`, `End`, `Id`, `ShowAs`, `IsAllDay`, `Organizer` | | `CalendarEventHtmlClient` | Write model -- requires `Subject`, `Start`, `End`; optional `Body`, `ShowAs`, `Importance`, `Reminder` | | `EntityListResponse_CalendarEventClientReceiveStringEnums` | Response wrapper -- access events via `.value` |

**Response pattern:**

const result = await Office365OutlookService.GetEventsCalendarViewV2(...);
if (result.success) {
  const events = result.data?.value || [];
} else {
  console.error("Failed:", result.error);
}

Step 5: Build

npm run build

Fix TypeScript errors before proceeding. Do NOT deploy yet.

S

Read more
@microsoft
Ships withpower-platform-skills

Plugins from Microsoft that teach AI assistants, such as GitHub Copilot and Claude Code, to build on Power Platform.

1.1k110 skills25 agents5 MCP
Get the whole plugin

Stars on GitHub

Momentum

stars in total
1.1k
Star history of microsoft/power-platform-skills on GitHub, a chart by star-history.com

Other skills on power-platform-skills.

More skills from other plugins.

brainstorming
Auto-invoked

brainstorming

You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…

@obra@obraInstall Skill
ask-matt

ask-matt

Ask which skill or flow fits your situation. A router over the skills in this repo.

skills13d309k
@mattpocock@mattpocockInstall Skill
accessibility
Auto-invoked

accessibility

Design, implement, and audit accessible UI to WCAG 2.2 Level AA across Web, iOS, and Android — semantic ARIA roles and labels,…

ecc2w293k
@affaan-m@affaan-mInstall Skill
compiler-commit

compiler-commit

Use when you want to verify compiler changes and commit with the correct convention. Runs tests, lint, and format, then commits…

react4d252k
@facebook@facebookInstall Skill

Questions about add-office365.

Which coding agents can use add-office365?
add-office365 installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.