teams-app-patterns-skill
Full Teams app development patterns.
SKILL.md
| Name | teams-app-patterns-skill |
| Description | Full Teams app development patterns. |
name: "Teams App Patterns Skill" description: "Full Teams app development patterns." user-invokable: false applyTo: "/teams,/manifest,**/m365"
Teams App Patterns Skill
Full Teams app development patterns.
ā ļø Staleness Warning
Teams platform evolves rapidly. Last validated: February 13, 2026 (M365 Agents Toolkit CLI 3.1.0, Manifest v1.19, DA v1.6)
Check: Teams Docs, M365 Agents Toolkit
š” Use
@m365agentschat participant in VS Code Copilot Chat for scaffolding, schema help, and troubleshooting.
Available MCP Tools
The @m365agents chat participant exposes MCP tools. Use these programmatically before falling back to manual docs:
| Tool | Purpose | Example Use |
|---|---|---|
mcp_m365agentstoo_get_schema | Get current manifest schemas | Validate app manifest (v1.19), DA manifest (v1.0), API plugin (v2.1), M365 agents YAML |
mcp_m365agentstoo_get_code_snippets | Working code samples | Teams AI library, Teams JS SDK, botbuilder patterns |
mcp_m365agentstoo_get_knowledge | Development knowledge base | Copilot extensibility, capabilities, best practices |
mcp_m365agentstoo_troubleshoot | Diagnose issues | Sideloading, conditional access, schema errors |
When to use: Any M365/Teams development task ā call the relevant MCP tool first, then supplement with skill knowledge.
ā ļø Critical: Declarative Agent v1.6 Schema
declarativeAgent.json for M365 Copilot agents has specific schema requirements:
| Field | Wrong (Pre-v1.6) | Correct (v1.6) |
|---|---|---|
disclaimer | "text string" | { "text": "..." } |
behavior_overrides.suggestions | false | { "disabled": false } |
behavior_overrides.special_instructions | "text string" | { "discourage_model_knowledge": false } |
user_overrides | { "capabilities": [...] } | [ { "path": "$.capabilities[?(@.name=='X')]", "allowed_actions": ["remove"] } ] |
CLI Version Matters:
- v2.x:
--app-package-fileflag, may NOT include declarativeAgent.json in zip (bug) - v3.x:
--package-fileflag, correctly includes declarativeAgent.json
Upgrade CLI if packaging fails:
npm install -g @microsoft/teamsapp-cli@latest
teamsapp --version # Should be 3.x
App Package
appPackage/
āāā manifest.json # Teams app manifest (schema v1.19+)
āāā outline.png # 32x32, transparent bg, white only
āāā color.png # 192x192, no transparency
āāā declarativeAgent.json # Required for M365 Copilot agents (DA v1.6)
Icon Requirements (CRITICAL)
| Icon | Size | Background | Content |
|---|---|---|---|
| color.png | 192Ć192 | Any | Full color logo |
| outline.png | 32Ć32 | Transparent (Alpha=0) | White only (255,255,255) |
ā Common failures: Wrong dimensions, outline has gray background, outline uses colors
Icon Generation from SVG (Brand Consistency)
When syncing icons from VS Code assets to M365:
# Install sharp if needed
npm install sharp
# Generate color.png (192x192) from logo.svg
node -e "const sharp = require('sharp'); sharp('vscode-extension/assets/logo.svg').resize(192, 192).png().toFile('appPackage/color.png')"
# Generate outline.png (32x32) from monochrome SVG
node -e "const sharp = require('sharp'); sharp('vscode-extension/assets/logo-mono.svg').resize(32, 32).png().toFile('appPackage/outline.png')"
Source of truth: platforms/vscode-extension/assets/logo.svg and logo-mono.svg
Manifest Required Fields
$schema,manifestVersion,version,idname.short,name.fulldescription.short,description.fullicons.outline,icons.colordeveloper.*,validDomains
Bot Handler
class MyBot extends TeamsActivityHandler {
constructor() {
super();
this.onMessage(async (context, next) => { ... });
}
}
Adaptive Card Structure
{ "type": "AdaptiveCard", "version": "1.5", "body": [...], "actions": [...] }
Teams SDK
await microsoftTeams.app.initialize();
const context = await microsoftTeams.app.getContext();
SSO
const token = await microsoftTeams.authentication.getAuthToken();
Toolkit Commands
The M365 Agents Toolkit (formerly Teams Toolkit) provides:
CLI commands:
npx teamsapp package --env local
npx teamsapp validate --package-file ...
npx teamsapp preview --env local
MCP tools (available when M365 Agents Toolkit extension is installed):
mcp_m365agentstoo_get_schema("app_manifest") # Get Teams app manifest schema
mcp_m365agentstoo_get_schema("declarative_agent_manifest") # Get DA schema
mcp_m365agentstoo_get_code_snippets("adaptive cards") # Find code samples
mcp_m365agentstoo_troubleshoot("sideloading fails") # Diagnose issues
@m365agents chat participant ā ask in VS Code Copilot Chat:
- "I want to create a declarative agent"
- "How to add SSO?"
- "My Teams app doesn't sideload"
- "Generate a manifest for my scenario"
Common Issues
| Issue | Solution | MCP Tool |
|---|---|---|
| Manifest fails | Check schema version | mcp_m365agentstoo_get_schema |
| Bot not responding | Verify endpoint/tunnel | mcp_m365agentstoo_troubleshoot |
| Sideload fails | Enable custom apps in admin | mcp_m365agentstoo_troubleshoot |
| Need code samples | Find working patterns | mcp_m365agentstoo_get_code_snippets |
| Conditional access blocks CLI | @m365agents for guidance or manual Developer Portal upload | mcp_m365agentstoo_troubleshoot |
Conditional Access Workaround
Microsoft orgs with strict conditional access policies may block teamsapp auth login m365. Error: AADSTS530084.
Fallback: Manual Developer Portal Upload
- Build package:
npm run package:dev - Validate:
npx teamsapp validate --package-file ./appPackage/build/appPackage.dev.zip - Open: https://dev.teams.microsoft.com/apps
- Import app package ā Upload zip
- Publish to org catalog
Store Description Strategy
Key insight: Same product, different audiences require different messaging.
| Platform | Audience | Focus |
|---|---|---|
| VS Code Marketplace | Developers | Code acceleration, syntax, debugging |
| M365/Teams | Knowledge workers | Research, analysis, productivity |
M365 Positioning Example:
- ā "Accelerate your Python development"
- ā "Your AI research partner. Remembers context, grows with you."
Synapses
See synapses.json for connections.