Install Add Office365
Pick your agent. Every command is ready to paste.
npx skills add microsoft/power-platform-skills --skill add-office365The open skills CLI detects your agents (Claude Code, Cursor, Codex and 70+ more) and installs to the right folder. Add -g to install globally.
01
Install it
Run the command above, or upload the folder in Claude.
02
Ask naturally
Describe the task. Your agent loads add-office365 when the request matches its description.
03
Name it if needed
If it does not trigger, say “use the add-office365 skill”. In Codex, type $add-office365.
📋 Shared Instructions: shared-instructions.md - Cross-cutting concerns.
Add Office 365 Outlook
Workflow
- 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.
Step 2: Add Connector
Get the connection as described in connector-reference.md.
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.
Step 6: Update Memory Bank
Update memory-bank.md with: connector added, configured operations, build status.
Tips for Add Office365
- • Start a fresh session after installing so your agent picks up the new skill.
- • It is part of a pack with 24 skills. Install only the ones you need with --skill to keep triggers precise.
- • If two skills overlap, mention the one you want by name.
Questions about Add Office365
What does the Add Office365 skill do?
Adds Office 365 Outlook connector to a Power Apps code app. Use when accessing calendars, sending emails, reading inbox, or managing Outlook events.
How do I install Add Office365?
Run "npx skills add microsoft/power-platform-skills --skill add-office365" in your project. The skills CLI installs it for Claude Code, Cursor, Codex and 70+ other agents. In Claude on the web, upload the skill folder as a ZIP under Customize > Skills.
Does Add Office365 work in Cursor and Codex?
Yes. Add Office365 uses the open SKILL.md format, so it works in Claude Code, Claude, Cursor, OpenAI Codex, Gemini CLI, GitHub Copilot and other agents that support agent skills.
Is Add Office365 free?
Add Office365 is open source on GitHub under the MIT license. It is free to install; check the license before commercial use.
Who made Add Office365?
Add Office365 is published by Microsoft in the microsoft/power-platform-skills repository, together with 23 other skills.

