Skip to content

Microsoft Teams AI agent: connect an AI agent to your team

A Microsoft Teams AI agent is an external agent connected to Teams through UtilitySpaces' Graph OAuth connector. Reads run open; every write stops for human approval.

Last updated

6 minute read · Written by the team that builds UtilitySpaces. More about UtilitySpaces.

A Microsoft Teams AI agent is an external agent that reads channels and messages in your team and proposes changes — each write stopped by a person to approve before it reaches Teams. The connection goes through Microsoft’s Graph OAuth, which lets team administrators set granular permissions rather than relying on a single, insecure API key that grants total access. By using UtilitySpaces, you maintain control over which scopes the agent can access, ensuring the AI performs only the tasks it was explicitly assigned to complete. Each write action, such as posting a message or managing channel members, is automatically intercepted and placed into a human approval gate. This means an AI can propose a necessary action, but a human must review and confirm it before any change is actually applied to your Teams environment. This architecture provides a secure, auditable, and controlled way to bring automation into your collaborative workflows while maintaining full oversight. The connection goes through Microsoft’s Graph OAuth, so the agent’s reach is set by the scopes a team admin consents to, not by a key you paste once.

What is a “Teams AI agent”?

A teams ai agent is a named worker in your UtilitySpaces workspace with a written brief, a set of tools, and a boundary. It connects to Microsoft Teams through the UtilitySpaces Teams connector, which is built on Microsoft’s Graph OAuth flow: a team admin consents to a set of Graph scopes, and the connector opens only the tools those scopes allow. The connector exposes five named tools — two reads and three writes. The reads list a team’s channels and read the messages in them; the writes post a message into a channel, create a channel, and add or remove a member. The two reads are always open. An agent can surface an unanswered thread, summarise a week of standup chatter, or flag a channel that has gone quiet, and none of that changes the team. Every write is dropped into the human approval gate before it leaves the connector; the agent cannot approve its own work, and each call is logged under the approving person’s identity. Identity is per session: the OAuth grant is stored encrypted and bound to your workspace, the agent never sees a raw token, and the grant is scoped to the job — so a channel triage agent does not carry the scopes a channel-admin agent would. That is how a connected agent reads Teams, writes only on approval, and leaves an auditable trail for each call.

Why is Teams access different from API-key apps?

Teams connects through Graph OAuth, not an API key. With an app like Shopify or a payment provider, the agent holds a single credential and the blast-radius question is whether you gate the writes. With Teams, the question is which scopes you consent to, because every scope is a named permission over live collaboration data — chats, channels, and members — all running under one delegated principal. Microsoft issues short-lived tokens against those scopes, and the agent never stores a password; instead it gets a token scoped to the consent the admin gave. But because every scope attaches to that single principal, there is no per-tool fence until you split the grants. That is why OAuth apps widen the review surface: scope is policy, and policy is easy to bundle by accident. The delegated model is documented in our Teams integration page, which also details the per-scope consent and refresh behaviour.

What tools does our Teams connector expose?

The tool list is generated from Microsoft’s Graph team resource — teams, channels, messages, and members — mapped to the permissions a workspace admin consents to. Details are available on our Microsoft Teams integration guide. Here is every tool the connector exposes.

ToolGraph actionRead or writeStops for approval?
List channelsList the channels in a teamReadNo
Read channel messagesRead messages in a channelReadNo
Post to channelSend a message to a channelWriteYes
Create channelCreate a channel in a teamWriteYes
Manage channel membersAdd or remove a channel memberWriteYes

The two reads are always permitted — no gate, no extra grant beyond the connect. They let an agent list channels and read messages to surface unanswered threads or summarise channel activity. They cannot post, create channels, or move members, and you do not need a write tool to read. The three writes all stop at the approval gate before reaching Teams.

How do you connect an AI agent to Microsoft Teams?

Start at the Microsoft Teams integration and begin the Graph OAuth flow. A workspace admin consents only to the scopes the job needs — start with channels read and channel messages read for a triage agent — and the connector opens exactly the tools those scopes allow. No fuzzy match, no extra grant: each tool is bound per connection, and the consent lives in the team’s own tenant. The grant is stored encrypted and bound to your workspace, the agent never receives a raw token, reads stay open, and writes are gated. This is the scoped choice ranked in the four connection methods ranked by blast radius: a scoped OAuth app with a human approval on every write, and the third of four by blast radius. Begin with reads only, confirm one summary, then flip writes to the gated option and watch the first proposals — not the writes — land in the queue.

Which writes must always stop for human approval?

Posting a message, creating a channel, and adding or removing a member are the three writes, and each stays in the human approval gate until a person signs off. An agent cannot approve its own work; for how that gate is designed, read designing the approval gate that stops an agent before a write. Even when writes are enabled, the agent proposes the action and a person approves it: the channel message is reconstructed from the proposal, signed by the gate, and logged under the approver’s identity — never as the agent. The two reads never stop, because a read cannot change a team.

Which scope bundle widens your blast radius?

Here is the scope mistake that silently widens blast radius on Teams, and it is specific to Graph OAuth: granting Chat.ReadWrite together with ChannelMember.ReadWrite on one agent identity. Chat.ReadWrite is a delegated scope, and per our documentation on Teams integration it covers reading and writing the signed-in user’s chats — 1:1 conversations, group chats, and meeting threads — not just the channels you meant to hand over. ChannelMember.ReadWrite covers adding and removing people from shared channels. Bundle them on one OAuth principal and a single identity now holds both “post into any chat” and “manage channel membership,” so one wrong write or one compromised session spans private messages and shared channels together.

Scope bundleCoversRisk
Chat.ReadWrite + ChannelMember.ReadWrite1:1 chats and shared channel membershipOne identity holds full chat read/write plus member management

Split grants by job scope instead. A channel-posting agent gets only the message scope it needs; a channel-manager agent gets ChannelMember.ReadWrite on its own identity, and never Chat.ReadWrite. Because each connector is a separate permission boundary on UtilitySpaces connectors, a write meant for channels cannot reach a 1:1 chat unless you hand it that scope deliberately.

What are the limits, trade-offs and when not to use this?

The connector exposes exactly the five tools on the table above — generated from the Graph surface a workspace admin consents to, so it cannot list a tool that does not exist. That means a Teams agent reads only channels and messages it is scoped to; it cannot see team secrets or private files outside the channel it is in. If your team expects the agent to post into the same private threads a manager uses day to day, you are asking for cross-scope leakage — keep those writes human-first and channel-scoped, or surface the thread and let a person reply. Teams is also a noisy app: an approval queue that stops every post turns a busy channel into a stack of proposals, so start with reads, add writes one scope at a time, and treat this as human in the loop for AI agents — a boundary, not an afterthought.

Start a demo.

See it doing your actual work

Open a demo workspace, connect one app, and give an agent a real job. No card, no sales call.

We reply to every message within one business day.

Try the demo