Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Connect Microsoft Teams for cross-channel context awareness. Use when the user says 'connect Teams', 'hook up Microsoft'. Not for Google email/calendar; use `google-workspace-setup`.
.claude/skills/davekilleen-ms-teams-setup/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-07 | ✗→✓ | ▲ Improved | 241% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 12% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 51% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 65% | 0% |
| case-13 | ✗→✓ | ▲ Improved | 107% | 0% |
Connect your Microsoft Teams workspace to Dex so your daily plans, meeting prep, and people pages get richer context from Teams conversations.
Once connected, Dex can:
/ms-teams-setup/integrate-mcp if Teams is mentionedteams_health_check() from the Teams MCP serverSay:
**Let's connect Microsoft Teams to Dex.**
This uses an OAuth 2.0 flow through Microsoft Entra ID (Azure AD) to securely
access your Teams messages and channels.
**What you'll need:**
- Your Microsoft 365 / Teams account credentials
- About 5 minutes (may need admin consent depending on your org)
**Ready to go?**Wait for confirmation.
Check the user's MCP configuration. If teams-mcp is not listed:
I need to add the Teams connector to your Dex configuration.
This adds a bridge that lets Dex read your Teams messages and channels
through the Microsoft Graph API using OAuth 2.0..mcp.json (use the /dex-add-mcp skill or manual edit):json{ "teams-mcp": { "command": "npx", "args": ["-y", "teams-mcp"], "env": { "TEAMS_TENANT_ID": "<tenant-id>", "TEAMS_CLIENT_ID": "<client-id>" } } }
**Microsoft Entra ID Authentication**
You'll need to authorize Dex to read your Teams data. This opens a browser
window where you sign in with your Microsoft account.
**Steps:**
1. I'll start the auth flow -- a browser window will open
2. Sign in with your Microsoft 365 account
3. Grant the requested permissions (read messages, channels, presence)
4. The token will be saved locally on your machine
**Starting now...**teams_authenticate())teams_health_check()If health check succeeds:
Connected! I can see your Teams tenant.If it fails -- admin consent required:
Hmm, your organization requires admin consent for this app.
**Options:**
1. **Ask your IT admin** to approve the app in Entra ID (Azure AD)
- App permissions needed: Chat.Read, ChannelMessage.Read, User.Read, Presence.Read
2. **Use a personal account** if this is for personal Teams
3. **Skip for now** and come back after admin approval
Which would you prefer?If it fails -- other error:
That didn't work. A few things to check:
1. **Are you signed into the right Microsoft account?**
2. **Is your organization using Microsoft 365?** (Teams needs an M365 license)
3. **Try signing out of all Microsoft accounts** in your browser, then retry
Want to retry?Retry up to 2 times, then offer to skip and come back later.
Once connected, ask:
**Which Teams channels matter most for your work?**
I'll prioritize these when building your daily digest and meeting prep.
Some common choices:
- Your 1:1 chats (always included automatically)
- Team channels (e.g., General, your department)
- Project-specific channels
- Customer or deal channels
**Which channels should I watch?** (Just list names, or say "show me what's available")If they say "show me what's available":
teams_list_channels() or equivalentSave their choices for the config file.
Run a quick test to confirm everything works:
teams_list_chats(limit=3) -- verify chats loadteams_search_messages(query="test", count=1) -- verify search worksShow a brief summary:
**Quick test results:**
- Chats: Found [N] recent conversations
- Search: Working
Everything looks good!If either fails, troubleshoot before proceeding.
Write to System/integrations/config.yaml -- update the teams section:
yamlteams: enabled: true configured_at: YYYY-MM-DD priority_channels: - channel-name-1 - channel-name-2 features: teams_digest: true meeting_prep: true person_enrichment: true
If the file already exists, only update the teams: section. Preserve other integration configs.
Check if Slack is also enabled in config.yaml. If so:
**Both Slack and Teams are now connected!**
Here's how they work together:
- **Daily Plan** shows both digests, clearly labeled: "**Slack:**" and "**Teams:**"
- **Meeting Prep** searches both for attendee context
- No duplication -- each source is labeled and deduplicated where the same person appears in both
- You can disable either one anytime without affecting the otherWhen both Slack AND Teams are enabled:
/daily-plan shows both digests side by side/meeting-prep checks both for attendee context**Teams is connected!**
Here's what just changed:
### Enhanced
- **`/daily-plan`** -- Now includes a Teams digest with unread chats and mentions
- **`/meeting-prep`** -- Searches Teams for recent threads with attendees
### New Superpowers
- **Teams Digest** -- Appears automatically in your daily plans
- **Teams Person Context** -- People pages include latest Teams conversations
### How It Works
- **Reading:** Teams context appears automatically in your plans and prep
- **Privacy:** Messages are fetched on demand, summarized, then discarded. Nothing stored permanently.
You can adjust settings anytime by running `/ms-teams-setup` again.OAuth tokens expire periodically (typically every 60-90 minutes, with a refresh token lasting longer). If you see auth errors:
/ms-teams-setupThis is normal -- Microsoft OAuth tokens have shorter lifespans than some other services.
Your Microsoft 365 admin may need to approve the app. Common permissions needed:
Chat.Read -- Read your chat messagesChannelMessage.Read.All -- Read channel messagesUser.Read -- Read your profilePresence.Read -- Read presence statusAsk your IT team to approve these in Entra ID > Enterprise Applications.
The server might not be in your configuration. Re-run /ms-teams-setup and it will detect and fix this.
Microsoft Graph API has throttling limits. If you see 429 errors, wait a few minutes and retry. This rarely happens during normal use.
A few possibilities:
teams_search_messages(query="hello", count=1) as a basic test.If the user runs /ms-teams-setup when already configured:
teams_health_check()System/integrations/config.yamlIf user wants to disconnect:
System/integrations/config.yaml:yaml teams: enabled: false
/ms-teams-setup anytime to reconnect."Other measured skills in the registry, with their headline benchmark lift.