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
| Name | Required | Description | Default |
|---|---|---|---|
| content | Yes | The thread content | |
| member_name | No | Member name to mention in the thread | |
| title | Yes | The thread title |
Implementation Reference
- src/mcp_teams_server/__init__.py:108-121 (handler)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 memberasync 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
- src/mcp_teams_server/teams.py:36-42 (schema)Pydantic model for TeamsThread, used as return type for start_threadclass 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")
- src/mcp_teams_server/__init__.py:108-121 (registration)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)