Skip to content
Guides

OpenClaw Microsoft Teams manifest and permissions

The RSC permissions for channels and group chats, the redacted example manifest and its must-match fields, updating an app with the CLI or by hand, what RSC alone can and cannot do, the RSC versus Graph table, the Graph application permissions for media and history, and the Graph media fallback

6 min read

Most Teams surprises are permission surprises: the bot hears a channel but cannot see the image someone pasted, or it answers live but cannot catch up after a restart. The OpenClaw docs separate the two permission systems cleanly, resource-specific consent in the manifest for real-time listening and Microsoft Graph for media and history. Here is the manifest, the caveats, the update flow, and the capability split.

The manifest

  • The manifest declares eight resource-specific permissions that apply only inside the team or chat where the app is installed: for channels, reading channel messages without a mention, sending channel messages, and reading members, owners, channel settings, team members and team settings, and for group chats, reading chat messages without a mention; the Teams CLI adds one with the app rsc add command and the application type.
  • The redacted example is a minimal valid manifest: the schema and manifest version, an app ID, a short name, developer details with website, privacy and terms URLs, descriptions, the outline and colour icons, an accent colour, one bot entry with the bot ID, the personal, team and group-chat scopes, notification-only, calling and video off and file support on, the web application info, and the authorization block listing the resource-specific permissions.
  • The must-have caveats: the bot ID and the web application info ID must both match the Azure Bot app ID, the scopes must include every surface you plan to use, file support must be true for file handling in personal scope, and the resource-specific permissions must include channel read and send for channel traffic.
  • To update an existing app you download the manifest with the CLI, edit it and upload it back, with the version auto-bumped when the content changed, then reinstall the app in each team and fully quit and relaunch Teams rather than closing the window to clear cached app metadata; the manual path edits the JSON, increments the version, re-zips it with the two icons, and uploads the zip in the Teams Admin Center or as a sideloaded custom app.
Bottom line: RSC is for real-time listening; Graph API is for historical access.

RSC alone versus Graph

With Teams RSC only, meaning the app is installed with no Graph API permissions, the bot can read and send channel message text and receive personal file attachments in DMs, but it cannot see channel or group image or file contents, whose payload holds only an HTML stub, cannot download attachments stored in SharePoint or OneDrive, and cannot read message history beyond the live webhook event. Adding Microsoft Graph application permissions unlocks downloading hosted content such as images pasted into messages, downloading file attachments from SharePoint or OneDrive, and reading channel and chat history through Graph. The comparison table makes the split explicit: RSC delivers real-time messages through the webhook and Graph only polls, RSC has no historical access while Graph can query history, RSC needs only the manifest while Graph requires admin consent and a token flow, and RSC works only while the bot is running whereas Graph can query at any time; to catch up on messages missed while offline you need Graph with the channel message read-all permission and admin consent.

Graph-enabled media and history

  • Enable only the Graph application permissions the scopes and data you use require: channel message read-all for channel attachments and history, chat read-all for group-chat attachments and history, and files read-all only when attachment bytes must be downloaded from SharePoint or OneDrive storage; then grant admin consent for the tenant, bump the manifest version, re-upload, reinstall the app, and fully quit and relaunch Teams.
  • Teams can strip file markers from the HTML activity sent to a bot, leaving an activity indistinguishable from an ordinary HTML message while the complete attachment reference exists only on the Graph copy; the Graph media fallback key, off by default so existing installs gain no extra Graph traffic or permission errors, adds one Graph message lookup whenever a channel or group HTML activity produced no directly downloadable media, including ordinary or mention-only messages.
  • Mentions of users already in the conversation work out of the box, and dynamically searching and mentioning people who are not in the current conversation needs the user read-all application permission with admin consent.

OpenClaw on Microsoft Teams is the channel post this manifest serves, and OpenClaw Microsoft Teams cards and actions the Adaptive Card surfaces whose roster lookups depend on the permissions above.

Two permission systems, one bot

The reason a bot can hear a channel and still miss its images is that Teams grants listening through the manifest and content through Graph, and nothing in the first implies the second. OpenClaw Slack manifest and scopes shows the single-manifest model on Slack by contrast, and Connect your first channel in five minutes the walkthrough for a channel where none of this is needed.

On Diali

Microsoft Teams is not among the channels Diali connects today: WhatsApp, Telegram, Discord, Slack, Mattermost, Matrix, SMS and voice. Hosted OpenClaw on Diali is the assistant and Diali security describes the boundary that applies to each connected channel.

  • Bot ID and web application ID must equal the Azure Bot app ID.
  • RSC hears in real time; Graph reads history and media.
  • Quit Teams fully after every manifest change.
Get started

Stop reading about it, build one

Set up an agent, pick a channel, and have it working inside the app you already keep open.