From api-skills
This skill should be used when the user asks to "read my emails", "send an email", "compose email", "check my calendar", "get calendar events", "create a meeting", "schedule an event", "add calendar event", "search emails", "list mail folders", "show unread messages", "what meetings do I have", "fetch emails from Microsoft", "access Outlook", or mentions Microsoft Graph, Office 365 email, or Outlook calendar integration.
How this skill is triggered — by the user, by Claude, or both
Slash command
/api-skills:microsoft-graphThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Access Microsoft 365 emails and calendar through TypeScript scripts executed via Bun.
Access Microsoft 365 emails and calendar through TypeScript scripts executed via Bun.
This skill provides access to Microsoft Graph API for:
All scripts return JSON and handle authentication automatically.
All scripts output JSON with a consistent structure:
{"status": "success", "data": [...]}
{
"status": "auth_required",
"userCode": "ABC123",
"verificationUri": "https://microsoft.com/devicelogin",
"expiresAt": "2024-01-15T10:30:00.000Z",
"message": "To sign in, use a web browser..."
}
When you receive auth_required, display to the user:
To access your email, please authenticate:
1. Go to: https://microsoft.com/devicelogin
2. Enter code: ABC123
Let me know when you've completed authentication.
Then retry the same command - the script will automatically complete authentication.
{
"status": "auth_pending",
"userCode": "ABC123",
"verificationUri": "https://microsoft.com/devicelogin",
"expiresAt": "...",
"message": "..."
}
User has been shown the code but hasn't completed login yet. Remind them to complete authentication.
{"status": "error", "error": "Error description"}
All scripts are located at ${CLAUDE_PLUGIN_ROOT}/skills/microsoft-graph/scripts/.
bun run ${CLAUDE_PLUGIN_ROOT}/skills/microsoft-graph/scripts/emails.ts list
bun run emails.ts list --folder "Sent Items" --top 5
bun run emails.ts list --profile work
bun run emails.ts read --id AAMkAG...
Get the ID from the list command output.
bun run emails.ts search --query "from:[email protected]"
bun run emails.ts search --query "subject:quarterly report"
bun run emails.ts search --query "hasAttachments:true"
bun run emails.ts folders
# Simple email
bun run emails.ts send --to "[email protected]" --subject "Hello" --body "Hi there!"
# Multiple recipients with CC
bun run emails.ts send --to "[email protected],[email protected]" --cc "[email protected]" --subject "Team Update" --body "Here's the update..."
# HTML email
bun run emails.ts send --to "[email protected]" --subject "Report" --body "<h1>Monthly Report</h1><p>Details...</p>" --html
# With BCC
bun run emails.ts send --to "[email protected]" --bcc "[email protected]" --subject "Announcement" --body "..."
bun run ${CLAUDE_PLUGIN_ROOT}/skills/microsoft-graph/scripts/calendar.ts list
bun run calendar.ts today
bun run calendar.ts week
bun run calendar.ts list --start tomorrow --end +7d
bun run calendar.ts view --id AAMkAG...
bun run calendar.ts search --query "team standup"
today, tomorrow, +7d, +1m, +1y2024-01-15 or 2024-01-15T14:00:00# Basic event (1 hour default duration)
bun run calendar.ts create --subject "Team Meeting" --start "2024-01-15T14:00:00"
# Event with end time
bun run calendar.ts create --subject "Workshop" --start "2024-01-15T09:00:00" --end "2024-01-15T12:00:00"
# Event with location and description
bun run calendar.ts create --subject "Lunch" --start "2024-01-15T12:00:00" --location "Cafe" --body "Team lunch"
# Event with attendees
bun run calendar.ts create --subject "1:1" --start tomorrow --end +1d --attendees "[email protected]"
# Multiple attendees
bun run calendar.ts create --subject "Review" --start "2024-01-15T10:00:00" --attendees "[email protected],[email protected],[email protected]"
# All-day event
bun run calendar.ts create --subject "Holiday" --start "2024-12-25" --all-day
# Using relative dates
bun run calendar.ts create --subject "Follow-up" --start tomorrow --end +1d
Store multiple accounts using profiles:
# Use work profile
bun run emails.ts list --profile work
bun run calendar.ts today --profile work
# Use personal profile
bun run emails.ts list --profile personal
For explicit auth management (listing/deleting profiles):
# List all profiles
bun run ${CLAUDE_PLUGIN_ROOT}/skills/microsoft-graph/scripts/auth.ts --list
# Delete a profile
bun run auth.ts --delete --profile old-account
# Authenticate with custom Azure AD app
bun run auth.ts --client-id your-app-id --tenant-id your-tenant-id
| Token Type | Lifetime | Handling |
|---|---|---|
| Access Token | ~1 hour | Automatically refreshed |
| Refresh Token | ~90 days | When expired, scripts return auth_required |
Users only need to re-authenticate when the refresh token expires (~90 days).
Credentials are stored at ~/.config/api-skills/credentials.json.
| Script | Purpose |
|---|---|
emails.ts | Email list, read, search, send, and folder operations |
calendar.ts | Calendar view, search, and create operations |
auth.ts | Manual credential management (list, delete profiles) |
For detailed API reference, see:
references/graph-api.md - Microsoft Graph API endpoints and parametersGuides collaborative design exploration before implementation: explores context, asks clarifying questions, proposes approaches, and writes a design doc for user approval.
Creates structured, bite-sized implementation plans from specs or requirements before writing code. Useful for breaking down multi-step tasks into testable steps with file structure and task boundaries.
Resolves in-progress git merge or rebase conflicts by analyzing history, understanding intent, and preserving both changes where possible. Runs automated checks after resolution.
npx claudepluginhub joshuarweaver/cascade-communication --plugin bltgv-agent-skills