teams-messages

Compose, route, draft, or send Microsoft Teams messages with exact destination resolution, real user mentions, and Teams-native DM or channel routing.

685 stars

Best use case

teams-messages is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

Compose, route, draft, or send Microsoft Teams messages with exact destination resolution, real user mentions, and Teams-native DM or channel routing.

Teams using teams-messages should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/teams-messages/SKILL.md --create-dirs "https://raw.githubusercontent.com/openai/plugins/main/plugins/teams/skills/teams-messages/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/teams-messages/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How teams-messages Compares

Feature / Agentteams-messagesStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

Compose, route, draft, or send Microsoft Teams messages with exact destination resolution, real user mentions, and Teams-native DM or channel routing.

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

SKILL.md Source

# Teams Messages

## Overview

Use this skill to compose, rewrite, route, or send Teams messages. Apply it when the next step involves posting to a chat, replying in a thread, creating a new chat, starting a channel thread, or writing message text that could be sent later.

## Workflow

1. Identify the intended destination first: existing chat, new DM, new group chat, channel post, or thread reply.
2. Determine from the request whether the user wants draft text or an actual send, and use the matching path.
3. Resolve exact IDs before writing:
   - teams or channels: `resolve_team`, `resolve_channel`
   - existing chats: `resolve_chat`
   - people for new chats or mentions: `resolve_user`
4. Use `validate_write_target` when the destination is described in natural language and it is unclear whether the user means an existing target or a create-style action.
5. Route to the correct write action:
   - existing chat: `send_chat_message`
   - new DM or group chat: `create_chat`, then `send_chat_message`
   - new channel thread: `send_channel_message`
   - reply in an existing chat or channel thread: `reply_to_message` or `reply_to_channel_message`
   - new channel: `create_channel`

## Mention Rules

- Resolve people before writing when the message should tag someone.
- Use structured Teams mention inputs with exact Entra user IDs plus display names.
- Do not rely on plain `@name` text to create a real Teams mention.
- If the target user cannot be resolved confidently, say so and return draft text without implying the mention will work.

## Routing Rules

- For an existing direct conversation, prefer the existing two-person chat even if Teams labels it as `group` instead of `oneOnOne`.
- For a new direct chat, call `create_chat(chat_type='oneOnOne')` with exactly one resolved recipient user ID.
- If one-on-one creation fails with a caller-membership mismatch, fetch the caller profile and fall back to a two-person `group` chat containing the caller and the intended recipient.
- For note-to-self requests, prefer an obvious existing self-chat target. If none is exposed, create a one-member `group` chat containing only the caller and send the note there.
- For channel replies, prefer replying by canonical message path instead of inferring the target from quoted text alone.

## Support Boundaries

- Teams drafts here are returned text only. There is no native persisted draft object.
- Do not claim support for Teams tags, reactions, file uploads, message edits, message deletes, or Slack-style canvases.
- Do not imply broad channel-notification behavior beyond what a normal Teams post or structured mention can do.

## Output Conventions

- For drafts, return only the message text unless the user asked for explanation.
- For multiple routing candidates, present the smallest useful disambiguation rather than guessing.
- When a send is blocked, say whether the blocker is destination ambiguity, missing user resolution, or a Teams product rule.

Related Skills

teams

685
from openai/plugins

Summarize Microsoft Teams conversations, triage unread or recent activity, draft follow-ups, and manage Planner tasks through connected Teams data. Use when the user wants to review chats or channels, identify owners and next steps, prepare a safe reply or post, or turn follow-ups into Teams-native tasks.

teams-reply-drafting

685
from openai/plugins

Draft Microsoft Teams replies from available context. Use when the user wants help finding messages that likely need a response and preparing reply drafts.

teams-planner-task-management

685
from openai/plugins

Review and manage Microsoft Teams Planner tasks. Use when the user wants to inspect plans or buckets, create tasks from follow-ups, update task fields, or safely delete a Planner task.

teams-notification-triage

685
from openai/plugins

Triage recent Microsoft Teams activity into a priority queue or task list for the user.

teams-daily-digest

685
from openai/plugins

Create a daily Microsoft Teams digest from selected chats, channels, or workstreams. Use when the user asks for a daily Teams recap or summary of today's Teams activity.

teams-channel-summarization

685
from openai/plugins

Summarize activity from one Microsoft Teams channel or one scoped Teams conversation and return a concise recap or post-ready follow-up.

workflow

685
from openai/plugins

Vercel Workflow DevKit (WDK) expert guidance. Use when building durable workflows, long-running tasks, API routes or agents that need pause/resume, retries, step-based execution, or crash-safe orchestration with Vercel Workflow.

verification

685
from openai/plugins

Full-story verification — infers what the user is building, then verifies the complete flow end-to-end: browser → API → data → response. Triggers on dev server start and 'why isn't this working' signals.

vercel-storage

685
from openai/plugins

Vercel storage expert guidance — Blob, Edge Config, and Marketplace storage (Neon Postgres, Upstash Redis). Use when choosing, configuring, or using data storage with Vercel applications.

vercel-services

685
from openai/plugins

Vercel Services — deploy multiple services within a single Vercel project. Use for monorepo layouts or when combining a backend (Python, Go) with a frontend (Next.js, Vite) in one deployment.

vercel-sandbox

685
from openai/plugins

Vercel Sandbox guidance — ephemeral Firecracker microVMs for running untrusted code safely. Supports AI agents, code generation, and experimentation. Use when executing user-generated or AI-generated code in isolation.

vercel-queues

685
from openai/plugins

Vercel Queues guidance (public beta) — durable event streaming with topics, consumer groups, retries, and delayed delivery. $0.60/1M ops. Powers Workflow DevKit. Use when building async processing, fan-out patterns, or event-driven architectures.