Skip to main content
Glama

Teams MCP

npm version npm downloads codecov License: MIT GitHub stars

一个模型上下文协议 (MCP) 服务器,提供与 Microsoft Graph API 的无缝集成,使 AI 助手能够与 Microsoft Teams、用户、聊天、文件和组织数据进行交互。

📦 安装

要在 Cursor/Claude/VS Code 中使用此 MCP 服务器,请添加以下配置:

{
  "mcpServers": {
    "teams-mcp": {
      "command": "npx",
      "args": ["-y", "@floriscornel/teams-mcp@latest"]
    }
  }
}

Related MCP server: Microsoft Graph MCP Server

🚀 功能

🔐 身份验证

  • 使用 Microsoft Graph 进行 OAuth 2.0 设备代码身份验证流程

  • 安全的令牌管理、缓存持久化和刷新令牌更新

  • 身份验证状态检查和注销支持

  • 具有缩减权限范围的只读模式

  • 直接支持 AUTH_TOKEN 以使用预签发的 Microsoft Graph 访问令牌

👥 用户管理

  • 获取当前用户信息

  • 按姓名或电子邮件搜索用户

  • 检索详细的用户资料

  • 访问组织目录数据

🏢 Microsoft Teams 集成

  • 团队管理

    • 列出用户加入的团队

    • 访问团队详细信息和元数据

  • 频道操作

    • 列出团队内的频道

    • 检索频道消息和回复

    • 向团队频道发送消息

    • 回复现有的频道主题

    • 编辑和软删除频道消息及回复

    • 支持消息重要性级别 (normal, high, urgent)

    • 支持通过 URL 或 base64 数据进行内联图像附件

  • 团队成员

    • 列出团队成员及其角色

    • 访问成员信息

    • 搜索用户以进行 @mentions

💬 聊天与消息

  • 一对一和群组聊天

    • 列出用户的聊天记录

    • 创建新的一对一或群组对话

    • 检索带有过滤、排序和分页功能的聊天消息历史记录

    • 通过 @odata.nextLink 分页获取所有可用消息

    • 向现有聊天发送消息

    • 编辑之前发送的聊天消息

    • 软删除聊天消息

✏️ 消息管理

  • 编辑与删除

    • 更新(编辑)在聊天和频道中发送的消息

    • 软删除聊天和频道中的消息(标记为已删除,不进行永久移除)

    • 只有消息发送者可以更新/删除自己的消息

    • 编辑时支持 Markdown 格式、提及和重要性级别

📎 媒体与附件

  • 托管内容

    • 从聊天和频道消息中下载托管内容(图像、文件)

    • 访问对话中共享的内联图像和附件

    • 可选择将托管内容直接保存到磁盘

  • 文件上传

    • 上传并发送任何文件类型(PDF、DOCX、XLSX、ZIP、图像等)到频道和聊天

    • 通过可恢复的上传会话支持大文件 (>4 MB)

    • 频道上传至 SharePoint,聊天上传至 OneDrive

    • 可选的消息文本、自定义文件名、格式和重要性级别

🔍 高级搜索与发现

  • 消息搜索

    • 使用 Microsoft Search API 搜索所有 Teams 频道和聊天

    • 支持 KQL(关键字查询语言)语法

    • 按发送者、提及、附件、读取状态和日期范围进行过滤

    • 获取带有高级过滤选项的最近消息

    • 查找提及当前用户的消息

丰富的消息格式支持

以下工具支持在 Teams 频道和聊天中使用丰富的消息格式:

  • send_channel_message

  • send_chat_message

  • reply_to_channel_message

  • update_channel_message

  • update_chat_message

  • send_file_to_channel

  • send_file_to_chat

格式选项

您可以指定 format 参数来控制消息格式:

  • text(默认):纯文本

  • markdown:Markdown 格式(粗体、斜体、列表、链接、代码等),转换为经过清理的 HTML

format 设置为 markdown 时,消息内容会使用安全的 markdown 解析器转换为 HTML,并在发送到 Teams 之前进行清理,以移除潜在的危险内容。

如果未指定 format,消息将作为纯文本发送。

使用示例

{
  "teamId": "...",
  "channelId": "...",
  "message": "**Bold text** and _italic text_\n\n- List item 1\n- List item 2\n\n[Link](https://example.com)",
  "format": "markdown",
  "importance": "high"
}
{
  "chatId": "...",
  "message": "Simple plain text message",
  "format": "text"
}

安全特性

  • HTML 清理:所有 markdown 内容都会转换为 HTML 并进行清理,以移除潜在的危险元素(脚本、事件处理程序等)

  • 允许的标签:仅允许安全的 HTML 标签(p, strong, em, a, ul, ol, li, h1-h6, code, pre 等)

  • 安全属性:仅允许安全的属性

  • XSS 防护:内容会自动清理以防止跨站脚本攻击

支持的 Markdown 特性

  • 文本格式:粗体 (**text**),斜体 (_text_),删除线 (~~text~~)

  • 链接[text](url)

  • 列表:无序 (- item) 和有序 (1. item)

  • 代码:行内 `code` 和代码块

  • 标题# H1###### H6

  • 引用> quoted text

  • 表格:GitHub 风格的 markdown 表格

对 LLM 友好的内容格式

从 Microsoft Graph API 检索的消息以包含 Teams 特定标签的原始 HTML 形式返回。为了使这些内容更易于 AI 助手使用,以下工具支持自动 HTML 转 Markdown 转换:

  • get_chat_messages

  • get_channel_messages

  • get_channel_message_replies

  • search_messages

  • get_my_mentions

内容格式选项

使用 contentFormat 参数来控制消息内容的返回方式:

  • markdown(默认):将 Teams HTML 转换为简洁的 Markdown,针对 LLM 使用进行了优化

  • raw:返回来自 Microsoft Graph API 的原始 HTML

转换内容

HTML 元素

Markdown 输出

<at id="0">Name</at> (Teams 提及)

@Name (多词名称使用提及元数据合并)

<strong>text</strong>

**text**

<em>text</em>

*text*

<code>text</code>

`text`

<a href="url">text</a>

[text](url)

<ul><li>item</li></ul>

- item

<table>...</table>

GFM Markdown 表格

<attachment id="...">

{attachment:id}

<systemEventMessage/>

(已移除)

<hr>

---

&nbsp;, &amp;

解码为纯字符

附件元数据

包含文件附件或内联图像的消息在响应中包含一个 attachments 数组,其中包含每个附件的元数据(id, name, contentType, contentUrl, thumbnailUrl)。Markdown 内容中的内联 {attachment:id} 标记与此数组中的条目相关联,允许消费者通过 download_message_hosted_contentdownload_chat_hosted_content 识别并下载附件。

使用示例

{
  "chatId": "19:meeting_...",
  "limit": 10,
  "contentFormat": "markdown"
}

获取原始 HTML:

{
  "chatId": "19:meeting_...",
  "limit": 10,
  "contentFormat": "raw"
}

📦 安装

# Install dependencies
npm install

# Build the project
npm run build

# Set up authentication
npm run auth

🔧 配置

先决条件

  • Node.js 18+

  • 具有适当权限的 Microsoft 365 账户

  • 针对以下范围的 Microsoft Graph 委托权限

所需的 Microsoft Graph 权限

完整模式(默认):

  • User.Read - 读取用户资料

  • User.ReadBasic.All - 读取基本用户信息

  • Team.ReadBasic.All - 读取团队信息

  • Channel.ReadBasic.All - 读取频道信息

  • ChannelMessage.Read.All - 读取频道消息

  • ChannelMessage.Send - 发送频道消息和回复

  • ChannelMessage.ReadWrite - 编辑和删除频道消息

  • Chat.Read - 读取聊天消息(通过只读范围包含)

  • Chat.ReadWrite - 创建和管理聊天,发送/编辑/删除聊天消息(取代 Chat.Read

  • TeamMember.Read.All - 读取团队成员

  • Files.ReadWrite.All - 频道和聊天文件上传所需

只读模式 (TEAMS_MCP_READ_ONLY=true) — 仅请求这些范围:

  • User.Read

  • User.ReadBasic.All

  • Team.ReadBasic.All

  • Channel.ReadBasic.All

  • ChannelMessage.Read.All

  • TeamMember.Read.All

  • Chat.Read

身份验证模式

完全访问:

npx @floriscornel/teams-mcp@latest authenticate

只读访问:

npx @floriscornel/teams-mcp@latest authenticate --read-only

使用现有的 Microsoft Graph JWT 直接注入令牌:

{
  "mcpServers": {
    "teams-mcp": {
      "command": "npx",
      "args": ["-y", "@floriscornel/teams-mcp@latest"],
      "env": {
        "AUTH_TOKEN": "<jwt-for-https://graph.microsoft.com>"
      }
    }
  }
}

令牌存储

  • 身份验证元数据存储在本地 ~/.msgraph-mcp-auth.json

  • 令牌缓存存储在本地 ~/.teams-mcp-token-cache.json

🛠️ 使用

启动服务器

# Development mode with hot reload
npm run dev

# Production mode
npm run build && node dist/index.js

# Start in read-only mode (disables all write tools)
TEAMS_MCP_READ_ONLY=true node dist/index.js

CLI 命令

npx @floriscornel/teams-mcp@latest authenticate              # Authenticate with full scopes
npx @floriscornel/teams-mcp@latest authenticate --read-only  # Authenticate with read-only scopes
npx @floriscornel/teams-mcp@latest check                     # Check authentication status
npx @floriscornel/teams-mcp@latest logout                    # Clear authentication
npx @floriscornel/teams-mcp@latest auth                      # Alias for authenticate
npx @floriscornel/teams-mcp@latest                           # Start MCP server (default)

环境变量

  • TEAMS_MCP_READ_ONLY=true - 以只读模式启动 MCP 服务器

  • AUTH_TOKEN=<jwt> - 使用预先存在的 Microsoft Graph 访问令牌代替 MSAL 登录

只读模式

服务器支持只读模式,该模式禁用所有写操作(发送消息、创建聊天、上传文件、编辑/删除消息),并且仅从 Microsoft Graph 请求读取权限范围。

启用只读模式,使用以下任一方式:

  • 环境变量:TEAMS_MCP_READ_ONLY=true

  • CLI 标志:--read-only

使用缩减范围进行身份验证:

npx @floriscornel/teams-mcp@latest authenticate --read-only

MCP 服务器配置(只读):

{
  "mcpServers": {
    "teams-mcp": {
      "command": "npx",
      "args": ["-y", "@floriscornel/teams-mcp@latest"],
      "env": {
        "TEAMS_MCP_READ_ONLY": "true"
      }
    }
  }
}

切换模式: 当从只读模式切换到完整模式时,服务器会检测到范围不匹配并警告您重新进行身份验证:

npx @floriscornel/teams-mcp@latest authenticate

只读工具 (16): auth_status, get_current_user, search_users, get_user, list_teams, list_channels, get_channel_messages, get_channel_message_replies, list_team_members, search_users_for_mentions, download_message_hosted_content, list_chats, get_chat_messages, download_chat_hosted_content, search_messages, get_my_mentions

只读模式下禁用的写工具 (10): send_channel_message, reply_to_channel_message, update_channel_message, delete_channel_message, send_file_to_channel, send_chat_message, create_chat, update_chat_message, delete_chat_message, send_file_to_chat

可用的 MCP 工具

身份验证

  • auth_status - 检查当前身份验证状态

用户操作

  • get_current_user - 获取已验证用户信息

  • search_users - 按姓名或电子邮件搜索用户

  • get_user - 按 ID 或电子邮件获取详细用户信息

团队操作

  • list_teams - 列出用户加入的团队

  • list_channels - 列出特定团队中的频道

  • get_channel_messages - 从团队频道检索消息,包含附件摘要和内容格式选择

  • get_channel_message_replies - 获取特定频道消息的回复

  • send_channel_message - 向团队频道发送消息,支持可选的提及、重要性和图像附件

  • reply_to_channel_message - 回复现有的频道消息

  • update_channel_message - 编辑之前发送的频道消息或回复

  • delete_channel_message - 软删除频道消息或回复

  • list_team_members - 列出特定团队的成员

  • search_users_for_mentions - 搜索团队成员以在消息中进行 @mention

  • send_file_to_channel - 上传本地文件并将其作为消息发送到频道

聊天操作

  • list_chats - 列出用户的聊天(一对一和群组)

  • get_chat_messages - 从特定聊天中检索消息,支持分页、过滤、排序和 fetchAll

  • send_chat_message - 向聊天发送消息

  • create_chat - 创建新的一对一或群组聊天

  • update_chat_message - 编辑之前发送的聊天消息

  • delete_chat_message - 软删除聊天消息

  • send_file_to_chat - 上传本地文件并将其作为消息发送到聊天

媒体操作

  • download_message_hosted_content - 从频道消息下载托管内容(图像、文件)

  • download_chat_hosted_content - 从聊天消息下载托管内容(图像、文件)

搜索操作

  • search_messages - 使用 KQL 语法搜索所有 Teams 消息

  • get_my_mentions - 查找提及当前用户的最近消息

📋 示例

身份验证

首先,使用 Microsoft Graph 进行身份验证:

# Full access (default)
npx @floriscornel/teams-mcp@latest authenticate

# Read-only (reduced permission scopes)
npx @floriscornel/teams-mcp@latest authenticate --read-only

检查您的身份验证状态:

npx @floriscornel/teams-mcp@latest check

如有需要,注销:

npx @floriscornel/teams-mcp@latest logout

聊天分页示例

{
  "chatId": "19:meeting_...",
  "limit": 100,
  "fetchAll": true,
  "orderBy": "createdDateTime",
  "descending": true,
  "contentFormat": "markdown"
}

带有提及和图像的频道消息

{
  "teamId": "team-id",
  "channelId": "channel-id",
  "message": "Please review **today's update**",
  "format": "markdown",
  "importance": "high",
  "mentions": [
    {
      "mention": "alex.chen",
      "userId": "00000000-0000-0000-0000-000000000000"
    }
  ],
  "imageUrl": "https://example.com/status.png"
}

文件上传示例

{
  "chatId": "19:meeting_...",
  "filePath": "/absolute/path/to/report.pdf",
  "message": "Please review the attached report",
  "format": "markdown"
}

与 Cursor/Claude 集成

此 MCP 服务器旨在通过模型上下文协议与 Claude/Cursor/VS Code 等 AI 助手配合使用。

{
  "mcpServers": {
    "teams-mcp": {
      "command": "npx",
      "args": ["-y", "@floriscornel/teams-mcp@latest"]
    }
  }
}

🔒 安全

  • 所有身份验证均通过 Microsoft 的 OAuth 2

Available Tools

19 tools
auth_statusA

Check the authentication status of the Microsoft Graph connection. Returns whether the user is authenticated and shows their basic profile information.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior3/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. It states what the tool returns (authentication status and basic profile info) but doesn't mention error conditions, rate limits, or what happens when authentication fails. The description adds value by specifying the return content but lacks comprehensive behavioral context.

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 perfectly concise - two sentences that directly state what the tool does and what it returns. Every word earns its place with zero waste or redundancy. The information is front-loaded with the core purpose stated immediately.

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 authentication status check tool with no parameters and no output schema, the description is adequate but has gaps. It explains what information is returned but doesn't specify the format or structure of the response. Given the lack of annotations and output schema, more detail about the return format would improve completeness.

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 0 parameters with 100% schema description coverage, so the baseline is 4. The description appropriately doesn't waste space discussing non-existent parameters and focuses on the tool's function instead.

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 purpose with specific verbs ('check', 'returns') and resources ('authentication status', 'Microsoft Graph connection', 'basic profile information'). It distinguishes itself from siblings like 'get_current_user' by focusing specifically on authentication status rather than general user data retrieval.

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 provides clear context about when to use this tool - to check authentication status and get basic profile info. However, it doesn't explicitly state when NOT to use it or mention specific alternatives like 'get_current_user' for more detailed user information, which prevents a perfect score.

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

create_chatC

Create a new chat conversation. Can be a 1:1 chat (with one other user) or a group chat (with multiple users). Group chats can optionally have a topic.

ParametersJSON Schema
NameRequiredDescriptionDefault
userEmailsYesArray of user email addresses to add to chat
topicNoChat topic (for group chats)

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden but offers minimal behavioral context. It mentions chat types (1:1/group) and optional topics, but doesn't disclose permissions needed, whether chats are private/public, if there are rate limits, what happens with duplicate user emails, or what the response looks like. For a creation tool with zero annotation coverage, this is insufficient.

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 extremely concise with just two sentences that efficiently convey the core functionality. Every word earns its place - first sentence establishes the main action, second sentence provides essential context about chat types and optional features. No wasted words or redundancy.

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?

For a creation tool with no annotations and no output schema, the description is incomplete. It doesn't explain what gets returned (chat ID? success status?), doesn't mention error conditions, doesn't clarify whether userEmails must be valid/existing users, and provides no guidance on usage context relative to sibling tools. The conciseness comes at the expense of necessary completeness.

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 schema already documents both parameters thoroughly. The description adds minimal value by mentioning 'topic (for group chats)' which slightly clarifies usage context, but doesn't provide additional semantics beyond what's in the schema descriptions. This meets the baseline for high schema coverage.

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 clearly states the verb 'create' and resource 'new chat conversation', specifying it can be 1:1 or group chat. However, it doesn't explicitly differentiate from sibling tools like 'send_chat_message' which might also initiate chats, leaving some ambiguity about when to use this specific creation tool versus sending a first message.

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. With siblings like 'send_chat_message' that might also initiate conversations, there's no indication whether this is for empty chat creation versus starting with content, or any prerequisites like authentication status needed before creating chats.

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

get_channel_message_repliesC

Get all replies to a specific message in a channel. Returns reply content, sender information, and timestamps.

ParametersJSON Schema
NameRequiredDescriptionDefault
teamIdYesTeam ID
channelIdYesChannel ID
messageIdYesMessage ID to get replies for
limitNoNumber of replies to retrieve (default: 20)

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions the return content (replies with content, sender info, timestamps), which is helpful, but lacks critical details like pagination behavior, rate limits, authentication requirements, error conditions, or whether it's a read-only operation. For a tool with no annotations, this leaves significant gaps in understanding its behavior.

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

Conciseness4/5

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

The description is appropriately concise with two sentences: one stating the purpose and another detailing the return values. It's front-loaded with the core function, and every sentence adds value (the second clarifies output content). There's no wasted verbiage, though it could be slightly more structured with bullet points for returns.

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 no annotations and no output schema, the description is incomplete for a tool with 4 parameters. It covers the basic purpose and return content but misses behavioral aspects (e.g., pagination, errors, auth), usage context relative to siblings, and deeper parameter insights. For a read operation in a collaborative toolset, this leaves too much unspecified.

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 schema fully documents all parameters. The description adds no additional parameter semantics beyond what's in the schema—it doesn't explain relationships between parameters (e.g., that teamId, channelId, and messageId form a hierarchy) or provide usage examples. This meets the baseline for high schema coverage but doesn't enhance understanding.

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 clearly states the verb ('Get') and resource ('all replies to a specific message in a channel'), making the purpose immediately understandable. It distinguishes from siblings like 'get_channel_messages' by focusing on replies rather than primary messages. However, it doesn't explicitly contrast with 'reply_to_channel_message' or 'get_recent_messages', which slightly limits differentiation.

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 doesn't mention when to prefer this over 'get_channel_messages' for replies, or how it relates to 'get_recent_messages' or 'search_messages'. Without such context, an agent might struggle to select the right tool for fetching message replies in different scenarios.

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

get_channel_messagesC

Retrieve recent messages from a specific channel in a Microsoft Team. Returns message content, sender information, and timestamps.

ParametersJSON Schema
NameRequiredDescriptionDefault
teamIdYesTeam ID
channelIdYesChannel ID
limitNoNumber of messages to retrieve (default: 20)

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It mentions the tool retrieves 'recent messages' and specifies return fields, but lacks critical behavioral details: whether it's paginated, sorted (e.g., by timestamp), if it requires specific permissions, rate limits, or error conditions. For a read operation with no annotation coverage, this is a significant gap.

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

Conciseness4/5

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

The description is a single, efficient sentence that front-loads the core purpose and return values. Every word contributes meaning, though it could be slightly more structured (e.g., separating purpose from returns).

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 no annotations and no output schema, the description is incomplete. It omits behavioral traits (e.g., pagination, sorting, permissions), doesn't clarify scope (e.g., how 'recent' is defined), and provides no usage guidance relative to siblings. For a 3-parameter tool in a rich sibling set, this leaves the agent under-informed.

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 clear parameter descriptions in the schema (e.g., 'Team ID', 'Channel ID', 'Number of messages to retrieve'). The description adds no parameter-specific information beyond what the schema provides, so it meets the baseline for high schema coverage.

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 clearly states the action ('Retrieve recent messages'), resource ('from a specific channel in a Microsoft Team'), and return values ('message content, sender information, and timestamps'). However, it doesn't explicitly differentiate from siblings like 'get_recent_messages' or 'get_chat_messages', which likely retrieve messages from different contexts.

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 doesn't mention siblings like 'get_recent_messages' (which might retrieve messages across channels) or 'get_chat_messages' (which might retrieve private chat messages), leaving the agent to guess based on tool names alone.

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

get_chat_messagesB

Retrieve recent messages from a specific chat conversation. Returns message content, sender information, and timestamps.

ParametersJSON Schema
NameRequiredDescriptionDefault
chatIdYesChat ID (e.g. 19:meeting_Njhi..j@thread.v2
limitNoNumber of messages to retrieve
sinceNoGet messages since this ISO datetime
untilNoGet messages until this ISO datetime
fromUserNoFilter messages from specific user ID
orderByNoSort ordercreatedDateTime
descendingNoSort in descending order (newest first)

TDQS

B3.1/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. It mentions the return data but doesn't cover critical aspects like pagination behavior (e.g., how 'limit' interacts with date filters), error conditions (e.g., invalid chatId), rate limits, or authentication requirements. For a read operation with 7 parameters, this leaves significant gaps.

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, well-structured sentence that efficiently conveys the core purpose and return data. It's front-loaded with the main action and avoids unnecessary details, making it easy for an agent to parse quickly.

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 read tool with 7 parameters and no output schema, the description is minimally adequate. It covers the basic purpose and return format but lacks behavioral context (e.g., pagination, errors) and usage differentiation from siblings. The high schema coverage helps, but the absence of annotations and output schema means the description should do more to compensate.

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 schema fully documents all 7 parameters. The description adds no parameter-specific information beyond what's in the schema (e.g., it doesn't clarify interactions between 'since', 'until', and 'limit'). Baseline 3 is appropriate when the schema does the heavy lifting.

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 clearly states the verb ('retrieve') and resource ('recent messages from a specific chat conversation'), and specifies the return data ('message content, sender information, and timestamps'). However, it doesn't explicitly differentiate from siblings like 'get_recent_messages' or 'get_channel_messages', which likely have overlapping purposes.

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 like 'get_recent_messages' or 'get_channel_messages'. It doesn't mention prerequisites (e.g., needing a valid chatId) or exclusions, leaving the agent to infer usage from the tool name and parameters alone.

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 profile information including display name, email, job title, and department.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior3/5

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

No annotations are provided, so the description carries full burden. It states this is a read operation ('Get') and specifies what information is returned, but doesn't disclose behavioral aspects like authentication requirements, rate limits, error conditions, or data freshness. The description adds value by listing returned fields but lacks operational context.

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, well-structured sentence that efficiently communicates the tool's purpose and key returned fields without any redundant information. It's front-loaded with the main action and resource.

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 no annotations and no output schema, the description provides basic purpose and output field examples but lacks details on authentication, errors, or full return structure. For a read-only tool with 0 parameters, this is adequate but leaves gaps in behavioral context that could help an agent use it correctly.

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 0 parameters with 100% schema description coverage, so the baseline is 4. The description appropriately doesn't discuss parameters since none exist, and it focuses on the tool's purpose and output instead.

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 specific verb 'Get' and resource 'current authenticated user's profile information', with explicit examples of included fields (display name, email, job title, department). It distinguishes from sibling tools like 'get_user' by specifying 'current authenticated' rather than a general user lookup.

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 implies usage context (when you need profile info for the authenticated user) but doesn't explicitly state when not to use it or name alternatives. For instance, it doesn't contrast with 'get_user' for looking up other users or 'auth_status' for authentication state.

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

get_my_mentionsA

Find all recent messages where the current user was mentioned (@mentioned) across Teams channels and chats.

ParametersJSON Schema
NameRequiredDescriptionDefault
hoursNoGet mentions from the last N hours
limitNoMaximum number of mentions to return
scopeNoScope of searchall

TDQS

A3.5/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden but only states what the tool does, not how it behaves. It doesn't disclose whether this is a read-only operation, what permissions are needed, rate limits, pagination behavior, or what the return format looks like. For a tool with 3 parameters and no output schema, this leaves significant behavioral gaps.

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?

Single sentence that efficiently communicates the core purpose with zero wasted words. Front-loaded with the main action and resource, making it immediately clear what the tool does.

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 tool with 3 parameters, 100% schema coverage, but no annotations and no output schema, the description is minimally adequate. It states what the tool does but lacks behavioral context about permissions, rate limits, and return format. The schema handles parameter documentation well, but the description doesn't compensate for the missing output schema and annotation information.

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 all parameters are documented in the schema. The description doesn't add any parameter-specific information beyond what's in the schema. The baseline of 3 is appropriate since the schema does the heavy lifting, though the description could have added context about how parameters interact.

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 verb ('Find') and resource ('all recent messages where the current user was mentioned') with specific scope ('across Teams channels and chats'). It distinguishes from siblings like get_recent_messages (general messages) and search_messages (broader search) by focusing exclusively on mentions of the current user.

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 for finding user mentions, but doesn't explicitly state when to use this tool versus alternatives like search_messages or search_users_for_mentions. No guidance on prerequisites or exclusions is provided, leaving the agent to infer context from the tool name and description alone.

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

get_recent_messagesC

Get recent messages from across Teams with advanced filtering options. Can filter by time range, scope (channels vs chats), teams, channels, and users.

ParametersJSON Schema
NameRequiredDescriptionDefault
hoursNoGet messages from the last N hours (max 168 = 1 week)
limitNoMaximum number of messages to return
mentionsUserNoFilter messages that mention this user ID
fromUserNoFilter messages from this user ID
hasAttachmentsNoFilter messages with attachments
importanceNoFilter by message importance
includeChannelsNoInclude channel messages
includeChatsNoInclude chat messages
teamIdsNoSpecific team IDs to search in
keywordsNoKeywords to search for in message content

TDQS

C2.9/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. It states the tool retrieves messages with filtering but lacks critical details: whether it requires authentication, any rate limits, pagination behavior, error conditions, or the format of returned data. For a read operation with 10 parameters, this is a significant gap.

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

Conciseness4/5

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

The description is a single, efficient sentence that front-loads the core purpose and summarizes filtering capabilities. It avoids redundancy and wastes no words, though it could be slightly more structured by separating purpose from filter examples.

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 complexity (10 parameters, no annotations, no output schema), the description is incomplete. It doesn't address behavioral aspects like authentication needs, rate limits, or output format, which are crucial for a tool with extensive filtering options. The agent lacks sufficient context to use this tool effectively.

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 schema fully documents all 10 parameters. The description adds minimal value by listing filter types ('time range, scope, teams, channels, and users') but doesn't provide additional semantics beyond what's in the schema descriptions. Baseline 3 is appropriate when schema does the heavy lifting.

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 clearly states the tool's purpose: 'Get recent messages from across Teams with advanced filtering options.' It specifies the verb ('Get'), resource ('recent messages'), and scope ('across Teams'), though it doesn't explicitly differentiate from siblings like 'get_channel_messages' or 'search_messages' beyond mentioning 'advanced filtering options.'

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 mentions filtering options but doesn't compare to sibling tools like 'search_messages' or 'get_my_mentions,' leaving the agent to infer usage based on parameter names alone.

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

get_userC

Get detailed information about a specific user by their ID or email address. Returns profile information including name, email, job title, and department.

ParametersJSON Schema
NameRequiredDescriptionDefault
userIdYesUser ID or email address

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It states this is a read operation ('Get') and describes the return data, but lacks details on permissions, error handling, rate limits, or whether it's idempotent. For a tool with zero annotation coverage, this is insufficient behavioral disclosure.

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

Conciseness4/5

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

The description is concise and front-loaded, with two sentences that efficiently convey the tool's purpose and return data. However, it could be slightly more structured by separating usage guidelines or behavioral details, but it avoids unnecessary verbosity.

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 low complexity (1 parameter, no output schema, no annotations), the description is minimally adequate. It covers the basic purpose and return values, but lacks completeness in usage guidelines and behavioral transparency, which are needed for effective agent operation.

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 the parameter 'userId' documented as 'User ID or email address.' The description adds no additional parameter semantics beyond what the schema provides, such as format examples or validation rules, so it meets 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 clearly states the tool's purpose: 'Get detailed information about a specific user by their ID or email address.' It specifies the verb ('Get'), resource ('user'), and scope ('detailed information'), but does not explicitly differentiate it from sibling tools like 'get_current_user' or 'search_users', which prevents a score of 5.

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 like 'get_current_user' (for the current user) or 'search_users' (for broader queries). It mentions the input method (ID or email) but offers no context on appropriate use cases or exclusions.

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

list_channelsB

List all channels in a specific Microsoft Team. Returns channel names, descriptions, types, and IDs for the specified team.

ParametersJSON Schema
NameRequiredDescriptionDefault
teamIdYesTeam ID

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 carries the full burden. It states the tool lists channels and returns specific data, but doesn't disclose behavioral traits such as whether it's read-only, pagination handling, rate limits, authentication needs, or error conditions. The description is minimal and lacks operational context.

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, efficient sentence that front-loads the purpose and key details without unnecessary words. It directly communicates what the tool does, the required input, and the output structure, making it easy to parse quickly.

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 low complexity (1 parameter, no output schema, no annotations), the description is adequate for basic understanding but incomplete. It covers the purpose and return data, but lacks details on behavioral aspects like safety, performance, or error handling, which are important for a tool with no annotations.

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 the single parameter 'teamId' documented as 'Team ID'. The description adds value by contextualizing this as 'a specific Microsoft Team', but doesn't provide additional semantics like format examples or validation rules beyond what the schema already covers.

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 clearly states the action ('List all channels') and resource ('in a specific Microsoft Team'), and specifies the return data ('channel names, descriptions, types, and IDs'). It distinguishes from siblings like 'list_teams' by focusing on channels within a team, but doesn't explicitly differentiate from other channel-related tools like 'get_channel_messages'.

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 specifying 'in a specific Microsoft Team' and the required 'teamId' parameter, suggesting it's for retrieving channel information within a team context. However, it lacks explicit guidance on when to use this tool versus alternatives like 'list_teams' or 'get_channel_messages', and doesn't 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.

list_chatsB

List all recent chats (1:1 conversations and group chats) that the current user participates in. Returns chat topics, types, and participant information.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions that the tool returns 'chat topics, types, and participant information,' which adds some context about output format. However, it doesn't cover important behavioral aspects like pagination, rate limits, sorting order, or whether 'recent' has a specific time window. For a list operation with zero annotation coverage, this leaves significant gaps.

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

Conciseness4/5

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

The description is concise and well-structured in two sentences. The first sentence clearly states the purpose, and the second adds useful context about return values. There's no wasted verbiage, and the information is front-loaded appropriately.

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 moderate complexity (listing user chats) and the absence of both annotations and an output schema, the description is minimally adequate. It explains what the tool does and what information it returns, but lacks details on behavioral constraints, output structure, or differentiation from sibling tools. With no output schema, more detail about return values would be helpful.

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 input schema has 0 parameters with 100% coverage, so no parameter documentation is needed. The description appropriately doesn't discuss parameters, earning a baseline score of 4 for not adding unnecessary information. It correctly focuses on the tool's purpose rather than non-existent parameters.

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 clearly states the tool's purpose: 'List all recent chats (1:1 conversations and group chats) that the current user participates in.' It specifies the verb ('List'), resource ('chats'), and scope ('recent', 'current user participates in'), but doesn't explicitly differentiate from sibling tools like 'list_channels' or 'get_chat_messages'.

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. For example, it doesn't mention how this differs from 'list_channels' (which lists channels, not chats) or 'get_chat_messages' (which retrieves messages within a specific chat). The description only states what the tool does, not when to choose it.

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

list_team_membersB

List all members of a specific Microsoft Team. Returns member names, email addresses, roles, and IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
teamIdYesTeam ID

TDQS

B3.1/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. It states the return fields (names, emails, roles, IDs), which is helpful, but doesn't cover critical aspects like pagination, rate limits, authentication requirements, or error conditions. For a list operation with zero annotation coverage, this leaves significant gaps in understanding tool behavior.

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, efficient sentence that front-loads the core action ('List all members') and includes key return details. Every word earns its place with no redundancy or fluff, making it highly concise and well-structured.

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 moderate complexity (list operation with one parameter) and no output schema, the description is minimally adequate. It covers the purpose and return fields but lacks behavioral context (e.g., pagination) and usage guidelines. With no annotations to fill gaps, it's complete enough for basic use but leaves the agent guessing about finer details.

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 description coverage is 100% (teamId is fully described as 'Team ID'), so the baseline is 3. The description adds no additional parameter information beyond what the schema provides, such as format examples or sourcing details for teamId, but it doesn't need to compensate for gaps.

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 clearly states the verb 'List' and resource 'members of a specific Microsoft Team', making the purpose unambiguous. It distinguishes from siblings like list_channels or list_teams by specifying team members. However, it doesn't explicitly differentiate from search_users or get_user, which could also retrieve user information, so it's not a perfect 5.

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 like search_users or get_user, which might retrieve similar user data. It doesn't mention prerequisites (e.g., needing team access) or exclusions, leaving the agent to infer usage from context alone.

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

list_teamsA

List all Microsoft Teams that the current user is a member of. Returns team names, descriptions, and IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden. It discloses the return format (team names, descriptions, and IDs) and that it's a read operation, but lacks details on pagination, rate limits, authentication needs, or error conditions. It's adequate but minimal for behavioral context.

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?

Two sentences that are front-loaded with the core purpose and return values. Every word earns its place with no redundancy or fluff, making it highly efficient and easy to parse.

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?

Given the tool's low complexity (0 parameters, no output schema, no annotations), the description is complete enough for a basic list operation. It covers purpose and return format, though it could benefit from more behavioral details like pagination or error handling to be fully comprehensive.

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 input schema has 0 parameters with 100% coverage, so no parameter documentation is needed. The description doesn't add param info, which is appropriate. Baseline is 4 for zero parameters, as it avoids unnecessary details.

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 verb 'List' and resource 'Microsoft Teams', specifies scope 'that the current user is a member of', and distinguishes from siblings like list_channels and list_chats by focusing on teams. It's 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 Guidelines3/5

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

The description implies usage context (current user's membership) but doesn't explicitly state when to use this tool versus alternatives like list_channels or list_team_members. No guidance on prerequisites or exclusions is provided, leaving usage somewhat open to interpretation.

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

reply_to_channel_messageB

Reply to a specific message in a channel. Supports text and markdown formatting, mentions, and importance levels.

ParametersJSON Schema
NameRequiredDescriptionDefault
teamIdYesTeam ID
channelIdYesChannel ID
messageIdYesMessage ID to reply to
messageYesReply content
importanceNoMessage importance
formatNoMessage format (text or markdown)
mentionsNoArray of @mentions to include in the reply
imageUrlNoURL of an image to attach to the reply
imageDataNoBase64 encoded image data to attach
imageContentTypeNoMIME type of the image (e.g., 'image/jpeg', 'image/png')
imageFileNameNoName for the attached image file

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 carries full burden. It mentions behavioral traits like supporting text/markdown formatting, mentions, and importance levels, but lacks critical details such as permission requirements, rate limits, whether replies are editable/deletable, or how replies appear in the channel. For a mutation tool with 11 parameters, this is insufficient.

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

Conciseness4/5

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

The description is a single, efficient sentence that front-loads the core purpose and lists key features. It avoids redundancy, but could be slightly more structured by separating purpose from capabilities for clarity.

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 tool's complexity (11 parameters, mutation operation) and lack of annotations or output schema, the description is incomplete. It does not cover error conditions, response format, or important behavioral aspects like side effects or authentication needs, leaving significant gaps for agent usage.

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 schema fully documents all 11 parameters. The description adds minimal value beyond the schema by hinting at features like formatting and mentions, but does not provide additional syntax, examples, or constraints. Baseline 3 is appropriate when schema does the heavy lifting.

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 specific action ('Reply to a specific message in a channel') and resource ('message'), distinguishing it from siblings like 'send_channel_message' (which creates new messages) and 'get_channel_message_replies' (which retrieves replies). It specifies the reply targets a particular message via messageId.

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 context by mentioning 'reply to a specific message' and listing supported features, but it does not explicitly state when to use this tool versus alternatives like 'send_channel_message' (for new messages) or 'create_chat' (for private chats). No exclusions or prerequisites are provided.

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

search_messagesA

Search for messages across all Microsoft Teams channels and chats using Microsoft Search API. Supports advanced KQL syntax for filtering by sender, mentions, attachments, and more.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesSearch query. Supports KQL syntax like 'from:user mentions:userId hasAttachment:true'
scopeNoScope of searchall
limitNoNumber of results to return
enableTopResultsNoEnable relevance-based ranking

TDQS

A3.7/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions the API and KQL syntax but lacks critical details like whether this is a read-only operation (implied by 'search'), potential rate limits, authentication requirements, or what the output format looks like (e.g., pagination, error handling). For a search tool with zero annotation coverage, this leaves significant gaps in understanding its behavior.

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 efficiently structured in two sentences: the first states the purpose and scope, and the second adds key capabilities. Every sentence earns its place by providing essential information without redundancy, making it front-loaded and appropriately sized for the tool's complexity.

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 moderate complexity (4 parameters, 100% schema coverage, no output schema, no annotations), the description is partially complete. It covers purpose and basic usage but lacks behavioral details (e.g., output format, error cases) and deeper contextual guidance. Without annotations or an output schema, the agent might struggle to fully understand how to interpret results or handle edge cases, leaving room for improvement.

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 each parameter well-documented in the schema (e.g., query supports KQL syntax, scope has enum values, limit has min/max). The description adds minimal value beyond the schema by mentioning 'advanced KQL syntax for filtering by sender, mentions, attachments, and more,' which slightly elaborates on the query parameter but doesn't provide new syntax or format details. Baseline 3 is appropriate when the schema does the heavy lifting.

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 specific action ('Search for messages') and resource ('across all Microsoft Teams channels and chats'), distinguishing it from siblings like get_channel_messages or get_chat_messages that retrieve messages from specific sources without search capabilities. It also mentions the underlying API (Microsoft Search API) for technical context.

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 implies usage context by stating it searches 'across all Microsoft Teams channels and chats' and supports 'advanced KQL syntax for filtering,' suggesting it should be used for comprehensive, filtered searches rather than retrieving specific message sets like sibling tools. However, it doesn't explicitly state when not to use it or name alternatives, such as get_recent_messages for non-search retrieval.

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

search_usersA

Search for users in the organization by name or email address. Returns matching users with their basic profile information.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesSearch query (name or email)

TDQS

A3.5/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It mentions the action ('Search') and return type ('basic profile information'), but lacks details on permissions required, rate limits, pagination behavior, or what constitutes 'basic profile information'. For a search tool with no annotation coverage, this is insufficient.

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 two concise sentences that are front-loaded with the core purpose and efficiently cover the search criteria and return value. There is no wasted language, making it easy for an agent to parse quickly.

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 moderate complexity (search function with one parameter) and no annotations or output schema, the description is adequate but incomplete. It covers the purpose and parameters but lacks behavioral details like error handling or output format specifics, which are important for a search tool.

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 description coverage is 100%, with the parameter 'query' fully documented in the schema. The description adds minimal value by restating that the query is for 'name or email address', which is already implied in the schema. This meets the baseline of 3 when schema coverage is high.

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 purpose with a specific verb ('Search') and resource ('users in the organization'), and distinguishes it from siblings by specifying the search criteria ('by name or email address') and what it returns ('basic profile information'). This differentiates it from tools like 'get_user' or 'list_team_members'.

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 when searching for users by name or email, but does not explicitly state when to use this tool versus alternatives like 'get_user' (which likely retrieves a specific user) or 'list_team_members' (which might list all members without search). No exclusions or prerequisites are mentioned, leaving some ambiguity.

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

search_users_for_mentionsA

Search for users to mention in messages. Returns users with their display names, email addresses, and mention IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesSearch query (name or email)
limitNoMaximum number of results to return

TDQS

A3.9/5.0
Behavior3/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. It states the tool returns users with display names, email addresses, and mention IDs, which is useful. However, it doesn't mention important behaviors like whether it's a read-only operation (implied but not stated), if it requires authentication, rate limits, or how results are ordered. It adds some context but misses key operational details.

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 two sentences, front-loaded with the core purpose and followed by return details. Every sentence earns its place by clarifying the tool's function and output without redundancy. It's appropriately sized and efficiently structured.

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 no annotations and no output schema, the description provides basic purpose and output format, but it's incomplete for a search tool. It lacks details on authentication needs, error handling, pagination (beyond the 'limit' param), or whether the search is case-sensitive. For a tool with 2 parameters and no structured safety hints, more context would be beneficial.

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 schema already fully documents both parameters ('query' and 'limit'). The description does not add any meaning beyond what the schema provides—it doesn't explain parameter interactions, formatting nuances, or search logic. Baseline 3 is appropriate as the schema does the heavy lifting.

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 specific action ('Search for users to mention in messages') and resource ('users'), distinguishing it from sibling tools like 'search_users' (which likely has broader scope) and 'get_user' (which retrieves a specific user). It explicitly mentions the intended use case (mentioning in messages), making the purpose unambiguous.

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 provides clear context for when to use this tool ('to mention in messages'), but it does not explicitly state when not to use it or name alternatives. For example, it doesn't clarify if 'search_users' should be used for non-mention searches or if 'list_team_members' is better for team-specific mentions. The guidance is helpful but lacks explicit exclusions.

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 specific channel in a Microsoft Team. Supports text and markdown formatting, mentions, and importance levels.

ParametersJSON Schema
NameRequiredDescriptionDefault
teamIdYesTeam ID
channelIdYesChannel ID
messageYesMessage content
importanceNoMessage importance
formatNoMessage format (text or markdown)
mentionsNoArray of @mentions to include in the message
imageUrlNoURL of an image to attach to the message
imageDataNoBase64 encoded image data to attach
imageContentTypeNoMIME type of the image (e.g., 'image/jpeg', 'image/png')
imageFileNameNoName for the attached image file

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. It mentions 'Supports text and markdown formatting, mentions, and importance levels' which describes capabilities but not behaviors. Critical behavioral aspects are missing: whether this is a mutating operation (implied but not stated), permission requirements, rate limits, error conditions, or what happens on success (e.g., returns message ID?). For a message-sending tool with 10 parameters, this is inadequate.

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

Conciseness4/5

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

The description is a single, efficient sentence that communicates the core purpose upfront. It wastes no words on redundancy or unnecessary elaboration. However, it could be more structured by separating purpose from capabilities for even clearer scanning.

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?

For a complex mutation tool with 10 parameters, no annotations, and no output schema, the description is insufficient. It doesn't address critical context: mutation nature, authentication requirements, error handling, return values, or usage boundaries. The agent lacks enough information to use this tool confidently beyond basic parameter filling.

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 schema already documents all parameters thoroughly. The description adds minimal value beyond the schema - it mentions 'text and markdown formatting' (covered by the 'format' enum), 'mentions' (covered by the 'mentions' array), and 'importance levels' (covered by the 'importance' enum). No additional semantic context is provided about parameter interactions or usage patterns.

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 clearly states the action ('Send a message') and target ('to a specific channel in a Microsoft Team'), which is specific and actionable. It distinguishes from siblings like 'send_chat_message' by specifying 'channel' rather than 'chat', but doesn't explicitly contrast them. The mention of supported features (formatting, mentions, importance) adds useful detail about capabilities.

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 like 'send_chat_message' or 'reply_to_channel_message'. It mentions supported features but doesn't specify prerequisites, constraints, or typical use cases. The agent must infer usage from the tool name and parameter names alone.

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 specific chat conversation. Supports text and markdown formatting, mentions, and importance levels.

ParametersJSON Schema
NameRequiredDescriptionDefault
chatIdYesChat ID
messageYesMessage content
importanceNoMessage importance
formatNoMessage format (text or markdown)
mentionsNoArray of @mentions to include in the message

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions supported features (text/markdown formatting, mentions, importance levels) but lacks critical behavioral details: whether this requires specific permissions, if messages are editable/deletable after sending, rate limits, error conditions, or what happens on success. For a mutation tool with zero annotation coverage, this is inadequate.

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

Conciseness4/5

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

The description is a single, efficient sentence that front-loads the core purpose and lists key features. There's no wasted text, but it could be slightly more structured by separating purpose from capabilities. It earns a 4 for being appropriately sized and clear.

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 tool's complexity (5 parameters, mutation operation) and lack of annotations or output schema, the description is incomplete. It doesn't address behavioral aspects like permissions, side effects, or response format, which are crucial for an AI agent to use it correctly. For a chat messaging tool with no structured safety or output info, this is insufficient.

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%, meaning all parameters are documented in the schema itself. The description adds minimal value beyond the schema by listing supported features (formatting, mentions, importance) that correspond to parameters, but doesn't provide additional semantic context like examples or constraints. With high schema coverage, the baseline is 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 clearly states the tool's purpose: 'Send a message to a specific chat conversation.' It specifies the action (send) and resource (message to chat conversation), distinguishing it from sibling tools like 'send_channel_message' which targets channels. However, it doesn't explicitly contrast with 'reply_to_channel_message' or other messaging tools, keeping it at 4 rather than 5.

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 doesn't mention when to choose 'send_chat_message' over 'send_channel_message' or 'reply_to_channel_message', nor does it specify prerequisites like needing an existing chat. Without any usage context or exclusions, this scores a 2.

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. Dates show when Glama detected each change.

  1. 4 tool updatesv1.0.0
    • Changedauth_status1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedget_current_user1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedlist_chats1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedlist_teams1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
  2. 19 tool updates
    • First observedauth_status
    • First observedcreate_chat
    • First observedget_channel_message_replies
    • First observedget_channel_messages
    • First observedget_chat_messages
    • First observedget_current_user
    • First observedget_my_mentions
    • First observedget_recent_messages
    • First observedget_user
    • First observedlist_channels
    • First observedlist_chats
    • First observedlist_team_members
    • First observedlist_teams
    • First observedreply_to_channel_message
    • First observedsearch_messages
    • First observedsearch_users
    • First observedsearch_users_for_mentions
    • First observedsend_channel_message
    • First observedsend_chat_message

TDQS

A3.5/5.0
Disambiguation4/5

Most tools have distinct purposes targeting specific resources like channels, chats, users, or messages, but there is some overlap: get_recent_messages and search_messages both retrieve messages with filtering, which could cause confusion. However, descriptions clarify that get_recent_messages focuses on recent messages with time/scope filters, while search_messages uses advanced KQL syntax, helping to differentiate them.

Naming Consistency5/5

Tool names follow a highly consistent verb_noun pattern throughout, such as list_teams, get_channel_messages, send_chat_message, and search_users. All tools use snake_case with clear verbs like get, list, create, send, reply, and search, making the set predictable and easy to understand.

Tool Count4/5

With 19 tools, the count is slightly high but reasonable for a comprehensive Teams integration covering authentication, chats, channels, messages, users, and search. It provides broad functionality without being overwhelming, though it could be streamlined by merging some overlapping tools like get_recent_messages and search_messages.

Completeness5/5

The toolset offers complete coverage for Microsoft Teams interactions, including CRUD operations for messages (send, reply, get), resource listing (teams, channels, chats, members), user management (get, search), and authentication. There are no obvious gaps; agents can perform core workflows like messaging, searching, and team management effectively.

Maintenance

ActivityInactive
ResponsivenessUnresponsive

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

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/floriscornel/teams-mcp'

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