14 tools with consistent verb-noun naming and complete input schemas. Descriptions are present and actionable (avg ~120 chars), exceeding the 10-char minimum but below the 50-200 char LLM-optimized range. All parameters have type definitions and descriptions. Critical gaps: no output schemas documented, no error handling guidance, no recovery hints, and no tool annotations (readOnlyHint/destructiveHint). Missing idempotency declarations for write operations. Composition is sound, tools are single-responsibility and chainable via IDs (chatId, teamId, userId). Security: credentials injected server-side via environment (CLIENT_ID), not exposed as parameters. Moderate quality, functional but lacks production-grade error recovery and LLM optimization.
Check the authentication status of the Microsoft Graph connection. Returns whether the user is authenticated and shows their basic profile information.
Create a new chat conversation with one or more users. Can create 1:1 chats or group chats.
Retrieve recent messages from a specific channel in a Microsoft Team. Returns message content, sender information, and timestamps.
Retrieve recent messages from a specific chat conversation. Returns message content, sender information, and timestamps.
Get the current authenticated user's profile information including display name, email, job title, and department.
Get recent messages from across Teams with advanced filtering options. Can filter by time range, scope (channels vs chats), teams, channels, and users.
No output schemas documented. LLMs cannot predict response structure, forcing them to parse unstructured results and plan downstream calls blindly. Affects all 14 tools.
No error handling guidance. Tools lack recovery hints (e.g., 'User not found. Try search_users() first.'). Agents cannot self-correct on failures.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 61 | 2026-07-28+ | v2 |
Get detailed information about a specific user by their ID or email address. Returns profile information including name, email, job title, and department.
List all channels in a specific Microsoft Team. Returns channel names, descriptions, types, and IDs for the specified team.
List all recent chats (1:1 conversations and group chats) that the current user participates in. Returns chat topics, types, and participant information.
List all Microsoft Teams that the current user is a member of. Returns team names, descriptions, and IDs.
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.
Search for users in the organization by name or email address. Returns matching users with their basic profile information.
Send a message to a specific channel in a Microsoft Team. Supports text and markdown formatting, mentions, and importance levels.
Send a message to a specific chat conversation. Supports text and markdown formatting, mentions, and importance levels.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). LLMs cannot distinguish safe reads from destructive writes. send_chat_message, send_channel_message, and create_chat should be marked destructiveHint=true.
Pagination not documented for list_* and search_* tools. No mention of result limits, next_cursor, or total_count. Large result sets risk context window exhaustion.
Descriptions lack dependency hints. E.g., send_chat_message does not hint 'If you only have a chat name, call list_chats() first.' Agents cannot plan multi-step sequences efficiently.