{"id":"186c44a3-8f94-4b4b-bf18-ad24dc80b069","shortId":"9E2WkN","kind":"skill","title":"microsoft-outlook","tagline":"Read, search, draft, send and manage Outlook / Microsoft 365 email AND calendar events via Microsoft Graph. Use when the user mentions Outlook (mail or calendar), Microsoft 365 inbox, sending mail, replying / forwarding, today's agenda, scheduling a meeting, finding free time, or","description":"Drive Microsoft Graph for Outlook / Microsoft 365 — both **mail** and\n**calendar** — via `curl + jq`. The user's OAuth bearer token is in\n`$MICROSOFT_OUTLOOK_TOKEN`; every call needs it as\n`Authorization: Bearer $MICROSOFT_OUTLOOK_TOKEN`. The token already\ncarries the scopes the user agreed to at install: any of `Mail.Read`,\n`Mail.ReadWrite`, `Mail.Send`, `MailboxSettings.Read`,\n`MailboxSettings.ReadWrite`, `Calendars.Read`, `Calendars.ReadWrite`,\nplus `*.Shared` variants. Mail and calendar are unified into one\nconnector (and one OAuth grant) because Microsoft Graph treats them as\nsibling features of the same mailbox — there is no value in splitting\nthem at the skill layer.\n\nThe Graph API returns JSON; failures surface as\n`{\"error\": {\"code\": \"...\", \"message\": \"...\"}}` — show that error\nverbatim to the user.\n\n**Always start with `/me`** to confirm the connection works AND learn\nwhich mailbox you're operating against. For calendar work, also fetch\n`mailboxSettings.timeZone` so dates render right.\n\n---\n\n# Mail — Recipes\n\n### Verify auth (always run first)\n\n```sh\ncurl -sS -H \"Authorization: Bearer $MICROSOFT_OUTLOOK_TOKEN\" \\\n  https://graph.microsoft.com/v1.0/me \\\n  | jq '{displayName, mail, userPrincipalName}'\n```\n\n### List recent messages\n\n```sh\ncurl -sS -H \"Authorization: Bearer $MICROSOFT_OUTLOOK_TOKEN\" \\\n  \"https://graph.microsoft.com/v1.0/me/messages?\\$top=10&\\$select=id,subject,from,receivedDateTime,isRead,hasAttachments&\\$orderby=receivedDateTime desc\" \\\n  | jq '.value[] | {subject, from: .from.emailAddress.address, received: .receivedDateTime, unread: (.isRead | not)}'\n```\n\nFilters: append to URL with `&` (URL-encode the spaces).\n\n| Want | Append |\n|---|---|\n| Unread only | `&$filter=isRead eq false` |\n| With attachments | `&$filter=hasAttachments eq true` |\n| From a specific sender | `&$filter=from/emailAddress/address eq 'user@example.com'` |\n| Date range | `&$filter=receivedDateTime ge 2026-04-01T00:00:00Z and receivedDateTime lt 2026-05-01T00:00:00Z` |\n| Combine | Use `and` / `or` between filter clauses |\n\n### Search messages (full-text on subject + body)\n\n```sh\ncurl -sS -H \"Authorization: Bearer $MICROSOFT_OUTLOOK_TOKEN\" \\\n  --data-urlencode '$search=\"quarterly report\"' \\\n  --data-urlencode '$top=10' \\\n  --data-urlencode '$select=id,subject,from,receivedDateTime' \\\n  --get https://graph.microsoft.com/v1.0/me/messages\n```\n\n> `$search` cannot be combined with `$filter` or `$orderby` in the same\n> query — pick one. `$search` returns relevance-ranked results.\n\n### Read a message body\n\n```sh\ncurl -sS -H \"Authorization: Bearer $MICROSOFT_OUTLOOK_TOKEN\" \\\n  \"https://graph.microsoft.com/v1.0/me/messages/${MSG_ID}?\\$select=subject,body,from,toRecipients,receivedDateTime\" \\\n  | jq '{subject, from: .from.emailAddress.address, received: .receivedDateTime, body: .body.content}'\n```\n\n`body.contentType` is usually `\"HTML\"`. Use `jq -r .body.content` if\nyou want the raw HTML.\n\n### Send an email\n\n> **⚠️ ALWAYS use draft → confirm → send. NEVER call `/me/sendMail`\n> directly — it sends immediately with no undo.**\n\n```sh\n# Step 1: create draft\nDRAFT=$(curl -sS -X POST \\\n  -H \"Authorization: Bearer $MICROSOFT_OUTLOOK_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d \"$(jq -nc \\\n        --arg subj \"Project update\" \\\n        --arg body \"<p>Wanted to share the latest numbers.</p>\" \\\n        --arg to \"alice@example.com\" \\\n        '{subject:$subj, body:{contentType:\"HTML\", content:$body}, toRecipients:[{emailAddress:{address:$to}}]}')\" \\\n  https://graph.microsoft.com/v1.0/me/messages)\nDRAFT_ID=$(echo \"$DRAFT\" | jq -r .id)\n\n# Step 2: present the draft to the user — subject, recipients, body preview\necho \"$DRAFT\" | jq '{subject, to: .toRecipients[0].emailAddress.address, body: .body.content}'\n\n# Step 3: ONLY after user confirms — send (returns 202 No Content)\ncurl -sS -X POST -H \"Authorization: Bearer $MICROSOFT_OUTLOOK_TOKEN\" \\\n  \"https://graph.microsoft.com/v1.0/me/messages/${DRAFT_ID}/send\" \\\n  -w \"HTTP %{http_code}\\n\"\n```\n\nCC / BCC: include `ccRecipients` / `bccRecipients` arrays in the same\nshape as `toRecipients`.\n\n### Reply / reply-all / forward\n\n> **⚠️ Show the user your draft text + recipients before sending.**\n\n```sh\n# Quick reply (sends immediately on /reply — for explicit user-confirmed flow)\ncurl -sS -X POST \\\n  -H \"Authorization: Bearer $MICROSOFT_OUTLOOK_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"comment\":\"Thanks for the update!\"}' \\\n  \"https://graph.microsoft.com/v1.0/me/messages/${MSG_ID}/reply\"\n\n# Or: createReply → review → /send (preferred for non-trivial replies)\nDRAFT=$(curl -sS -X POST -H \"Authorization: Bearer $MICROSOFT_OUTLOOK_TOKEN\" \\\n  \"https://graph.microsoft.com/v1.0/me/messages/${MSG_ID}/createReply\")\nDRAFT_ID=$(echo \"$DRAFT\" | jq -r .id)\n# PATCH body if needed, then /send\n\n# Forward\ncurl -sS -X POST \\\n  -H \"Authorization: Bearer $MICROSOFT_OUTLOOK_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d \"$(jq -nc --arg to \"bob@example.com\" \\\n        '{comment:\"FYI\", toRecipients:[{emailAddress:{address:$to}}]}')\" \\\n  \"https://graph.microsoft.com/v1.0/me/messages/${MSG_ID}/forward\"\n```\n\n### Mark read / unread\n\n```sh\ncurl -sS -X PATCH \\\n  -H \"Authorization: Bearer $MICROSOFT_OUTLOOK_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"isRead\": true}' \\\n  \"https://graph.microsoft.com/v1.0/me/messages/${MSG_ID}\"\n```\n\n### List folders + read a specific folder\n\n```sh\n# Well-known folder names: Inbox, Drafts, SentItems, DeletedItems, Archive, JunkEmail\ncurl -sS -H \"Authorization: Bearer $MICROSOFT_OUTLOOK_TOKEN\" \\\n  \"https://graph.microsoft.com/v1.0/me/mailFolders('SentItems')/messages?\\$top=5&\\$select=subject,toRecipients,sentDateTime\" \\\n  | jq '.value[] | {subject, sent: .sentDateTime}'\n```\n\n### List + download attachments\n\n```sh\n# Metadata\ncurl -sS -H \"Authorization: Bearer $MICROSOFT_OUTLOOK_TOKEN\" \\\n  \"https://graph.microsoft.com/v1.0/me/messages/${MSG_ID}/attachments?\\$select=id,name,size,contentType\" \\\n  | jq '.value[] | {id, name, size}'\n\n# Download a single attachment\ncurl -sS -H \"Authorization: Bearer $MICROSOFT_OUTLOOK_TOKEN\" \\\n  \"https://graph.microsoft.com/v1.0/me/messages/${MSG_ID}/attachments/${ATT_ID}/\\$value\" \\\n  -o \"$SKILL_DIR/tmp/attachment.bin\"\n```\n\n### Mailbox settings (timezone, signature, automatic replies)\n\n```sh\ncurl -sS -H \"Authorization: Bearer $MICROSOFT_OUTLOOK_TOKEN\" \\\n  \"https://graph.microsoft.com/v1.0/me/mailboxSettings\"\n```\n\nSet an out-of-office reply:\n\n> **⚠️ Confirm with user before changing — auto-reply will fire on every incoming mail.**\n\n```sh\ncurl -sS -X PATCH \\\n  -H \"Authorization: Bearer $MICROSOFT_OUTLOOK_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"automaticRepliesSetting\":{\n        \"status\":\"scheduled\",\n        \"scheduledStartDateTime\":{\"dateTime\":\"2026-05-10T09:00:00\",\"timeZone\":\"China Standard Time\"},\n        \"scheduledEndDateTime\":{\"dateTime\":\"2026-05-15T18:00:00\",\"timeZone\":\"China Standard Time\"},\n        \"internalReplyMessage\":\"<p>I'm out this week, back Monday.</p>\"}}' \\\n  \"https://graph.microsoft.com/v1.0/me/mailboxSettings\"\n```\n\nRequires `MailboxSettings.ReadWrite` scope.\n\n### Delete a message\n\n> **⚠️ Always fetch the subject first and confirm with the user.**\n\n```sh\n# 1) show what's about to be deleted\ncurl -sS -H \"Authorization: Bearer $MICROSOFT_OUTLOOK_TOKEN\" \\\n  \"https://graph.microsoft.com/v1.0/me/messages/${MSG_ID}?\\$select=subject,from,receivedDateTime\" \\\n  | jq '\"Delete \\\"\\(.subject)\\\" from \\(.from.emailAddress.address) (\\(.receivedDateTime))?\"'\n\n# 2) after user confirms (moves to Deleted Items, returns 204)\ncurl -sS -X DELETE -H \"Authorization: Bearer $MICROSOFT_OUTLOOK_TOKEN\" \\\n  \"https://graph.microsoft.com/v1.0/me/messages/${MSG_ID}\" \\\n  -w \"HTTP %{http_code}\\n\"\n```\n\n---\n\n# Calendar — Recipes\n\n### Get user timezone (run once at start of any calendar work)\n\n```sh\ncurl -sS -H \"Authorization: Bearer $MICROSOFT_OUTLOOK_TOKEN\" \\\n  \"https://graph.microsoft.com/v1.0/me/mailboxSettings\" \\\n  | jq '.timeZone'\n# → e.g. \"China Standard Time\"\n```\n\nPass that timezone in the `Prefer: outlook.timezone` header on every\ncalendar call so `start.dateTime` / `end.dateTime` come back rendered\nin the user's local time:\n\n```sh\nTZ_HEADER='Prefer: outlook.timezone=\"China Standard Time\"'\n```\n\n### Today's agenda (calendarView)\n\n`calendarView` expands recurring series into individual occurrences\nwithin the window — exactly what you want for an agenda. Plain\n`/events` returns only the recurrence master.\n\n```sh\nSTART=$(date -u +'%Y-%m-%dT00:00:00Z')\nEND=$(date -u -v+1d +'%Y-%m-%dT00:00:00Z')   # macOS; use -d on Linux\ncurl -sS \\\n  -H \"Authorization: Bearer $MICROSOFT_OUTLOOK_TOKEN\" \\\n  -H \"Prefer: outlook.timezone=\\\"China Standard Time\\\"\" \\\n  --data-urlencode \"startDateTime=$START\" \\\n  --data-urlencode \"endDateTime=$END\" \\\n  --data-urlencode '$select=id,subject,start,end,location,attendees,onlineMeeting,isCancelled' \\\n  --data-urlencode '$orderby=start/dateTime' \\\n  --get https://graph.microsoft.com/v1.0/me/calendarView \\\n  | jq '.value[] | {subject, start: .start.dateTime, end: .end.dateTime, location: .location.displayName, attendees: [.attendees[].emailAddress.address]}'\n```\n\n### This week's events (Mon–Sun)\n\n```sh\nSTART=$(date -u -v-Mon +'%Y-%m-%dT00:00:00Z' 2>/dev/null || date -u -d 'last monday' +'%Y-%m-%dT00:00:00Z')\nEND=$(date -u -v+7d -v-Mon +'%Y-%m-%dT00:00:00Z' 2>/dev/null || date -u -d 'next monday' +'%Y-%m-%dT00:00:00Z')\ncurl -sS -H \"Authorization: Bearer $MICROSOFT_OUTLOOK_TOKEN\" \\\n  -H \"Prefer: outlook.timezone=\\\"China Standard Time\\\"\" \\\n  --data-urlencode \"startDateTime=$START\" \\\n  --data-urlencode \"endDateTime=$END\" \\\n  --data-urlencode '$select=subject,start,end' \\\n  --data-urlencode '$orderby=start/dateTime' \\\n  --get https://graph.microsoft.com/v1.0/me/calendarView\n```\n\n### Find free / busy slots (`getSchedule`)\n\nBest way to find a slot that works for multiple people. Returns\n30-minute buckets of free / busy / tentative across the requested\nwindow.\n\n```sh\ncurl -sS -X POST \\\n  -H \"Authorization: Bearer $MICROSOFT_OUTLOOK_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d \"$(jq -nc '{\n        schedules: [\"me\", \"alice@example.com\", \"bob@example.com\"],\n        startTime: {dateTime: \"2026-05-05T09:00:00\", timeZone: \"China Standard Time\"},\n        endTime:   {dateTime: \"2026-05-05T18:00:00\", timeZone: \"China Standard Time\"},\n        availabilityViewInterval: 30\n      }')\" \\\n  https://graph.microsoft.com/v1.0/me/calendar/getSchedule \\\n  | jq '.value[] | {who: .scheduleId, view: .availabilityView}'\n# availabilityView is a string of digits: 0=free 1=tentative 2=busy 3=oof 4=workingElsewhere\n```\n\n### Read a single event (incl. attendees + body)\n\n```sh\ncurl -sS -H \"Authorization: Bearer $MICROSOFT_OUTLOOK_TOKEN\" \\\n  -H \"Prefer: outlook.timezone=\\\"China Standard Time\\\"\" \\\n  \"https://graph.microsoft.com/v1.0/me/events/${EVENT_ID}?\\$select=subject,start,end,location,attendees,body,organizer,onlineMeeting\" \\\n  | jq '{subject, start: .start.dateTime, attendees: [.attendees[] | {addr: .emailAddress.address, response: .status.response}], body: .body.content}'\n```\n\n### Create an event\n\n> **⚠️ ALWAYS show subject / time / attendees to the user before\n> creating — invitations fire automatically the moment the event is\n> POSTed.**\n\n```sh\nPAYLOAD=$(jq -nc \\\n  --arg subj \"Project sync\" \\\n  --arg body \"<p>Quarterly review.</p>\" \\\n  --arg start \"2026-05-06T10:00:00\" \\\n  --arg end   \"2026-05-06T10:30:00\" \\\n  --arg tz    \"China Standard Time\" \\\n  --arg loc   \"Meeting room 3F\" \\\n  --arg a1    \"alice@example.com\" \\\n  '{\n    subject: $subj,\n    body:    {contentType:\"HTML\", content:$body},\n    start:   {dateTime:$start, timeZone:$tz},\n    end:     {dateTime:$end,   timeZone:$tz},\n    location:{displayName:$loc},\n    attendees:[{emailAddress:{address:$a1}, type:\"required\"}],\n    isOnlineMeeting: true,\n    onlineMeetingProvider: \"teamsForBusiness\"\n  }')\ncurl -sS -X POST \\\n  -H \"Authorization: Bearer $MICROSOFT_OUTLOOK_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d \"$PAYLOAD\" \\\n  https://graph.microsoft.com/v1.0/me/events \\\n  | jq '{id, subject, start: .start.dateTime, joinUrl: .onlineMeeting.joinUrl}'\n```\n\n`isOnlineMeeting: true` + `onlineMeetingProvider: \"teamsForBusiness\"`\nauto-generates a Teams meeting link. Drop both for an in-person event.\n\n### Update / reschedule (PATCH)\n\n> **⚠️ Updating sends an \"Updated\" notice to all attendees. Confirm first.**\n\n```sh\ncurl -sS -X PATCH \\\n  -H \"Authorization: Bearer $MICROSOFT_OUTLOOK_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d \"$(jq -nc \\\n        --arg start \"2026-05-06T14:00:00\" \\\n        --arg end   \"2026-05-06T14:30:00\" \\\n        --arg tz    \"China Standard Time\" \\\n        '{start:{dateTime:$start, timeZone:$tz}, end:{dateTime:$end, timeZone:$tz}}')\" \\\n  \"https://graph.microsoft.com/v1.0/me/events/${EVENT_ID}\"\n```\n\n### Cancel a meeting (sends cancellation notice)\n\n> **⚠️ Confirm with the user — every attendee is notified.**\n\n```sh\ncurl -sS -X POST \\\n  -H \"Authorization: Bearer $MICROSOFT_OUTLOOK_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"comment\":\"Need to reschedule, sorry.\"}' \\\n  \"https://graph.microsoft.com/v1.0/me/events/${EVENT_ID}/cancel\" \\\n  -w \"HTTP %{http_code}\\n\"\n```\n\n### Accept / decline / tentative an incoming invite\n\n```sh\ncurl -sS -X POST \\\n  -H \"Authorization: Bearer $MICROSOFT_OUTLOOK_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"comment\":\"See you there\", \"sendResponse\":true}' \\\n  \"https://graph.microsoft.com/v1.0/me/events/${EVENT_ID}/accept\"\n\n# Or /decline, /tentativelyAccept\n```\n\n### Read a shared calendar\n\nRequires `Calendars.Read.Shared`.\n\n```sh\ncurl -sS -H \"Authorization: Bearer $MICROSOFT_OUTLOOK_TOKEN\" \\\n  \"https://graph.microsoft.com/v1.0/users/${USER_UPN}/calendarView?startDateTime=${START}&endDateTime=${END}&\\$select=subject,start,end\" \\\n  -G\n```\n\n### Working with timezones\n\n| Field | Meaning |\n|---|---|\n| `start.dateTime` / `end.dateTime` | The local wall-clock time. |\n| `start.timeZone` / `end.timeZone` | IANA-ish name (`\"Pacific Standard Time\"`, `\"China Standard Time\"`, `\"UTC\"`). |\n| `Prefer: outlook.timezone=\"...\"` request header | Re-renders all returned `dateTime` values into this zone. |\n\nAlways set `Prefer: outlook.timezone` on read calls so the JSON arrives\nin the user's expected timezone instead of UTC.\n\n### Recurrence\n\nUse `calendarView` (it expands occurrences for you) — not `?$expand=`.\nTo create a recurring event, include `recurrence`:\n\n```json\n{\n  \"recurrence\": {\n    \"pattern\":  {\"type\":\"weekly\", \"interval\":1, \"daysOfWeek\":[\"monday\",\"wednesday\"]},\n    \"range\":    {\"type\":\"endDate\", \"startDate\":\"2026-05-06\", \"endDate\":\"2026-08-06\"}\n  }\n}\n```\n\nTo modify a single occurrence of a series, PATCH that occurrence's id\n(returned by `calendarView`), NOT the series master.\n\n---\n\n# OData quick reference (mail + calendar)\n\n| Param | Mail example | Calendar example |\n|---|---|---|\n| `$select` | `id,subject,from,receivedDateTime,isRead` | `subject,start,end,location,attendees` |\n| `$filter` | `isRead eq false` | `start/dateTime ge '2026-05-01T00:00:00'` |\n| `$orderby` | `receivedDateTime desc` | `start/dateTime` |\n| `$top` | `10` browse, `25` search | `10` browse |\n| `$search` | `\"keyword\"` (mail only — cannot combine with $filter / $orderby) | n/a |\n| `$expand` | `attachments` | `attendees`, `attachments` |\n\nUse `--data-urlencode \"$key=$value\" --get` with curl to avoid\nshell-quoting `$` and spaces.\n\n# Rules\n\n- **Always pass `$select`** — defaults return 30+ fields per item.\n- **`$top=10`** for browse, `25` for search. Don't paginate past 50 unless asked.\n- **HTML bodies only** for mail. `contentType: \"Text\"` collapses whitespace.\n- **Use `calendarView`** for any agenda / \"what's on my calendar\"\n  question. `/events` returns recurrence masters only.\n- **Set `Prefer: outlook.timezone`** on calendar read calls; otherwise\n  `dateTime` comes back in UTC.\n- **URL-encode message / event / attachment IDs** if using them in a\n  path — IDs can contain `+`, `/`, `=`. Use `jq -sRr @uri`.\n- **Date math**: `date -u -v+1d` works on macOS, `date -u -d 'tomorrow'` on Linux.\n\n# CRITICAL: User consent for destructive / notifying actions\n\n**Sent emails cannot be unsent. Calendar writes fan out emails to\nattendees. Deleted messages may be permanently lost.**\nPattern: **prepare → present → execute**.\n\n| Action | Prepare step | Show user |\n|---|---|---|\n| Send mail | `POST /me/messages` (draft) | subject, recipients, body preview |\n| Reply / forward | createReply / createForward | quote snippet + your reply text |\n| Delete mail | fetch `subject` first | \"Delete '{subject}' from {sender}?\" |\n| Out-of-office | show current setting first | new schedule + message preview |\n| Create event | build payload | subject, time, attendees, online-meeting on/off |\n| Update event | diff with current | what's changing, attendee count being notified |\n| Cancel event | fetch event first | subject, time, attendee count |\n| Accept / decline invite | fetch event first | event subject + organizer |\n| Bulk | list affected | count + sample |\n\n**Never call `/me/sendMail`** — it sends immediately with no undo. Always draft → confirm → `/send`.\n\n# Errors\n\n- `401 InvalidAuthenticationToken` → token expired; user must reinstall the connector.\n- `403 ErrorAccessDenied` → write scope missing (e.g. trying `Mail.Send` without it granted, or `Calendars.ReadWrite` for create / cancel); ask user to reinstall and tick the write scope.\n- `429 TooManyRequests` → respect `Retry-After` header.\n- `404 ErrorItemNotFound` → wrong message / event id (or it was already deleted / cancelled).\n\n# Reference\n\n- Mail API: <https://learn.microsoft.com/en-us/graph/api/resources/mail-api-overview>\n- Message resource: <https://learn.microsoft.com/en-us/graph/api/resources/message>\n- Calendar resource: <https://learn.microsoft.com/en-us/graph/api/resources/calendar>\n- Event resource: <https://learn.microsoft.com/en-us/graph/api/resources/event>\n- calendarView: <https://learn.microsoft.com/en-us/graph/api/calendar-list-calendarview>\n- getSchedule: <https://learn.microsoft.com/en-us/graph/api/calendar-getschedule>\n- MailboxSettings: <https://learn.microsoft.com/en-us/graph/api/resources/mailboxsettings>","tags":["microsoft","outlook","skills","acedatacloud","acedata-cloud","agent-skills","agentskills","ai-image","ai-music","ai-tools","ai-video","claude-code"],"capabilities":["skill","source-acedatacloud","skill-microsoft-outlook","topic-acedata-cloud","topic-agent-skills","topic-agentskills","topic-ai-image","topic-ai-music","topic-ai-tools","topic-ai-video","topic-claude-code","topic-cursor","topic-gemini-cli","topic-github-copilot","topic-mcp"],"categories":["Skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/AceDataCloud/Skills/microsoft-outlook","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add AceDataCloud/Skills","source_repo":"https://github.com/AceDataCloud/Skills","install_from":"skills.sh"}},"qualityScore":"0.453","qualityRationale":"deterministic score 0.45 from registry signals: · indexed on github topic:agent-skills · 7 github stars · SKILL.md body (18,148 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T19:14:03.088Z","embedding":null,"createdAt":"2026-05-18T13:21:33.684Z","updatedAt":"2026-05-18T19:14:03.088Z","lastSeenAt":"2026-05-18T19:14:03.088Z","tsv":"'+1':1078,1994 '+7':1181 '-01':284,293,1862 '-04':283 '-05':292,864,876,1297,1298,1309,1310,1430,1438,1567,1575,1807,1861 '-06':1431,1439,1568,1576,1808,1812 '-08':1811 '-10':865 '-15':877 '/accept':1681 '/attachments':767,795 '/calendarview':1705 '/cancel':1641 '/createreply':634 '/decline':1683 '/dev/null':1166,1192 '/en-us/graph/api/calendar-getschedule':2219 '/en-us/graph/api/calendar-list-calendarview':2215 '/en-us/graph/api/resources/calendar':2206 '/en-us/graph/api/resources/event':2211 '/en-us/graph/api/resources/mail-api-overview':2196 '/en-us/graph/api/resources/mailboxsettings':2223 '/en-us/graph/api/resources/message':2201 '/events':1059,1951 '/forward':681 '/me':161 '/me/messages':2042 '/me/sendmail':420,2126 '/reply':574,607 '/send':536,611,647,2136 '/tentativelyaccept':1684 '/v1.0/me':203 '/v1.0/me/calendar/getschedule':1322 '/v1.0/me/calendarview':1134,1242 '/v1.0/me/events':1505 '/v1.0/me/events/$':1369,1597,1638,1678 '/v1.0/me/mailboxsettings':819,895,998 '/v1.0/me/mailfolders(''sentitems'')/messages?':737 '/v1.0/me/messages':343 '/v1.0/me/messages)':480 '/v1.0/me/messages/$':379,533,604,631,678,706,764,792,931,966 '/v1.0/me/messages?':222 '/v1.0/users/$':1702 '0':506,1335 '00':286,295,867,868,879,880,1072,1083,1163,1175,1189,1201,1300,1301,1312,1313,1433,1434,1442,1570,1571,1579,1864,1865 '00z':287,296,1073,1084,1164,1176,1190,1202 '1':430,913,1337,1798 '10':224,331,1871,1875,1918 '2':489,944,1165,1191,1339 '202':518 '2026':282,291,863,875,1296,1308,1429,1437,1566,1574,1806,1810,1860 '204':953 '25':1873,1921 '3':511,1341 '30':1260,1319,1441,1578,1913 '365':12,30,52 '3f':1452 '4':1343 '401':2138 '403':2147 '404':2179 '429':2172 '5':739 '50':1928 'a1':1454,1479 'accept':1647,2110 'across':1267 'action':2011,2034 'addr':1387 'address':476,674,1478 'affect':2121 'agenda':38,1039,1057,1944 'agre':89 'alice@example.com':466,1292,1455 'alreadi':83,2188 'also':178 'alway':158,189,413,902,1396,1755,1908,2133 'api':142,2193 'append':246,256 'application/json':448,595,663,700,856,1286,1500,1560,1629,1668 'archiv':725 'arg':452,456,464,667,1419,1423,1427,1435,1443,1448,1453,1564,1572,1580 'array':547 'arriv':1765 'ask':1930,2163 'att':796 'attach':264,751,781,1888,1890,1974 'attende':1123,1144,1145,1350,1377,1385,1386,1400,1476,1542,1611,1853,1889,2023,2084,2097,2108 'auth':188 'author':76,196,215,316,372,439,526,586,624,654,691,730,757,785,812,847,924,959,991,1093,1206,1277,1356,1491,1551,1620,1659,1695 'auto':833,1518 'auto-gener':1517 'auto-repli':832 'automat':806,1408 'automaticrepliesset':858 'availabilityview':1328,1329 'availabilityviewinterv':1318 'avoid':1901 'back':891,1021,1966 'bcc':543 'bccrecipi':546 'bearer':64,77,197,216,317,373,440,527,587,625,655,692,731,758,786,813,848,925,960,992,1094,1207,1278,1357,1492,1552,1621,1660,1696 'best':1248 'bob@example.com':669,1293 'bodi':311,367,384,394,457,469,473,498,508,643,1351,1378,1391,1424,1458,1462,1932,2046 'body.content':395,403,509,1392 'body.contenttype':396 'brows':1872,1876,1920 'bucket':1262 'build':2080 'bulk':2119 'busi':1245,1265,1340 'calendar':15,28,56,107,176,974,985,1015,1688,1837,1841,1949,1960,2017,2202 'calendars.read':100 'calendars.read.shared':1690 'calendars.readwrite':101,2159 'calendarview':1040,1041,1777,1828,1941,2212 'call':72,419,1016,1761,1962,2125 'cancel':1600,1604,2101,2162,2190 'cannot':345,1881,2014 'carri':84 'cc':542 'ccrecipi':545 'chang':831,2096 'china':870,882,1002,1034,1101,1214,1303,1315,1364,1445,1582,1737 'claus':303 'clock':1726 'code':149,540,972,1645 'collaps':1938 'combin':297,347,1882 'come':1020,1965 'comment':597,670,1631,1670 'confirm':163,416,515,579,827,908,947,1543,1606,2135 'connect':165 'connector':112,2146 'consent':2007 'contain':1984 'content':446,472,520,593,661,698,854,1284,1461,1498,1558,1627,1666 'content-typ':445,592,660,697,853,1283,1497,1557,1626,1665 'contenttyp':470,772,1459,1936 'count':2098,2109,2122 'creat':431,1393,1405,1786,2078,2161 'createforward':2051 'createrepli':609,2050 'critic':2005 'curl':58,193,212,313,369,434,521,581,619,649,686,727,754,782,809,842,921,954,988,1090,1203,1272,1353,1486,1546,1615,1654,1692,1899 'current':2071,2093 'd':449,596,664,701,857,1079,1087,1169,1182,1195,1287,1501,1561,1630,1669,1995,2001 'data':322,328,333,1105,1110,1115,1127,1218,1223,1228,1235,1893 'data-urlencod':321,327,332,1104,1109,1114,1126,1217,1222,1227,1234,1892 'date':182,277,1067,1075,1155,1167,1178,1193,1989,1991,1999 'datetim':862,874,1295,1307,1464,1469,1586,1591,1750,1964 'daysofweek':1799 'declin':1648,2111 'default':1911 'delet':899,920,939,950,957,2024,2057,2062,2189 'deleteditem':724 'desc':234,1868 'destruct':2009 'diff':2091 'digit':1334 'dir/tmp/attachment.bin':801 'direct':421 'displaynam':205,1474 'download':750,778 'draft':6,415,432,433,481,484,492,501,534,563,618,635,638,722,2043,2134 'drive':46 'drop':1524 'dt00':1071,1082,1162,1174,1188,1200 'e.g':1001,2152 'echo':483,500,637 'email':13,412,2013,2021 'emailaddress':475,673,1477 'emailaddress.address':507,1146,1388 'encod':252,1971 'end':1074,1113,1121,1140,1177,1226,1233,1375,1436,1468,1470,1573,1590,1592,1709,1713,1851 'end.datetime':1019,1141,1721 'end.timezone':1729 'enddat':1804,1809 'enddatetim':1112,1225,1708 'endtim':1306 'eq':261,267,275,1856 'error':148,153,2137 'erroraccessdeni':2148 'erroritemnotfound':2180 'event':16,1150,1348,1370,1395,1412,1531,1598,1639,1679,1789,1973,2079,2090,2102,2104,2114,2116,2183,2207 'everi':71,838,1014,1610 'exact':1051 'exampl':1840,1842 'execut':2033 'expand':1042,1779,1784,1887 'expect':1770 'expir':2141 'explicit':576 'failur':145 'fals':262,1857 'fan':2019 'featur':124 'fetch':179,903,2059,2103,2113 'field':1718,1914 'filter':245,259,265,273,279,302,349,1854,1884 'find':42,1243,1251 'fire':836,1407 'first':191,906,1544,2061,2073,2105,2115 'flow':580 'folder':710,714,719 'forward':35,558,648,2049 'free':43,1244,1264,1336 'from.emailaddress.address':239,391,942 'from/emailaddress/address':274 'full':307 'full-text':306 'fyi':671 'g':1714 'ge':281,1859 'generat':1519 'get':340,976,1131,1239,1897 'getschedul':1247,2216 'grant':116,2157 'graph':19,48,119,141 'graph.microsoft.com':202,221,342,378,479,532,603,630,677,705,736,763,791,818,894,930,965,997,1133,1241,1321,1368,1504,1596,1637,1677,1701 'graph.microsoft.com/v1.0/me':201 'graph.microsoft.com/v1.0/me/calendar/getschedule':1320 'graph.microsoft.com/v1.0/me/calendarview':1132,1240 'graph.microsoft.com/v1.0/me/events':1503 'graph.microsoft.com/v1.0/me/events/$':1367,1595,1636,1676 'graph.microsoft.com/v1.0/me/mailboxsettings':817,893,996 'graph.microsoft.com/v1.0/me/mailfolders(''sentitems'')/messages?':735 'graph.microsoft.com/v1.0/me/messages':341 'graph.microsoft.com/v1.0/me/messages)':478 'graph.microsoft.com/v1.0/me/messages/$':377,531,602,629,676,704,762,790,929,964 'graph.microsoft.com/v1.0/me/messages?':220 'graph.microsoft.com/v1.0/users/$':1700 'h':195,214,315,371,438,444,525,585,591,623,653,659,690,696,729,756,784,811,846,852,923,958,990,1092,1098,1205,1211,1276,1282,1355,1361,1490,1496,1550,1556,1619,1625,1658,1664,1694 'hasattach':231,266 'header':1012,1031,1744,2178 'html':399,409,471,1460,1931 'http':538,539,970,971,1643,1644 'iana':1731 'iana-ish':1730 'id':226,336,381,482,487,535,606,633,636,641,680,708,766,769,775,794,797,933,968,1118,1371,1507,1599,1640,1680,1825,1844,1975,1982,2184 'immedi':424,572,2129 'in-person':1528 'inbox':31,721 'incl':1349 'includ':544,1790 'incom':839,1651 'individu':1046 'instal':92 'instead':1772 'internalreplymessag':885 'interv':1797 'invalidauthenticationtoken':2139 'invit':1406,1652,2112 'iscancel':1125 'ish':1732 'isonlinemeet':1482,1513 'isread':230,243,260,702,1848,1855 'item':951,1916 'joinurl':1511 'jq':59,204,235,388,401,450,485,502,639,665,744,773,938,999,1135,1288,1323,1381,1417,1506,1562,1986 'json':144,1764,1792 'junkemail':726 'key':1895 'keyword':1878 'known':718 'last':1170 'latest':462 'layer':139 'learn':168 'learn.microsoft.com':2195,2200,2205,2210,2214,2218,2222 'learn.microsoft.com/en-us/graph/api/calendar-getschedule':2217 'learn.microsoft.com/en-us/graph/api/calendar-list-calendarview':2213 'learn.microsoft.com/en-us/graph/api/resources/calendar':2204 'learn.microsoft.com/en-us/graph/api/resources/event':2209 'learn.microsoft.com/en-us/graph/api/resources/mail-api-overview':2194 'learn.microsoft.com/en-us/graph/api/resources/mailboxsettings':2221 'learn.microsoft.com/en-us/graph/api/resources/message':2199 'link':1523 'linux':1089,2004 'list':208,709,749,2120 'loc':1449,1475 'local':1027,1723 'locat':1122,1142,1376,1473,1852 'location.displayname':1143 'lost':2029 'lt':290 'm':887,1070,1081,1161,1173,1187,1199 'maco':1085,1998 'mail':26,33,54,105,185,206,840,1836,1839,1879,1935,2040,2058,2192 'mail.read':95 'mail.readwrite':96 'mail.send':97,2154 'mailbox':128,170,802 'mailboxset':2220 'mailboxsettings.read':98 'mailboxsettings.readwrite':99,897 'mailboxsettings.timezone':180 'manag':9 'mark':682 'master':1064,1832,1954 'math':1990 'may':2026 'mean':1719 'meet':41,1450,1522,1602,2087 'mention':24 'messag':150,210,305,366,901,1972,2025,2076,2182,2197 'metadata':753 'microsoft':2,11,18,29,47,51,68,78,118,198,217,318,374,441,528,588,626,656,693,732,759,787,814,849,926,961,993,1095,1208,1279,1358,1493,1553,1622,1661,1697 'microsoft-outlook':1 'minut':1261 'miss':2151 'modifi':1814 'moment':1410 'mon':1151,1159,1185 'monday':892,1171,1197,1800 'move':948 'msg':380,605,632,679,707,765,793,932,967 'multipl':1257 'must':2143 'n':541,973,1646 'n/a':1886 'name':720,770,776,1733 'nc':451,666,1289,1418,1563 'need':73,645,1632 'never':418,2124 'new':2074 'next':1196 'non':615 'non-trivi':614 'notic':1539,1605 'notifi':1613,2010,2100 'number':463 'o':799 'oauth':63,115 'occurr':1047,1780,1817,1823 'odata':1833 'offic':825,2069 'on/off':2088 'one':111,114,357 'onlin':2086 'online-meet':2085 'onlinemeet':1124,1380 'onlinemeeting.joinurl':1512 'onlinemeetingprovid':1484,1515 'oof':1342 'oper':173 'orderbi':232,351,1129,1237,1866,1885 'organ':1379,2118 'otherwis':1963 'out-of-offic':822,2066 'outlook':3,10,25,50,69,79,199,218,319,375,442,529,589,627,657,694,733,760,788,815,850,927,962,994,1096,1209,1280,1359,1494,1554,1623,1662,1698 'outlook.timezone':1011,1033,1100,1213,1363,1742,1758,1958 'pacif':1734 'pagin':1926 'param':1838 'pass':1005,1909 'past':1927 'patch':642,689,845,1534,1549,1821 'path':1981 'pattern':1794,2030 'payload':1416,1502,2081 'peopl':1258 'per':1915 'perman':2028 'person':1530 'pick':356 'plain':1058 'plus':102 'post':437,524,584,622,652,1275,1414,1489,1618,1657,2041 'prefer':612,1010,1032,1099,1212,1362,1741,1757,1957 'prepar':2031,2035 'present':490,2032 'preview':499,2047,2077 'project':454,1421 'quarter':325,1425 'queri':355 'question':1950 'quick':569,1834 'quot':1904,2052 'r':402,486,640 'rang':278,1802 'rank':362 'raw':408 're':172,1746 're-rend':1745 'read':4,364,683,711,1345,1685,1760,1961 'receiv':240,392 'receiveddatetim':229,233,241,280,289,339,387,393,937,943,1847,1867 'recent':209 'recip':186,975 'recipi':497,565,2045 'recur':1043,1788 'recurr':1063,1775,1791,1793,1953 'refer':1835,2191 'reinstal':2144,2166 'relev':361 'relevance-rank':360 'render':183,1022,1747 'repli':34,554,556,570,617,807,826,834,2048,2055 'reply-al':555 'report':326 'request':1269,1743 'requir':896,1481,1689 'reschedul':1533,1634 'resourc':2198,2203,2208 'respect':2174 'respons':1389 'result':363 'retri':2176 'retry-aft':2175 'return':143,359,517,952,1060,1259,1749,1826,1912,1952 'review':610,1426 'right':184 'room':1451 'rule':1907 'run':190,979 'sampl':2123 'schedul':39,860,1290,2075 'scheduledenddatetim':873 'scheduledstartdatetim':861 'scheduleid':1326 'scope':86,898,2150,2171 'search':5,304,324,344,358,1874,1877,1923 'see':1671 'select':225,335,382,740,768,934,1117,1230,1372,1710,1843,1910 'send':7,32,410,417,423,516,567,571,1536,1603,2039,2128 'sender':272,2065 'sendrespons':1674 'sent':747,2012 'sentdatetim':743,748 'sentitem':723 'seri':1044,1820,1831 'set':803,820,1756,1956,2072 'sh':192,211,312,368,428,568,685,715,752,808,841,912,987,1029,1065,1153,1271,1352,1415,1545,1614,1653,1691 'shape':551 'share':103,460,1687 'shell':1903 'shell-quot':1902 'show':151,559,914,1397,2037,2070 'sibl':123 'signatur':805 'singl':780,1347,1816 'size':771,777 'skill':138,800 'skill-microsoft-outlook' 'slot':1246,1253 'snippet':2053 'sorri':1635 'source-acedatacloud' 'space':254,1906 'specif':271,713 'split':134 'srr':1987 'ss':194,213,314,370,435,522,582,620,650,687,728,755,783,810,843,922,955,989,1091,1204,1273,1354,1487,1547,1616,1655,1693 'standard':871,883,1003,1035,1102,1215,1304,1316,1365,1446,1583,1735,1738 'start':159,982,1066,1108,1120,1138,1154,1221,1232,1374,1383,1428,1463,1465,1509,1565,1585,1587,1707,1712,1850 'start.datetime':1018,1139,1384,1510,1720 'start.timezone':1728 'start/datetime':1130,1238,1858,1869 'startdat':1805 'startdatetim':1107,1220,1706 'starttim':1294 'status':859 'status.response':1390 'step':429,488,510,2036 'string':1332 'subj':453,468,1420,1457 'subject':227,237,310,337,383,389,467,496,503,741,746,905,935,940,1119,1137,1231,1373,1382,1398,1456,1508,1711,1845,1849,2044,2060,2063,2082,2106,2117 'sun':1152 'surfac':146 'sync':1422 't00':285,294,1863 't09':866,1299 't10':1432,1440 't14':1569,1577 't18':878,1311 'team':1521 'teamsforbusi':1485,1516 'tentat':1266,1338,1649 'text':308,564,1937,2056 'thank':598 'tick':2168 'time':44,872,884,1004,1028,1036,1103,1216,1305,1317,1366,1399,1447,1584,1727,1736,1739,2083,2107 'timezon':804,869,881,978,1000,1007,1302,1314,1466,1471,1588,1593,1717,1771 'today':36,1037 'token':65,70,80,82,200,219,320,376,443,530,590,628,658,695,734,761,789,816,851,928,963,995,1097,1210,1281,1360,1495,1555,1624,1663,1699,2140 'tomorrow':2002 'toomanyrequest':2173 'top':223,330,738,1870,1917 'topic-acedata-cloud' 'topic-agent-skills' 'topic-agentskills' 'topic-ai-image' 'topic-ai-music' 'topic-ai-tools' 'topic-ai-video' 'topic-claude-code' 'topic-cursor' 'topic-gemini-cli' 'topic-github-copilot' 'topic-mcp' 'torecipi':386,474,505,553,672,742 'treat':120 'tri':2153 'trivial':616 'true':268,703,1483,1514,1675 'type':447,594,662,699,855,1285,1480,1499,1559,1628,1667,1795,1803 'tz':1030,1444,1467,1472,1581,1589,1594 'u':1068,1076,1156,1168,1179,1194,1992,2000 'undo':427,2132 'unifi':109 'unless':1929 'unread':242,257,684 'unsent':2016 'updat':455,601,1532,1535,1538,2089 'upn':1704 'uri':1988 'url':248,251,1970 'url-encod':250,1969 'urlencod':323,329,334,1106,1111,1116,1128,1219,1224,1229,1236,1894 'use':20,298,400,414,1086,1776,1891,1940,1977,1985 'user':23,61,88,157,495,514,561,578,829,911,946,977,1025,1403,1609,1703,1768,2006,2038,2142,2164 'user-confirm':577 'user@example.com':276 'userprincipalnam':207 'usual':398 'utc':1740,1774,1968 'v':1077,1158,1180,1184,1993 'v-mon':1157,1183 'valu':132,236,745,774,798,1136,1324,1751,1896 'variant':104 'verbatim':154 'verifi':187 'via':17,57 'view':1327 'w':537,969,1642 'wall':1725 'wall-clock':1724 'want':255,406,458,1054 'way':1249 'wednesday':1801 'week':890,1148,1796 'well':717 'well-known':716 'whitespac':1939 'window':1050,1270 'within':1048 'without':2155 'work':166,177,986,1255,1715,1996 'workingelsewher':1344 'write':2018,2149,2170 'wrong':2181 'x':436,523,583,621,651,688,844,956,1274,1488,1548,1617,1656 'y':1069,1080,1160,1172,1186,1198 'zone':1754","prices":[{"id":"de4acc9b-b339-4b5c-b70e-da2ed6cc0947","listingId":"186c44a3-8f94-4b4b-bf18-ad24dc80b069","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"AceDataCloud","category":"Skills","install_from":"skills.sh"},"createdAt":"2026-05-18T13:21:33.684Z"}],"sources":[{"listingId":"186c44a3-8f94-4b4b-bf18-ad24dc80b069","source":"github","sourceId":"AceDataCloud/Skills/microsoft-outlook","sourceUrl":"https://github.com/AceDataCloud/Skills/tree/main/skills/microsoft-outlook","isPrimary":false,"firstSeenAt":"2026-05-18T13:21:33.684Z","lastSeenAt":"2026-05-18T19:14:03.088Z"}],"details":{"listingId":"186c44a3-8f94-4b4b-bf18-ad24dc80b069","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"AceDataCloud","slug":"microsoft-outlook","github":{"repo":"AceDataCloud/Skills","stars":7,"topics":["acedata-cloud","agent-skills","agentskills","ai-image","ai-music","ai-tools","ai-video","claude-code","cursor","gemini-cli","github-copilot","mcp","npm","openai-codex","roo-code"],"license":"other","html_url":"https://github.com/AceDataCloud/Skills","pushed_at":"2026-05-18T07:35:03Z","description":"Agent Skills for AceDataCloud AI services — music, image, video generation, web search, and more. Compatible with Claude Code, GitHub Copilot, Gemini CLI, and all agentskills.io-compatible agents.","skill_md_sha":"b815c7db8e5f317cdd3d3b18eead0985d2849d5e","skill_md_path":"skills/microsoft-outlook/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/AceDataCloud/Skills/tree/main/skills/microsoft-outlook"},"layout":"multi","source":"github","category":"Skills","frontmatter":{"name":"microsoft-outlook","license":"Apache-2.0","description":"Read, search, draft, send and manage Outlook / Microsoft 365 email AND calendar events via Microsoft Graph. Use when the user mentions Outlook (mail or calendar), Microsoft 365 inbox, sending mail, replying / forwarding, today's agenda, scheduling a meeting, finding free time, or modifying / cancelling an event."},"skills_sh_url":"https://skills.sh/AceDataCloud/Skills/microsoft-outlook"},"updatedAt":"2026-05-18T19:14:03.088Z"}}