Skip to main content
Glama
InditexTech

MCP Microsoft Teams Server

by InditexTech

start_thread

Create and initiate a new discussion thread in Microsoft Teams with a specified title and content, optionally mentioning a member by name for direct engagement.

Instructions

Start a new thread with a given title and content

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
contentYesThe thread content
member_nameNoMember name to mention in the thread
titleYesThe thread title

Implementation Reference

  • MCP tool handler function for 'start_thread', including input schema via Pydantic Fields, which delegates to TeamsClient.start_thread
    @mcp.tool(
        name="start_thread", description="Start a new thread with a given title and content"
    )
    async def start_thread(
        ctx: Context,
        title: str = Field(description="The thread title"),
        content: str = Field(description="The thread content"),
        member_name: str | None = Field(
            description="Member name to mention in the thread", default=None
        ),
    ) -> TeamsThread:
        await ctx.debug(f"start_thread with title={title} and content={content}")
        client = _get_teams_client(ctx)
        return await client.start_thread(title, content, member_name)
  • Core implementation of thread starting in TeamsClient, using BotFramework CloudAdapter to send an Activity with topic_name as title, optionally mentioning a member
    async def start_thread(
        self, title: str, content: str, member_name: str | None = None
    ) -> TeamsThread:
        """Start a new thread in a channel.
    
        Args:
            title: Thread title
            content: Initial thread content
            member_name: Member name to mention in content
    
        Returns:
            Created thread details including ID
        """
        try:
            await self._initialize()
    
            result = TeamsThread(title=title, content=content, thread_id="")
    
            async def start_thread_callback(context: TurnContext):
                mention_member = None
                if member_name is not None:
                    members = await TeamsInfo.get_team_members(context, self.team_id)
                    for member in members:
                        if member.name == member_name:
                            mention_member = member
    
                mentions = []
                if mention_member is not None:
                    result.content = (
                        f"# **{title}**\n<at>{mention_member.name}</at> {content}"
                    )
                    mention = Mention(
                        text=f"<at>{mention_member.name}</at>",
                        type="mention",
                        mentioned=ChannelAccount(
                            id=mention_member.id, name=mention_member.name
                        ),
                    )
                    mentions.append(mention)
    
                response = await context.send_activity(
                    activity_or_text=Activity(
                        type=ActivityTypes.message,
                        topic_name=title,
                        text=result.content,
                        text_format=TextFormatTypes.markdown,
                        entities=mentions,
                    )
                )
                if response is not None:
                    result.thread_id = response.id
    
            await self.adapter.continue_conversation(
                bot_app_id=self.teams_app_id,
                reference=self._create_conversation_reference(),
                callback=start_thread_callback,
            )
    
            return result
        except Exception as e:
            LOGGER.error(f"Error creating thread: {str(e)}")
            raise
  • Pydantic model for TeamsThread, used as return type for start_thread
    class TeamsThread(BaseModel):
        thread_id: str = Field(
            description="Thread ID as a string in the format '1743086901347'"
        )
        title: str = Field(description="Message title")
        content: str = Field(description="Message content")
  • The @mcp.tool decorator registers the start_thread handler with name='start_thread'
    @mcp.tool(
        name="start_thread", description="Start a new thread with a given title and content"
    )
    async def start_thread(
        ctx: Context,
        title: str = Field(description="The thread title"),
        content: str = Field(description="The thread content"),
        member_name: str | None = Field(
            description="Member name to mention in the thread", default=None
        ),
    ) -> TeamsThread:
        await ctx.debug(f"start_thread with title={title} and content={content}")
        client = _get_teams_client(ctx)
        return await client.start_thread(title, content, member_name)
Install Server

Other Tools

Related Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/InditexTech/mcp-teams-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server