Skip to main content

Switching from DevTools to Microsoft 365 Agents Playground

DevTools, a local set of development tools for testing Teams apps without sideloading, is being retired across all three Teams SDK languages in favor of Microsoft 365 Agents Playground. The DevTools integrations in code have been marked as obsolete in TypeScript and .NET, and for Python the package has already been removed from PyPI. If you use DevTools today, here is what to install, what to remove from your bot, and how the local dev loop changes.

To make the development experience more streamlined, we've decided to adopt Agents Playground as our primary local development tool. This affords developers the robust feature set of Agents Playground while still streamlining being able to test your agent where it truly matters, in Teams.

What changesโ€‹

  • TypeScript and .NET: DevtoolsPlugin and AddTeamsDevTools() are now marked obsolete. They keep working through the grace period and emit a deprecation warning at build time. Removal will happen in a later release, so you can migrate at your own pace.
  • Python: The microsoft-teams-devtools package was deprecated and has already been removed. If you depend on it, move to Playground now.

What is Microsoft 365 Agents Playgroundโ€‹

Playground is a standalone web app you launch from the command line, installed alongside your bot rather than bundled into your project. It opens a chat UI at http://localhost:56150, lets you send messages to your bot, mock arbitrary activity types (membership changes, invokes, message reactions), and inspect every HTTP exchange in a log panel.

Installโ€‹

npm install -g @microsoft/m365agentsplayground

Option 2: Standalone binary (Windows)โ€‹

winget install agentsplayground

For other platforms and full install options, see the Microsoft Learn guide.

Migration stepsโ€‹

TypeScriptโ€‹

Remove the plugin from your App constructor:

- import { DevtoolsPlugin } from '@microsoft/teams.dev';
import { App } from '@microsoft/teams.apps';

- const app = new App({ plugins: [new DevtoolsPlugin()] });
+ const app = new App();

Then remove @microsoft/teams.dev from your package.json.

.NETโ€‹

Remove the call and the project reference:

- builder.AddTeams().AddTeamsDevTools();
+ builder.AddTeams();

Drop the Microsoft.Teams.Plugins.AspNetCore.DevTools ProjectReference from your .csproj.

Pythonโ€‹

Remove the plugin from your App and drop microsoft-teams-devtools from your dependencies:

- from microsoft_teams.devtools import DevToolsPlugin
from microsoft_teams.apps import App

- app = App(plugins=[DevToolsPlugin()])
+ app = App()

If you never used the DevTools package, no code change is needed. Just install Playground.

Run Playground against your botโ€‹

Start your bot locally on port 3978, then in another shell:

agentsplayground -e http://localhost:3978/api/messages -c msteams

The -c msteams flag runs Playground in the Teams channel, so your agent receives the same channelId and lifecycle events (like installation updates) it would in production.

The UI opens at http://localhost:56150. Type a message, your bot replies inline, and the log panel shows the full HTTP round trip.

Running without credentialsโ€‹

DevTools bypassed authentication implicitly because it ran in-process. Playground sends real HTTP requests, so your bot needs to accept them.

The easiest path is to leave your credentials unset. The SDK detects there are no credentials and accepts unauthenticated requests, with a startup warning so the mode is explicit:

[WARN] No credentials configured (CLIENT_ID / CLIENT_SECRET / TENANT_ID). Bot will accept unauthenticated requests on /api/messages.

Want to test in Teams directly?โ€‹

Playground is the fastest way to iterate locally, but you can also run your agent inside Teams itself. There are a few ways to get there.

Let your coding agent handle it with the teams-dev agent skill, which works with Copilot, Claude Code, and Cursor. Ask it to "get my agent running in Teams" and it drives the registration for you.

Or use the Teams Developer CLI directly. It registers your agent (identity, credentials, and manifest) in a single command, so you can test in the real Teams client instead of locally:

npm install -g @microsoft/teams.cli@preview
teams login
teams app create --name "My Agent" --endpoint https://<your-tunnel>/api/messages --env .env

The Teams Developer CLI is not required for this. You can register the app and create the bot resource directly with the Azure CLI (az) or the Azure portal; the Teams CLI simply rolls those steps into one command.

See the CLI docs to get your agent running in Teams.

What stays the sameโ€‹

Your bot code, message handlers, manifests, and deployment story all work unchanged. Only the local debugging glue moves: a plugin or project reference goes away, and a standalone tool takes its place.

Questions and feedbackโ€‹

File issues against the relevant SDK repo: