How to integrate Microsoft teams MCP with LlamaIndex

Trusted by
AWS
Glean
Zoom
Airtable

30 min · no commitment · see it on your stack

Microsoft teams logo
LlamaIndex logo
divider

Introduction

This guide walks you through connecting Microsoft teams to LlamaIndex using the Composio tool router. By the end, you'll have a working Microsoft teams agent that can add new member to project team, schedule an online meeting for sales, list all chats i’m part of through natural language commands.

This guide will help you understand how to give your LlamaIndex agent real control over a Microsoft teams account through Composio's Microsoft teams MCP server.

Before we dive in, let's take a quick look at the key ideas and tools involved.

Also integrate Microsoft teams with

TL;DR

Here's what you'll learn:
  • Set your OpenAI and Composio API keys
  • Install LlamaIndex and Composio packages
  • Create a Composio Tool Router session for Microsoft teams
  • Connect LlamaIndex to the Microsoft teams MCP server
  • Build a Microsoft teams-powered agent using LlamaIndex
  • Interact with Microsoft teams through natural language

What is LlamaIndex?

LlamaIndex is a data framework for building LLM applications. It provides tools for connecting LLMs to external data sources and services through agents and tools.

Key features include:

  • ReAct Agent: Reasoning and acting pattern for tool-using agents
  • MCP Tools: Native support for Model Context Protocol
  • Context Management: Maintain conversation context across interactions
  • Async Support: Built for async/await patterns

What is the Microsoft teams MCP server, and what's possible with it?

The Microsoft Teams MCP server is an implementation of the Model Context Protocol that connects your AI agent and assistants like Claude, Cursor, etc directly to your Microsoft Teams account. It provides structured and secure access to your Teams workspace, so your agent can perform actions like managing chats, sending messages, creating meetings, and organizing teams on your behalf.

  • Automated chat and message management: Let your agent retrieve, read, and summarize messages from any Teams chat, or fetch all chats you’re part of for quick updates.
  • Team and channel organization: Easily create new teams, add members, get channel details, or archive and delete teams to keep your workspace organized.
  • Scheduling online meetings: Have your agent schedule standalone Teams meetings instantly, making it simple to coordinate with colleagues or clients without manual setup.
  • Granular access to team and chat details: Fetch full information about specific teams, channels, or even individual messages with precision, enabling rich contextual workflows.
  • Seamless membership and collaboration management: Add or update members in teams with a prompt, ensuring the right people always have access to the conversations and resources they need.

Supported Tools & Triggers

Tools
Add chat memberTool to add a conversationMember to a Microsoft Teams chat.
Add tab to channelTool to add a new tab to a Microsoft Teams channel.
Add member to teamTool to add a user to a Microsoft Teams team.
Add team members (bulk)Tool to add multiple members to a Microsoft Teams team in a single operation.
Archive channelTool to archive a channel in a Microsoft Teams team.
Archive team channelTool to archive a channel in a Microsoft Teams team using the group ID.
Archive Teams teamTool to archive a Microsoft Teams team.
Get all chatsRetrieves all Microsoft Teams chats a specified user is part of, supporting filtering, property selection, and pagination.
Clear Automatic LocationTool to clear the automatic location from a user's presence in Microsoft Teams.
Clear User Preferred PresenceTool to clear a user's preferred presence setting in Microsoft Teams.
Clear PresenceTool to clear the presence information for a user's application presence session in Microsoft Teams.
Clear Presence LocationTool to clear the authenticated user's presence location.
Clone TeamTool to clone a Microsoft Teams team using the team ID.
Create Call OperationTool to create a new operation for a communications call.
Create a channelTool to create a new standard, private, or shared channel within a Microsoft Teams team.
Create Content Sharing SessionTool to create a content sharing session in a Microsoft Teams call.
Create channel in group teamTool to create a new channel in a group's associated team.
Create online meetingUse to schedule a new standalone Microsoft Teams online meeting, i.
Create user offer shift requestTool to create a new offer shift request in a user's joined team schedule.
Create open shiftsTool to create a new open shift in a Microsoft Teams team schedule.
Create open shift change requestTool to create a new open shift change request in a team schedule.
Create or get online meetingTool to create a new Microsoft Teams online meeting or retrieve an existing one based on externalId.
Create or update scheduleTool to create or replace a schedule object for a Microsoft Teams team.
Create schedule day noteTool to create a new day note in a team's schedule.
Create scheduling groupTool to create a new scheduling group in a team's schedule.
Create team schedule shiftTool to create a new shift in a Microsoft Teams team schedule.
Create TeamTool to create a new Microsoft Teams team.
Create Team From GroupTool to create a new team under an existing Microsoft 365 group.
Create time offTool to create a new timeOff instance in a team's schedule.
Create time off reasonTool to create a new time off reason in a team's schedule.
Create time off requestTool to create a new time off request in a team's schedule.
Create user online meetingTool to create a new Microsoft Teams online meeting for a specific user.
Delete Call OperationTool to delete a navigation property operation for a communications call.
Delete team channelTool to delete a channel from a Microsoft Teams team.
Delete team schedule day noteTool to delete a day note from a Microsoft Teams schedule.
Delete open shiftTool to delete an open shift from a Microsoft Teams schedule.
Delete team scheduling groupTool to delete a scheduling group from a Microsoft Teams team schedule.
Delete team schedule shiftTool to delete a shift from a Microsoft Teams team schedule.
Soft-delete Teams channel messageTool to soft-delete a message in a Teams channel.
Delete channel tabTool to delete a tab from a Microsoft Teams channel.
Delete Teams teamTool to delete a Microsoft Teams team.
Delete time offTool to delete a timeOff from a team's schedule.
Delete time off reasonTool to delete a time off reason from a team's schedule.
Delete time off requestTool to delete a time off request from a Microsoft Teams team schedule.
Delete User Online MeetingTool to delete an online meeting for a user.
Get call operationTool to get a specific commsOperation for a call.
Get team channelTool to get a specific channel in a team.
Get Teams channel messageRetrieves a specific message from a Microsoft Teams channel using its Team, Channel, and Message IDs.
Get channel message replyTool to retrieve a single reply to a message in a channel.
Get chatTool to retrieve a single chat by ID.
Get chat memberTool to get a specific conversation member from a Microsoft Teams chat.
Get chat messageTool to get a specific chat message.
Get day noteTool to retrieve a specific day note from a team's schedule.
Get channel files folderTool to get the files folder (DriveItem) metadata for a specific channel in a Microsoft Teams team.
Get User ProfileTool to retrieve a user's profile (id/UPN/mail/displayName).
Get offer shift requestTool to get a specific offer shift request from a Microsoft Teams schedule.
Get online meetingTool to retrieve details of a specific Microsoft Teams online meeting by its ID.
Get open shiftTool to get a specific open shift from a Microsoft Teams schedule.
Get open shift change requestTool to retrieve a specific open shift change request from a Microsoft Teams team's schedule.
Get User PresenceTool to get a specific user's presence information.
Get primary channelTool to get the default (General) channel of a team.
Get scheduleTool to retrieve the properties and relationships of a schedule object.
Get scheduling groupTool to retrieve a specific scheduling group from a Microsoft Teams team's schedule.
Get shiftTool to retrieve a shift by ID from a Microsoft Teams team schedule.
Get swap shifts change requestTool to get a specific swap shift change request from a Microsoft Teams schedule.
Get channel tabTool to get a specific tab in a Microsoft Teams channel.
Get TeamTool to get a specific team.
Get team memberTool to get a specific conversation member from a team.
Get Team Operation StatusTool to retrieve the status of a Teams async operation using teamId and operationId.
Get installed app in teamTool to get an installed app in a Microsoft Teams team.
Get time off by IDTool to retrieve a specific time off entry from a Microsoft Teams team's schedule by ID.
Get time off reasonTool to get a specific time off reason from a team's schedule.
Get time off requestTool to retrieve a specific time off request from a team's schedule.
Get user chatTool to retrieve a specific chat for a user.
Get User TeamworkTool to get userTeamwork settings for a specified user, including Microsoft Teams region and locale.
Hide chat for userTool to hide a Microsoft Teams chat for a specific user.
List user's associated teamsTool to list teams that a user is associated with in Microsoft Teams.
List channel tabsTool to list tabs from a Microsoft Teams channel.
List Communications Call OperationsTool to list operations on a Microsoft Teams call.
List deleted teamsTool to list deleted Microsoft Teams and their properties.
List Group Team OperationsTool to list operations on a group's team.
List team incoming channelsTool to list incoming channels shared with a Microsoft Teams team.
List installed apps in teamTool to list apps installed in a Microsoft Teams team.
List channel message repliesTool to list all replies to a specific message in a Microsoft Teams channel.
List offer shift requestsTool to list offer shift requests in a Microsoft Teams schedule.
List user online meetingsLook up a Microsoft Teams online meeting for a user by identifier.
List open shift change requestsTool to list open shift change requests in a Microsoft Teams schedule.
List open shiftsTool to list open shifts in a Microsoft Teams schedule.
List PeopleRetrieves a list of people relevant to a specified user from Microsoft Graph, noting the `search` parameter is only effective if `user_id` is 'me'.
List pinned messagesTool to retrieve the list of pinned messages in a Microsoft Teams chat.
List team schedule day notesTool to list all dayNotes from a team's schedule.
List scheduling groupsTool to list scheduling groups in a team's schedule.
List shiftsTool to list shifts in a Microsoft Teams schedule.
List swap shifts change requestsTool to list swap shift change requests in a Microsoft Teams schedule.
List team membersTool to list members of a Microsoft Teams team.
List Team OperationsTool to list operations from a team.
List teams permission grantsTool to list all resource-specific permission grants for a team with support for filtering, pagination, and sorting.
List team time off entriesTool to list time off entries from a Microsoft Teams team's schedule.
List team schedule time off reasonsTool to get time off reasons from a team's schedule.
List time off requestsTool to retrieve a list of time off requests from a Microsoft Teams team's schedule.
List user's chat membersTool to list members of a specific chat for a user in Microsoft Teams.
List user chat messagesTool to retrieve messages from a specific chat for a given user.
List user joined teamsTool to list the Teams that a specified user is a direct member of (joined teams).
List usersTool to list all users in the organization.
Mark chat as read for userTool to mark a chat as read for a specific user in Microsoft Teams.
Mark chat as unread for userMarks a specific chat as unread for a user by setting the last read message timestamp.
Pin message in chatTool to pin a message in a Microsoft Teams chat.
Reply to Teams channel messageSends a reply to an existing message, identified by `message_id`, within a specific `channel_id` of a given `team_id` in Microsoft Teams.
Provision channel email addressTool to provision an email address for a Microsoft Teams channel.
Remove channel email addressTool to remove the email address of a channel in Microsoft Teams.
Remove chat memberTool to remove a member from a Microsoft Teams chat.
Remove team memberTool to remove a member from a Microsoft Teams team.
Remove team membersTool to remove multiple members from a Microsoft Teams team in bulk.
Search Teams filesSearch files in Microsoft Teams using KQL syntax.
Search Teams messagesSearch Microsoft Teams messages using powerful KQL syntax.
Send Activity Notification to RecipientsTool to send activity notifications to specified recipients in Microsoft Teams.
Set PresenceTool to set the presence information for a user's application presence session.
Set Presence Automatic LocationTool to set the automatic presence location (office/remote/timeOff) for a specified user.
Set User Preferred PresenceTool to set the preferred availability and activity status for a user.
Set User Presence Manual LocationTool to set the manual presence location (office/remote/timeOff) for a specific user.
Share Team ScheduleTool to share a Microsoft Teams schedule for a specified time range.
Create ChatCreates a new chat; if a 'oneOnOne' chat with the specified members already exists, its details are returned, while 'group' chats are always newly created.
List TeamsRetrieves Microsoft Teams accessible by the authenticated user, allowing filtering, property selection, and pagination.
List channel messagesTool to list messages in a Teams channel when team_id and channel_id are known (no chat_id required).
List team channelsRetrieves channels for a specified Microsoft Teams team ID (must be valid and for an existing team), with options to include shared channels, filter results, and select properties.
Send Channel MessagePosts a new top-level message to a channel in Microsoft Teams (does NOT reply to an existing message).
Send message to Teams chatSends a non-empty message (text or HTML) to a specified, existing Microsoft Teams chat; content must be valid HTML if `content_type` is 'html'.
Unarchive channelTool to unarchive a channel in a Microsoft Teams team.
Unarchive group team channelTool to unarchive a channel in a Microsoft Teams group's team.
Unarchive Teams teamTool to unarchive a Microsoft Teams team.
Unhide Chat For UserTool to unhide a chat for a specific user.
Unpin chat messageTool to unpin a message from a Microsoft Teams chat.
Update CallTool to update the navigation property calls in Microsoft Teams communications.
Update Call OperationTool to update the navigation property operations in communications.
Update Call ParticipantTool to update a participant in a Microsoft Teams call.
Update Teams channelTool to update channel properties in a Microsoft Teams group.
Update Teams channel messageTool to update a message in a channel.
Update ChatTool to update the properties of a chat.
Update Teams chat messageTool to update a specific message in a chat.
Update Content Sharing SessionTool to update a content sharing session in a Microsoft Teams call.
Update schedule day noteTool to update an existing day note in a team's schedule.
Update online meetingTool to update the properties of an existing Microsoft Teams online meeting.
Update open shiftTool to update an existing open shift in a Microsoft Teams team schedule.
Update scheduling groupTool to replace/update a scheduling group in a team's schedule.
Update Teams channel tabTool to update the properties of a tab in a Microsoft Teams channel.
Update TeamTool to update the properties of a team.
Update team memberTool to update a team member's roles or properties in Microsoft Teams.
Update team schedule shiftTool to update an existing shift in a Microsoft Teams team schedule.
Update time offTool to replace an existing timeOff entry in a team's schedule.
Update time off reasonTool to update a time off reason in a team's schedule.

What is the Composio tool router, and how does it fit here?

What is Composio SDK?

Composio's Composio SDK helps agents find the right tools for a task at runtime. You can plug in multiple toolkits (like Gmail, HubSpot, and GitHub), and the agent will identify the relevant app and action to complete multi-step workflows. This can reduce token usage and improve the reliability of tool calls. Read more here: Getting started with Composio SDK

The tool router generates a secure MCP URL that your agents can access to perform actions.

How the Composio SDK works

The Composio SDK follows a three-phase workflow:

  1. Discovery: Searches for tools matching your task and returns relevant toolkits with their details.
  2. Authentication: Checks for active connections. If missing, creates an auth config and returns a connection URL via Auth Link.
  3. Execution: Executes the action using the authenticated connection.

Step-by-step Guide

Prerequisites

Before you begin, make sure you have:
  • Python 3.8/Node 16 or higher installed
  • A Composio account with the API key
  • An OpenAI API key
  • A Microsoft teams account and project
  • Basic familiarity with async Python/Typescript

Getting API Keys for OpenAI, Composio, and Microsoft teams

OpenAI API key (OPENAI_API_KEY)
  • Go to the OpenAI dashboard
  • Create an API key if you don't have one
  • Assign it to OPENAI_API_KEY in .env
Composio API key and user ID
  • Log into the Composio dashboard
  • Copy your API key from Settings
    • Use this as COMPOSIO_API_KEY
  • Pick a stable user identifier (email or ID)
    • Use this as COMPOSIO_USER_ID

Installing dependencies

pip install composio-llamaindex llama-index llama-index-llms-openai llama-index-tools-mcp python-dotenv

Create a new Python project and install the necessary dependencies:

  • composio-llamaindex: Composio's LlamaIndex integration
  • llama-index: Core LlamaIndex framework
  • llama-index-llms-openai: OpenAI LLM integration
  • llama-index-tools-mcp: MCP client for LlamaIndex
  • python-dotenv: Environment variable management

Set environment variables

bash
OPENAI_API_KEY=your-openai-api-key
COMPOSIO_API_KEY=your-composio-api-key
COMPOSIO_USER_ID=your-user-id

Create a .env file in your project root:

These credentials will be used to:

  • Authenticate with OpenAI's GPT-5 model
  • Connect to Composio's Tool Router
  • Identify your Composio user session for Microsoft teams access

Import modules

import asyncio
import os
import dotenv

from composio import Composio
from composio_llamaindex import LlamaIndexProvider
from llama_index.core.agent.workflow import ReActAgent
from llama_index.core.workflow import Context
from llama_index.llms.openai import OpenAI
from llama_index.tools.mcp import BasicMCPClient, McpToolSpec

dotenv.load_dotenv()

Create a new file called microsoft teams_llamaindex_agent.py and import the required modules:

Key imports:

  • asyncio: For async/await support
  • Composio: Main client for Composio services
  • LlamaIndexProvider: Adapts Composio tools for LlamaIndex
  • ReActAgent: LlamaIndex's reasoning and action agent
  • BasicMCPClient: Connects to MCP endpoints
  • McpToolSpec: Converts MCP tools to LlamaIndex format

Load environment variables and initialize Composio

OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")
COMPOSIO_API_KEY = os.getenv("COMPOSIO_API_KEY")
COMPOSIO_USER_ID = os.getenv("COMPOSIO_USER_ID")

if not OPENAI_API_KEY:
    raise ValueError("OPENAI_API_KEY is not set in the environment")
if not COMPOSIO_API_KEY:
    raise ValueError("COMPOSIO_API_KEY is not set in the environment")
if not COMPOSIO_USER_ID:
    raise ValueError("COMPOSIO_USER_ID is not set in the environment")

What's happening:

This ensures missing credentials cause early, clear errors before the agent attempts to initialise.

Create a Tool Router session and build the agent function

async def build_agent() -> ReActAgent:
    composio_client = Composio(
        api_key=COMPOSIO_API_KEY,
        provider=LlamaIndexProvider(),
    )

    session = composio_client.create(
        user_id=COMPOSIO_USER_ID,
        toolkits=["microsoft_teams"],
    )

    mcp_url = session.mcp.url
    print(f"Composio MCP URL: {mcp_url}")

    mcp_client = BasicMCPClient(mcp_url, headers={"x-api-key": COMPOSIO_API_KEY})
    mcp_tool_spec = McpToolSpec(client=mcp_client)
    tools = await mcp_tool_spec.to_tool_list_async()

    llm = OpenAI(model="gpt-5")

    description = "An agent that uses Composio Tool Router MCP tools to perform Microsoft teams actions."
    system_prompt = """
    You are a helpful assistant connected to Composio Tool Router.
    Use the available tools to answer user queries and perform Microsoft teams actions.
    """
    return ReActAgent(tools=tools, llm=llm, description=description, system_prompt=system_prompt, verbose=True)

What's happening here:

  • We create a Composio client using your API key and configure it with the LlamaIndex provider
  • We then create a tool router MCP session for your user, specifying the toolkits we want to use (in this case, microsoft teams)
  • The session returns an MCP HTTP endpoint URL that acts as a gateway to all your configured tools
  • LlamaIndex will connect to this endpoint to dynamically discover and use the available Microsoft teams tools.
  • The MCP tools are mapped to LlamaIndex-compatible tools and plug them into the Agent.

Create an interactive chat loop

async def chat_loop(agent: ReActAgent) -> None:
    ctx = Context(agent)
    print("Type 'quit', 'exit', or Ctrl+C to stop.")

    while True:
        try:
            user_input = input("\nYou: ").strip()
        except (KeyboardInterrupt, EOFError):
            print("\nBye!")
            break

        if not user_input or user_input.lower() in {"quit", "exit"}:
            print("Bye!")
            break

        try:
            print("Agent: ", end="", flush=True)
            handler = agent.run(user_input, ctx=ctx)

            async for event in handler.stream_events():
                # Stream token-by-token from LLM responses
                if hasattr(event, "delta") and event.delta:
                    print(event.delta, end="", flush=True)
                # Show tool calls as they happen
                elif hasattr(event, "tool_name"):
                    print(f"\n[Using tool: {event.tool_name}]", flush=True)

            # Get final response
            response = await handler
            print()  # Newline after streaming
        except KeyboardInterrupt:
            print("\n[Interrupted]")
            continue
        except Exception as e:
            print(f"\nError: {e}")

What's happening here:

  • We're creating a direct terminal interface to chat with your Microsoft teams database
  • The LLM's responses are streamed to the CLI for faster interaction.
  • The agent uses context to maintain conversation history
  • You can type 'quit' or 'exit' to stop the chat loop gracefully
  • Agent responses and any errors are displayed in a clear, readable format

Define the main entry point

async def main() -> None:
    agent = await build_agent()
    await chat_loop(agent)

if __name__ == "__main__":
    # Handle Ctrl+C gracefully
    signal.signal(signal.SIGINT, lambda s, f: (print("\nBye!"), exit(0)))
    try:
        asyncio.run(main())
    except KeyboardInterrupt:
        print("\nBye!")

What's happening here:

  • We're orchestrating the entire application flow
  • The agent gets built with proper error handling
  • Then we kick off the interactive chat loop so you can start talking to Microsoft teams

Run the agent

npx ts-node llamaindex-agent.ts

When prompted, authenticate and authorise your agent with Microsoft teams, then start asking questions.

Complete Code

Here's the complete code to get you started with Microsoft teams and LlamaIndex:

import asyncio
import os
import signal
import dotenv

from composio import Composio
from composio_llamaindex import LlamaIndexProvider
from llama_index.core.agent.workflow import ReActAgent
from llama_index.core.workflow import Context
from llama_index.llms.openai import OpenAI
from llama_index.tools.mcp import BasicMCPClient, McpToolSpec

dotenv.load_dotenv()

OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")
COMPOSIO_API_KEY = os.getenv("COMPOSIO_API_KEY")
COMPOSIO_USER_ID = os.getenv("COMPOSIO_USER_ID")

if not OPENAI_API_KEY:
    raise ValueError("OPENAI_API_KEY is not set")
if not COMPOSIO_API_KEY:
    raise ValueError("COMPOSIO_API_KEY is not set")
if not COMPOSIO_USER_ID:
    raise ValueError("COMPOSIO_USER_ID is not set")

async def build_agent() -> ReActAgent:
    composio_client = Composio(
        api_key=COMPOSIO_API_KEY,
        provider=LlamaIndexProvider(),
    )

    session = composio_client.create(
        user_id=COMPOSIO_USER_ID,
        toolkits=["microsoft_teams"],
    )

    mcp_url = session.mcp.url
    print(f"Composio MCP URL: {mcp_url}")

    mcp_client = BasicMCPClient(mcp_url, headers={"x-api-key": COMPOSIO_API_KEY})
    mcp_tool_spec = McpToolSpec(client=mcp_client)
    tools = await mcp_tool_spec.to_tool_list_async()

    llm = OpenAI(model="gpt-5")
    description = "An agent that uses Composio Tool Router MCP tools to perform Microsoft teams actions."
    system_prompt = """
    You are a helpful assistant connected to Composio Tool Router.
    Use the available tools to answer user queries and perform Microsoft teams actions.
    """
    return ReActAgent(
        tools=tools,
        llm=llm,
        description=description,
        system_prompt=system_prompt,
        verbose=True,
    );

async def chat_loop(agent: ReActAgent) -> None:
    ctx = Context(agent)
    print("Type 'quit', 'exit', or Ctrl+C to stop.")

    while True:
        try:
            user_input = input("\nYou: ").strip()
        except (KeyboardInterrupt, EOFError):
            print("\nBye!")
            break

        if not user_input or user_input.lower() in {"quit", "exit"}:
            print("Bye!")
            break

        try:
            print("Agent: ", end="", flush=True)
            handler = agent.run(user_input, ctx=ctx)

            async for event in handler.stream_events():
                # Stream token-by-token from LLM responses
                if hasattr(event, "delta") and event.delta:
                    print(event.delta, end="", flush=True)
                # Show tool calls as they happen
                elif hasattr(event, "tool_name"):
                    print(f"\n[Using tool: {event.tool_name}]", flush=True)

            # Get final response
            response = await handler
            print()  # Newline after streaming
        except KeyboardInterrupt:
            print("\n[Interrupted]")
            continue
        except Exception as e:
            print(f"\nError: {e}")

async def main() -> None:
    agent = await build_agent()
    await chat_loop(agent)

if __name__ == "__main__":
    # Handle Ctrl+C gracefully
    signal.signal(signal.SIGINT, lambda s, f: (print("\nBye!"), exit(0)))
    try:
        asyncio.run(main())
    except KeyboardInterrupt:
        print("\nBye!")

Conclusion

You've successfully connected Microsoft teams to LlamaIndex through Composio's Tool Router MCP layer. Key takeaways:
  • Tool Router dynamically exposes Microsoft teams tools through an MCP endpoint
  • LlamaIndex's ReActAgent handles reasoning and orchestration; Composio handles integrations
  • The agent becomes more capable without increasing prompt size
  • Async Python provides clean, efficient execution of agent workflows
You can easily extend this to other toolkits like Gmail, Notion, Stripe, GitHub, and more by adding them to the toolkits parameter.

How to build Microsoft teams MCP Agent with another framework

FAQ

What are the differences in Tool Router MCP and Microsoft teams MCP?

With a standalone Microsoft teams MCP server, the agents and LLMs can only access a fixed set of Microsoft teams tools tied to that server. However, with the Composio Tool Router, agents can dynamically load tools from Microsoft teams and many other apps based on the task at hand, all through a single MCP endpoint.

Can I use Tool Router MCP with LlamaIndex?

Yes, you can. LlamaIndex fully supports MCP integration. You get structured tool calling, message history handling, and model orchestration while Tool Router takes care of discovering and serving the right Microsoft teams tools.

Can I manage the permissions and scopes for Microsoft teams while using Tool Router?

Yes, absolutely. You can configure which Microsoft teams scopes and actions are allowed when connecting your account to Composio. You can also bring your own OAuth credentials or API configuration so you keep full control over what the agent can do.

How safe is my data with Composio Tool Router?

All sensitive data such as tokens, keys, and configuration is fully encrypted at rest and in transit. Composio is SOC 2 Type 2 compliant and follows strict security practices so your Microsoft teams data and credentials are handled as safely as possible.

Used by agents from

Context
Letta
glean
HubSpot
Agent.ai
Altera
DataStax
Entelligence
Rolai
Context
Letta
glean
HubSpot
Agent.ai
Altera
DataStax
Entelligence
Rolai
Context
Letta
glean
HubSpot
Agent.ai
Altera
DataStax
Entelligence
Rolai

Never worry about agent reliability

We handle tool reliability, observability, and security so you never have to second-guess an agent action.