Skip to main content

Microsoft Teams

Read and post in the Teams channels and chats the connected account belongs to.

Connect a Microsoft work account to work in Teams: list the teams and channels it has joined, read channel threads and chat conversations, search every message it can see in one call, and post - a new channel thread, a reply inside an existing one, or a chat message to a person or group, @-mentioning people to notify them. Acts as the signed-in account itself, so it reaches exactly what that account reaches and nothing more. Posting is effectively irreversible: no tool here edits or deletes a message.

Connect

Sign in with Microsoft. Sign in with Microsoft to read and post in the teams, channels and chats you belong to. An organization admin configures the OAuth app once under Integrations → OAuth apps; after that, connecting is a consent screen.

  • Connecting signs in as YOU - every tool sees exactly the teams, channels and chats your Teams account can, and a message it posts is posted by you.

  • Some of these permissions need a one-time approval from an Entra (Azure AD) admin for the whole organization. Until that approval exists, sign-in completes but the tools return a permission error naming what's missing.

  • Reading channel messages asks for 'ChannelMessage.Read.All'. Under a user sign-in that reads only the teams YOU are in - it is not tenant-wide access, and there is no app-only mode here that would be.

  • For scheduled or triggered automations, connect a dedicated licensed service account and add it to the teams it should reach: automations cannot run as a person (they'd act with whoever happened to start them), so they need a service connection.

  • Anyone who can post in a channel can write text your agent will read. Put an approval gate in front of send steps in any automation whose reads come from a channel outsiders can post in.

Tools

ToolAccessWhat it does
Get my profile (yekar.microsoft-teams.get-my-profile)ReadRead the connected Microsoft account: display name, user principal name, id. Use it to confirm WHICH account this connection acts as before posting anything - every tool here acts as that account, and a connection made in the wrong tenant looks identical until a call fails.
List teams (yekar.microsoft-teams.list-teams)ReadList the teams the connected account has joined - the starting point for every channel call, which needs a teamId. Returns one page plus a nextCursor when more exist; Graph reports no total, so the number of rows returned is NOT the number of teams.
List channels (yekar.microsoft-teams.list-channels)ReadList a team's channels. Only channels the connected account can see are returned - private channels it is not a member of are absent, so this is 'what I can reach', not 'what the team has'. Graph reports no total.
List team members (yekar.microsoft-teams.list-team-members)ReadList who is in a team, with their roles (owner/member/guest) and user ids. The user id is what Start chat needs to open a conversation with someone. Graph reports no total.
List channel messages (yekar.microsoft-teams.list-channel-messages)ReadRead the top-level messages of a channel, newest first. Replies are NOT included - a message with replies shows them only through Read channel message, which fetches the whole thread. Bodies are rendered to plain text and capped; a capped row says so. Graph reports no total, so the rows returned are a window, not the channel.
Read channel message (yekar.microsoft-teams.read-channel-message)ReadRead one channel message with its replies - the whole thread in a single call. The opening message's body may be returned as raw HTML too; replies are always plain text and tightly capped. If more replies exist than were fetched, moreReplies says so rather than implying the thread ended.
List message replies (yekar.microsoft-teams.list-message-replies)ReadPage through the replies of one channel thread. Read channel message returns the first page and says moreReplies when there are more; this is how to fetch them, a page at a time via nextCursor. Graph reports no total, so a page is a window, not the thread.
List chats (yekar.microsoft-teams.list-chats)ReadList the connected account's chats (1:1, group and meeting chats) with their participants. Members are expanded because a 1:1 chat has no topic - without them a chat is an unnameable id. Graph reports no total.
Get chat (yekar.microsoft-teams.get-chat)ReadLook one chat up by id and return its topic, type and participants with their user ids - the way to learn who is in a chat you only have the id of (from a search hit or a message). The connected account is listed too; the label names the others.
List chat messages (yekar.microsoft-teams.list-chat-messages)ReadRead a chat's messages, newest first. Bodies are rendered to plain text and capped; a capped row says so. Graph reports no total, so the rows returned are a window, not the conversation.
Read chat message (yekar.microsoft-teams.read-chat-message)ReadRead one chat message in full - the whole body, at the single-message cap rather than the list cap. This is how to follow a Search messages hit that lives in a chat. Chat messages do not thread, so there are no replies to fetch.
Search messages (yekar.microsoft-teams.search-messages)ReadSearch the connected account's Teams messages - channels AND chats in one call - with Microsoft Search. This is the tool for 'what was said about X'; the list tools are for reading a known channel in order. Returns the hits plus Microsoft's own estimated total, and says whether more results exist.
Send channel message (yekar.microsoft-teams.send-channel-message)WritePost a new top-level message to a channel, as the connected account. This starts a NEW thread - use Reply to channel message to answer an existing one. Everyone with access to the channel sees it, and Teams offers no un-send here, so treat it as irreversible. To notify someone, write @Their Name in the body and list them in mentions - a name without a mention entry is just text and pings nobody.
Reply to channel message (yekar.microsoft-teams.reply-to-channel-message)WriteReply inside an existing channel thread, as the connected account. Prefer this over Send channel message when answering something: a reply keeps the conversation in one thread, while a new post starts a second one people have to reconcile. Teams threads are one level deep - replying to a reply attaches to the same opening message. To notify someone, write @Their Name in the body and list them in mentions.
Send chat message (yekar.microsoft-teams.send-chat-message)WriteSend a message into an existing 1:1 or group chat, as the connected account. To reach someone with no existing chat, call Start chat first - it returns the chatId this needs. To notify a particular participant of a group chat, write @Their Name in the body and list them in mentions.
Start chat (yekar.microsoft-teams.start-chat)WriteOpen a chat with one or more people and return its chatId, so Send chat message can reach someone the connected account has never messaged. One other person makes a 1:1 chat - Teams keeps exactly one per pair, so calling this again returns the same chat rather than a second one. Two or more makes a NEW group chat every time, so check List chats before creating another.

Notes

  • Sign in with Microsoft to connect - every tool acts as YOUR account, and a message it posts is posted by you.
  • Some permissions need a one-time approval from an Entra (Azure AD) admin for the whole organization; until then, sign-in succeeds but tools return a permission error naming what's missing.
  • Start from List teams: channel tools need a teamId, and channel message tools need a channelId from List channels.
  • Answer an existing conversation with Reply to channel message, not Send channel message - a new post starts a second thread people then have to reconcile.
  • To notify someone, write @Their Name in the body and list them in mentions with their user id - a name in the text alone pings nobody.
  • For a schedule or a trigger, bind this as a service connection owned by a licensed service account that has been added to the relevant teams - an automation cannot run as whoever happened to start it.
  • Teams can also START an automation: create an event trigger on this connection for a new channel message or a new chat message. It watches the channels and chats the connected account is in, and never fires on the account's own posts.
  • Anyone who can post in a channel can write text your agent will read. Gate send steps in any automation whose reads come from a channel outsiders can post in.