Skip to main content
Glama

Teams MCP Server (Secure)

A secure Microsoft Teams MCP server using only official Microsoft packages.

Security

This server uses exclusively official Microsoft packages:

Package

Source

Purpose

@azure/identity

Microsoft Azure SDK

Authentication

@microsoft/microsoft-graph-client

Microsoft Graph SDK

Graph API calls

@modelcontextprotocol/sdk

Anthropic MCP

MCP protocol

No third-party authentication or API wrappers.

Related MCP server: Teams MCP

Prerequisites

  • Node.js 18+

  • Azure CLI (az login) - required for authentication

Installation

npm install
npm run build

Authentication

The server uses Azure CLI credentials (az login). For enterprise tenants with Conditional Access policies blocking Graph API Chat permissions, use the Power Automate integration instead.

If your organization blocks direct Graph API access to Teams chats, you can use Power Automate as a bridge:

One-time Setup

  1. Go to Power Automate

  2. Create a new Instant cloud flow

  3. Add trigger: "When an HTTP request is received"

  4. Click "Use sample payload" and enter: {"message": "Hello"}

  5. Add action: "Post message in a chat or channel" (Microsoft Teams)

  6. Configure the Teams action with your target chat/channel

  7. For Message, select message from Dynamic content

  8. Save and turn on the flow

  9. Copy the HTTP POST URL from the trigger

Usage

# Set your Power Automate flow URL
export POWER_AUTOMATE_URL="https://....powerplatform.com/.../invoke?api-version=1"

# Post a message (uses Azure AD auth automatically)
curl -X POST "$POWER_AUTOMATE_URL" \
  -H "Authorization: Bearer $(az account get-access-token --resource https://service.flow.microsoft.com/ --query accessToken -o tsv)" \
  -H "Content-Type: application/json" \
  -d '{"message": "Hello from MCP!"}'

Usage

Add to your MCP config

VS Code (.vscode/mcp.json):

{
  "servers": {
    "teams": {
      "type": "stdio",
      "command": "node",
      "args": ["C:/teams-mcp/dist/index.js"]
    }
  }
}

Claude Desktop (claude_desktop_config.json):

{
  "mcpServers": {
    "teams": {
      "command": "node",
      "args": ["C:/teams-mcp/dist/index.js"]
    }
  }
}

Available Tools

Tool

Description

get_current_user

Get authenticated user info

list_chats

List user's Teams chats

list_teams

List joined Teams

list_channels

List channels in a Team

send_chat_message

Send message to a chat (requires Graph permissions)

send_channel_message

Send message to a channel (requires Graph permissions)

get_chat_messages

Get messages from a chat

get_channel_messages

Get messages from a channel

send_via_power_automate

Send message via Power Automate (bypasses Graph restrictions)

Examples

{
  "tool": "send_via_power_automate",
  "arguments": {
    "flowUrl": "https://....powerplatform.com/.../invoke?api-version=1",
    "message": "Hello from MCP!"
  }
}

Send a message to a chat (requires Graph permissions)

{
  "tool": "send_chat_message",
  "arguments": {
    "chatId": "19:abc123@thread.v2",
    "message": "Hello from MCP!"
  }
}

License

MIT

Available Tools

9 tools
get_channel_messagesB

Get recent messages from a Teams channel

ParametersJSON Schema
NameRequiredDescriptionDefault
topNoNumber of messages to return (default: 20)
teamIdYesThe ID of the Team
channelIdYesThe ID of the channel

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry the full burden of behavioral disclosure. It states this is a read operation ('Get'), but does not mention default message count (despite the schema's 'top' default), ordering, pagination, or any access requirements. For a tool with zero annotation coverage, this is a significant gap beyond stating the bare action.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence that effectively communicates the core function. Every word earns its place; there is no filler or redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple retrieval tool with no output schema, the description is minimally adequate but leaves out important context such as the default message limit, what 'recent' means, or how the response is structured. It is not misleading, but it lacks enough detail to be considered complete in isolation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, with each parameter (teamId, channelId, top) clearly described. The tool description itself adds no extra parameter detail beyond what the schema already provides, so the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Get') and resource ('recent messages from a Teams channel'), clearly distinguishing it from sibling tools like get_chat_messages (which retrieves from chats) and list_channels (which lists channels). There is no ambiguity about what this tool does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives such as get_chat_messages or send_channel_message. There is no mention of prerequisites, filters, or exclusions. The only implied context is that it is for retrieving messages from a channel, but that is not explicitly stated as usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_chat_messagesA

Get recent messages from a Teams chat

ParametersJSON Schema
NameRequiredDescriptionDefault
topNoNumber of messages to return (default: 20)
chatIdYesThe ID of the chat

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must carry the transparency burden. 'Get' conveys a non-mutating read, but the description does not disclose ordering, the exact meaning of 'recent', authentication needs, or return format. It is not misleading but is thin.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence with no filler or redundant detail. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read tool with two well-documented parameters, the description is minimally sufficient. However, with no output schema, no annotations, and no explicit sibling guidance, the agent lacks context on return values, default ordering, and when to prefer this over channel-message retrieval.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with chatId and top both described. The tool description adds no parameter-specific semantics beyond the schema, so the baseline score of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('get') and resource ('recent messages from a Teams chat'), clearly distinguishing it from siblings like get_channel_messages and send_chat_message.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage by identifying 'Teams chat' as the target, but it provides no explicit guidance on when to choose this tool over get_channel_messages, nor does it mention prerequisites or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_current_userA

Get the current authenticated user's information

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It implies a read-only operation via 'Get' but does not disclose return format, authentication requirements, or any side effects. For a simple getter, this is minimally adequate but lacks detail.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with no filler words, directly stating the tool's function. It is appropriately sized and front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity, the description is mostly sufficient, but it does not specify what information is returned (e.g., name, email, profile). Sibling tools suggest a messaging context, but the output remains ambiguous.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the description need not explain parameter semantics. The baseline of 4 applies since no parameter information is required.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves the current authenticated user's information, using a specific verb ('Get') and resource ('current authenticated user's information'). It distinguishes from sibling tools like list_chats and send_channel_message, which handle messaging operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives, such as whether it should be called to retrieve user context before other operations. No exclusions or prerequisites are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_channelsB

List channels in a specific Team

ParametersJSON Schema
NameRequiredDescriptionDefault
teamIdYesThe ID of the Team

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full responsibility for disclosing behavior. It only states the action without mentioning read-only nature, pagination, permissions, or response details, offering minimal transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One-sentence description with clear verb and object, no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simplicity of the tool with a single parameter and no output schema, the description is adequate but lacks details about expected response or any behavioral constraints, making it minimally complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already fully describes teamId with 100% coverage. The description's phrase 'in a specific Team' aligns with the schema but adds no new information beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it lists channels within a specific team, using a specific verb and resource. It distinguishes itself from sibling tools like list_teams and list_chats.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool versus alternatives. The only implied context is that a teamId is required, but no exclusions or alternative suggestions are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_chatsB

List the user's Teams chats

ParametersJSON Schema
NameRequiredDescriptionDefault
topNoNumber of chats to return (default: 20)

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure, but it only restates the basic function. It does not disclose any side effects, ordering, pagination behavior, or what happens with the 'top' parameter. The read-only nature is implied but not stated explicitly.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence with no filler words. It is appropriately sized and front-loaded, quickly conveying the core purpose without unnecessary detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple with only one optional parameter and no output schema, but the description lacks important contextual details such as how the results are ordered, what fields are returned, or any limits beyond 'top'. It is adequate but leaves gaps in understanding the full behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already provides 100% coverage for the 'top' parameter with its description, so the baseline is 3. The tool description adds no additional semantic value beyond what the schema states, leaving parameter semantics fully handled by the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (list) and the resource (the user's Teams chats), which distinguishes it from sibling tools like list_teams and list_channels that target different resources. The verb and resource are specific and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It does not mention any context, prerequisites, or exclusions. While the resource name implies a distinct use case, there is no explicit guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_teamsA

List Teams the user has joined

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It implies a read operation ('List') and specifies scope (teams the user joined), but does not disclose potential details like authentication requirements, pagination, or return format. For a simple list, this is adequate but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no fluff. Every word adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, no-output-schema list operation, the description fully conveys the function. It lacks only optional details about result ordering or content, but given the low complexity and lack of output schema, it is sufficiently complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the description need not explain any. Schema coverage is 100% vacuously, and the baseline for 0 params is 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'List' with resource 'Teams' and scope 'the user has joined', clearly distinguishing it from sibling tools like list_chats and list_channels. It leaves no ambiguity about what the tool does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly indicates this is for listing teams the user has joined, and sibling names make it obvious that other list tools handle chats/channels. However, it does not explicitly state when-not-to-use or name alternatives, so it lacks the explicit exclusions of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

send_channel_messageC

Send a message to a Teams channel

ParametersJSON Schema
NameRequiredDescriptionDefault
teamIdYesThe ID of the Team
messageYesThe message content to send
channelIdYesThe ID of the channel

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must disclose behavioral traits, but it only states the action itself. It does not mention irreversibility, required permissions, formatting support, or error behavior. For a mutation tool, this leaves significant gaps in understanding.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence with no redundant wording. It is quickly readable and contains only the essential information about the tool's purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the absence of annotations, output schema, and contextual guidance, this description is insufficient for an agent to fully understand the tool's role. It lacks information about how it fits with sibling tools, what the response will be, and any side effects. The schema covers parameters, but the description fails to provide a broader operational context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema provides complete descriptions for all three parameters, so schema coverage is 100%. The description adds no additional parameter-level meaning beyond what is already structured, with no mention of parameter interdependencies or format expectations. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Send a message to a Teams channel' clearly states the action (send) and the resource (Teams channel), which distinguishes it from sibling tools like send_chat_message and send_via_power_automate, though it does not explicitly contrast them. It is specific enough to understand the tool's core purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no context for when to use this tool versus alternatives. It does not mention prerequisites (e.g., needing teamId/channelId from list_teams or list_channels), nor does it differentiate from send_chat_message or send_via_power_automate. It entirely lacks usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

send_chat_messageC

Send a message to a Teams chat

ParametersJSON Schema
NameRequiredDescriptionDefault
chatIdYesThe ID of the chat
messageYesThe message content to send

TDQS

C2.9/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

There are no annotations, and the description does not disclose any behavioral traits beyond the basic action. It offers no information about permissions, return values, rate limits, or message formatting, failing to compensate for the lack of structured metadata.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with zero wasted words. It conveys the essential purpose efficiently.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple 2-parameter tool with full schema coverage, the description is minimally adequate. However, it lacks guidance on differentiating between chat and channel messaging, and it provides no behavioral context, leaving some ambiguity in tool selection.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema provides 100% coverage with clear descriptions for both chatId and message. The tool description adds no extra parameter semantics, but the high schema coverage grants the baseline score of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Send') and resource ('a message to a Teams chat'), clearly stating the tool's function. It differentiates from siblings like send_channel_message by targeting chats rather than channels, though it does not explicitly mention alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives such as send_channel_message or send_via_power_automate. The description only states the action, leaving the agent without contextual selection cues or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

send_via_power_automateA

Send a message via Power Automate flow (bypasses Graph API auth restrictions)

ParametersJSON Schema
NameRequiredDescriptionDefault
flowUrlYesThe Power Automate HTTP trigger URL (without sig parameter - uses Azure AD auth)
messageYesThe message content to send

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden of behavioral disclosure. It mentions the auth-bypass trait and the parameter note about Azure AD auth, but it does not explain what happens after sending, potential side effects, or error behavior. This is a minimal disclosure that leaves significant unknowns for a mutation-like operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that immediately states the action and the key differentiator. Every word earns its place, with no filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple with only 2 well-described parameters, so the schema covers inputs well. However, there is no output schema and no description of return values or behavior on success/failure. Given the lack of annotations, the description should provide more context about what the agent can expect when invoking the tool, which it does not.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description itself does not elaborate on parameters beyond what the schema provides. The flowUrl property includes a useful note about omitting the sig parameter, but this is part of the schema, not the main description, and no additional meaning is added.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function with a specific verb and resource: 'Send a message via Power Automate flow'. It also distinguishes itself from sibling send tools by mentioning it 'bypasses Graph API auth restrictions', which sets it apart from the standard send_chat_message and send_channel_message tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description indicates the tool is for use when Graph API auth restrictions are a concern, providing clear context for when this tool is appropriate. However, it does not explicitly name alternatives or state 'use when not possible via Graph API', so it falls short of fully explicit when/when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 9 tool updatesv1.0.0
    • First observedget_channel_messages
    • First observedget_chat_messages
    • First observedget_current_user
    • First observedlist_channels
    • First observedlist_chats
    • First observedlist_teams
    • First observedsend_channel_message
    • First observedsend_chat_message
    • First observedsend_via_power_automate

TDQS

A3.7/5.0

Scored across 9 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: user info, listing different entities (chats, teams, channels), and sending/retrieving messages for chat vs. channel. The send_via_power_automate tool is uniquely positioned as an alternative delivery mechanism, so no two tools are easily confused.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern using snake_case (get_, list_, send_), making the set predictable and easy to navigate. The one outlier, send_via_power_automate, still adheres to the same verb-first structure.

Tool Count5/5

With 9 tools, the server is well-scoped for a Teams messaging-focused MCP. It provides a solid set of read and send operations without being overbuilt or feeling sparse, fitting comfortably within the ideal 3-15 range.

Completeness4/5

The tool surface covers the core lifecycle for messaging: listing entities, reading messages, and sending to both chats and channels. Gaps like updating/deleting messages or creating teams/channels exist, but these are reasonable omissions for a communication-focused server and do not block primary workflows.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers