skills/bltgv/microsoft-graph-api/SKILL.md
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.
npx skillsauth add aiskillstore/marketplace microsoft-graph-apiInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
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 parametersdevelopment
Apple Human Interface Guidelines for content display components. Use this skill when the user asks about charts component, collection view, image view, web view, color well, image well, activity view, lockup, data visualization, content display, displaying images, rendering web content, color pickers, or presenting collections of items in Apple apps. Also use when the user says how should I display charts, what's the best way to show images, should I use a web view, how do I build a grid of items, what component shows media, or how do I present a share sheet. Cross-references: hig-foundations for color/typography/accessibility, hig-patterns for data visualization patterns, hig-components-layout for structural containers, hig-platforms for platform-specific component behavior.
tools
Automate HelpDesk tasks via Rube MCP (Composio): list tickets, manage views, use canned responses, and configure custom fields. Always search tools first for current schemas.
testing
Expert Haskell engineer specializing in advanced type systems, pure functional design, and high-reliability software. Use PROACTIVELY for type-level programming, concurrency, and architecture guidance.
tools
GraphQL gives clients exactly the data they need - no more, no less. One endpoint, typed schema, introspection. But the flexibility that makes it powerful also makes it dangerous. Without proper controls, clients can craft queries that bring down your server. This skill covers schema design, resolvers, DataLoader for N+1 prevention, federation for microservices, and client integration with Apollo/urql. Key insight: GraphQL is a contract. The schema is the API documentation. Design it carefully.