{"id":25637,"date":"2026-05-01T13:15:16","date_gmt":"2026-05-01T20:15:16","guid":{"rendered":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/?p=25637"},"modified":"2026-05-01T13:15:16","modified_gmt":"2026-05-01T20:15:16","slug":"python-support-for-the-microsoft-teams-sdk-is-now-generally-available","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/python-support-for-the-microsoft-teams-sdk-is-now-generally-available\/","title":{"rendered":"Python support for the Microsoft Teams SDK is now generally available"},"content":{"rendered":"<p><span data-contrast=\"auto\">Today we\u2019re announcing the general availability (GA) of <\/span><b><span data-contrast=\"auto\">Python support in the Microsoft Teams SDK.<\/span><\/b><span data-contrast=\"auto\">\u00a0Python developers can now build Teams-native apps and agents using the same SDK surface that\u00a0powers modern Teams experiences across our TypeScript and .NET stacks<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<h2><b><span data-contrast=\"auto\">Get started<\/span><\/b><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;201341983&quot;:0,&quot;335551550&quot;:1,&quot;335551620&quot;:1,&quot;335559685&quot;:0,&quot;335559737&quot;:0,&quot;335559738&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:278}\">\u00a0<\/span><\/h2>\n<p>In your terminal:<\/p>\n<pre class=\"prettyprint language-default\"><code class=\"language-default\">pip install microsoft-teams-apps<\/code><\/pre>\n<p>Basic usage:<\/p>\n<pre class=\"prettyprint language-default\"><code class=\"language-default\">from microsoft_teams.apps import App, ActivityContext \r\nfrom microsoft_teams.api import MessageActivity \r\n \r\napp = App() \r\n \r\n@app.on_message \r\nasync def handle_message(ctx: ActivityContext[MessageActivity]): \r\n   await ctx.send(f\"You said: {ctx.activity.text}\") \r\n \r\n# Start the app \r\nawait app.start() <\/code><\/pre>\n<p><span data-contrast=\"auto\">With Python support, your orchestration logic, reasoning layer, workflow automation, or domain-specific agents can now:\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<ul>\n<li><span data-contrast=\"auto\">\u00a0Participate in chats, channels, and meetings as a first-class Teams app<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<li><span data-contrast=\"auto\">\u00a0Stream responses and render adaptive cards in conversation<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<li><span data-contrast=\"auto\">\u00a0Plug into your existing Python server, agent framework, or LLM stack<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<li><span data-contrast=\"auto\">\u00a0Send proactive in-conversation messages to users and groups\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<h2><b><span data-contrast=\"auto\">What&#8217;s included\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<\/span><\/b><span data-ccp-props=\"{}\">\u00a0<\/span><\/h2>\n<p><span data-contrast=\"auto\">The Python release ships with the capabilities developers need to move from prototype to\u00a0production:<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<ul>\n<li><span data-contrast=\"auto\">Decorator-based activity routing. Handle messages, mentions, and conversation events using familiar Python decorators \u2014 no boilerplate, no custom dispatchers.<\/span><\/li>\n<li><span data-contrast=\"auto\">Built-in OAuth. First-class user authentication flows are handled by the SDK, so you can focus on your app instead of token plumbing.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335557856&quot;:16645629,&quot;335559685&quot;:450,&quot;335559737&quot;:0,&quot;335559738&quot;:0,&quot;335559739&quot;:0}\">\u00a0<\/span><\/li>\n<li><span data-contrast=\"auto\">Type-safe Microsoft Graph access. Call Microsoft Graph as the signed-in user or as the app via the <strong>user_graph<\/strong> and <strong>app_graph<\/strong> properties, with full type hints.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335557856&quot;:16645629,&quot;335559685&quot;:450,&quot;335559737&quot;:0,&quot;335559738&quot;:0,&quot;335559739&quot;:0}\">\u00a0<\/span><\/li>\n<li><span data-contrast=\"auto\">Extensible plugin architecture. Compose middleware, telemetry, and custom behaviors into your\u00a0app without modifying core SDK code.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335557856&quot;:16645629,&quot;335559685&quot;:450,&quot;335559737&quot;:0,&quot;335559738&quot;:0,&quot;335559739&quot;:0}\">\u00a0<\/span><\/li>\n<\/ul>\n<h2><b><span data-contrast=\"auto\">Start\u00a0building\u00a0today<\/span><\/b><span data-ccp-props=\"{}\">\u00a0<\/span><\/h2>\n<p><span data-contrast=\"auto\">With GA support for Python, developers have a direct path to extend their services into one of the most widely used collaboration platforms in the world.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<ul>\n<li aria-setsize=\"-1\" data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"4\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"1\" data-aria-level=\"1\"><b><span data-contrast=\"auto\">Follow the quick start guide: <\/span><\/b><span data-contrast=\"auto\">You can create a new Teams agent in seconds. The <\/span><a href=\"https:\/\/microsoft.github.io\/teams-sdk\/python\/getting-started\/\">quick start<\/a> <span data-contrast=\"auto\">guides you through it step by step.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li aria-setsize=\"-1\" data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"4\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"2\" data-aria-level=\"1\"><b><span data-contrast=\"auto\">Explore an example:\u00a0<\/span><\/b><span data-contrast=\"auto\">Our\u00a0<\/span><a href=\"https:\/\/github.com\/OfficeDev\/Microsoft-Teams-Samples\/tree\/main\/samples\/TeamsSDK\/bot-quickstart\/python\/bot-quickstart\"><span data-contrast=\"none\">Teams sample inventory<\/span><\/a><span data-contrast=\"auto\">\u00a0can help you\u00a0dig deeper into the code to learn more\u00a0via a hands-on experience.\u00a0<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li aria-setsize=\"-1\" data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"4\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"3\" data-aria-level=\"1\"><b><span data-contrast=\"auto\">Join the community:<\/span><\/b><b><i><span data-contrast=\"auto\">\u00a0<\/span><\/i><\/b><span data-contrast=\"auto\">Join the discussions in the Microsoft 365 Developer Forum, share your agent ideas or ask questions on Stack Overflow, and follow our updates on the Teams developer blog. Report any issues you experience in the <a href=\"http:\/\/aka.ms\/NewIssue\">Teams SDK repo<\/a>.<\/span><\/li>\n<\/ul>\n<p><span data-contrast=\"auto\">We\u2019re excited to see what you build!<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">Learn more about the <\/span><a href=\"https:\/\/devblogs.microsoft.com\/microsoft365dev\/announcing-the-updated-teams-ai-library-and-mcp-support\/\"><span data-contrast=\"none\">Microsoft Teams SDK.<\/span><\/a><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Python developers can now build Teams-native apps and agents using the same SDK surface that\u00a0powers modern Teams experiences across our TypeScript and .NET stacks\u00a0<\/p>\n","protected":false},"author":212922,"featured_media":25644,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1,128],"tags":[],"class_list":["post-25637","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-microsoft-365-developer","category-microsoft-teams"],"acf":[],"blog_post_summary":"<p>Python developers can now build Teams-native apps and agents using the same SDK surface that\u00a0powers modern Teams experiences across our TypeScript and .NET stacks\u00a0<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/posts\/25637","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/users\/212922"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/comments?post=25637"}],"version-history":[{"count":1,"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/posts\/25637\/revisions"}],"predecessor-version":[{"id":25645,"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/posts\/25637\/revisions\/25645"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/media\/25644"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/media?parent=25637"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/categories?post=25637"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/tags?post=25637"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}