MCP Server for Microsoft Teams meeting transcript retrieval via Microsoft Graph API with delegated OBO authentication
The server has three well-defined tools with complete schemas and descriptions, but exhibits moderate gaps in parameter documentation and lacks output schema definitions. Tool naming is verb-action oriented and clear. Descriptions are substantive (140-280 chars) and explain purpose, input, and output adequately. However, parameter descriptions lack specificity around constraints (e.g., no explicit min/max for 'limit', no format guidance for date fields), and there are no documented output schemas that downstream tools or LLMs could rely on. Error handling is present but minimal, most tools return unstructured text rather than classified error messages with recovery guidance. The tools form a logical chain (list → get → save) with appropriate parameter relationships, but the server does not enforce idempotence or include transaction-safety mechanisms for the write operation (save_transcript).
Retrieve the cleaned transcript for a Microsoft Teams meeting. Searches by name (subject) and optionally by date, then downloads and pre-processes the VTT transcript, stripping all timestamps and metadata. Returns plain-text speaker-attributed dialogue ready for AI analysis.
List recent Microsoft Teams online meetings for the signed-in user. Optionally filter by date (ISO format: YYYY-MM-DD) and limit results. Returns meeting subject, start/end times, and whether transcripts are available.
Retrieve a meeting transcript and save it to a SharePoint document library. The transcript is cleaned (VTT metadata stripped) and uploaded as a Markdown file with speaker attribution, ready for RAG indexing, compliance archival, or further processing. Also returns the transcript text in the response for immediate use.
Output schemas not documented. LLMs cannot predict the structure of tool responses. For 'list_recent_meetings', the response is formatted as markdown text rather than returning a structured array of objects with 'subject', 'startDateTime', 'endDateTime', 'meetingId', 'hasTranscript' fields. For 'get_meeting_transcript' and 'save_transcript', the response structure is not documented.
Parameter constraints underspecified. 'limit' parameter has no explicit minimum or maximum in the schema (though description mentions max: 50). 'date' and 'meetingDate' parameters lack explicit format validation or regex pattern. LLMs may pass invalid dates or out-of-range limits.
Error handling is unstructured and lacks recovery guidance. Tools return plain text error messages without categorization (retryable vs. user-fixable vs. fatal). No guidance for LLMs on what to do next (e.g., 'Try broadening your search term'). Error messages are embedded in the response but not formally classified.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | B | 79 | 2026-07-28+ | v2 |
| 2026-03-09 | D | 55 | - | v1 |
No idempotence guarantees or confirmation for destructive operations. 'save_transcript' writes to SharePoint without a dry-run mode or confirmation step. If called twice with identical parameters, it may create duplicate files or overwrite existing ones. No transaction safety mechanism.
'save_transcript' uses optional parameters ('siteUrl', 'folderPath') with defaults but does not document what those defaults are. LLMs cannot predict where files will be saved. Parameter descriptions reference 'server default' but the code does not make the actual defaults visible in the tool definition.
No pagination support or result-count limits in 'get_meeting_transcript'. Although 'list_recent_meetings' caps results at 50, 'get_meeting_transcript' may retrieve arbitrarily large transcripts without indication of token cost or truncation.