
Reply to a specific message in a Teams channel to create threaded conversations.
Retrieve all replies to a specific message to follow threaded conversations. Useful for understanding discussion context and reading complete conversation threads.
Check if a channel is private or standard. Returns channel permissions and member management availability.
List only the private channels in a team.
List all channels in a Microsoft Team.
Create a new channel within a Team for focused discussions.
Get detailed information about a Teams channel including description, settings, and metadata. Useful for understanding channel purpose and permissions.
Update channel settings such as name, description, or moderation settings.
Permanently delete a channel from a Team. Exercise caution - this removes all channel messages and files. Typically used for cleanup or reorganization.
List all files stored in a Team's SharePoint drive.
Remove files from a Team's drive to clean up outdated content, free up storage, or remove sensitive information. Exercise caution as this permanently deletes files.
Create a new Teams meeting with attendees and schedule it in calendars. Includes automatic Teams integration for online meetings.
List upcoming meetings and calendar events for the current user.
Get detailed information about a specific meeting including attendees, Teams link, and agenda.
Update an existing meeting's details such as time, attendees, or description.
Cancel a scheduled meeting and notify all attendees. Use this to remove meetings that are no longer needed or when circumstances change.
Check availability and free/busy times for users to find meeting time slots.
List all members of a Microsoft Team with their roles and status.
Add a new member to a Microsoft Team with specified roles and permissions.
Get detailed information about a specific team member including their role, permissions, and profile.
Update a team member's role or permissions within the team.
Remove a member from a Microsoft Team to revoke their access to team resources.
Retrieve message history from a Teams channel; each message carries an isfromme flag. Date filters are client-side and bounded to 30 days unless createdafter is given. Stops after ~40s or 5 pages — pass pageinfo.nextcursor back as cursor with the returned appliedcreated_after. Graph orders by reply-chain activity, so results are the messages scanned, not necessarily the most recent.
Send a message to a Teams channel. Requires teamid and channelid. Use getteamprimarychannel to get the General channel, or listchannels to find other channels.
Get detailed information about a specific message including sender, timestamp, and full content. Includes an isfromme flag to distinguish your messages, null when the current-user lookup is unavailable. Useful for referencing or analyzing particular communications.
Edit or update a previously sent message in a Teams channel.
Search for Teams by name or description to quickly find relevant workspaces. Supports discovering teams to join and finding specific collaboration spaces.
Get information about a Team's default 'General' channel where main discussions occur. Essential for accessing the primary communication hub of any team.
List all members with access to a specific channel, especially useful for private channels. Supports managing channel access and understanding membership. Includes cross-tenant support for shared channels.
Add a user to a private channel for selective access control. Note: This operation is only supported for private channels. For standard channels, use 'addteammember' as standard channels automatically include all team members.
Remove a user from a private channel while maintaining their team membership. Note: This operation is only supported for private channels. For standard channels, use 'removeteammember' as standard channels cannot have selective membership.
List all Microsoft Teams that the user is a member of. Returns all teams - no filtering options available due to API limitations.
Create a new Microsoft Team for collaboration. Use to set up project workspaces and organize team communication.
Get detailed information about a specific Microsoft Team including settings, member count, and metadata. Useful for understanding team structure and permissions.
Update team properties and settings including display name, description, member permissions, guest settings, messaging options, and fun features.
Permanently delete a Microsoft Team. Exercise caution - this removes all team data, channels, and files. Typically used for cleanup or decommissioning projects.
List available transcripts for a meeting with metadata (IDs, timestamps, URLs). Accepts event or meeting ID.
Get transcript content in VTT format with speaker names and timestamps. Accepts event or meeting ID.
Search for users in the organization by name, email, or display name. Use to find people to add to teams, start chats with, or @mention in messages. Accepts simple queries like 'Max' or advanced syntax like '"displayName:Max"'. Input: {"query": "searchterm", "top": numberof_results}.
Get a user's presence status (available, busy, away, offline).
Send a direct private message to a user outside of channels. Returns shareable webUrl link to the sent message. Requires userid (get from searchusers). Creates new DM thread if none exists with that user.
Add an emoji reaction to a message in a Teams channel.
Search for messages across teams and channels using keywords. Returns full message content with an isfrom_me flag (null if unresolved). Uses hybrid approach for immediate results and indexed search. FAST for keyword searches. Use this instead of listallmy_messages when searching by text content. Note: newly sent messages may take minutes to appear in indexed search.
Get detailed information about a specific user including profile, contact info, and organizational details. Requires a valid user ID (GUID format) or email address - use search_users to find valid user IDs first.
Check if a user is likely available by looking at their recent activity and profile information. Alternative to presence when direct presence permissions are not available.
List all direct chats and group chats the user is part of. Includes unread message detection via chatViewpoint. FAST: Use this for counting contacts, finding who you messaged, or checking unread status. For message content use readdirectchat_messages.
Read messages from a specific direct chat or group chat. Returns timestamps, senders, and content. Includes an isfromme flag (null if unresolved) and webUrl links. Date filtering: createdbefore (API filter) and createdafter (client-side). If neither is supplied, results are bounded to the last 30 days (surfaced as a warning) — pass createdafter explicitly to widen. Use listdirectchats first to get chat IDs. Returns at most 50 messages per call; pass pageinfo.nextcursor as cursor to fetch the next page.
Get messages from Teams channels and DMs. Use mymessagesonly=True for personal message search (prioritizes DMs), or team_ids for team-specific searches. Date filtering reduces execution time.
Validate Microsoft Teams credentials. Verifies credentials during setup.

In an mcp.json file, add the configuration below, and restart Cursor.
Learn more in the official documentation ↗
1{
2 "mcpServers": {
3 "agent-handler": {
4 "url": "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
5 "headers": {
6 "Authorization": "Bearer yMt*****"
7 }
8 }
9 }
10}
11Open your Claude Desktop configuration file and add the server configuration below. You'll also need to restart the application for the changes to take effect.
Make sure Claude is using the Node v20+.
Learn more in the official documentation ↗
1{
2 "mcpServers": {
3 "agent-handler": {
4 "command": "npx",
5 "args": [
6 "-y",
7 "mcp-remote@latest",
8 "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
9 "--header",
10 "Authorization: Bearer ${AUTH_TOKEN}"
11 ],
12 "env": {
13 "AUTH_TOKEN": "yMt*****"
14 }
15 }
16 }
17}Open your Windsurf MCP configuration file and add the server configuration below.
Click on the refresh button in the top right of the Manage MCP server page or in the top right of the chat box in the box icon.
Learn more in the official documentation ↗
1{
2 "mcpServers": {
3 "agent-handler": {
4 "command": "npx",
5 "args": [
6 "-y",
7 "mcp-remote@latest",
8 "https://ah-api.merge.dev/api/v1/tool-packs/<tool-pack-id>/registered-users/<registered-user-id>/mcp",
9 "--header",
10 "Authorization: Bearer ${AUTH_TOKEN}"
11 ],
12 "env": {
13 "AUTH_TOKEN": "<ah-production-access-key>"
14 }
15 }
16 }
17 }In Command Palette (Cmd+Shift+P on macOS, Ctrl+Shift+P on Windows), run "MCP: Open User Configuration".
You can then add the configuration below and press "start" right under servers. Enter the auth token when prompted.
Learn more in the official documentation ↗
1{
2 "inputs": [
3 {
4 "type": "promptString",
5 "id": "agent-handler-auth",
6 "description": "Agent Handler AUTH_TOKEN", // "yMt*****" when prompt
7 "password": true
8 }
9 ],
10 "servers": {
11 "agent-handler": {
12 "type": "stdio",
13 "command": "npx",
14 "args": [
15 "-y",
16 "mcp-remote@latest",
17 "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
18 "--header",
19 "Authorization: Bearer ${input:agent-handler-auth}"
20 ]
21 }
22 }
23}Here are just a few potential use cases you can implement:
Here are just a few popular tools across different areas:
You can apply seemingly endless rules that align with your security policies and that of your customers. Here are just a few:
Merge provides security, reliability, and operational capabilities that Microsoft Teams MCP servers typically don’t offer. This includes:
Merge performs credential validation, user-specific or shared authentication, and guided login flows through Merge Link. This eliminates the need for developers to write auth flows manually.
All tool inputs and responses are scanned for sensitive data. And administrators can block, redact, or mask data based on configurable rules, and get alerted when these rules are violated.
You can add, modify, or extend tools and connectors while preserving production-ready quality through Merge’s validation workflows.
Merge provides searchable logs, audit trails, API request traces, and agent-level action monitoring, all of which are crucial for enterprise Teams deployments.
Here’s a brief breakdown of the steps you can take:
1. Open Connector Studio in the Agent Handler dashboard, and add the Microsoft Teams connector.
2. Add or modify tools within the Microsoft Teams connector. This includes defining API requests for Teams-specific actions, configuring input/output schemas for each tool, and providing optimized tool descriptions
3. Assign an authentication model (individual or shared). Individual authentication lets each user authenticate with their own Microsoft Teams credentials, while shared authentication enables organization-level access using shared credentials.
4. Add the Microsoft Teams connector to a Tool Pack, then regenerate the Tool Pack ID to include your Microsoft Teams tools.
5. Associate the Tool Pack with your agent using the MCP entry URL.
Yes, Agent Handler for Employees lets your employees connect Claude, ChatGPT, Microsoft Copilot, Cursor, and other MCP-compatible AI tools to Microsoft Teams without bypassing IT governance.
Instead of setting up direct connections with personal credentials that IT can't monitor or revoke, each employee authenticates through Agent Handler and gets individual credentials tied to their identity.
IT also provisions access by role or group via SCIM. An engineering manager, for instance, gets Microsoft Teams access to monitor channel activity and send alerts, Jira to track sprint progress, and GitHub to reference code changes in discussions; while a customer success manager gets Microsoft Teams access to coordinate internal escalations, Salesforce to pull account context, and Zendesk to track open support cases.
Every tool call an employee's AI makes to Microsoft Teams is also inspected against your DLP rules and logged to a searchable audit trail, giving security teams full visibility into what data was accessed and by whom.
Whether you're an engineer experimenting with agents or a product manager looking to add tools, you can get started for free now