{
  "schemaVersion": "1.0",
  "item": {
    "slug": "office365-connector",
    "name": "Office 365 Connector",
    "source": "tencent",
    "type": "skill",
    "category": "效率提升",
    "sourceUrl": "https://clawhub.ai/tirandagan/office365-connector",
    "canonicalUrl": "https://clawhub.ai/tirandagan/office365-connector",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/office365-connector",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=office365-connector",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "CHANGELOG.md",
      "CREDITS.md",
      "MULTI-ACCOUNT.md",
      "SKILL.md",
      "accounts.js",
      "auth.js"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-23T16:43:11.935Z",
      "expiresAt": "2026-04-30T16:43:11.935Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=4claw-imageboard",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=4claw-imageboard",
        "contentDisposition": "attachment; filename=\"4claw-imageboard-1.0.1.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/office365-connector"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/office365-connector",
    "agentPageUrl": "https://openagent3.xyz/skills/office365-connector/agent",
    "manifestUrl": "https://openagent3.xyz/skills/office365-connector/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/office365-connector/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Overview",
        "body": "This skill provides resilient, production-ready connection to Office 365 / Outlook services including email, calendar, and contacts. Now with multi-account support (v2.0.0), you can manage multiple Microsoft 365 identities (work, personal, consulting, etc.) from a single skill installation.\n\nIt solves the common challenge of connecting to Office 365 from automation tools by providing OAuth authentication, automatic token refresh, per-account isolation, and comprehensive Azure App Registration setup guidance.\n\nPerfect for:\n\nManaging multiple work identities across organizations\nSeparating personal and professional email/calendar\nAccessing shared mailboxes and delegated calendars\nConsultants and freelancers working across multiple clients\n\nNew in v2.0.0: Multi-account support! See MULTI-ACCOUNT.md for complete usage guide.\n\nAttribution: Enhanced by Matthew Gordon (matt@workandthrive.ai) - See CREDITS.md for full attribution."
      },
      {
        "title": "What's New in v2.0.0",
        "body": "Major Enhancements by Matthew Gordon:\n\n✨ Multi-Account Management - Handle multiple Microsoft 365 identities from one skill\n🔐 Per-Account Token Isolation - Separate, secure token storage for each account\n🔄 Easy Account Switching - Use --account=name flag across all operations\n⚙️ Default Account Selection - Set your preferred account for convenience\n📦 Legacy Import Tool - Migrate existing single-account setups seamlessly\n🎯 Account Management CLI - Simple add/remove/list/default commands\n✅ Full Backward Compatibility - Existing single-account setups work unchanged\n\nSee CHANGELOG.md for complete version history."
      },
      {
        "title": "Email Operations",
        "body": "Read emails (inbox, sent items, folders)\nSend emails (with attachments, HTML formatting)\nSearch emails by sender, subject, date range\nManage folders and move messages\nMark as read/unread, flag messages\nDelete messages"
      },
      {
        "title": "Calendar Operations",
        "body": "Read calendar events\nCreate/update/delete events\nCheck availability\nManage meeting invitations\nSupport for recurring events\nTime zone handling"
      },
      {
        "title": "Contact Operations",
        "body": "Read contacts and contact folders\nCreate/update/delete contacts\nSearch contacts by name, email, company\nManage contact groups\nSync contact information"
      },
      {
        "title": "Add Your First Account",
        "body": "cd skills/office365-connector\n\n# Add account\nnode accounts.js add work <tenant-id> <client-id> <client-secret> you@work.com \"Work account\"\n\n# Authenticate\nnode auth.js login --account=work"
      },
      {
        "title": "Add More Accounts",
        "body": "# Add personal account\nnode accounts.js add personal <tenant> <client> <secret> you@outlook.com \"Personal\"\n\n# Add consulting account\nnode accounts.js add consulting <tenant> <client> <secret> you@client.com \"Consulting\"\n\n# Set default\nnode accounts.js default work\n\n# List all accounts\nnode accounts.js list"
      },
      {
        "title": "Use Your Accounts",
        "body": "# Check work calendar\nnode calendar.js today --account=work\n\n# Read personal emails\nnode email.js recent 10 --account=personal\n\n# Send from consulting account\nnode send-email.js send client@example.com \"Subject\" \"Body\" --account=consulting"
      },
      {
        "title": "Migrate from Single-Account Setup",
        "body": "Already using v1.0.0? No problem!\n\n# Import your existing setup\nnode accounts.js import-legacy\n\n# Continue using without changes (environment variables still work)\n# OR add additional accounts\nnode accounts.js add secondary <tenant> <client> <secret>"
      },
      {
        "title": "Prerequisites",
        "body": "Before using this skill, you must complete the Azure App Registration setup to obtain:\n\nTenant ID - Your Azure AD tenant identifier\nClient ID - Your application (client) ID\nClient Secret - Your application secret value\n\nSetup time: ~10-15 minutes per account\n\nSee Setup Guide for complete step-by-step instructions."
      },
      {
        "title": "Permission Validation",
        "body": "This skill requires the following delegated permissions (user consent required):"
      },
      {
        "title": "Email Permissions",
        "body": "Mail.Read - Read user email\nMail.ReadWrite - Read and write access to user email\nMail.Send - Send email as the user"
      },
      {
        "title": "Calendar Permissions",
        "body": "Calendars.Read - Read user calendars\nCalendars.ReadWrite - Read and write access to user calendars"
      },
      {
        "title": "Contact Permissions",
        "body": "Contacts.Read - Read user contacts\nContacts.ReadWrite - Read and write access to user contacts"
      },
      {
        "title": "Profile Permissions (required for authentication)",
        "body": "User.Read - Sign in and read user profile\noffline_access - Maintain access to data (refresh tokens)\n\nIMPORTANT: Before proceeding with setup, confirm that you understand and approve these permissions. Each permission grants specific access to your Microsoft 365 data.\n\nSee Permissions Reference for detailed information about what each permission allows."
      },
      {
        "title": "Multi-Account Configuration (v2.0.0+)",
        "body": "Accounts are stored in ~/.openclaw/auth/office365-accounts.json with tokens in ~/.openclaw/auth/office365/.\n\nUse the accounts.js CLI to manage:\n\nnode accounts.js list                # List all accounts\nnode accounts.js add <name> ...      # Add account\nnode accounts.js remove <name>       # Remove account\nnode accounts.js default <name>      # Set default"
      },
      {
        "title": "Legacy Single-Account (Backward Compatible)",
        "body": "Environment variables still work for single-account use:\n\nexport AZURE_TENANT_ID=\"your-tenant-id\"\nexport AZURE_CLIENT_ID=\"your-client-id\"\nexport AZURE_CLIENT_SECRET=\"your-client-secret\"\n\nOr in OpenClaw config:\n\n{\n  \"env\": {\n    \"vars\": {\n      \"AZURE_TENANT_ID\": \"your-tenant-id\",\n      \"AZURE_CLIENT_ID\": \"your-client-id\",\n      \"AZURE_CLIENT_SECRET\": \"your-client-secret\"\n    }\n  }\n}"
      },
      {
        "title": "Authentication Flow",
        "body": "This skill uses OAuth 2.0 Device Code Flow for resilient authentication:\n\nRequest device code from Microsoft\nDisplay user code and verification URL\nUser visits URL and enters code\nPoll for token completion\nStore access + refresh tokens (per-account)\nAutomatically refresh tokens when expired\n\nToken storage: Tokens are securely stored in ~/.openclaw/auth/office365/<account-name>.json with mode 0600 (owner read/write only)."
      },
      {
        "title": "Multi-Account Email Operations",
        "body": "# Read from default account\nnode email.js recent 10\n\n# Read from specific account\nnode email.js recent 10 --account=work\n\n# Search in consulting account\nnode email.js search \"proposal\" --account=consulting\n\n# Send from appropriate identity\nnode send-email.js send client@example.com \"Update\" \"...\" --account=consulting"
      },
      {
        "title": "Multi-Account Calendar Operations",
        "body": "# Check work calendar\nnode calendar.js today --account=work\n\n# Check personal calendar\nnode calendar.js week --account=personal"
      },
      {
        "title": "Account Management",
        "body": "# List all configured accounts\nnode accounts.js list\n\n# Check authentication status\nnode auth.js status --account=work\n\n# Re-authenticate if needed\nnode auth.js login --account=work"
      },
      {
        "title": "Multiple Work Identities",
        "body": "Perfect when working across multiple organizations:\n\n# Morning: Check all calendars\nnode calendar.js today --account=work\nnode calendar.js today --account=consulting\nnode calendar.js today --account=startup\n\n# Process emails by identity\nnode email.js recent --account=work\nnode email.js recent --account=consulting\n\n# Send from appropriate account\nnode send-email.js send client@bigcorp.com \"Proposal\" \"...\" --account=work"
      },
      {
        "title": "Personal + Professional Separation",
        "body": "# Work hours: Work account\nnode calendar.js today --account=work\nnode email.js recent --account=work\n\n# After hours: Personal account\nnode email.js recent --account=personal"
      },
      {
        "title": "Error Handling",
        "body": "The skill includes robust error handling for:\n\nToken expiration - Automatic refresh with exponential backoff\nRate limiting - Retry logic with appropriate delays\nNetwork errors - Connection timeout handling\nPermission errors - Clear messages about missing scopes\nAPI errors - Detailed error messages from Microsoft Graph\nAccount not found - Helpful error messages with suggestions"
      },
      {
        "title": "Rate Limits",
        "body": "Microsoft Graph API has rate limits:\n\nPer-app limit: 130,000 requests per hour\nPer-user limit: Variable based on workload\nThrottling: 429 status code triggers automatic retry\n\nThe skill automatically handles throttling with exponential backoff."
      },
      {
        "title": "Security Considerations",
        "body": "Token Security: Tokens stored with restricted file permissions (0600)\nPer-Account Isolation: Each account has separate token storage\nScope Limitation: Request only the minimum required permissions\nRefresh Tokens: Rotated automatically, old tokens invalidated\nClient Secret: Never logged or exposed; stored with mode 0600\nMulti-tenant: This setup is single-tenant (your organization only)"
      },
      {
        "title": "Multi-Account Issues",
        "body": "\"No account specified and no default account set\"\n\n# Set a default account\nnode accounts.js default work\n\n# Or always specify --account=\nnode calendar.js today --account=work\n\n\"Account not found\"\n\n# List available accounts\nnode accounts.js list\n\n# Add the missing account\nnode accounts.js add <name> <tenant> <client> <secret>\n\nAuthentication expired\n\n# Check status\nnode auth.js status --account=work\n\n# Re-authenticate\nnode auth.js login --account=work"
      },
      {
        "title": "Common Issues",
        "body": "\"AADSTS700016: Application not found in directory\"\n\nVerify Tenant ID matches your Azure AD tenant\nEnsure app registration wasn't deleted\n\n\"AADSTS65001: User did not consent\"\n\nComplete the device code flow authentication\nCheck Admin Consent if required by organization\n\n\"AADSTS700082: Expired refresh token\"\n\nRe-authenticate using device code flow\nCheck token storage file permissions\n\n\"403 Forbidden\"\n\nVerify API permissions are granted in Azure\nCheck if admin consent is required\n\nSee Setup Guide and MULTI-ACCOUNT.md for detailed troubleshooting."
      },
      {
        "title": "Limitations",
        "body": "Attachment size: Max 4MB per attachment (API limit)\nEmail recipients: Max 500 recipients per email\nCalendar events: Limited to 1,095 days in the future\nBatch operations: Max 20 requests per batch"
      },
      {
        "title": "Account Management",
        "body": "node accounts.js list                           # List all accounts\nnode accounts.js add <name> <tenant> <client> <secret> [email] [desc]\nnode accounts.js remove <name>                  # Remove account\nnode accounts.js default <name>                 # Set default\nnode accounts.js import-legacy                  # Import v1.0.0 setup"
      },
      {
        "title": "Authentication",
        "body": "node auth.js login [--account=name]            # Authenticate\nnode auth.js status [--account=name]           # Check status\nnode auth.js token [--account=name]            # Get access token"
      },
      {
        "title": "Email",
        "body": "node email.js recent [count] [--account=name]\nnode email.js search \"query\" [--account=name]\nnode email.js from email@domain [--account=name]\nnode email.js read <id> [--account=name]"
      },
      {
        "title": "Calendar",
        "body": "node calendar.js today [--account=name]\nnode calendar.js week [--account=name]"
      },
      {
        "title": "Send & Manage",
        "body": "node send-email.js send <to> <subject> <body> [--account=name]\nnode send-email.js reply <message-id> <body> [--account=name]\nnode cancel-event.js <event-id> [comment] [--account=name]"
      },
      {
        "title": "Documentation Files",
        "body": "MULTI-ACCOUNT.md - Complete multi-account usage guide\nCHANGELOG.md - Version history and changes\nCREDITS.md - Attribution and acknowledgments\nreferences/setup-guide.md - Azure App Registration walkthrough\nreferences/permissions.md - Security and permissions reference"
      },
      {
        "title": "Microsoft Resources",
        "body": "Microsoft Graph API Documentation: https://learn.microsoft.com/en-us/graph/api/overview\nDelegated vs Application Permissions: https://learn.microsoft.com/en-us/graph/auth/auth-concepts\nRate Limiting: https://learn.microsoft.com/en-us/graph/throttling"
      },
      {
        "title": "Credits",
        "body": "Original Skill: office365-connector v1.0.0 from ClawHub Community\n\nMulti-Account Enhancement (v2.0.0): Matthew Gordon (matt@workandthrive.ai)\n\nThank you to Matthew Gordon for contributing the multi-account enhancement that makes this skill significantly more useful for consultants, freelancers, and anyone managing multiple work identities!\n\nSee CREDITS.md for complete attribution."
      },
      {
        "title": "License",
        "body": "Maintains compatibility with the original skill's licensing. See CREDITS.md for details."
      }
    ],
    "body": "Office 365 Connector (Multi-Account Enhanced)\nOverview\n\nThis skill provides resilient, production-ready connection to Office 365 / Outlook services including email, calendar, and contacts. Now with multi-account support (v2.0.0), you can manage multiple Microsoft 365 identities (work, personal, consulting, etc.) from a single skill installation.\n\nIt solves the common challenge of connecting to Office 365 from automation tools by providing OAuth authentication, automatic token refresh, per-account isolation, and comprehensive Azure App Registration setup guidance.\n\nPerfect for:\n\nManaging multiple work identities across organizations\nSeparating personal and professional email/calendar\nAccessing shared mailboxes and delegated calendars\nConsultants and freelancers working across multiple clients\n\nNew in v2.0.0: Multi-account support! See MULTI-ACCOUNT.md for complete usage guide.\n\nAttribution: Enhanced by Matthew Gordon (matt@workandthrive.ai) - See CREDITS.md for full attribution.\n\nWhat's New in v2.0.0\n\nMajor Enhancements by Matthew Gordon:\n\n✨ Multi-Account Management - Handle multiple Microsoft 365 identities from one skill\n🔐 Per-Account Token Isolation - Separate, secure token storage for each account\n🔄 Easy Account Switching - Use --account=name flag across all operations\n⚙️ Default Account Selection - Set your preferred account for convenience\n📦 Legacy Import Tool - Migrate existing single-account setups seamlessly\n🎯 Account Management CLI - Simple add/remove/list/default commands\n✅ Full Backward Compatibility - Existing single-account setups work unchanged\n\nSee CHANGELOG.md for complete version history.\n\nCapabilities\nEmail Operations\nRead emails (inbox, sent items, folders)\nSend emails (with attachments, HTML formatting)\nSearch emails by sender, subject, date range\nManage folders and move messages\nMark as read/unread, flag messages\nDelete messages\nCalendar Operations\nRead calendar events\nCreate/update/delete events\nCheck availability\nManage meeting invitations\nSupport for recurring events\nTime zone handling\nContact Operations\nRead contacts and contact folders\nCreate/update/delete contacts\nSearch contacts by name, email, company\nManage contact groups\nSync contact information\nQuick Start - Multi-Account\nAdd Your First Account\ncd skills/office365-connector\n\n# Add account\nnode accounts.js add work <tenant-id> <client-id> <client-secret> you@work.com \"Work account\"\n\n# Authenticate\nnode auth.js login --account=work\n\nAdd More Accounts\n# Add personal account\nnode accounts.js add personal <tenant> <client> <secret> you@outlook.com \"Personal\"\n\n# Add consulting account\nnode accounts.js add consulting <tenant> <client> <secret> you@client.com \"Consulting\"\n\n# Set default\nnode accounts.js default work\n\n# List all accounts\nnode accounts.js list\n\nUse Your Accounts\n# Check work calendar\nnode calendar.js today --account=work\n\n# Read personal emails\nnode email.js recent 10 --account=personal\n\n# Send from consulting account\nnode send-email.js send client@example.com \"Subject\" \"Body\" --account=consulting\n\nMigrate from Single-Account Setup\n\nAlready using v1.0.0? No problem!\n\n# Import your existing setup\nnode accounts.js import-legacy\n\n# Continue using without changes (environment variables still work)\n# OR add additional accounts\nnode accounts.js add secondary <tenant> <client> <secret>\n\nPrerequisites\n\nBefore using this skill, you must complete the Azure App Registration setup to obtain:\n\nTenant ID - Your Azure AD tenant identifier\nClient ID - Your application (client) ID\nClient Secret - Your application secret value\n\nSetup time: ~10-15 minutes per account\n\nSee Setup Guide for complete step-by-step instructions.\n\nPermission Validation\n\nThis skill requires the following delegated permissions (user consent required):\n\nEmail Permissions\nMail.Read - Read user email\nMail.ReadWrite - Read and write access to user email\nMail.Send - Send email as the user\nCalendar Permissions\nCalendars.Read - Read user calendars\nCalendars.ReadWrite - Read and write access to user calendars\nContact Permissions\nContacts.Read - Read user contacts\nContacts.ReadWrite - Read and write access to user contacts\nProfile Permissions (required for authentication)\nUser.Read - Sign in and read user profile\noffline_access - Maintain access to data (refresh tokens)\n\nIMPORTANT: Before proceeding with setup, confirm that you understand and approve these permissions. Each permission grants specific access to your Microsoft 365 data.\n\nSee Permissions Reference for detailed information about what each permission allows.\n\nConfiguration\nMulti-Account Configuration (v2.0.0+)\n\nAccounts are stored in ~/.openclaw/auth/office365-accounts.json with tokens in ~/.openclaw/auth/office365/.\n\nUse the accounts.js CLI to manage:\n\nnode accounts.js list                # List all accounts\nnode accounts.js add <name> ...      # Add account\nnode accounts.js remove <name>       # Remove account\nnode accounts.js default <name>      # Set default\n\nLegacy Single-Account (Backward Compatible)\n\nEnvironment variables still work for single-account use:\n\nexport AZURE_TENANT_ID=\"your-tenant-id\"\nexport AZURE_CLIENT_ID=\"your-client-id\"\nexport AZURE_CLIENT_SECRET=\"your-client-secret\"\n\n\nOr in OpenClaw config:\n\n{\n  \"env\": {\n    \"vars\": {\n      \"AZURE_TENANT_ID\": \"your-tenant-id\",\n      \"AZURE_CLIENT_ID\": \"your-client-id\",\n      \"AZURE_CLIENT_SECRET\": \"your-client-secret\"\n    }\n  }\n}\n\nAuthentication Flow\n\nThis skill uses OAuth 2.0 Device Code Flow for resilient authentication:\n\nRequest device code from Microsoft\nDisplay user code and verification URL\nUser visits URL and enters code\nPoll for token completion\nStore access + refresh tokens (per-account)\nAutomatically refresh tokens when expired\n\nToken storage: Tokens are securely stored in ~/.openclaw/auth/office365/<account-name>.json with mode 0600 (owner read/write only).\n\nUsage Examples\nMulti-Account Email Operations\n# Read from default account\nnode email.js recent 10\n\n# Read from specific account\nnode email.js recent 10 --account=work\n\n# Search in consulting account\nnode email.js search \"proposal\" --account=consulting\n\n# Send from appropriate identity\nnode send-email.js send client@example.com \"Update\" \"...\" --account=consulting\n\nMulti-Account Calendar Operations\n# Check work calendar\nnode calendar.js today --account=work\n\n# Check personal calendar\nnode calendar.js week --account=personal\n\nAccount Management\n# List all configured accounts\nnode accounts.js list\n\n# Check authentication status\nnode auth.js status --account=work\n\n# Re-authenticate if needed\nnode auth.js login --account=work\n\nReal-World Use Cases\nMultiple Work Identities\n\nPerfect when working across multiple organizations:\n\n# Morning: Check all calendars\nnode calendar.js today --account=work\nnode calendar.js today --account=consulting\nnode calendar.js today --account=startup\n\n# Process emails by identity\nnode email.js recent --account=work\nnode email.js recent --account=consulting\n\n# Send from appropriate account\nnode send-email.js send client@bigcorp.com \"Proposal\" \"...\" --account=work\n\nPersonal + Professional Separation\n# Work hours: Work account\nnode calendar.js today --account=work\nnode email.js recent --account=work\n\n# After hours: Personal account\nnode email.js recent --account=personal\n\nError Handling\n\nThe skill includes robust error handling for:\n\nToken expiration - Automatic refresh with exponential backoff\nRate limiting - Retry logic with appropriate delays\nNetwork errors - Connection timeout handling\nPermission errors - Clear messages about missing scopes\nAPI errors - Detailed error messages from Microsoft Graph\nAccount not found - Helpful error messages with suggestions\nRate Limits\n\nMicrosoft Graph API has rate limits:\n\nPer-app limit: 130,000 requests per hour\nPer-user limit: Variable based on workload\nThrottling: 429 status code triggers automatic retry\n\nThe skill automatically handles throttling with exponential backoff.\n\nSecurity Considerations\nToken Security: Tokens stored with restricted file permissions (0600)\nPer-Account Isolation: Each account has separate token storage\nScope Limitation: Request only the minimum required permissions\nRefresh Tokens: Rotated automatically, old tokens invalidated\nClient Secret: Never logged or exposed; stored with mode 0600\nMulti-tenant: This setup is single-tenant (your organization only)\nTroubleshooting\nMulti-Account Issues\n\n\"No account specified and no default account set\"\n\n# Set a default account\nnode accounts.js default work\n\n# Or always specify --account=\nnode calendar.js today --account=work\n\n\n\"Account not found\"\n\n# List available accounts\nnode accounts.js list\n\n# Add the missing account\nnode accounts.js add <name> <tenant> <client> <secret>\n\n\nAuthentication expired\n\n# Check status\nnode auth.js status --account=work\n\n# Re-authenticate\nnode auth.js login --account=work\n\nCommon Issues\n\n\"AADSTS700016: Application not found in directory\"\n\nVerify Tenant ID matches your Azure AD tenant\nEnsure app registration wasn't deleted\n\n\"AADSTS65001: User did not consent\"\n\nComplete the device code flow authentication\nCheck Admin Consent if required by organization\n\n\"AADSTS700082: Expired refresh token\"\n\nRe-authenticate using device code flow\nCheck token storage file permissions\n\n\"403 Forbidden\"\n\nVerify API permissions are granted in Azure\nCheck if admin consent is required\n\nSee Setup Guide and MULTI-ACCOUNT.md for detailed troubleshooting.\n\nLimitations\nAttachment size: Max 4MB per attachment (API limit)\nEmail recipients: Max 500 recipients per email\nCalendar events: Limited to 1,095 days in the future\nBatch operations: Max 20 requests per batch\nCommand Reference\nAccount Management\nnode accounts.js list                           # List all accounts\nnode accounts.js add <name> <tenant> <client> <secret> [email] [desc]\nnode accounts.js remove <name>                  # Remove account\nnode accounts.js default <name>                 # Set default\nnode accounts.js import-legacy                  # Import v1.0.0 setup\n\nAuthentication\nnode auth.js login [--account=name]            # Authenticate\nnode auth.js status [--account=name]           # Check status\nnode auth.js token [--account=name]            # Get access token\n\nEmail\nnode email.js recent [count] [--account=name]\nnode email.js search \"query\" [--account=name]\nnode email.js from email@domain [--account=name]\nnode email.js read <id> [--account=name]\n\nCalendar\nnode calendar.js today [--account=name]\nnode calendar.js week [--account=name]\n\nSend & Manage\nnode send-email.js send <to> <subject> <body> [--account=name]\nnode send-email.js reply <message-id> <body> [--account=name]\nnode cancel-event.js <event-id> [comment] [--account=name]\n\nResources\nDocumentation Files\nMULTI-ACCOUNT.md - Complete multi-account usage guide\nCHANGELOG.md - Version history and changes\nCREDITS.md - Attribution and acknowledgments\nreferences/setup-guide.md - Azure App Registration walkthrough\nreferences/permissions.md - Security and permissions reference\nMicrosoft Resources\nMicrosoft Graph API Documentation: https://learn.microsoft.com/en-us/graph/api/overview\nDelegated vs Application Permissions: https://learn.microsoft.com/en-us/graph/auth/auth-concepts\nRate Limiting: https://learn.microsoft.com/en-us/graph/throttling\nCredits\n\nOriginal Skill: office365-connector v1.0.0 from ClawHub Community\n\nMulti-Account Enhancement (v2.0.0): Matthew Gordon (matt@workandthrive.ai)\n\nThank you to Matthew Gordon for contributing the multi-account enhancement that makes this skill significantly more useful for consultants, freelancers, and anyone managing multiple work identities!\n\nSee CREDITS.md for complete attribution.\n\nLicense\n\nMaintains compatibility with the original skill's licensing. See CREDITS.md for details."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/tirandagan/office365-connector",
    "publisherUrl": "https://clawhub.ai/tirandagan/office365-connector",
    "owner": "tirandagan",
    "version": "2.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/office365-connector",
    "downloadUrl": "https://openagent3.xyz/downloads/office365-connector",
    "agentUrl": "https://openagent3.xyz/skills/office365-connector/agent",
    "manifestUrl": "https://openagent3.xyz/skills/office365-connector/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/office365-connector/agent.md"
  }
}