msteams
Skill293 starsChanged 7 months agoMITView on GitHub
Interact with Microsoft Teams — send and read messages, search conversations, look up people, check calendar, get meeting transcripts, and manage chats. Use this skill whenever the user mentions Teams, MS Teams, Microsoft Teams, wants to send a message, read chat history, search conversations, look up a colleague, check their calendar, find meeting recordings or transcripts, see direct reports or manager, or do anything involving Teams communication. Also trigger when the user asks about scheduling, org chart, people search, or wants to message someone.
- Reads credentials
The file
Show its rules and text
We split this skill into the rules it gives an agent
13 rules. About 0 are common, 2 are distinctive, and 11 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈2
Distinctive · estimate
This author's own choices. Worth a look.
11
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 19
Check the JSON output fields configured and valid for BOTH providers:
- Very specific: line 29
Ask the user: "Do you need a proxy to access this site?" — if yes, add networkProxy: <url> under each provider in config.yaml
- Very specific: line 30
Run sig login ms-teams (with --network-proxy <url> if proxy was specified) — this covers both providers
- Very specific: line 31
Verify: run sig status ms-teams and sig status ms-graph again — both must show valid: true before proceeding
- Very specific: line 39
If this outputs a URL, prefix ALL python3 commands with HTTPS_PROXY=<url> HTTP_PROXY=<url>.
- Very specific: line 40
If using socks5, convert to socks5h for python (e.g.
- Distinctive: line 41
If empty, no proxy needed.
- Distinctive: line 45
All scripts require setup to be completed first (see above).
- Very specific: line 51
All scripts support a --region parameter for the Teams Chat API regional endpoint.
- Very specific: line 60
Region: If the region is not in memory/user-profile.md or the env var, ask the user once, then store it immediately in …
- Very specific: line 62
Profile enrichment: When you call teams_people.py --action profile (or Graph /me), persist the user's name, email, and I-number to …
- Very specific: line 66
All scripts are in this skill's scripts/ directory.
- Very specific: line 164
When sending messages, use --format html (default) for rich formatting:
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Microsoft Teams
Send and read messages, search conversations, look up people, check calendar, get meeting transcripts, and manage chats via Microsoft Teams.
Setup (run FIRST — every time, before any operation)
You MUST complete this setup before running any script. Do NOT skip this step.
sig status ms-teams 2>&1
sig status ms-graph 2>&1Check the JSON output fields configured and valid for BOTH providers:
configured: false→ run Provider Setup below. Do NOT proceed without completing it.valid: false(but configured: true) → runsig login ms-teams, then re-check.valid: true→ detect proxy (see below), then execute the user's request.
Provider Setup
- Read
<SKILL_DIR>/references/provider-config.yaml - Append BOTH provider blocks (
ms-teamsandms-graph) to~/.sig/config.yamlunderproviders: - Ask the user: "Do you need a proxy to access this site?" — if yes, add
networkProxy: <url>under each provider in config.yaml - Run
sig login ms-teams(with--network-proxy <url>if proxy was specified) — this covers both providers - Verify: run
sig status ms-teamsandsig status ms-graphagain — both must showvalid: truebefore proceeding
Proxy Detection (after provider is valid)
grep -A15 "^\s*ms-teams:" ~/.sig/config.yaml | grep networkProxy | awk '{print $2}'If this outputs a URL, prefix ALL python3 commands with HTTPS_PROXY=<url> HTTP_PROXY=<url>.
If using socks5, convert to socks5h for python (e.g. socks5://... → socks5h://...).
If empty, no proxy needed.
Running Scripts
All scripts require setup to be completed first (see above).
User Profile & Region Configuration
Before using this skill, check memory/user-profile.md for the user's stored profile (name, email, region, etc.). See CLAUDE.md for details.
All scripts support a --region parameter for the Teams Chat API regional endpoint. Resolution order:
- Stored region from
memory/user-profile.md --regionCLI argument (if provided)TEAMS_REGIONenvironment variable- Default:
apac
Common regions: apac, emea, amer.
Region: If the region is not in memory/user-profile.md or the env var, ask the user once, then store it immediately in memory/user-profile.md.
Profile enrichment: When you call teams_people.py --action profile (or Graph /me), persist the user's name, email, and I-number to memory/user-profile.md so other skills can use them without re-querying.
Scripts Reference
All scripts are in this skill's scripts/ directory. Run via Bash tool.
| Script | Purpose | Token(s) |
teams_conversations.py | List/search conversations | Chat |
teams_messages.py | Get messages from a conversation | Chat |
teams_send.py | Send message or threaded reply | Chat |
teams_chat.py | Find 1:1 chat or create group chat | Chat + Graph |
teams_members.py | Get conversation members | Chat + Graph |
teams_meetings.py | Get recordings and transcripts | Chat |
teams_calendar.py | Get calendar events | Graph |
teams_people.py | Search people, manager, reports, profile | Graph |
teams_conversations.py
--token TOKEN Chat API token (required)
--search TEXT Filter by topic, participant, or content
--limit N Max conversations (default: 20)
--since ISO_DATE Only conversations after this time
--until ISO_DATE Only conversations before this time
--region REGION Teams region (default: $TEAMS_REGION or 'apac')teams_messages.py
--token TOKEN Chat API token (required)
--conversation-id ID Conversation ID (required)
--search TEXT Filter messages by content
--limit N Max messages (default: 20, use 50+ for summarization)
--since ISO_DATE Only messages after this time
--until ISO_DATE Only messages before this time
--region REGION Teams region (default: $TEAMS_REGION or 'apac')teams_send.py
--token TOKEN Chat API token (required)
--conversation-id ID Conversation ID (required)
--message TEXT Message content (required)
--format FORMAT "html" (default) or "markdown"
--parent-message-id ID Parent message ID (for threaded replies)
--region REGION Teams region (default: $TEAMS_REGION or 'apac')teams_chat.py
--token TOKEN Chat API token (required)
--graph-token TOKEN Graph API token (required)
--query TEXT Person name/email (finds 1:1 chat)
--members GUIDS Comma-separated user GUIDs (creates group chat)
--topic TEXT Group chat topic (optional)
--region REGION Teams region (default: $TEAMS_REGION or 'apac')teams_members.py
--token TOKEN Chat API token (required)
--graph-token TOKEN Graph API token (for name resolution, optional)
--conversation-id ID Conversation ID (required)
--region REGION Teams region (default: $TEAMS_REGION or 'apac')teams_meetings.py
--token TOKEN Chat API token (required)
--conversation-id ID List recordings in conversation
--transcript-url URL Fetch transcript content (Teams AMS URL only)
--region REGION Teams region (default: $TEAMS_REGION or 'apac')teams_calendar.py
--graph-token TOKEN Graph API token (required)
--range RANGE "today", "week", or "month"
--start ISO_DATE Custom start date (alternative to --range)
--end ISO_DATE Custom end date (use with --start)
--limit N Max events (default: 50)teams_people.py
--graph-token TOKEN Graph API token (required)
--action ACTION "search" (default), "manager", "reports", or "profile"
--query TEXT Search query (required for search action)
--limit N Max results (default: 10)
--enrich Fetch extra details (I-number, city, country)Message Formatting
When sending messages, use --format html (default) for rich formatting:
<b>Bold</b>, <i>Italic</i>, <a href="url">Link</a>
<ul>
<li>Item</li>
</ul>
,
<ol>
<li>Item</li>
</ol>
<pre>Code block</pre>
, <code>Inline code</code>Or --format markdown for Teams markdown:
**bold**, _italic_, ~~strikethrough~~
`code`, [link](url), - bullet, 1. numberedSee references/messaging-guide.md for complete formatting reference.
Key Concepts
Conversation IDs — Unique identifiers for chats/channels. Format varies by type:
- 1:1 chat:
19:{guid1}_{guid2}@unq.gbl.spaces - Group/channel:
19:{hash}@thread.tacv2
User GUIDs — Microsoft 365 user identifiers (e.g., abc12345-def6-7890-...). Get from teams_people.py --action search.
Transcript URLs — Only Teams AMS URLs (asyncgw.teams.microsoft.com) work with the Chat API token. SharePoint URLs require different auth.
Time parameters — All use ISO 8601: 2025-01-15 or 2025-01-15T09:00:00Z.
Error Handling
| Error | Cause | Fix |
| 401 Unauthorized | Token expired | Auto-run sig login (no user prompt needed), retry |
| 403 Forbidden | No access to conversation | User lacks permission |
| 404 Not found | Invalid conversation ID | Check ID format, conversation may not exist |
NOT_FOUND (people) | No user matching query | Try a more specific name or email |
MISSING_ARGS | Required arguments missing | Check script --help for required args |
| Multiple candidates | Ambiguous people search | Ask user to specify more precisely |
Workflow Examples
Send a message to someone
- Find their chat:
sig run ms-teams ms-graph -- bash -c 'python scripts/teams_chat.py --token "$SIG_MS_TEAMS_ACCESS_TOKEN" --graph-token "$SIG_MS_GRAPH_ACCESS_TOKEN" --query "John Smith" --region apac' - Send:
sig run ms-teams -- bash -c 'python scripts/teams_send.py --token "$SIG_MS_TEAMS_ACCESS_TOKEN" --conversation-id "$CONV_ID" --message "Hello!" --region apac'
Summarize a conversation
- Search:
sig run ms-teams -- bash -c 'python scripts/teams_conversations.py --token "$SIG_MS_TEAMS_ACCESS_TOKEN" --search "project standup"' - Get messages:
sig run ms-teams -- bash -c 'python scripts/teams_messages.py --token "$SIG_MS_TEAMS_ACCESS_TOKEN" --conversation-id "$CONV_ID" --limit 50' - Summarize the returned messages
Get a meeting transcript
- Find recordings:
sig run ms-teams -- bash -c 'python scripts/teams_meetings.py --token "$SIG_MS_TEAMS_ACCESS_TOKEN" --conversation-id "$CONV_ID"' - Fetch transcript:
sig run ms-teams -- bash -c 'python scripts/teams_meetings.py --token "$SIG_MS_TEAMS_ACCESS_TOKEN" --transcript-url "$AMS_URL"'
Check today's calendar
sig run ms-graph -- bash -c 'python scripts/teams_calendar.py --graph-token "$SIG_MS_GRAPH_ACCESS_TOKEN" --range today'
Look up a colleague
sig run ms-graph -- bash -c 'python scripts/teams_people.py --graph-token "$SIG_MS_GRAPH_ACCESS_TOKEN" --action search --query "Jane Doe" --enrich'
Check org chart
- Manager:
sig run ms-graph -- bash -c 'python scripts/teams_people.py --graph-token "$SIG_MS_GRAPH_ACCESS_TOKEN" --action manager' - Reports:
sig run ms-graph -- bash -c 'python scripts/teams_people.py --graph-token "$SIG_MS_GRAPH_ACCESS_TOKEN" --action reports'
Reply to a message in a thread
- Get messages to find the parent message ID:
sig run ms-teams -- bash -c 'python scripts/teams_messages.py --token "$SIG_MS_TEAMS_ACCESS_TOKEN" --conversation-id "$CONV_ID" --limit 10' - Reply:
sig run ms-teams -- bash -c 'python scripts/teams_send.py --token "$SIG_MS_TEAMS_ACCESS_TOKEN" --conversation-id "$CONV_ID" --parent-message-id "$MSG_ID" --message "Thanks!"'
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

