Setup guide
About 10 minutes. You need a Microsoft 365 work or school account. Some steps need a tenant admin.
Configuration status
Values are read from .env.local (restart the dev server after editing it).
1. Register an app in Microsoft Entra ID
- 1
Create the app registration
Open the Entra admin center → App registrations and click New registration.
- Name:
Ory Scribe - Supported account types: Accounts in this organizational directory only (single tenant) is the usual choice.
- Redirect URI: platform Web, value
…/api/auth/callback/azure-ad
- Name:
- 2
Copy the IDs
On the app's Overview page, copy Application (client) ID into
AZURE_AD_CLIENT_ID, and Directory (tenant) ID intoAZURE_AD_TENANT_ID. - 3
Create a client secret
Certificates & secrets → New client secret. Copy the secret's Value (not the Secret ID) into
AZURE_AD_CLIENT_SECRET. Make a note of the expiry date, because you'll need to rotate it before then. - 4
Add Microsoft Graph permissions
API permissions → Add a permission → Microsoft Graph → Delegated permissions, then add:
User.ReadCalendars.ReadOnlineMeetings.ReadOnlineMeetingTranscript.Read.Alloffline_accessThen click Grant admin consent for <your org>.
OnlineMeetingTranscript.Read.Allrequires admin consent. If you aren't an admin, send this page to your IT admin.
2. Turn on Teams transcription
- 1
Allow transcription in your tenant (admin)
In the Teams admin center → Meetings → Meeting policies, make sure Transcription is On for your users.
- 2
Start transcription in each meeting
During a meeting, choose More → Record and transcribe → Start transcription. You can also set meetings to transcribe automatically in the meeting options.
- 3
Who can fetch transcripts
Microsoft Graph returns transcripts for meetings you organized. For meetings you only attended, download the transcript from Teams (.vtt or .docx) and upload it under New notes.
3. Configure Ory Scribe
Copy .env.example to .env.local and fill in the values:
AZURE_AD_CLIENT_ID=<application (client) id> AZURE_AD_CLIENT_SECRET=<client secret value> AZURE_AD_TENANT_ID=<directory (tenant) id> NEXTAUTH_URL=http://localhost:3000 NEXTAUTH_SECRET=<long random string> ANTHROPIC_API_KEY=<your Anthropic API key>
Restart npm run dev, sign in, and click Sync Teams on the dashboard.
Optional: automatic processing
Set CRON_SECRET and call GET /api/cron/sync every 15–30 minutes with the header Authorization: Bearer <CRON_SECRET>. Each run syncs every signed-in user's calendar and summarizes meetings that have ended. You can schedule it with Vercel Cron, GitHub Actions or Windows Task Scheduler.