agentsclimarketplace

Add office365

Skill microsoft/power-platform-skills/plugins/code-apps/skills/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 its SKILL.md

Install
npx -y skills add microsoft/power-platform-skills --skill add-office365

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • runs commandsInstructs the agent to run 2 commands, including `npx power-apps add-data-source -a office365 -c <connection-id>` and 1 more.

SKILL.md

5.9 KB, ~1.3k tokens by cl100k_base, as published. Nobody here has run it

📋 Shared Instructions: 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.

Step 2: Add Connector

First, find the connection ID (see 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.

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

MethodPurposeKey Parameters
GetEventsCalendarViewV2Get events in a date rangecalendarId, startDateTimeOffset, endDateTimeOffset
V3CalendarPostItemCreate a calendar eventtable (calendar ID), item (CalendarEventHtmlClient)
CalendarDeleteItemDelete an eventtable (calendar ID), id (event ID)
CalendarPatchItemUpdate an eventtable, id, item
V2CalendarGetTablesList available calendars(none)

Email Operations

MethodPurposeKey Parameters
SendEmailV2Send an emailemailMessage (body, to, subject, etc.)
GetEmailsGet inbox emailsfolderPath, fetchOnlyUnread, top
GetEmailGet single emailmessageId
MarkAsReadMark email as readmessageId
ReplyToV3Reply to an emailmessageId, body
Flag / UnflagFlag/unflag emailmessageId

Contact Operations

MethodPurpose
GetContactFoldersList contact folders
ContactGetTablesList 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:

TypePurpose
CalendarEventClientReceiveStringEnumsRead model -- has Subject, Start, End, Id, ShowAs, IsAllDay, Organizer
CalendarEventHtmlClientWrite model -- requires Subject, Start, End; optional Body, ShowAs, Importance, Reminder
EntityListResponse_CalendarEventClientReceiveStringEnumsResponse 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.

What ships with it

Read from the repository

Just SKILL.md. No reference files, no scripts.

Keep looking

Skills are one crate of 325,949. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.