mcpbeat

Teams App Developer

microsoft/teams-app-developer

Builds, tests, and deploys Microsoft 365 apps and agents for Teams and Copilot. Includes sub-skills for project creation, local testing, cloud deployment, troubleshooting, and Slack-to-Teams migration. USE FOR: Teams agent, bot, tab, message extension, Declarative Agents, Custom Engine Agents, local testing, Agents Playground, Azure resource provision, remote deployment, Slack to Teams migration, cross-platform bot development, Block Kit to Adaptive Cards conversion. DO NOT USE FOR: general web development, non-bot/non-Teams projects.

428k tokens
context cost
the whole folder, loaded on every use
148
files
instructions only
0
copies elsewhere
how many repositories repackaged it
45 d ago
last touched
this folder, not the whole repository

Install

one command, takes just this skill from the repository
npx skills add https://github.com/microsoft/skills --skill teams-app-developer

What comes with it

557 229 bytes besides the instruction
create-project/create-project.md
docs/README.md
docs/advanced-features.md
docs/feature-gaps.md
docs/files-and-links.md
docs/identity-and-auth.md
docs/infrastructure.md
docs/interactive-responses.md
docs/messaging-and-commands.md
docs/middleware-and-handlers.md
docs/ui-components.md
docs/workflows.md
experts/README.md
experts/_expert-ts.md
experts/analyzer.md
experts/bridge/app-distribution-packaging-ts.md
experts/bridge/channel-ops-graph-ts.md
experts/bridge/commands-slash-text-ts.md
experts/bridge/cross-platform-advisor-ts.md
experts/bridge/cross-platform-architecture-ts.md
experts/bridge/events-activities-ts.md
experts/bridge/files-upload-download-ts.md
experts/bridge/identity-oauth-bridge-ts.md
experts/bridge/index.md
experts/bridge/infra-compute-ts.md
experts/bridge/infra-observability-ts.md
experts/bridge/infra-secrets-config-ts.md
experts/bridge/infra-storage-ts.md
experts/bridge/interactive-responses-ts.md
experts/bridge/link-unfurl-preview-ts.md
experts/bridge/middleware-handlers-ts.md
experts/bridge/python-cross-platform.md
experts/bridge/rate-limiting-resilience-ts.md
experts/bridge/rest-only-integration-ts.md
experts/bridge/scheduling-deferred-send-ts.md
experts/bridge/shortcuts-extensions-ts.md
experts/bridge/transport-socketmode-https-ts.md
experts/bridge/ui-app-home-personal-tab-ts.md
experts/bridge/ui-block-kit-adaptive-cards-ts.md
experts/bridge/ui-legacy-attachments-cards-ts.md

The instruction itself

11 sections, as written by the author

Microsoft 365 Agents Toolkit Skill

Build Microsoft 365 agents and Teams apps using the ATK CLI.

AI Behavior Guidelines

  • Testing Strategy: Recommend Agents Playground first (faster, no M365 needed). Use Teams workflow only if user explicitly requests it.
  • Environment Variables: NEVER hardcode secrets or make up placeholder values. Always ask users for real values.
  • Error Handling: Read error messages carefully. Check env/.env.local, .localConfigs, and atk auth list. Common pitfalls:
  • AADSTS7000229aadApp/create missing generateServicePrincipal: true in YAML — add it and re-provision
  • Missing TENANT_ID in .localConfigs → SDK uses wrong token authority → 401 from Bot Connector
  • 401 persists after auth fix → devtunnel URL may be blacklisted — create a fresh tunnel
  • See troubleshoot/troubleshoot.md for full diagnostic steps
  • Long-Running Commands — WAIT for completion:
  • atk new, atk provision, atk deploy can take several minutes
  • Always wait for completion before running the next step (timeout 120000ms+)
  • Local Service Startup — Hangs terminal (expected):
  • npm run dev, npm start, python app.py, devtunnel host, etc. will hang — the process keeps running indefinitely
  • ALWAYS run as a background process (isBackground=true) — NEVER use isBackground=false for these commands
  • Do NOT wait for it to "finish" — verify startup by checking output for "listening on port" or tunnel URL
  • If errors appear, read logs, diagnose, fix, restart
  • Use a NEW terminal to launch Agents Playground or open Teams sideloading URL
  • Monitor App Logs: Periodically check background terminal output for runtime errors. If the app crashes, read the error, fix the root cause, and restart.
  • Telemetry Tagging: Before running any atk CLI commands, set the session environment variable so all CLI invocations are tagged as skill-initiated:
   export ATK_CLI_SKILL=true

Run this once at the start of the session. All subsequent atk commands in the same terminal will inherit it.

ATK CLI Setup

atk --version  # Must be > 1.1.5-beta

If ATK is not found or version is too old:

npm i -g @microsoft/m365agentstoolkit-cli@beta

CLI Global Options

| Option | Meaning | Recommendation |

| ------ | ---------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

| -i | Interactive mode | Always use -i false in automation to avoid hanging |

| -f | Project folder | Default to be current directory, used when specifying a custom folder. When scaffolding a new project, this is the parent folder where the project folder will be created under. |

| -h | Command help | Use atk <command> -h for quick syntax checks |

Sub-Skills

| Sub-Skill | When to Use | Reference |

| -------------------- | -------------------------------------------------------------------------------- | ---------------------------------------------------------------------------- |

| create-project | Scaffold new project from template, choose template, atk new | create-project/create-project.md |

| test-playground | Test locally with Agents Playground, agentsplayground, quick testing | test-playground/test-playground.md |

| test-teams | Run on Teams, devtunnel, sideload, Teams testing, test in Copilot | test-teams/test-teams.md |

| provision-deploy | Provision Azure resources, deploy to cloud, atk provision, atk deploy | provision-deploy/provision-deploy.md |

| troubleshoot | Fix errors, 401, port conflicts, YAML errors, stale bots | troubleshoot/troubleshoot.md |

| slack-to-teams | Migrate Slack bot to Teams, cross-platform bridging, Block Kit to Adaptive Cards | slack-to-teams/SKILL.md |

> MANDATORY: Before executing any workflow, read the corresponding sub-skill document.

Shared References

  • manifest-and-yaml.md — Project files, YAML config, env vars, .localConfigs flow
  • commands.md — ATK CLI commands: package, validate, share, collaborate
  • templates.md — Complete template catalog with language support
  • experts/ — 100+ micro-expert files: Teams SDK, Slack SDK, cross-platform bridging, deploy, AI models, security, language conversion
  • docs/ — Platform comparison guides: UI, messaging, identity, infrastructure, feature gaps

Workflow Chains

Match user intent to the smallest valid workflow.

| User Intent | Workflow (read in order) |

| ----------------------------- | ------------------------------------------- |

| Build new app from scratch | create-project → test-playground |

| Test existing project locally | test-playground (recommended) or test-teams |

| Deploy to Azure | provision-deploy |

| Fix broken bot | troubleshoot → re-test |

| Migrate Slack bot to Teams | slack-to-teams |

> MANDATORY: Before executing any slack-to-teams workflow, read slack-to-teams/SKILL.md first. The sub-skill contains a routed expert system with 100+ micro-expert files for cross-platform bot development.

ATK Project Context Resolution

Resolve config values only when missing. If a value is already known in the session, reuse it.

Step 1: Detect ATK Project

If m365agentstoolkit*.yml exists in the current folder, treat it as an ATK project and parse configuration.

Step 2: Resolve Common Configuration

Resolve variables referenced in m365agentstoolkit*.yml. Common variables:

AZURE_OPENAI_API_KEY

AZURE_OPENAI_ENDPOINT

AZURE_OPENAI_DEPLOYMENT_NAME

Step 3: Collect Missing Values

If required values are missing, ask the user for only the missing ones.

Refer to manifest-and-yaml.md for full config-file details.

How to use it

Copy the folder

Take microsoft/teams-app-developer from the repository into ~/.claude/skills for personal use, or into .claude/skills inside a project.

Check the name does not clash

The agent identifies a skill by the name field in its header. Two skills with the same name cannot sit side by side — one of them will be ignored.

Install what it needs

The instructions reference npm. Without those the skill loads but fails at the first command.