add-teams
Skill1 starsChanged 42 days agoMITView on GitHub
Add Microsoft Teams channel integration via Chat SDK.
- Reads credentials
- Installs packages
9 other projects use a version of this, 2 of them edited.
Adopted by
Most recently taken up by
- microsoft/Copilot-Managed-Runtimetheir own version, first seen Nov 8, 2026
- nanocoai/nanoclawtheir own version, first seen Nov 3, 2026
- microsoft/power-platform-skillstheir own version, first seen Oct 13, 2026
- prathish-ks/isthmustheir own version, first seen Oct 12, 2026
- gavrielc/nanoclawtheir own version, first seen Oct 8, 2026
- qwibitai/nanoclawtheir own version, first seen Oct 8, 2026
Used with
Projects with it also use add-anydoc, add-clidash and 9 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
TomGranotSkilladd-anydoc
Add local office-document-to-Markdown conversion to NanoClaw agent containers with the pinned Firecrawl AnyDoc CLI. Use when agents need to read attached Word, PowerPoint, Excel, OpenDocument, RTF, EPUB, CSV, or text-based PDF files without uploading them to a hosted parser.
Also in 5 projects that use this
TomGranotSkilladd-clidash
Add clidash — a zero-dependency, read-only web dashboard that derives its tabs and tables at runtime from any CLI that lists resources as JSON. Ships pre-wired for NanoClaw's ncl CLI (agent groups, sessions, channels, users, roles), plus message-activity charts, a log tail, and a read-only file viewer for group skills/CLAUDE.md/profiles.
Also in 5 projects that use this
qwibitaiSkilladd-iron-proxy
Install or refresh Iron Proxy and its official Iron Control web console for NanoClaw. Use when selecting the Iron gateway, adding its management UI, configuring credentials and grants, or restoring the proxy, approval bridge, and agent guidance.
Also in 4 projects that use this
qwibitaiSkilladd-mattermost
Add a self-hosted or cloud Mattermost bot channel through the Chat SDK bridge, reusing a healthy server when available and linking to official server setup guidance when needed.
Also in 4 projects that use this
nanocoaiSkilladd-cursor
Use Cursor (local Agent SDK) as a full agent provider — planning, tool orchestration, MCP tools, session resume — alongside or instead of Claude. Cursor-account sign-in or API key, held by the credential gateway. Per-group via `ncl groups config update --provider cursor`. Distinct from using Cursor as a cloud agent (those run on Cursor VMs and are not this provider).
Also in 3 projects that use this
- +5 more from TomGranot
- +1 more from qwibitai
Other versions9 projects use a version of this.
Word for word · 0
None found.
Edited · 2
- microsoft/amplifier-app-nanoclaw★ 598% same
- mcarmona1064-cell/clawbridge-codex★ 190% same
Wrote their own version · 7
- gavrielc/nanoclaw★ 31ksame name
- nanocoai/nanoclaw★ 31ksame name
- qwibitai/nanoclaw★ 31ksame name
- microsoft/power-platform-skills★ 1.1ksame name
- microsoft/Copilot-Managed-Runtime★ 4same name
- TomGranot/groupguard★ 3same name
- prathish-ks/isthmus★ 2same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository54 other files it gives its agents.
- container/AGENTS.mdAGENTS.md
- container/CLAUDE.mdCLAUDE.md
- add-atomic-chat-toolSkill
- add-codexSkill
- add-dashboardSkill
- add-deltachatSkill
- add-discordSkill
- add-emacsSkill
- add-gcal-toolSkill
- add-gchatSkill
- add-githubSkill
- add-gmail-toolSkill
- add-imessageSkill
- add-karpathy-llm-wikiSkill
- add-linearSkill
- add-macos-statusbarSkill
- add-matrixSkill
- add-mnemonSkill
- add-ollama-providerSkill
- add-ollama-toolSkill
- add-opencodeSkill
- add-piSkill
- add-resendSkill
- add-rtkSkill
- add-signalSkill
- add-slackSkill
- add-telegramSkill
- add-vercelSkill
- add-webexSkill
- add-wechatSkill
- add-whatsapp-cloudSkill
- add-whatsappSkill
- archive-tripSkill
- customizeSkill
- debugSkill
- get-qodo-rulesSkill
- init-first-agentSkill
- init-onecliSkill
- learnSkill
- manage-channelsSkill
- manage-mountsSkill
- migrate-from-openclawSkill
- migrate-from-v1Skill
- migrate-memorySkill
- migrate-nanoclawSkill
- nano-pvt-hubSkill
- new-knowledge-graph-tutorSkill
- new-tripSkill
- qodo-pr-resolverSkill
- reflectSkill
- setupSkill
- update-nanoclawSkill
- update-skillsSkill
- use-native-credential-proxySkill
The file
We split this skill into the rules it gives an agent
3 rules. 0 are common, 1 is distinctive, and 2 are very specific to this project.
0
Common
Most of the 8 edited versions we read keep these.
1
Distinctive
This author's own choices. Worth a look.
2
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 84
Create the Entra app, client secret, and bot registration:
- Very specific: line 196
Create two icon PNGs (32x32 outline.png, 192x192 color.png), zip all three files together.
- Very specific: line 243
If you're in the middle of /setup, return to the setup flow now.
“Common” is measured: kept by at least 6 in 10 of the 8 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Add Microsoft Teams Channel
Connect NanoClaw to Microsoft Teams for interactive chat in team channels, group chats, and direct messages.
Install
NanoClaw doesn't ship channels in trunk. This skill copies the Teams adapter in from the channels branch.
Pre-flight (idempotent)
Skip to Credentials if all of these are already in place:
src/channels/teams.tsexistssrc/channels/teams-registration.test.tsexistssrc/channels/index.tscontainsimport './teams.js';@chat-adapter/teamsis listed inpackage.jsondependencies
Otherwise continue. Every step below is safe to re-run.
1. Fetch the channels branch
git fetch origin channels2. Copy the adapter and its registration test
git show origin/channels:src/channels/teams.ts > src/channels/teams.ts
git show origin/channels:src/channels/teams-registration.test.ts > src/channels/teams-registration.test.ts3. Append the self-registration import
Append to src/channels/index.ts (skip if the line is already present):
import './teams.js';4. Install the adapter package (pinned)
pnpm install @chat-adapter/teams@4.29.05. Build and validate
pnpm run build
pnpm exec vitest run src/channels/teams-registration.test.tsBoth must be clean before proceeding. teams-registration.test.ts is the one integration test: it imports the real channel barrel and asserts the registry contains teams. It goes red if the import './teams.js'; line is deleted or drifts, if the barrel fails to evaluate, or if @chat-adapter/teams isn't installed (the import throws) — so it also implicitly verifies the dependency from step 4. The adapter also calls core's createChatSdkBridge(...); that typed core-API consumption is guarded by pnpm run build.
End-to-end message delivery against a real Teams workspace is verified manually once the service is running — see Next Steps and the webhook setup above.
Credentials
Two paths — manual (Azure Portal) or auto (Teams CLI).
Auto: Teams CLI
Requires Node.js 18+, a Microsoft 365 account with sideloading permissions, and a public HTTPS endpoint (ngrok, Cloudflare Tunnel, or similar).
Install the CLI:
npm install -g @microsoft/teams.cli@previewSign in and verify:
teams login teams statusCreate the Entra app, client secret, and bot registration:
teams app create \ --name "NanoClaw" \ --endpoint "https://your-domain/api/webhooks/teams"The CLI prints the credentials as
CLIENT_ID,CLIENT_SECRET, andTENANT_ID. Map them to NanoClaw's env keys:CLIENT_ID→TEAMS_APP_IDCLIENT_SECRET→TEAMS_APP_PASSWORDTENANT_ID→TEAMS_APP_TENANT_ID
- Pick Install in Teams from the post-create menu and confirm in the Teams dialog.
Continue to Configure environment.
The steps below describe the manual Azure Portal path.
Step 1: Create an Azure AD App Registration
- Go to Azure Portal > App registrations > New registration
- Name it (e.g., "NanoClaw")
- Supported account types: Single tenant (your org only) or Multi tenant (any org)
- Click Register
- Copy the Application (client) ID and Directory (tenant) ID from the Overview page
Step 2: Create a Client Secret
- In the App Registration, go to Certificates & secrets
- Click New client secret, description "nanoclaw", expiry 180 days
- Click Add and copy the Value immediately (shown only once)
Step 3: Create an Azure Bot
- Go to Azure Portal > search Azure Bot > Create
- Fill in:
- Bot handle: unique name (e.g., "nanoclaw-bot")
- Type of App: match your app registration (Single or Multi Tenant)
- Creation type: Use existing app registration
- App ID: paste from Step 1
- App tenant ID: paste from Step 1 (Single Tenant only)
- Click Review + create > Create
Or use Azure CLI:
az group create --name nanoclaw-rg --location eastus
az bot create \
--resource-group nanoclaw-rg \
--name nanoclaw-bot \
--app-type SingleTenant \
--appid YOUR_APP_ID \
--tenant-id YOUR_TENANT_ID \
--endpoint "https://your-domain/api/webhooks/teams"Step 4: Configure Messaging Endpoint
- Go to your Azure Bot resource > Configuration
- Set Messaging endpoint to
https://your-domain/api/webhooks/teams - Click Apply
Step 5: Enable Teams Channel
- In the Azure Bot resource, go to Channels
- Click Microsoft Teams > Accept terms > Apply
Or via CLI:
az bot msteams create --resource-group nanoclaw-rg --name nanoclaw-botStep 6: Create and Sideload Teams App
Create a manifest.json:
{
"$schema": "https://developer.microsoft.com/en-us/json-schemas/teams/v1.16/MicrosoftTeams.schema.json",
"manifestVersion": "1.16",
"version": "1.0.0",
"id": "YOUR_APP_ID",
"packageName": "com.nanoclaw.bot",
"developer": {
"name": "NanoClaw",
"websiteUrl": "https://your-domain",
"privacyUrl": "https://your-domain",
"termsOfUseUrl": "https://your-domain"
},
"name": { "short": "NanoClaw", "full": "NanoClaw Assistant" },
"description": {
"short": "NanoClaw assistant bot",
"full": "NanoClaw personal assistant powered by Claude."
},
"icons": { "outline": "outline.png", "color": "color.png" },
"accentColor": "#4A90D9",
"bots": [{
"botId": "YOUR_APP_ID",
"scopes": ["personal", "team", "groupchat"],
"supportsFiles": false,
"isNotificationOnly": false
}],
"permissions": ["identity", "messageTeamMembers"],
"validDomains": ["your-domain"]
}Create two icon PNGs (32x32 outline.png, 192x192 color.png), zip all three files together.
Sideload in Teams:
- Open Teams > Apps > Manage your apps
- Click Upload an app > Upload a custom app
- Select the zip file
Sideloading requires Teams admin access. Free personal Teams does NOT support sideloading. Use a Microsoft 365 Business account or developer tenant.
Step 7: Receive All Messages (Optional)
By default, the bot only receives messages when @-mentioned. To receive all messages in a channel without @-mention, add RSC permissions to manifest.json:
{
"authorization": {
"permissions": {
"resourceSpecific": [
{ "name": "ChannelMessage.Read.Group", "type": "Application" }
]
}
}
}Configure environment
Add to .env:
TEAMS_APP_ID=your-app-id
TEAMS_APP_PASSWORD=your-client-secret
# For Single Tenant only:
TEAMS_APP_TENANT_ID=your-tenant-id
TEAMS_APP_TYPE=SingleTenantSync to container: mkdir -p data/env && cp .env data/env/env
Webhook server
The Chat SDK bridge automatically starts a shared webhook server on port 3000 (configurable via WEBHOOK_PORT env var). The server handles /api/webhooks/teams for Teams and other webhook-based adapters. This port must be publicly reachable from the internet for Azure Bot Service to deliver activities.
For local development without a public URL, use a tunnel (e.g., ngrok http 3000) and update the messaging endpoint in Azure Bot Configuration.
Next Steps
If you're in the middle of /setup, return to the setup flow now.
Otherwise, run /manage-channels to wire this channel to an agent group.
Channel Info
- type:
teams - terminology: Teams has "teams" containing "channels." The bot can also receive DMs (personal scope) and group chat messages. Channels support threaded replies.
- platform-id-format:
teams:{base64-encoded-conversation-id}:{base64-encoded-service-url}— auto-generated by the adapter, not human-readable. Use the auto-created messaging group ID for wiring. - how-to-find-id: Send a message to the bot in the channel. NanoClaw auto-creates a messaging group and logs the platform ID. Use that messaging group ID for wiring.
- supports-threads: yes (channels only; DMs and group chats are flat)
- typical-use: Team collaboration with the bot in channels; personal assistant via DMs
- default-isolation: Separate agent group per team. DMs can share an agent group with your main channel for unified personal memory.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

