Retrieve and clean Microsoft Teams meeting transcripts via Microsoft Graph API.
Transcripts MCP Server
A remote Model Context Protocol (MCP) server that retrieves Microsoft Teams meeting transcripts via the Microsoft Graph API, using delegated OAuth 2.0 On-Behalf-Of (OBO) authentication.
Hosted on Azure Container Apps and designed for integration with Microsoft Copilot Studio (via the MCP Wizard), though any MCP-compatible client can connect.
Use Cases
Once an AI agent can access the full text of a meeting, the transcript becomes a launchpad for downstream automation:
| Use Case | Description |
|---|---|
| Sentiment analysis | Gauge how a customer call actually went — detect frustration, satisfaction, or escalation patterns across every interaction, not just the ones a manager happened to attend. |
| Follow-on automation | Extract action items, decisions, and deadlines, then push them into Power Automate flows — create Planner tasks, send follow-up emails, or update CRM records automatically. |
| Customer service reviews | Audit support calls at scale without replaying hours of recordings. Search across transcripts for specific topics, complaints, or compliance language. |
| Deal intelligence | Surface objections, competitor mentions, pricing commitments, and next steps from sales calls — feed them into your pipeline reporting. |
| Training & coaching | Identify coaching moments by analysing how reps handle objections, discovery questions, or product demos. Compare top performers against the team. |
| Compliance & audit | Verify that required disclosures, disclaimers, or consent language were delivered during regulated conversations. |
| Meeting summaries on demand | Let users ask an agent "What did we decide in the design review?" and get a structured answer — without anyone having to write meeting notes. |
The server returns clean, speaker-attributed text — ready for any LLM to analyse, summarise, or act on.
Features
- Three MCP tools: List meetings, retrieve transcripts, and save transcripts to SharePoint for RAG / archival
- Delegated-only permissions: The server never has its own access — every Graph call runs in the signed-in user's context via OBO
- Calendar-based discovery: Uses
/me/calendarViewto find meetings, then resolves each to an online meeting ID — works around severe/me/onlineMeetingsAPI limitations - Optimised name search: Filters calendar events by subject before resolving to online meetings (avoids unnecessary API calls)
- VTT cleaning: Strips all WebVTT metadata (timestamps, cue IDs, NOTE blocks, HTML tags) and merges consecutive same-speaker lines into readable paragraphs
- Comprehensive logging: All Graph API calls are traced with
[graph]prefixes for debugging - Stateless container: Scales to zero when idle, ~250ms cold start on Alpine Node.js 20
- Built for Copilot Studio: Drop-in MCP server with OAuth 2.0 wizard support
Combining with Other MCP Servers
MCP is designed to be composable — a single Copilot Studio agent can connect to multiple MCP servers simultaneously, each providing different tools. This Transcripts MCP server becomes significantly more powerful when paired with other Microsoft 365 MCP servers.
With the Office 365 Outlook / Meeting Management MCP
Copilot Studio includes a built-in Office 365 Outlook MCP connector (Meeting Management MCP Server) that provides tools for listing, creating, and managing calendar events. When both servers are connected to the same agent:
| Agent capability | How it works |
|---|
Tools (3)
list_meetingsLists recent Microsoft Teams meetings from the user's calendar.retrieve_transcriptRetrieves and cleans the transcript for a specific meeting ID.save_transcriptSaves the processed transcript to SharePoint.Environment Variables
AZURE_CLIENT_IDrequiredThe Client ID from your Azure App Registration.AZURE_TENANT_IDrequiredThe Tenant ID for your Microsoft 365 organization.AZURE_CLIENT_SECRETrequiredThe Client Secret for the Azure App.Configuration
{"mcpServers": {"microsoft-graph-transcripts": {"command": "npx", "args": ["-y", "@itspecialist111/microsoft-graph-transcript-mcp"], "env": {"AZURE_CLIENT_ID": "your-client-id", "AZURE_TENANT_ID": "your-tenant-id"}}}}