A gnome messenger stands in a cozy workshop with floating conversation bubbles connected by golden threads. Each bubble contains tiny team icons and channel symbols. A brass MCP connector on the workbench feeds JSON-RPC threads into the bubbles. Some bubbles have reply arrows looping back. Warm candlelight, rich blues and purples, a sense of collaboration and communication.

MCP365 Explorer — Work IQ Teams: teams, channels, and messages

Exploring the Work IQ Teams server with 28 tools — from listing teams and channels to sending messages, all from an SPFx webpart.

Nello D'Andrea
Nello D'Andrea
3 minutes to read

Microsoft 365 rests on three pillars: mail with Exchange and Outlook, files with SharePoint and OneDrive, and real-time collaboration with Microsoft Teams. After covering Mail and SharePoint earlier in the MCP365 Explorer series , this post explores the third: mcp_TeamsServer — one of the largest Work IQ MCP servers with 28 tools covering teams, channels, chats, messages, members, and search, all behind a single scope (McpServers.Teams.All).

As with the other servers in this series, the Work IQ MCP servers are in preview and may change.

The Showcase

MCP365 Explorer Teams showcase: load teams, select, channels, send message to self

The Teams Explorer showcase demonstrates a chained flow and a quick action:

Load My Teams → Select → Channels : clicking “Load My Teams” calls ListTeams with the current user’s Entra Object ID (GUID). The teams appear as selectable radio buttons. Selecting a team automatically calls ListChannels and displays the channels for that team. This shows how MCP tools chain naturally — the output of one call feeds the next.

Send Message to Self : a text field and send button that calls SendMessageToSelf. Type a message, hit send, and it appears in your Teams “chat with yourself.” Quick proof that write operations work through MCP.

Tool Composition in Practice

The showcase demonstrates a pattern that keeps showing up across MCP servers: the output of one tool provides the input for the next.

ListTeams returns an array of team objects, each with an id. When you select a team, that id becomes the teamId parameter for ListChannels. Each step narrows the scope — from all your teams to one team’s channels — with one ID bridging the two calls.

%%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#CFA63D', 'primaryTextColor': '#000', 'primaryBorderColor': '#c7a42b', 'lineColor': '#0aa8a7', 'fontFamily': 'ui-sans-serif,system-ui,-apple-system,BlinkMacSystemfont,sans-serif', 'fontSize': '14px' }}}%% flowchart LR A["ListTeams
userId: GUID"] -- "returns team.id" --> B["Select Team
user picks one"] B -- "teamId" --> C["ListChannels
teamId: selected ID"] C -- "returns channels" --> D["General
Announcements
Random
..."]

This is the same pattern I used in the SharePoint showcase (get library → create folder → upload file) and in the Calendar showcase (list events → drill into details). The Teams hierarchy goes deeper — teams → channels → messages → replies — each level unlocked by a single ID from the previous call.

For an LLM agent, this means it can navigate the full Teams hierarchy by making a sequence of tool calls, each informed by the last. For a developer building a UI, it means progressive disclosure — show teams first, expand on click — with each tool call feeding the next.

What I Learned

28 tools covering the full Teams surface : from listing teams to posting channel messages to managing members, both read and write operations.

User identity matters. ListTeams requires the user’s Entra GUID (not email, not “me”). I get this from SPFx’s pageContext.aadInfo.userId. The schema explicitly says “Do not send ‘me’ as userId” — a clear instruction for LLMs that also helps developers avoid a common mistake.

SendMessageToSelf is a useful test. Unlike other messaging tools that require a chat ID or channel ID, SendMessageToSelf just takes a content parameter. It’s the simplest way to verify that the Teams MCP connection works end-to-end — you send a message and immediately see it in Teams.

Tool Reference

Teams: ListTeams, GetTeam

Channels: ListChannels, GetChannel, CreateChannel, CreatePrivateChannel, UpdateChannel

Chats: ListChats, GetChat, CreateChat, DeleteChat, UpdateChat

Messages: ListChatMessages, ListChannelMessages, PostMessage, SendMessageToSelf, PostChannelMessage, GetChatMessage, UpdateChatMessage, DeleteChatMessage, ReplyToChannelMessage

Members: ListChatMembers, ListChannelMembers, AddChatMember, AddChannelMember, UpdateChannelMember

Search: SearchTeamsMessages, SearchTeamMessagesQueryParameters

Deploy It Yourself

Same flow as the other webparts: clone, cd webparts/mcp365-teams, build, upload the .sppkg, approve McpServers.Teams.All. Full steps and prerequisites in the README .

Resources