Ory ScribeGo to sign in

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. 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
  2. 2

    Copy the IDs

    On the app's Overview page, copy Application (client) ID into AZURE_AD_CLIENT_ID, and Directory (tenant) ID into AZURE_AD_TENANT_ID.

  3. 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. 4

    Add Microsoft Graph permissions

    API permissions → Add a permission → Microsoft Graph → Delegated permissions, then add:

    User.ReadCalendars.ReadOnlineMeetings.ReadOnlineMeetingTranscript.Read.Alloffline_access

    Then click Grant admin consent for <your org>. OnlineMeetingTranscript.Read.All requires admin consent. If you aren't an admin, send this page to your IT admin.

2. Turn on Teams transcription

  1. 1

    Allow transcription in your tenant (admin)

    In the Teams admin center → Meetings → Meeting policies, make sure Transcription is On for your users.

  2. 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. 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.