mcpbeat Sign in

Add Office365 Agent Skill

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

2k tokens
context cost
the whole folder, loaded on every use
1
files
instructions only
0
copies elsewhere
how many repositories repackaged it
601
stars on the repo
on the repository, not the skill itself

Install

one command, takes just this skill from the repository
npx skills add https://github.com/microsoft/power-platform-skills --skill add-office365

What it tells the agent to use

found in the instruction text
Grep reads your files

The instruction itself

11 sections, as written by the author

📋 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

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.

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.

Other skills for the same job

different authors, same section of the catalogue
Daily Meeting Update
by softaworks
×2

Interactive daily standup/meeting update generator. Use when user says 'daily', 'standup', 'scrum update', 'status update', 'what did I do yesterday', 'prepare for meeting', 'morning update', or 'team sync'. Pulls activity from GitHub, Jira, and Claude Code session history. Conducts 4-question interview (yesterday, today, blockers, discussion topics) and generates formatted Markdown update.

8k tokens scripts
Daily Briefing
by anthropics
vendor ×1

Start your day with a prioritized sales briefing. Works standalone when you tell me your meetings and priorities, supercharged when you connect your calendar, CRM, and email. Trigger with "morning briefing", "daily brief", "what's on my plate today", "prep my day", or "start my day".

2k tokens
Prospect
by anthropics
vendor ×1

Full ICP-to-leads pipeline. Describe your ideal customer in plain English and get a ranked table of enriched decision-maker leads with emails and phone numbers.

901 tokens
Capture Tasks From Meeting Notes
by openai
vendor ×1

Analyze meeting notes to find action items and create Jira tasks for assigned work. When an agent needs to: (1) Create Jira tasks or tickets from meeting notes, (2) Extract or find action items from notes or Confluence pages, (3) Parse meeting notes for assigned tasks, or (4) Analyze notes and generate tasks for team members. Identifies assignees, looks up account IDs, and creates tasks with proper context.

6k tokens
Onboarding Cro
by ComeOnOliver
×1

When the user wants to optimize post-signup onboarding, user activation, first-run experience, or time-to-value. Also use when the user mentions "onboarding flow," "activation rate," "user activation," "first-run experience," "empty states," "onboarding checklist," "aha moment," or "new user experience." For signup/registration optimization, see signup-flow-cro. For ongoing email sequences, see email-sequence.

5k tokens
Daily Prep
by github
vendor

Prepare for tomorrow''s meetings and tasks. Pulls calendar from Outlook via WorkIQ, cross-references open tasks and workspace context, classifies meetings, detects conflicts and day-fit issues, finds learning and deep-work slots, and generates a structured HTML prep file with productivity recommendations.

2k tokens
Gtm Operating Cadence
by github
vendor

Design meeting rhythms, metric reporting, quarterly planning, and decision-making velocity for scaling companies. Use when decisions are slow, planning is broken, the company is growing but alignment is worse, or leadership meetings consume all time without producing decisions.

4k tokens
Add Gcal Tool
by nanocoai

Add Google Calendar as an MCP tool (list calendars, list/search/create events, free/busy queries) using OneCLI-managed OAuth. Multi-calendar and multi-account supported. Mirrors /add-gmail-tool's stub pattern — no raw credentials ever reach the container; OneCLI injects real tokens at request time.

3k tokens scripts

How to use it

Copy the folder

Take microsoft/add-office365 from the repository into ~/.claude/skills for personal use, or into .claude/skills inside a project.

Check the name does not clash

The agent identifies a skill by the name field in its header. Two skills with the same name cannot sit side by side — one of them will be ignored.