Skip to main content

Pick the right SDK for your Teams agent

Microsoft offers two supported, actively-developed SDKs that can build a bot or agent for Microsoft Teams:

  • Microsoft Teams SDK: the SDK these docs cover, a Teams-first application framework
  • Microsoft 365 Agents SDK: a multi-channel agent runtime that reaches Teams, M365 Copilot, Microsoft Copilot Studio, WebChat, and other surfaces

Both ship for C#, TypeScript, and Python. Both speak the Activity Protocol (the JSON wire format for bot/agent activities such as messages and events), both interoperate with Microsoft Entra, both support agentic identity via Agent365 (shipped in the M365 Agents SDK; coming soon to Teams SDK), and both reach Microsoft 365 Copilot. Microsoft positions both as first-class. You are not locked into one path; see Bot Framework migration below for what switching between them entails.

This doc helps you pick the SDK whose defaults match the bot or agent you're building. The criteria are about fit, not gates: the two SDKs are converging on most capabilities, so we focus on durable differences.

Which SDK for your Teams scenario

How Teams-deep does your bot need to go? Two paths:

  • Cross-channel essentials are breadth-focused: Activity Protocol primitives that work uniformly across Teams, M365 Copilot, Copilot Studio, WebChat, and other channels. Best fit: the M365 Agents SDK.
  • Teams-native collaboration is depth-focused: the surfaces a bot needs to participate in group conversations the way Teams users expect (mentions, reactions, quoted replies, threaded replies, channel events, meetings experiences, citations, …). Best fit: the Microsoft Teams SDK.

M365 Agents SDK on Teams (breadth) vs Microsoft Teams SDK (depth)

Cross-channel essentials: what you get with the M365 Agents SDK on Teams

Activity Protocol primitives that work uniformly across channels.

FeatureDescription
Text messagesReceive and reply
Typing indicatorsAcknowledge a message is being processed
Streaming responsesChunked output, useful for long or AI-generated messages
Conversation update eventsMembers added / removed
OAuth sign-in flowStandard user authentication
Proactive messagingSend unsolicited messages to a saved conversation
Adaptive Cards (basic)Send cards and handle simple action callbacks

Teams-native collaboration: what you get with the Microsoft Teams SDK on Teams

Everything in the cross-channel essentials above, plus the Teams-native surface for collaboration in group conversations: the affordances your bot needs to participate in channels, chats, and meetings the way Teams users expect.

FeatureDescription
@MentionsMention a specific user in a message; receive a mention activity when the bot is mentioned
ReactionsAdd / remove emoji reactions on messages
Targeted (ephemeral) messages (preview)Deliver a message to a specific user in a shared conversation; other participants don't see it
Quoted repliesParse incoming quoted-reply context; send replies that auto-quote the user's message or quote a specific message by ID
Threaded repliesReply to a specific message in a channel; channel reply chains
Channel eventsChannel created / renamed / deleted; team member changes
Meetings experiencesMeeting start / end and participant join / leave events
CitationsRender source citations on AI-generated messages
"Generated by AI" labelShow a visual indicator that a message came from an AI
Feedback loopCapture user feedback (👍 / 👎) on AI messages
SSO / silent token exchangeSign-in token exchange invokes
Slash commandsManifest-registered command lists invoked from the Teams compose box
Task modulesShow a form in a pop-up; dialog.open / dialog.submit (task/fetch, task/submit) invokes
File consent, read receipts, suggested actions, O365 connector card actionsAdditional Teams-specific invokes
Message extensionsSearch commands, link unfurling, action commands

Rule of thumb: if your bot uses most of the Teams-native set above, the Teams SDK is the right home. If it uses few or none, the M365 Agents SDK is sufficient.

How they relate

The two SDKs target different backends, but speak the same Activity Protocol to reach them.

  • Teams Bot Service (Microsoft Teams SDK): the Teams-native runtime that handles bot traffic for Microsoft Teams and the M365 Copilot client surface directly.
  • Azure Bot Service (M365 Agents SDK): the broader Bot Framework infrastructure that routes to Teams plus other channels (WebChat, DirectLine, etc.).

Messages flow in both directions along the lines shown: a user's turn rises from the channel up through the backend and SDK to your code, and your reply travels back down the same path.

The channels then split into two groups:

  • Microsoft Teams and Microsoft 365 Copilot (solid borders in the diagram) are reachable from both SDKs. Cross-channel essentials are at parity; for Teams-native collaboration, use the Teams SDK.
  • Microsoft Copilot Studio, WebChat / DirectLine, and other Bot Framework Connector channels (dashed borders in the diagram) are reachable from either SDK in principle, but the M365 Agents SDK is the recommended, optimized path.

Bot Framework migration

If you're migrating from the Bot Framework SDK (the Microsoft.Bot.* packages), both SDKs offer a path. Pick based on whether you want to modernize end-to-end or host legacy code unchanged.

Migrate to M365 Agents SDKHost legacy in Teams SDK
What changesPackage + namespace rename, Program.cs modernization, drop deprecated servicesAdd the compat package, register the adapter; existing handler unchanged
EffortMedium (modernization scope, not a one-line swap)Minimal (install + a few lines of registration)
When to pickYou want primitives preserved across a clean SDK switch; you may need cross-channel reach laterYou want existing BotBuilder code running unchanged while you rewrite handlers piece by piece (or not at all)

Next steps

Build for Teams and M365 Copilot at once

Both SDKs reach Microsoft 365 Copilot through the same Teams client surface. Once your bot works in Teams, enable it in M365 Copilot with a single CLI command, then republish or reload the app. No code change required.